Merge branch 'cpus4096' into irq/threaded
authorThomas Gleixner <tglx@linutronix.de>
Mon, 23 Mar 2009 13:50:03 +0000 (14:50 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Mon, 23 Mar 2009 20:20:20 +0000 (21:20 +0100)
Conflicts:
arch/parisc/kernel/irq.c
kernel/irq/handle.c

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
332 files changed:
CREDITS
Documentation/DocBook/genericirq.tmpl
Documentation/feature-removal-schedule.txt
Documentation/logo.gif [deleted file]
Documentation/logo.svg [new file with mode: 0644]
Documentation/logo.txt
MAINTAINERS
Makefile
arch/alpha/kernel/irq.c
arch/alpha/kernel/irq_alpha.c
arch/arm/kernel/entry-common.S
arch/arm/kernel/fiq.c
arch/arm/kernel/irq.c
arch/arm/mach-ep93xx/include/mach/platform.h
arch/arm/mach-mx1/devices.c
arch/arm/mach-mx1/mx1ads.c
arch/arm/mach-ns9xxx/irq.c
arch/arm/mach-omap2/board-omap3beagle.c
arch/arm/mach-orion5x/common.c
arch/arm/mach-s3c6410/mach-smdk6410.c
arch/arm/mm/copypage-feroceon.c
arch/arm/mm/copypage-v3.c
arch/arm/mm/copypage-v4mc.c
arch/arm/mm/copypage-v4wb.c
arch/arm/mm/copypage-v4wt.c
arch/arm/mm/copypage-xsc3.c
arch/arm/mm/copypage-xscale.c
arch/arm/mm/dma-mapping.c
arch/arm/mm/init.c
arch/arm/mm/mmap.c
arch/arm/plat-omap/Makefile
arch/arm/plat-omap/common.c
arch/arm/plat-omap/include/mach/common.h
arch/arm/plat-omap/include/mach/pm.h
arch/arm/plat-s3c64xx/clock.c
arch/arm/plat-s3c64xx/gpiolib.c
arch/arm/plat-s3c64xx/include/plat/irqs.h
arch/arm/plat-s3c64xx/irq-eint.c
arch/arm/plat-s3c64xx/irq.c
arch/arm/plat-s3c64xx/s3c6400-clock.c
arch/arm/tools/mach-types
arch/avr32/kernel/irq.c
arch/blackfin/kernel/irqchip.c
arch/cris/kernel/irq.c
arch/frv/kernel/irq.c
arch/h8300/kernel/irq.c
arch/ia64/kernel/irq.c
arch/m32r/kernel/irq.c
arch/m68k/include/asm/param.h
arch/m68k/include/asm/param_mm.h [deleted file]
arch/m68k/include/asm/param_no.h [deleted file]
arch/m68k/include/asm/ptrace.h
arch/m68k/include/asm/ptrace_mm.h [deleted file]
arch/m68k/include/asm/ptrace_no.h [deleted file]
arch/m68k/include/asm/setup.h
arch/m68k/include/asm/setup_mm.h [deleted file]
arch/m68k/include/asm/setup_no.h [deleted file]
arch/m68k/include/asm/sigcontext.h
arch/m68k/include/asm/sigcontext_mm.h [deleted file]
arch/m68k/include/asm/sigcontext_no.h [deleted file]
arch/m68k/include/asm/siginfo.h
arch/m68k/include/asm/siginfo_mm.h [deleted file]
arch/m68k/include/asm/siginfo_no.h [deleted file]
arch/m68k/include/asm/signal.h
arch/m68k/include/asm/signal_mm.h [deleted file]
arch/m68k/include/asm/signal_no.h [deleted file]
arch/m68k/include/asm/swab.h
arch/m68k/include/asm/swab_mm.h [deleted file]
arch/m68k/include/asm/swab_no.h [deleted file]
arch/m68k/include/asm/unistd.h
arch/m68k/include/asm/unistd_mm.h [deleted file]
arch/m68k/include/asm/unistd_no.h [deleted file]
arch/mips/Kconfig
arch/mips/Makefile
arch/mips/configs/markeins_defconfig [moved from arch/mips/configs/emma2rh_defconfig with 99% similarity]
arch/mips/emma/Kconfig [deleted file]
arch/mips/emma/markeins/platform.c
arch/mips/include/asm/seccomp.h
arch/mips/include/asm/thread_info.h
arch/mips/kernel/irq.c
arch/mn10300/kernel/irq.c
arch/parisc/configs/712_defconfig
arch/parisc/configs/a500_defconfig
arch/parisc/configs/b180_defconfig
arch/parisc/configs/c3000_defconfig
arch/parisc/configs/default_defconfig
arch/parisc/hpux/fs.c
arch/parisc/include/asm/assembly.h
arch/parisc/include/asm/io.h
arch/parisc/include/asm/irq.h
arch/parisc/include/asm/uaccess.h
arch/parisc/kernel/cache.c
arch/parisc/kernel/entry.S
arch/parisc/kernel/firmware.c
arch/parisc/kernel/irq.c
arch/parisc/kernel/pci-dma.c
arch/parisc/mm/init.c
arch/powerpc/configs/ps3_defconfig
arch/powerpc/include/asm/cputable.h
arch/powerpc/kernel/head_32.S
arch/powerpc/kernel/irq.c
arch/powerpc/platforms/cell/interrupt.c
arch/powerpc/platforms/ps3/Kconfig
arch/s390/include/asm/mman.h
arch/s390/include/asm/processor.h
arch/s390/include/asm/topology.h
arch/s390/kernel/mcount.S
arch/s390/lib/div64.c
arch/s390/lib/uaccess_pt.c
arch/s390/mm/mmap.c
arch/s390/mm/pgtable.c
arch/sh/kernel/irq.c
arch/sparc/kernel/irq_64.c
arch/sparc/kernel/time_64.c
arch/um/kernel/irq.c
arch/x86/kernel/kprobes.c
arch/x86/kernel/tsc.c
arch/xtensa/kernel/irq.c
drivers/acpi/bus.c
drivers/acpi/numa.c
drivers/acpi/osl.c
drivers/acpi/sleep.c
drivers/ata/ata_piix.c
drivers/ata/libata-sff.c
drivers/ata/sata_mv.c
drivers/block/Makefile
drivers/block/ps3vram.c [new file with mode: 0644]
drivers/block/xsysace.c
drivers/char/agp/parisc-agp.c
drivers/char/random.c
drivers/hid/usbhid/hiddev.c
drivers/ide/ide-atapi.c
drivers/ide/ide-dma.c
drivers/ide/ide-floppy.c
drivers/md/dm-crypt.c
drivers/md/dm-io.c
drivers/md/dm-ioctl.c
drivers/md/dm.c
drivers/media/dvb/bt8xx/dst.c
drivers/media/dvb/dvb-core/dvb_frontend.c
drivers/media/dvb/frontends/stb0899_algo.c
drivers/media/dvb/frontends/stb0899_drv.c
drivers/media/dvb/frontends/stb0899_priv.h
drivers/media/dvb/frontends/stb6100.c
drivers/media/dvb/frontends/zl10353.c
drivers/media/dvb/frontends/zl10353.h
drivers/media/video/gspca/m5602/m5602_s5k4aa.c
drivers/media/video/saa7134/saa7134-dvb.c
drivers/media/video/tvaudio.c
drivers/media/video/zoran/Kconfig
drivers/mtd/devices/Kconfig
drivers/mtd/devices/Makefile
drivers/mtd/devices/ps3vram.c [deleted file]
drivers/net/Kconfig
drivers/net/Makefile
drivers/net/benet/Kconfig [new file with mode: 0644]
drivers/net/benet/Makefile [new file with mode: 0644]
drivers/net/benet/be.h [new file with mode: 0644]
drivers/net/benet/be_cmds.c [new file with mode: 0644]
drivers/net/benet/be_cmds.h [new file with mode: 0644]
drivers/net/benet/be_ethtool.c [new file with mode: 0644]
drivers/net/benet/be_hw.h [new file with mode: 0644]
drivers/net/benet/be_main.c [new file with mode: 0644]
drivers/net/bnx2x.h
drivers/net/bnx2x_init.h
drivers/net/bnx2x_main.c
drivers/net/dnet.c [new file with mode: 0644]
drivers/net/dnet.h [new file with mode: 0644]
drivers/net/ibm_newemac/core.c
drivers/net/igb/igb_main.c
drivers/net/ixgbe/ixgbe_main.c
drivers/net/mv643xx_eth.c
drivers/net/netxen/netxen_nic.h
drivers/net/netxen/netxen_nic_hw.c
drivers/net/netxen/netxen_nic_main.c
drivers/net/qlge/qlge.h
drivers/net/qlge/qlge_main.c
drivers/net/r8169.c
drivers/net/via-velocity.c
drivers/parisc/dino.c
drivers/parisc/gsc.c
drivers/parisc/iosapic.c
drivers/parisc/lba_pci.c
drivers/parisc/sba_iommu.c
drivers/pci/intr_remapping.c
drivers/platform/x86/Kconfig
drivers/platform/x86/acer-wmi.c
drivers/platform/x86/asus-laptop.c
drivers/platform/x86/eeepc-laptop.c
drivers/platform/x86/thinkpad_acpi.c
drivers/platform/x86/wmi.c
drivers/scsi/fcoe/fc_transport_fcoe.c
drivers/scsi/fcoe/fcoe_sw.c
drivers/scsi/fcoe/libfcoe.c
drivers/scsi/lasi700.c
drivers/scsi/libfc/fc_disc.c
drivers/scsi/libfc/fc_exch.c
drivers/scsi/libfc/fc_fcp.c
drivers/scsi/libfc/fc_lport.c
drivers/scsi/libfc/fc_rport.c
drivers/scsi/qla2xxx/qla_attr.c
drivers/scsi/qla2xxx/qla_init.c
drivers/scsi/qla2xxx/qla_mbx.c
drivers/scsi/qla2xxx/qla_mid.c
drivers/scsi/qla2xxx/qla_os.c
drivers/scsi/qla2xxx/qla_version.h
drivers/scsi/sd.c
drivers/scsi/zalon.c
drivers/staging/Kconfig
drivers/staging/Makefile
drivers/staging/benet/Kconfig [deleted file]
drivers/staging/benet/MAINTAINERS [deleted file]
drivers/staging/benet/Makefile [deleted file]
drivers/staging/benet/TODO [deleted file]
drivers/staging/benet/asyncmesg.h [deleted file]
drivers/staging/benet/be_cm.h [deleted file]
drivers/staging/benet/be_common.h [deleted file]
drivers/staging/benet/be_ethtool.c [deleted file]
drivers/staging/benet/be_init.c [deleted file]
drivers/staging/benet/be_int.c [deleted file]
drivers/staging/benet/be_netif.c [deleted file]
drivers/staging/benet/benet.h [deleted file]
drivers/staging/benet/bestatus.h [deleted file]
drivers/staging/benet/cev.h [deleted file]
drivers/staging/benet/cq.c [deleted file]
drivers/staging/benet/descriptors.h [deleted file]
drivers/staging/benet/doorbells.h [deleted file]
drivers/staging/benet/ep.h [deleted file]
drivers/staging/benet/eq.c [deleted file]
drivers/staging/benet/eth.c [deleted file]
drivers/staging/benet/etx_context.h [deleted file]
drivers/staging/benet/funcobj.c [deleted file]
drivers/staging/benet/fwcmd_common.h [deleted file]
drivers/staging/benet/fwcmd_common_bmap.h [deleted file]
drivers/staging/benet/fwcmd_eth_bmap.h [deleted file]
drivers/staging/benet/fwcmd_hdr_bmap.h [deleted file]
drivers/staging/benet/fwcmd_mcc.h [deleted file]
drivers/staging/benet/fwcmd_opcodes.h [deleted file]
drivers/staging/benet/fwcmd_types_bmap.h [deleted file]
drivers/staging/benet/host_struct.h [deleted file]
drivers/staging/benet/hwlib.h [deleted file]
drivers/staging/benet/mpu.c [deleted file]
drivers/staging/benet/mpu.h [deleted file]
drivers/staging/benet/mpu_context.h [deleted file]
drivers/staging/benet/pcicfg.h [deleted file]
drivers/staging/benet/post_codes.h [deleted file]
drivers/staging/benet/regmap.h [deleted file]
drivers/usb/atm/cxacru.c
drivers/usb/class/usbtmc.c
drivers/usb/core/devio.c
drivers/usb/host/ehci-q.c
drivers/usb/host/ehci-sched.c
drivers/usb/image/mdc800.c
drivers/usb/misc/adutux.c
drivers/usb/misc/vstusb.c
drivers/usb/serial/cp2101.c
drivers/usb/serial/ftdi_sio.c
drivers/usb/serial/ftdi_sio.h
drivers/usb/serial/option.c
drivers/usb/storage/unusual_devs.h
drivers/usb/wusbcore/wa-xfer.c
drivers/video/aty/radeon_pm.c
drivers/video/logo/logo_linux_clut224.ppm
drivers/video/logo/logo_linux_vga16.ppm
fs/aio.c
fs/bio-integrity.c
fs/bio.c
fs/btrfs/ctree.h
fs/btrfs/extent-tree.c
fs/btrfs/volumes.c
fs/buffer.c
fs/ecryptfs/crypto.c
fs/ecryptfs/ecryptfs_kernel.h
fs/ecryptfs/inode.c
fs/ecryptfs/keystore.c
fs/ecryptfs/main.c
fs/ext4/extents.c
fs/ext4/ialloc.c
fs/ext4/mballoc.c
fs/lockd/clntlock.c
fs/minix/inode.c
fs/nfs/client.c
fs/nfs/dir.c
fs/nfs/nfs3acl.c
fs/nfs/nfs3xdr.c
fs/nfs/nfs4namespace.c
fs/nfsd/nfs4xdr.c
fs/ocfs2/alloc.c
fs/ocfs2/aops.c
fs/ocfs2/namei.c
fs/ocfs2/ocfs2_fs.h
fs/ocfs2/xattr.c
fs/proc/base.c
fs/ramfs/file-nommu.c
fs/ufs/super.c
include/linux/bio.h
include/linux/capability.h
include/linux/compiler-gcc.h
include/linux/ide.h
include/linux/interrupt.h
include/linux/irq.h
include/linux/irqnr.h
include/linux/irqreturn.h
include/linux/kernel_stat.h
include/linux/lockd/lockd.h
include/linux/nfs_xdr.h
include/linux/nfsacl.h
include/scsi/fc/fc_fcoe.h
include/scsi/fc/fc_fs.h
include/scsi/libfc.h
include/scsi/libfcoe.h
kernel/irq/chip.c
kernel/irq/handle.c
kernel/irq/internals.h
kernel/irq/manage.c
kernel/irq/numa_migrate.c
kernel/irq/spurious.c
kernel/module.c
mm/vmscan.c
net/ipv6/af_inet6.c
net/sunrpc/sched.c
net/sunrpc/xprt.c
net/sunrpc/xprtsock.c
net/xfrm/xfrm_state.c
scripts/kconfig/conf.c
scripts/kconfig/confdata.c
sound/core/oss/mixer_oss.c
sound/core/oss/pcm_oss.c
sound/core/sgbuf.c
sound/isa/opl3sa2.c
sound/pci/hda/hda_intel.c
sound/pci/mixart/mixart.c

diff --git a/CREDITS b/CREDITS
index 5e07367..e8b7d36 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -3738,7 +3738,7 @@ S: 93149 Nittenau
 S: Germany
 
 N: Gertjan van Wingerde
-E: gwingerde@home.nl
+E: gwingerde@gmail.com
 D: Ralink rt2x00 WLAN driver
 D: Minix V2 file-system
 D: Misc fixes
index 3a882d9..c671a01 100644 (file)
@@ -440,6 +440,7 @@ desc->chip->end();
      used in the generic IRQ layer.
      </para>
 !Iinclude/linux/irq.h
+!Iinclude/linux/interrupt.h
   </chapter>
 
   <chapter id="pubfunctions">
index 20d3b94..9aa1dda 100644 (file)
@@ -344,3 +344,20 @@ Why:       See commits 129f8ae9b1b5be94517da76009ea956e89104ce8 and
        Removal is subject to fixing any remaining bugs in ACPI which may
        cause the thermal throttling not to happen at the right time.
 Who:   Dave Jones <davej@redhat.com>, Matthew Garrett <mjg@redhat.com>
+
+-----------------------------
+
+What:  __do_IRQ all in one fits nothing interrupt handler
+When:  2.6.32
+Why:   __do_IRQ was kept for easy migration to the type flow handlers.
+       More than two years of migration time is enough.
+Who:   Thomas Gleixner <tglx@linutronix.de>
+
+-----------------------------
+
+What:  obsolete generic irq defines and typedefs
+When:  2.6.30
+Why:   The defines and typedefs (hw_interrupt_type, no_irq_type, irq_desc_t)
+       have been kept around for migration reasons. After more than two years
+       it's time to remove them finally
+Who:   Thomas Gleixner <tglx@linutronix.de>
diff --git a/Documentation/logo.gif b/Documentation/logo.gif
deleted file mode 100644 (file)
index 2eae75f..0000000
Binary files a/Documentation/logo.gif and /dev/null differ
diff --git a/Documentation/logo.svg b/Documentation/logo.svg
new file mode 100644 (file)
index 0000000..cb9e485
--- /dev/null
@@ -0,0 +1,2911 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="1771.6534"
+   height="1417.3228"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   sodipodi:docname="tuz.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0"
+   style="display:inline;enable-background:new"
+   inkscape:export-filename="/home/cheeseness/Documents/LCA09/mascot/tuz_final.png"
+   inkscape:export-xdpi="100.03588"
+   inkscape:export-ydpi="100.03588">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.25"
+     inkscape:cx="-174.7931"
+     inkscape:cy="784.26325"
+     inkscape:document-units="px"
+     inkscape:current-layer="svg2"
+     showgrid="false"
+     inkscape:window-width="1280"
+     inkscape:window-height="823"
+     inkscape:window-x="-4"
+     inkscape:window-y="25"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     units="mm" />
+  <defs
+     id="defs4">
+    <filter
+       inkscape:collect="always"
+       x="-0.084654994"
+       width="1.16931"
+       y="-0.36592469"
+       height="1.7318494"
+       id="filter11361">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="4.5740586"
+         id="feGaussianBlur11363" />
+    </filter>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 564.0976 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1445.8591 : 564.0976 : 1"
+       inkscape:persp3d-origin="722.92957 : 376.06506 : 1"
+       id="perspective8145" />
+    <linearGradient
+       id="linearGradient7622">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop7624" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop7626" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4113">
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="0"
+         id="stop4115" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop4117" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3660">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3662" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3664" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3627">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3629" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop3631" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2843">
+      <stop
+         id="stop2845"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0.02188784"
+         id="stop2847" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0.75866222"
+         id="stop2849" />
+      <stop
+         id="stop2851"
+         offset="0.88508981"
+         style="stop-color:#232323;stop-opacity:1;" />
+      <stop
+         id="stop2853"
+         offset="1"
+         style="stop-color:#595959;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient8964">
+      <stop
+         style="stop-color:#1a1a1a;stop-opacity:1;"
+         offset="0"
+         id="stop8966" />
+      <stop
+         style="stop-color:#1a1a1a;stop-opacity:0;"
+         offset="1"
+         id="stop8968" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8952">
+      <stop
+         style="stop-color:#0a0c0c;stop-opacity:1;"
+         offset="0"
+         id="stop8954" />
+      <stop
+         style="stop-color:#1f2727;stop-opacity:0;"
+         offset="1"
+         id="stop8956" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8430">
+      <stop
+         style="stop-color:#1e2323;stop-opacity:1;"
+         offset="0"
+         id="stop8432" />
+      <stop
+         id="stop8438"
+         offset="0.55992389"
+         style="stop-color:#181d1d;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop8434" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8398">
+      <stop
+         style="stop-color:#283131;stop-opacity:0;"
+         offset="0"
+         id="stop8400" />
+      <stop
+         id="stop8402"
+         offset="0.5125587"
+         style="stop-color:#1e2424;stop-opacity:0;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop8404" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4870">
+      <stop
+         style="stop-color:#c7bd80;stop-opacity:1;"
+         offset="0"
+         id="stop4872" />
+      <stop
+         style="stop-color:#c7bd80;stop-opacity:0;"
+         offset="1"
+         id="stop4874" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4862">
+      <stop
+         style="stop-color:#e2e2e2;stop-opacity:1;"
+         offset="0"
+         id="stop4864" />
+      <stop
+         style="stop-color:#e2e2e2;stop-opacity:0;"
+         offset="1"
+         id="stop4866" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4478">
+      <stop
+         style="stop-color:#f9eed3;stop-opacity:1;"
+         offset="0"
+         id="stop4480" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop4482" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4106">
+      <stop
+         style="stop-color:#d9e002;stop-opacity:1;"
+         offset="0"
+         id="stop4108" />
+      <stop
+         id="stop4114"
+         offset="0.5"
+         style="stop-color:#a9ae01;stop-opacity:1;" />
+      <stop
+         style="stop-color:#717501;stop-opacity:1;"
+         offset="1"
+         id="stop4110" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4084">
+      <stop
+         style="stop-color:#7d7d00;stop-opacity:1;"
+         offset="0"
+         id="stop4086" />
+      <stop
+         id="stop4088"
+         offset="0.3636601"
+         style="stop-color:#c6c700;stop-opacity:1;" />
+      <stop
+         style="stop-color:#f6f800;stop-opacity:1;"
+         offset="1"
+         id="stop4090" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4041">
+      <stop
+         id="stop4043"
+         offset="0"
+         style="stop-color:#ffff00;stop-opacity:1;" />
+      <stop
+         id="stop4045"
+         offset="1"
+         style="stop-color:#ffff00;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4025">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop4027" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop4031" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4013">
+      <stop
+         style="stop-color:#ffff00;stop-opacity:1;"
+         offset="0"
+         id="stop4015" />
+      <stop
+         style="stop-color:#b2b200;stop-opacity:1;"
+         offset="1"
+         id="stop4017" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3985">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3987" />
+      <stop
+         style="stop-color:#1d1d1d;stop-opacity:1;"
+         offset="1"
+         id="stop3989" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3961">
+      <stop
+         style="stop-color:#283131;stop-opacity:0;"
+         offset="0"
+         id="stop3963" />
+      <stop
+         id="stop3965"
+         offset="0.5"
+         style="stop-color:#1e2424;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop3967" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3951">
+      <stop
+         id="stop3953"
+         offset="0"
+         style="stop-color:#344040;stop-opacity:1;" />
+      <stop
+         style="stop-color:#222929;stop-opacity:1;"
+         offset="0.5"
+         id="stop3955" />
+      <stop
+         id="stop3957"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3909">
+      <stop
+         style="stop-color:#283131;stop-opacity:1;"
+         offset="0"
+         id="stop3911" />
+      <stop
+         id="stop3917"
+         offset="0.5"
+         style="stop-color:#1e2424;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop3913" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3537">
+      <stop
+         style="stop-color:#ada469;stop-opacity:1;"
+         offset="0"
+         id="stop3539" />
+      <stop
+         id="stop3545"
+         offset="0.81132078"
+         style="stop-color:#ada469;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop3541" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3317">
+      <stop
+         style="stop-color:#cfc690;stop-opacity:1"
+         offset="0"
+         id="stop3319" />
+      <stop
+         id="stop3321"
+         offset="0.21161865"
+         style="stop-color:#afa775;stop-opacity:1;" />
+      <stop
+         id="stop3323"
+         offset="0.53408515"
+         style="stop-color:#615c3a;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0.76504093"
+         id="stop3325" />
+      <stop
+         id="stop3327"
+         offset="1"
+         style="stop-color:#403518;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3239">
+      <stop
+         id="stop3251"
+         offset="0"
+         style="stop-color:#cfc690;stop-opacity:1;" />
+      <stop
+         style="stop-color:#afa775;stop-opacity:1;"
+         offset="0.21161865"
+         id="stop3267" />
+      <stop
+         style="stop-color:#615c3a;stop-opacity:1;"
+         offset="0.53408515"
+         id="stop3261" />
+      <stop
+         id="stop3265"
+         offset="0.76504093"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#403518;stop-opacity:1;"
+         offset="1"
+         id="stop3243" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3239"
+       id="radialGradient3281"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5480423,1.7414304,-1.9683515,1.7497638,-1130.5586,-1872.5121)"
+       spreadMethod="pad"
+       cx="806.52582"
+       cy="212.68117"
+       fx="806.52582"
+       fy="212.68117"
+       r="48.363216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3317"
+       id="radialGradient3315"
+       cx="543.6698"
+       cy="147.3131"
+       fx="543.6698"
+       fy="147.3131"
+       r="47.863216"
+       gradientTransform="matrix(2.1382256,0,0,2.3382884,-77.03847,-101.68704)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3537"
+       id="radialGradient3543"
+       cx="385"
+       cy="237.00504"
+       fx="385"
+       fy="237.00504"
+       r="86.928574"
+       gradientTransform="matrix(1,0,0,0.8562038,0,34.080427)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3909"
+       id="radialGradient3915"
+       cx="418.30365"
+       cy="342.47794"
+       fx="418.30365"
+       fy="342.47794"
+       r="131.4509"
+       gradientTransform="matrix(1.3957347,0.6211056,-0.4244067,0.9537174,-15.061913,-227.96711)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3951"
+       id="radialGradient3933"
+       cx="397.16388"
+       cy="336.95245"
+       fx="397.16388"
+       fy="336.95245"
+       r="36.75"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9449972,2.4894837e-7,-2.4894833e-7,1.9449969,-375.31868,-318.41912)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3961"
+       id="linearGradient3959"
+       x1="398.21429"
+       y1="343.52289"
+       x2="379.28571"
+       y2="265.30862"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(450.03125,73.843964)" />
+    <filter
+       inkscape:collect="always"
+       id="filter3981"
+       x="-0.30000001"
+       width="1.6"
+       y="-0.30000001"
+       height="1.6">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="2"
+         id="feGaussianBlur3983" />
+    </filter>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3985"
+       id="radialGradient3991"
+       cx="402.48898"
+       cy="317.23578"
+       fx="402.48898"
+       fy="317.23578"
+       r="23.714285"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(4.3776616,0,0,4.3776616,-1358.3025,-1070.7357)" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath3999">
+      <path
+         style="opacity:1;fill:#f5ff04;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:20.79999924;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 179.64286,267.36218 C 157.23242,307.0651 119.02676,383.14247 110.35715,417.00504 C 101.70994,450.78014 101.58516,483.42158 110,503.43362 C 118.3602,523.31575 136.16398,539.06642 150.71428,544.86218 C 150.1179,530.48631 165.08723,501.57635 223.57143,472.36218 C 282.1977,443.07704 301.95306,445.23132 327.14285,425.21932 C 352.77291,404.85756 339.75316,358.17469 330.35714,331.29075 C 320.9229,304.29747 295.38973,272.16627 263.92857,261.6479 C 232.8953,251.27258 198.91081,256.79953 179.64286,267.36218 z"
+         id="path4001"
+         sodipodi:nodetypes="czzczzzzc" />
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4013"
+       id="radialGradient4056"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1323239,0.7659488,-1.4550286,2.1510098,588.75376,-711.79716)"
+       cx="228.81355"
+       cy="440.26971"
+       fx="228.81355"
+       fy="440.26971"
+       r="119.17509" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4041"
+       id="radialGradient4060"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(5.911206e-2,2.6869855,-0.7234268,1.5914947e-2,408.72779,-424.56452)"
+       cx="275.4422"
+       cy="335.34866"
+       fx="275.4422"
+       fy="335.34866"
+       r="36.75" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4025"
+       id="radialGradient4062"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(5.911206e-2,2.6869855,-0.7234268,1.5914947e-2,408.72779,-424.56452)"
+       cx="275.4422"
+       cy="335.34866"
+       fx="275.4422"
+       fy="335.34866"
+       r="36.75" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4084"
+       id="linearGradient4082"
+       gradientUnits="userSpaceOnUse"
+       x1="182.35046"
+       y1="256.11136"
+       x2="145.53348"
+       y2="542.20502" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath4100">
+      <path
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.9000755px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 265.93541,126.68393 L 247.1682,295.54701 L 421.27363,222.42633 L 483.22803,311.08516 L 541.11243,279.09486 L 503.57801,99.035183 L 265.93541,126.68393 z"
+         id="path4102"
+         sodipodi:nodetypes="ccccccc" />
+    </clipPath>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4106"
+       id="radialGradient4112"
+       cx="250.22678"
+       cy="475.09763"
+       fx="250.22678"
+       fy="475.09763"
+       r="95.98877"
+       gradientTransform="matrix(1.2259004,-0.7077739,0.1413989,0.2449102,322.22326,608.91815)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4478"
+       id="linearGradient4484"
+       x1="412.08926"
+       y1="404.91574"
+       x2="417.375"
+       y2="401.82648"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4478"
+       id="linearGradient4486"
+       x1="411.91071"
+       y1="404.91577"
+       x2="417.375"
+       y2="401.82648"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4478"
+       id="linearGradient4488"
+       x1="411.91071"
+       y1="405.54077"
+       x2="417.375"
+       y2="401.82648"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4478"
+       id="linearGradient4490"
+       x1="412.08926"
+       y1="405.54077"
+       x2="417.375"
+       y2="401.82648"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4478"
+       id="linearGradient4492"
+       x1="411.73212"
+       y1="405.54077"
+       x2="417.375"
+       y2="401.82648"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4862"
+       id="radialGradient4868"
+       cx="429.56738"
+       cy="377.42877"
+       fx="429.56738"
+       fy="377.42877"
+       r="72.079735"
+       gradientTransform="matrix(1,0,0,0.618034,0,144.16496)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4870"
+       id="radialGradient4876"
+       cx="437.6991"
+       cy="391.21735"
+       fx="437.6991"
+       fy="391.21735"
+       r="36.611931"
+       gradientTransform="matrix(1,0,0,0.618034,0,149.43174)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4013"
+       id="radialGradient3585"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1323239,0.7659488,-1.4550286,2.1510098,588.75376,-711.79716)"
+       cx="228.81355"
+       cy="440.26971"
+       fx="228.81355"
+       fy="440.26971"
+       r="119.17509" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4084"
+       id="linearGradient3587"
+       gradientUnits="userSpaceOnUse"
+       x1="182.35046"
+       y1="256.11136"
+       x2="145.53348"
+       y2="542.20502" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3317"
+       id="radialGradient8410"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0036478,-1.0345492e-7,1.7124628e-7,1.6613125,-753.99632,-302.76972)"
+       cx="317.78754"
+       cy="129.65378"
+       fx="317.78754"
+       fy="129.65378"
+       r="47.863216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8398"
+       id="radialGradient8412"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.0747661,-0.1577957,0.2382425,3.1325183,-1144.2358,-272.29325)"
+       cx="325.30847"
+       cy="80.909554"
+       fx="325.30847"
+       fy="80.909554"
+       r="26.937988" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath8514">
+      <path
+         style="opacity:1;fill:#262f2f;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         d="M 352.24553,211.99185 C 348.4411,186.72762 335.43581,161.35383 335.08873,136.46662 C 334.90247,123.1111 338.36158,109.89571 348.84426,96.912574 C 385.19128,31.616739 465.78517,12.217889 534.77892,5.447147 C 621.70131,-5.569654 719.69159,23.387219 768.15026,100.84843 C 822.27428,176.58173 824.82502,273.38755 848.7623,360.37638 C 878.20009,487.50398 903.54144,616.59052 909.15454,747.22673 C 906.09106,825.40858 900.7282,912.41088 848.65133,975.36086 C 800.62479,1025.7183 725.86486,1025.4139 661.58145,1034.3632 C 571.02606,1039.0182 477.22992,1018.2174 399.79755,970.16496 C 335.02191,932.22495 304.06736,856.68633 302.51815,784.14538 C 294.12898,704.27022 328.90967,630.33687 354.13855,556.98577 C 361.60916,474.2247 363.55141,390.73802 363.79189,307.60093 C 362.95507,275.40549 356.70236,243.7836 352.24553,211.99185 z"
+         id="path8516"
+         sodipodi:nodetypes="cscccccccccccc" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath8604">
+      <path
+         style="opacity:1;fill:#262f2f;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         d="M 352.24553,211.99185 C 348.4411,186.72762 335.43581,161.35383 335.08873,136.46662 C 334.90247,123.1111 338.36158,109.89571 348.84426,96.912574 C 385.19128,31.616739 465.78517,12.217889 534.77892,5.447147 C 621.70131,-5.569654 719.69159,23.387219 768.15026,100.84843 C 822.27428,176.58173 824.82502,273.38755 848.7623,360.37638 C 878.20009,487.50398 903.54144,616.59052 909.15454,747.22673 C 906.09106,825.40858 900.7282,912.41088 848.65133,975.36086 C 800.62479,1025.7183 725.86486,1025.4139 661.58145,1034.3632 C 571.02606,1039.0182 477.22992,1018.2174 399.79755,970.16496 C 335.02191,932.22495 304.06736,856.68633 302.51815,784.14538 C 294.12898,704.27022 328.90967,630.33687 354.13855,556.98577 C 361.60916,474.2247 363.55141,390.73802 363.79189,307.60093 C 362.95507,275.40549 356.70236,243.7836 352.24553,211.99185 z"
+         id="path8606"
+         sodipodi:nodetypes="cscccccccccccc" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath8610">
+      <path
+         style="opacity:1;fill:#262f2f;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         d="M 352.24553,211.99185 C 348.4411,186.72762 335.43581,161.35383 335.08873,136.46662 C 334.90247,123.1111 338.36158,109.89571 348.84426,96.912574 C 385.19128,31.616739 465.78517,12.217889 534.77892,5.447147 C 621.70131,-5.569654 719.69159,23.387219 768.15026,100.84843 C 822.27428,176.58173 824.82502,273.38755 848.7623,360.37638 C 878.20009,487.50398 903.54144,616.59052 909.15454,747.22673 C 906.09106,825.40858 900.7282,912.41088 848.65133,975.36086 C 800.62479,1025.7183 725.86486,1025.4139 661.58145,1034.3632 C 571.02606,1039.0182 477.22992,1018.2174 399.79755,970.16496 C 335.02191,932.22495 304.06736,856.68633 302.51815,784.14538 C 294.12898,704.27022 328.90967,630.33687 354.13855,556.98577 C 361.60916,474.2247 363.55141,390.73802 363.79189,307.60093 C 362.95507,275.40549 356.70236,243.7836 352.24553,211.99185 z"
+         id="path8612"
+         sodipodi:nodetypes="cscccccccccccc" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath8616">
+      <path
+         style="opacity:1;fill:#262f2f;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         d="M 352.24553,211.99185 C 348.4411,186.72762 335.43581,161.35383 335.08873,136.46662 C 334.90247,123.1111 338.36158,109.89571 348.84426,96.912574 C 385.19128,31.616739 465.78517,12.217889 534.77892,5.447147 C 621.70131,-5.569654 719.69159,23.387219 768.15026,100.84843 C 822.27428,176.58173 824.82502,273.38755 848.7623,360.37638 C 878.20009,487.50398 903.54144,616.59052 909.15454,747.22673 C 906.09106,825.40858 900.7282,912.41088 848.65133,975.36086 C 800.62479,1025.7183 725.86486,1025.4139 661.58145,1034.3632 C 571.02606,1039.0182 477.22992,1018.2174 399.79755,970.16496 C 335.02191,932.22495 304.06736,856.68633 302.51815,784.14538 C 294.12898,704.27022 328.90967,630.33687 354.13855,556.98577 C 361.60916,474.2247 363.55141,390.73802 363.79189,307.60093 C 362.95507,275.40549 356.70236,243.7836 352.24553,211.99185 z"
+         id="path8618"
+         sodipodi:nodetypes="cscccccccccccc" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath8622">
+      <path
+         style="opacity:1;fill:#202020;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+         d="M 821.64329,477.88997 C 821.64329,477.88997 844.26276,471.38316 857.38604,472.01724 C 870.50932,472.65133 888.02762,473.95586 901.09489,484.20343 C 914.16216,494.45099 926.16263,511.3435 935.20728,542.57308 C 944.25193,573.80266 936.9056,641.82509 929.03125,685.92043 C 921.1569,730.01577 900.76615,792.03341 884.03125,825.92043 C 867.29635,859.80745 834.23354,903.41563 823.46182,915.79659 C 812.0976,928.85856 767.25593,952.22276 744.03125,958.06326 C 749.33455,947.45666 792.93101,907.47442 779.03125,897.349 C 765.01228,887.13674 733.27116,943.33136 694.7381,926.38217 C 716.12041,913.25005 736.5175,875.19611 728.77871,859.78772 C 720.93846,844.17733 698.07378,908.54529 635.24317,896.8006 C 665.29521,869.27394 690.65023,825.89659 676.50587,813.8209 C 662.09071,801.51403 616.04412,868.11405 616.04412,868.11405 C 616.04412,868.11405 613.22222,826.41287 629.81732,799.50673 C 646.45667,772.52886 709.47029,717.89146 729.37045,687.80331 C 749.2706,657.71517 762.98301,621.79429 771.50587,595.28537 C 780.02873,568.77645 787.30681,518.18583 787.30681,518.18583"
+         id="path8624"
+         sodipodi:nodetypes="czzzzzzczczczczzzc" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath8642">
+      <path
+         style="opacity:1;fill:#0f0f0f;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         d="M 366.88839,504.13471 C 366.88839,504.13471 337.33433,544.70776 319.03125,578.42042 C 300.72816,612.13309 260.41016,704.77736 248.67411,749.49185 C 236.91471,794.29529 186.17411,873.06329 186.17411,873.06329 L 262.24554,891.27757 C 262.24554,891.27757 274.05266,878.45422 293.31696,845.20614 C 312.58126,811.95806 353.67411,706.63471 353.67411,706.63471 L 366.88839,504.13471 z"
+         id="path8644"
+         sodipodi:nodetypes="czzcczcc" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath8658">
+      <path
+         style="opacity:1;fill:#0b0b0b;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         d="M 569.03125,1018.7776 C 564.74554,1019.4919 541.4031,1022.3957 511.17411,1028.7776 C 480.94512,1035.1595 411.39918,1054.7395 368.31696,1064.4919 C 325.23474,1074.2443 251.05253,1099.3079 211.40434,1091.7573 C 171.75616,1084.2067 121.88839,1027.349 121.88839,1027.349 L 126.17411,933.06329 C 126.17411,933.06329 212.05962,916.86235 238.31696,899.49186 C 264.57431,882.12137 283.89934,849.82588 297.60268,828.06329 C 311.30602,806.3007 330.45982,756.63471 330.45982,756.63471 L 569.03125,1018.7776 z"
+         id="path8660"
+         sodipodi:nodetypes="czzzcczzcc" />
+    </clipPath>
+    <filter
+       inkscape:collect="always"
+       id="filter8802"
+       x="-0.35311759"
+       width="1.7062352"
+       y="-0.1817714"
+       height="1.3635428">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="48.038491"
+         id="feGaussianBlur8804" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter8806"
+       x="-0.61142862"
+       width="2.2228572"
+       y="-0.14930232"
+       height="1.2986046">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="37.830213"
+         id="feGaussianBlur8808" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter8810"
+       x="-0.23519406"
+       width="1.4703881"
+       y="-0.24500646"
+       height="1.4900129">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="58.328041"
+         id="feGaussianBlur8812" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter8814"
+       x="-0.20466694"
+       width="1.4093339"
+       y="-0.29007819"
+       height="1.5801564">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="22.300169"
+         id="feGaussianBlur8816" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter8818"
+       x="-0.34381232"
+       width="1.6876246"
+       y="-0.18433961"
+       height="1.3686792">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="34.542167"
+         id="feGaussianBlur8820" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter8822"
+       x="-0.2742857"
+       width="1.5485713"
+       y="-0.21333334"
+       height="1.4266667">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="11.313708"
+         id="feGaussianBlur8824" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter8826"
+       x="-0.25894088"
+       width="1.5178818"
+       y="-0.2236412"
+       height="1.4472824">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="19.631544"
+         id="feGaussianBlur8828" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter8856"
+       x="-0.3253231"
+       width="1.6506462"
+       y="-0.19013336"
+       height="1.3802667">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="28.712591"
+         id="feGaussianBlur8858" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter8860"
+       x="-0.38093024"
+       width="1.7618605"
+       y="-0.17518716"
+       height="1.3503743">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="19.304015"
+         id="feGaussianBlur8862" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter8888"
+       x="-0.2112188"
+       width="1.4224375"
+       y="-0.16808605"
+       height="1.3361721">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="8.3693583"
+         id="feGaussianBlur8890" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter8892"
+       x="-0.18692794"
+       width="1.3738559"
+       y="-0.23646873"
+       height="1.4729375">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="31.21228"
+         id="feGaussianBlur8894" />
+    </filter>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath8906">
+      <path
+         style="opacity:1;fill:#262f2f;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         d="M 352.24553,211.99185 C 348.4411,186.72762 335.43581,161.35383 335.08873,136.46662 C 334.90247,123.1111 338.36158,109.89571 348.84426,96.912574 C 385.19128,31.616739 465.78517,12.217889 534.77892,5.447147 C 621.70131,-5.569654 719.69159,23.387219 768.15026,100.84843 C 822.27428,176.58173 824.82502,273.38755 848.7623,360.37638 C 878.20009,487.50398 903.54144,616.59052 909.15454,747.22673 C 906.09106,825.40858 900.7282,912.41088 848.65133,975.36086 C 800.62479,1025.7183 725.86486,1025.4139 661.58145,1034.3632 C 571.02606,1039.0182 477.22992,1018.2174 399.79755,970.16496 C 335.02191,932.22495 304.06736,856.68633 302.51815,784.14538 C 294.12898,704.27022 328.90967,630.33687 354.13855,556.98577 C 361.60916,474.2247 363.55141,390.73802 363.79189,307.60093 C 362.95507,275.40549 356.70236,243.7836 352.24553,211.99185 z"
+         id="path8908"
+         sodipodi:nodetypes="cscccccccccccc" />
+    </clipPath>
+    <filter
+       inkscape:collect="always"
+       id="filter8940"
+       x="-0.25152978"
+       width="1.5030596"
+       y="-0.053035267"
+       height="1.1060705">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="13.024603"
+         id="feGaussianBlur8942" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8952"
+       id="linearGradient8958"
+       x1="609.31244"
+       y1="239.46866"
+       x2="560.83142"
+       y2="262.86206"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(450.03125,73.843964)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8964"
+       id="linearGradient8970"
+       x1="603.84064"
+       y1="627.85303"
+       x2="616.24396"
+       y2="585.42664"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(450.03125,73.843964)" />
+    <filter
+       inkscape:collect="always"
+       id="filter9020"
+       x="-0.32861114"
+       width="1.6572223"
+       y="-0.182"
+       height="1.364">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="20.912684"
+         id="feGaussianBlur9022" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter9024"
+       x="-0.55453134"
+       width="2.1090627"
+       y="-0.51434779"
+       height="2.0286956">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="20.912684"
+         id="feGaussianBlur9026" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter9044"
+       x="-0.32631579"
+       width="1.6526316"
+       y="-0.84545463"
+       height="2.6909094">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="21.92031"
+         id="feGaussianBlur9046" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter9048"
+       x="-0.40879121"
+       width="1.8175824"
+       y="-0.71538466"
+       height="2.4307692">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="21.92031"
+         id="feGaussianBlur9050" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter3587"
+       x="-0.1">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="8.881432"
+         id="feGaussianBlur3589" />
+    </filter>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath3602">
+      <path
+         sodipodi:nodetypes="czzzzzzczczczczzzc"
+         id="path3604"
+         d="M 647.61204,540.04601 C 647.61204,540.04601 670.23151,533.5392 683.35479,534.17328 C 696.47807,534.80737 713.99637,536.1119 727.06364,546.35947 C 740.13091,556.60703 752.13138,573.49954 761.17603,604.72912 C 770.22068,635.9587 762.87435,703.98113 755,748.07647 C 747.12565,792.17181 726.7349,854.18945 710,888.07647 C 693.2651,921.96349 660.20229,965.57167 649.43057,977.95263 C 638.06635,991.0146 593.22468,1014.3788 570,1020.2193 C 575.3033,1009.6127 618.89976,969.63046 605,959.50504 C 590.98103,949.29278 559.23991,1005.4874 520.70685,988.53821 C 542.08916,975.40609 562.48625,937.35215 554.74746,921.94376 C 546.90721,906.33337 524.04253,970.70133 461.21192,958.95664 C 491.26396,931.42998 516.61898,888.05263 502.47462,875.97694 C 488.05946,863.67007 442.01287,930.27009 442.01287,930.27009 C 442.01287,930.27009 439.19097,888.56891 455.78607,861.66277 C 472.42542,834.6849 535.43904,780.0475 555.3392,749.95935 C 575.23935,719.87121 588.95176,683.95033 597.47462,657.44141 C 605.99748,630.93249 613.27556,580.34187 613.27556,580.34187"
+         style="opacity:1;fill:#202020;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+    </clipPath>
+    <filter
+       inkscape:collect="always"
+       id="filter4120"
+       x="-0.2770822"
+       width="1.5541644"
+       y="-0.32482043"
+       height="1.6496409">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="19.956289"
+         id="feGaussianBlur4122" />
+    </filter>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath3631">
+      <path
+         style="opacity:1;fill:#ada469;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+         d="M 760.16396,935.83377 C 766.95806,954.73656 770.65765,969.13346 772.05426,987.04566 C 773.45088,1004.958 768.27158,1038.8465 769.1538,1057.7018 C 770.03555,1076.547 777.28749,1097.8008 796.49843,1106.6707 C 815.9173,1115.6365 845.81767,1116.882 870.61827,1103.5251 C 895.41887,1090.1681 928.01929,1033.1996 941.59253,1006.2164 C 955.21638,979.13246 980.3536,891.71903 986.25333,856.44781 C 992.15306,821.1766 988.80387,815.14704 981.63585,807.39232 C 984.27615,779.55217 980.13613,752.45689 994.74554,720.20614 C 964.49653,732.03184 957.36325,760.36684 946.42665,785.71122 C 938.42574,734.77829 946.63581,714.43803 949.74554,684.49186 C 920.68078,699.26977 906.88403,731.60588 904.74554,777.349 C 893.82159,776.0448 883.3541,772.91477 871.17411,776.63471 C 870.91007,730.61137 869.71055,699.7453 880.08474,662.42822 C 826.82927,683.45508 817.13746,769.02232 824.03125,775.20614 C 813.14843,775.74114 802.66017,773.90884 791.17411,778.06329 C 791.81303,735.49194 790.91365,693.15468 761.17411,655.20614 C 761.17411,655.20614 730.21605,736.12848 729.74554,758.77757 C 729.27503,781.42666 739.19713,798.94345 739.19713,798.94345 C 739.19713,798.94345 730.62906,835.68396 732.89854,857.17568 C 735.19439,878.91714 753.34144,916.85185 760.16396,935.83377 z"
+         id="path3633"
+         sodipodi:nodetypes="czzzzzzcccccccccczczz" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath3665">
+      <path
+         sodipodi:nodetypes="czzcczcc"
+         id="path3667"
+         d="M 366.88839,504.13471 C 366.88839,504.13471 337.33433,544.70776 319.03125,578.42042 C 300.72816,612.13309 260.41016,704.77736 248.67411,749.49185 C 236.91471,794.29529 186.17411,873.06329 186.17411,873.06329 L 262.24554,891.27757 C 262.24554,891.27757 274.05266,878.45422 293.31696,845.20614 C 312.58126,811.95806 353.67411,706.63471 353.67411,706.63471 L 366.88839,504.13471 z"
+         style="opacity:1;fill:#0f0f0f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath3677">
+      <path
+         style="opacity:1;fill:#ada469;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+         d="M 586.13271,997.98981 C 592.92681,1016.8926 596.6264,1031.2895 598.02301,1049.2017 C 599.41963,1067.114 594.24033,1101.0025 595.12255,1119.8578 C 596.0043,1138.703 603.25624,1159.9568 622.46718,1168.8267 C 641.88605,1177.7925 671.78642,1179.038 696.58702,1165.6811 C 721.38762,1152.3241 753.98804,1095.3556 767.56128,1068.3724 C 781.18513,1041.2885 806.32235,953.87507 812.22208,918.60385 C 818.12181,883.33264 814.77262,877.30308 807.6046,869.54836 C 810.2449,841.70821 806.10488,814.61293 820.71429,782.36218 C 790.46528,794.18788 783.332,822.52288 772.3954,847.86726 C 764.39449,796.93433 772.60456,776.59407 775.71429,746.6479 C 746.64953,761.42581 732.85278,793.76192 730.71429,839.50504 C 719.79034,838.20084 709.32285,835.07081 697.14286,838.79075 C 696.87882,792.76741 695.6793,761.90134 706.05349,724.58426 C 652.79802,745.61112 643.10621,831.17836 650,837.36218 C 639.11718,837.89718 628.62892,836.06488 617.14286,840.21933 C 617.78178,797.64798 616.8824,755.31072 587.14286,717.36218 C 587.14286,717.36218 556.1848,798.28452 555.71429,820.93361 C 555.24378,843.5827 565.16588,861.09949 565.16588,861.09949 C 565.16588,861.09949 556.59781,897.84 558.86729,919.33172 C 561.16314,941.07318 579.31019,979.00789 586.13271,997.98981 z"
+         id="path3679"
+         sodipodi:nodetypes="czzzzzzcccccccccczczz" />
+    </clipPath>
+    <filter
+       inkscape:collect="always"
+       id="filter3898">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="10.892985"
+         id="feGaussianBlur3900" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter4130"
+       x="-0.49509686"
+       width="1.9901937"
+       y="-0.26708817"
+       height="1.5341763">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="10.730622"
+         id="feGaussianBlur4132" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter4141"
+       x="-0.40611032"
+       width="1.8122206"
+       y="-0.30260596"
+       height="1.6052119">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="9.8586086"
+         id="feGaussianBlur4143" />
+    </filter>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath4177">
+      <path
+         sodipodi:nodetypes="czzzzzzcccccccccczczz"
+         id="path4179"
+         d="M 586.13271,997.98981 C 592.92681,1016.8926 596.6264,1031.2895 598.02301,1049.2017 C 599.41963,1067.114 594.24033,1101.0025 595.12255,1119.8578 C 596.0043,1138.703 603.25624,1159.9568 622.46718,1168.8267 C 641.88605,1177.7925 671.78642,1179.038 696.58702,1165.6811 C 721.38762,1152.3241 753.98804,1095.3556 767.56128,1068.3724 C 781.18513,1041.2885 806.32235,953.87507 812.22208,918.60385 C 818.12181,883.33264 814.77262,877.30308 807.6046,869.54836 C 810.2449,841.70821 806.10488,814.61293 820.71429,782.36218 C 790.46528,794.18788 783.332,822.52288 772.3954,847.86726 C 764.39449,796.93433 772.60456,776.59407 775.71429,746.6479 C 746.64953,761.42581 732.85278,793.76192 730.71429,839.50504 C 719.79034,838.20084 709.32285,835.07081 697.14286,838.79075 C 696.87882,792.76741 695.6793,761.90134 706.05349,724.58426 C 652.79802,745.61112 643.10621,831.17836 650,837.36218 C 639.11718,837.89718 628.62892,836.06488 617.14286,840.21933 C 617.78178,797.64798 616.8824,755.31072 587.14286,717.36218 C 587.14286,717.36218 556.1848,798.28452 555.71429,820.93361 C 555.24378,843.5827 565.16588,861.09949 565.16588,861.09949 C 565.16588,861.09949 556.59781,897.84 558.86729,919.33172 C 561.16314,941.07318 579.31019,979.00789 586.13271,997.98981 z"
+         style="opacity:1;fill:#ada469;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+    </clipPath>
+    <filter
+       inkscape:collect="always"
+       id="filter4185">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="3.6164709"
+         id="feGaussianBlur4187" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter4105">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="3.8640966"
+         id="feGaussianBlur4107" />
+    </filter>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath2833">
+      <path
+         style="opacity:1;fill:#292929;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         d="M 569.03125,1018.7776 C 564.74554,1019.4919 541.4031,1022.3957 511.17411,1028.7776 C 480.94512,1035.1595 453.86016,1033.7437 375.38803,1046.1072 C 295.53625,1058.688 281.32367,1088.6495 267.26578,1093.1715 C 252.56564,1097.9001 121.88839,1027.349 121.88839,1027.349 L 126.17411,933.06329 C 126.17411,933.06329 212.05962,916.86235 238.31696,899.49186 C 264.57431,882.12137 283.89934,849.82588 297.60268,828.06329 C 311.30602,806.3007 330.45982,756.63471 330.45982,756.63471 L 569.03125,1018.7776 z"
+         id="path2835"
+         sodipodi:nodetypes="czzzcczzcc" />
+    </clipPath>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2843"
+       id="linearGradient2841"
+       gradientUnits="userSpaceOnUse"
+       x1="347.89655"
+       y1="1070.2124"
+       x2="275.58191"
+       y2="867.97992" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3627"
+       id="linearGradient3688"
+       gradientUnits="userSpaceOnUse"
+       x1="699.32867"
+       y1="269.76755"
+       x2="698.97504"
+       y2="346.1351" />
+    <mask
+       maskUnits="userSpaceOnUse"
+       id="mask3684">
+      <path
+         sodipodi:type="arc"
+         style="opacity:1;fill:url(#linearGradient3688);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.43724918px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         id="path3686"
+         sodipodi:cx="579.474"
+         sodipodi:cy="260.57516"
+         sodipodi:rx="192.6866"
+         sodipodi:ry="164.04877"
+         d="M 772.1606,260.57516 A 192.6866,164.04877 0 1 1 386.7874,260.57516 A 192.6866,164.04877 0 1 1 772.1606,260.57516 z"
+         transform="translate(-174.03125,62.156036)" />
+    </mask>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath3622">
+      <path
+         style="opacity:1;fill:#ada469;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+         d="M 266.27183,924.57186 C 264.86456,943.37307 265.12693,957.32289 268.35357,973.87514 C 271.58022,990.42748 284.75965,1019.7825 288.68797,1037.0589 C 292.61419,1054.326 291.3821,1075.3685 276.22853,1088.2071 C 260.91092,1101.1845 234.17726,1109.806 208.39623,1103.9409 C 182.61517,1098.0756 138.84716,1054.7175 119.80604,1033.7126 C 100.6939,1012.6293 56.045183,939.86194 41.867508,909.43681 C 27.689836,879.01169 29.207903,872.71824 33.747793,863.90708 C 24.381071,839.38658 21.334081,813.84027 0.035335518,788.33044 C 30.360815,791.44488 43.915625,815.28677 60.161025,835.47019 C 54.631129,787.39416 42.10631,771.05369 31.787073,744.74589 C 61.781368,750.82755 82.366433,776.61829 95.766856,817.45839 C 105.32101,813.54048 114.00462,808.08545 125.95427,808.39719 C 114.65677,766.70139 108.00481,738.48135 89.267015,707.32725 C 142.70898,712.99758 172.92404,787.96657 168.23844,795.28805 C 178.21641,793.04406 187.24409,788.75767 198.67497,789.63638 C 187.42601,751.28936 177.62716,712.76848 195.01526,670.9882 C 195.01526,670.9882 243.30204,736.42507 249.40492,756.79397 C 255.50779,777.16288 250.92373,795.49449 250.92373,795.49449 C 250.92373,795.49449 267.8833,826.57978 271.21765,846.58862 C 274.59075,866.82997 267.68496,905.69194 266.27183,924.57186 z"
+         id="path3624"
+         sodipodi:nodetypes="czzzzzzcccccccccczczz" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath3636">
+      <path
+         style="opacity:1;fill:#ada469;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+         d="M 760.16396,935.83377 C 766.95806,954.73656 770.65765,969.13346 772.05426,987.04566 C 773.45088,1004.958 768.27158,1038.8465 769.1538,1057.7018 C 770.03555,1076.547 777.28749,1097.8008 796.49843,1106.6707 C 815.9173,1115.6365 845.81767,1116.882 870.61827,1103.5251 C 895.41887,1090.1681 928.01929,1033.1996 941.59253,1006.2164 C 955.21638,979.13246 980.3536,891.71903 986.25333,856.44781 C 992.15306,821.1766 988.80387,815.14704 981.63585,807.39232 C 984.27615,779.55217 980.13613,752.45689 994.74554,720.20614 C 964.49653,732.03184 957.36325,760.36684 946.42665,785.71122 C 938.42574,734.77829 946.63581,714.43803 949.74554,684.49186 C 920.68078,699.26977 906.88403,731.60588 904.74554,777.349 C 893.82159,776.0448 883.3541,772.91477 871.17411,776.63471 C 870.91007,730.61137 869.71055,699.7453 880.08474,662.42822 C 826.82927,683.45508 817.13746,769.02232 824.03125,775.20614 C 813.14843,775.74114 802.66017,773.90884 791.17411,778.06329 C 791.81303,735.49194 790.91365,693.15468 761.17411,655.20614 C 761.17411,655.20614 730.21605,736.12848 729.74554,758.77757 C 729.27503,781.42666 739.19713,798.94345 739.19713,798.94345 C 739.19713,798.94345 730.62906,835.68396 732.89854,857.17568 C 735.19439,878.91714 753.34144,916.85185 760.16396,935.83377 z"
+         id="path3638"
+         sodipodi:nodetypes="czzzzzzcccccccccczczz" />
+    </clipPath>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3660"
+       id="linearGradient3666"
+       x1="1255.7386"
+       y1="667.09216"
+       x2="893.69995"
+       y2="858.01099"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       inkscape:collect="always"
+       id="filter3779"
+       x="-0.087980822"
+       width="1.1759616"
+       y="-0.17728332"
+       height="1.3545666">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="16.340344"
+         id="feGaussianBlur3781" />
+    </filter>
+    <filter
+       id="filter3785"
+       inkscape:label="White Fur">
+      <feTurbulence
+         id="feTurbulence3787"
+         in="SourceAlpha"
+         type="fractalNoise"
+         baseFrequency="0.24044943820224721"
+         numOctaves="10"
+         seed="655"
+         result="result0" />
+      <feDisplacementMap
+         id="feDisplacementMap3789"
+         in="SourceGraphic"
+         in2="result0"
+         scale="62"
+         xChannelSelector="B"
+         yChannelSelector="G" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter3677">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="2.0397518"
+         id="feGaussianBlur3679" />
+    </filter>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath3722">
+      <path
+         style="opacity:1;fill:#121212;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         d="M 709.28572,844.50504 C 763.57143,843.07647 835.32072,829.45305 879.28572,817.71932 C 923.33843,805.96218 1005.172,781.37208 1054.6428,759.86218 C 1103.9821,738.40946 1168.2465,700.58058 1208.9286,667.71933 C 1249.4367,634.99864 1261.3185,611.89952 1269.6429,634.1479 C 1278.012,656.51569 1253.2359,690.47352 1231.7857,715.21933 C 1210.1816,740.14273 1179.0544,767.92466 1132.8571,804.50504 C 1086.6598,841.08542 976.77458,906.08967 920,933.07647 C 862.93394,960.20183 791.79666,991.31489 747.85714,1005.5765 C 703.91762,1019.8381 616.42857,1036.6479 616.42857,1036.6479 L 709.28572,844.50504 z"
+         id="path3724"
+         sodipodi:nodetypes="czzzzzzzzcc" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath3986">
+      <path
+         style="opacity:1;fill:#121212;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         d="M 709.28572,844.50504 C 763.57143,843.07647 835.32072,829.45305 879.28572,817.71932 C 923.33843,805.96218 1005.172,781.37208 1054.6428,759.86218 C 1103.9821,738.40946 1168.2465,700.58058 1208.9286,667.71933 C 1249.4367,634.99864 1261.3185,611.89952 1269.6429,634.1479 C 1278.012,656.51569 1253.2359,690.47352 1231.7857,715.21933 C 1210.1816,740.14273 1179.0544,767.92466 1132.8571,804.50504 C 1086.6598,841.08542 976.77458,906.08967 920,933.07647 C 862.93394,960.20183 791.79666,991.31489 747.85714,1005.5765 C 703.91762,1019.8381 616.42857,1036.6479 616.42857,1036.6479 L 709.28572,844.50504 z"
+         id="path3988"
+         sodipodi:nodetypes="czzzzzzzzcc" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath3992">
+      <path
+         style="opacity:1;fill:#121212;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         d="M 709.28572,844.50504 C 763.57143,843.07647 835.32072,829.45305 879.28572,817.71932 C 923.33843,805.96218 1005.172,781.37208 1054.6428,759.86218 C 1103.9821,738.40946 1168.2465,700.58058 1208.9286,667.71933 C 1249.4367,634.99864 1261.3185,611.89952 1269.6429,634.1479 C 1278.012,656.51569 1253.2359,690.47352 1231.7857,715.21933 C 1210.1816,740.14273 1179.0544,767.92466 1132.8571,804.50504 C 1086.6598,841.08542 976.77458,906.08967 920,933.07647 C 862.93394,960.20183 791.79666,991.31489 747.85714,1005.5765 C 703.91762,1019.8381 616.42857,1036.6479 616.42857,1036.6479 L 709.28572,844.50504 z"
+         id="path3994"
+         sodipodi:nodetypes="czzzzzzzzcc" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath3998">
+      <path
+         style="opacity:1;fill:#262f2f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         d="M 178.21428,274.14789 C 174.40985,248.88366 161.40456,223.50987 161.05748,198.62266 C 160.87122,185.26714 164.33033,172.05175 174.81301,159.06861 C 211.16003,93.772775 291.75392,74.373925 360.74767,67.603183 C 447.67006,56.586382 545.66034,85.543255 594.11901,163.00447 C 648.24303,238.73777 650.79377,335.54359 674.73105,422.53242 C 704.16884,549.66002 729.51019,678.74656 735.12329,809.38277 C 732.05981,887.56462 726.69695,974.56692 674.62008,1037.5169 C 626.59354,1087.8743 551.83361,1087.5699 487.5502,1096.5192 C 396.99481,1101.1742 303.19867,1080.3734 225.7663,1032.321 C 160.99066,994.38099 130.03611,918.84237 128.4869,846.30142 C 120.09773,766.42626 154.87842,692.49291 180.1073,619.14181 C 187.57791,536.38074 189.52016,452.89406 189.76064,369.75697 C 188.92382,337.56153 182.67111,305.93964 178.21428,274.14789 z"
+         id="path4000"
+         sodipodi:nodetypes="cscccccccccccc" />
+    </clipPath>
+    <filter
+       inkscape:collect="always"
+       id="filter4002"
+       x="-0.24334238"
+       width="1.4866848"
+       y="-0.39104807"
+       height="1.7820961">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="14.589518"
+         id="feGaussianBlur4004" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter4010"
+       x="-0.14577261"
+       width="1.2915452"
+       y="-0.23523259"
+       height="1.4704652">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="4.4442907"
+         id="feGaussianBlur4012" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter4053">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.6062947"
+         id="feGaussianBlur4055" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter4079">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="6.5887624"
+         id="feGaussianBlur4081" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter4083">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.5052066"
+         id="feGaussianBlur4085" />
+    </filter>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4113"
+       id="radialGradient4119"
+       cx="296.33783"
+       cy="427.17749"
+       fx="296.33783"
+       fy="427.17749"
+       r="19.704132"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.9797125,0,0,2.9797125,-599.28727,-827.0855)" />
+    <filter
+       inkscape:collect="always"
+       id="filter6949"
+       x="-0.10294895"
+       width="1.2058979"
+       y="-0.34224695"
+       height="1.6844939">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.1675612"
+         id="feGaussianBlur6951" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter6953"
+       x="-0.098320946"
+       width="1.1966419"
+       y="-0.19750816"
+       height="1.3950163">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.1675612"
+         id="feGaussianBlur6955" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter6957"
+       x="-0.098213427"
+       width="1.1964267"
+       y="-0.19838208"
+       height="1.3967642">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.1675612"
+         id="feGaussianBlur6959" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter6961"
+       x="-0.09919104"
+       width="1.1983821"
+       y="-0.22643611"
+       height="1.4528722">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.1675612"
+         id="feGaussianBlur6963" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter6965"
+       x="-0.099081434"
+       width="1.1981629"
+       y="-0.22529824"
+       height="1.4505965">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.1675612"
+         id="feGaussianBlur6967" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter6969"
+       x="-0.10450897"
+       width="1.2090179"
+       y="-0.40468886"
+       height="1.8093777">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.1675612"
+         id="feGaussianBlur6971" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter6973"
+       x="-0.10330495"
+       width="1.2066098"
+       y="-0.36439717"
+       height="1.7287945">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.1675612"
+         id="feGaussianBlur6975" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter6977"
+       x="-0.10224481"
+       width="1.2044896"
+       y="-0.32371372"
+       height="1.6474274">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.1675612"
+         id="feGaussianBlur6979" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter6981"
+       x="-0.10052545"
+       width="1.2010509"
+       y="-0.2742162"
+       height="1.5484324">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.1675612"
+         id="feGaussianBlur6983" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter6985"
+       x="-0.098428868"
+       width="1.1968577"
+       y="-0.20853186"
+       height="1.4170637">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.1675612"
+         id="feGaussianBlur6987" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter6989"
+       x="-0.098428868"
+       width="1.1968577"
+       y="-0.20287035"
+       height="1.4057407">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.1675612"
+         id="feGaussianBlur6991" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter6993"
+       x="-0.098213255"
+       width="1.1964265"
+       y="-0.19838208"
+       height="1.3967642">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.1675612"
+         id="feGaussianBlur6995" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter6997">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.1675612"
+         id="feGaussianBlur6999" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter7001">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.1675612"
+         id="feGaussianBlur7003" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter7285"
+       x="-0.030884685"
+       width="1.0617694"
+       y="-0.10267408"
+       height="1.2053483">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.35026836"
+         id="feGaussianBlur7287" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter7289">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.35026836"
+         id="feGaussianBlur7291" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter7293">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.35026836"
+         id="feGaussianBlur7295" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter7297">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.35026836"
+         id="feGaussianBlur7299" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter7301">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.35026836"
+         id="feGaussianBlur7303" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter7305">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.35026836"
+         id="feGaussianBlur7307" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter7309">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.35026836"
+         id="feGaussianBlur7311" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter7313">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.35026836"
+         id="feGaussianBlur7315" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter7317">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.35026836"
+         id="feGaussianBlur7319" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter7321">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.35026836"
+         id="feGaussianBlur7323" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter7325"
+       x="-0.031352691"
+       width="1.0627054"
+       y="-0.12140666"
+       height="1.2428133">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.35026836"
+         id="feGaussianBlur7327" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter7329"
+       x="-0.030991485"
+       width="1.061983"
+       y="-0.10931916"
+       height="1.2186383">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.35026836"
+         id="feGaussianBlur7331" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter7333">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.35026836"
+         id="feGaussianBlur7335" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter7337">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.35026836"
+         id="feGaussianBlur7339" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter7345">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.7233839"
+         id="feGaussianBlur7347" />
+    </filter>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath7421">
+      <path
+         sodipodi:type="inkscape:offset"
+         inkscape:radius="0"
+         inkscape:original="M 1111.4062 -285.9375 L 1107.4688 -284.0625 C 1107.4283 -284.05228 1107.3692 -284.04201 1107.3438 -284.03125 C 1106.925 -283.8184 1107.1791 -283.93067 1106.6875 -283.71875 C 1106.2014 -283.50919 1104.9499 -283.13456 1102.5938 -282.25 C 1099.2626 -280.99942 1096.7895 -280.10016 1095.5938 -279.1875 C 1094.0576 -279.16623 1091.8733 -278.95419 1089.9375 -278.46875 C 1086.956 -277.72108 1085.0823 -277.29474 1083.1875 -276.875 C 1081.2927 -276.45527 1081.512 -276.23281 1080.3125 -276 C 1079.0159 -275.74833 1078.5911 -276.00899 1074.875 -275.21875 C 1071.3851 -274.4766 1065.9802 -273.28768 1064.7188 -272.53125 C 1063.1348 -272.71203 1060.8513 -272.85303 1058.875 -272.5625 C 1055.8346 -272.11554 1053.9588 -271.88974 1052.0312 -271.65625 C 1051.3758 -271.57687 1050.9902 -271.45547 1050.6875 -271.375 C 1050.2613 -271.24334 1050.0017 -271.11498 1049.3125 -271.03125 C 1048.0009 -270.87188 1047.5503 -271.18808 1043.7812 -270.75 C 1040.2273 -270.33691 1034.7758 -269.47718 1033.5312 -268.8125 C 1031.9322 -269.10979 1029.6735 -269.34669 1027.6875 -269.15625 C 1024.6287 -268.86293 1022.7155 -268.67226 1020.7812 -268.5 C 1018.847 -268.32773 1019.0926 -268.07763 1017.875 -267.96875 C 1016.5588 -267.85105 1016.1152 -268.13238 1012.3438 -267.71875 C 1008.8017 -267.3303 1003.3359 -266.50948 1002.0625 -265.84375 C 1000.4636 -266.13844 998.1753 -266.35076 996.1875 -266.15625 C 993.12921 -265.857 991.2463 -265.67601 989.3125 -265.5 C 988.65501 -265.44015 988.27245 -265.32144 987.96875 -265.25 C 987.54105 -265.13104 987.28525 -265.03193 986.59375 -264.96875 C 985.27775 -264.84849 984.834 -265.16363 981.0625 -264.75 C 977.50631 -264.35998 972.0569 -263.51084 970.8125 -262.84375 C 969.21381 -263.13793 966.95265 -263.36747 964.96875 -263.15625 C 961.91305 -262.83092 959.9947 -262.63001 958.0625 -262.4375 C 956.13031 -262.24499 956.37275 -261.99662 955.15625 -261.875 C 953.84137 -261.74353 953.3932 -262.03954 949.625 -261.59375 C 946.08611 -261.17509 940.6473 -260.30158 939.375 -259.625 C 937.77741 -259.90604 935.51505 -260.04543 933.53125 -259.8125 C 930.47927 -259.45413 928.58625 -259.24464 926.65625 -259.03125 C 926.00007 -258.95869 925.6156 -258.85856 925.3125 -258.78125 C 924.88571 -258.65402 924.6276 -258.51405 923.9375 -258.4375 C 922.62411 -258.29181 922.17015 -258.61152 918.40625 -258.125 C 914.85737 -257.66624 909.4276 -256.70598 908.1875 -256 C 906.59441 -256.24424 904.3537 -256.38135 902.375 -256.125 C 899.32741 -255.73018 897.4243 -255.47655 895.5 -255.21875 C 893.57571 -254.96096 893.7739 -254.72522 892.5625 -254.5625 C 891.25301 -254.3866 890.8153 -254.66688 887.0625 -254.09375 C 883.53821 -253.55551 878.1393 -252.39458 876.875 -251.65625 C 875.28751 -251.85979 873.0295 -251.91098 871.0625 -251.5625 C 868.03631 -251.02638 866.1636 -250.70081 864.25 -250.375 C 863.59941 -250.26423 863.2363 -250.10406 862.9375 -250 C 862.51681 -249.83512 862.27405 -249.6687 861.59375 -249.53125 C 860.29905 -249.26966 859.86665 -249.53745 856.15625 -248.71875 C 852.65777 -247.9468 847.31035 -246.33582 846.09375 -245.5 C 844.53085 -245.57745 842.33625 -245.41472 840.40625 -244.90625 C 837.43387 -244.12312 835.58855 -243.67416 833.71875 -243.15625 C 831.84875 -242.63835 832.0521 -242.38897 830.875 -242.0625 C 829.60251 -241.7096 829.17795 -241.95541 825.53125 -240.875 C 822.10657 -239.86037 816.88185 -237.94183 815.65625 -237.03125 C 814.11747 -237.01851 811.93645 -236.75903 810.03125 -236.15625 C 807.10027 -235.22891 805.2809 -234.69783 803.4375 -234.09375 C 802.81071 -233.88837 802.44585 -233.70117 802.15625 -233.5625 C 801.74867 -233.34889 801.50295 -233.15375 800.84375 -232.9375 C 799.58925 -232.52596 799.1576 -232.74846 795.5625 -231.5 C 792.17261 -230.32283 786.96755 -228.2863 785.78125 -227.34375 C 784.25737 -227.28408 782.1312 -226.94888 780.25 -226.28125 C 777.35261 -225.25296 775.55095 -224.60577 773.71875 -223.96875 C 771.88655 -223.33174 772.0909 -223.12021 770.9375 -222.71875 C 769.69071 -222.28479 769.27395 -222.51903 765.71875 -221.15625 C 762.38005 -219.87645 757.23165 -217.6737 756.03125 -216.6875 C 754.52407 -216.57981 752.39555 -216.1887 750.53125 -215.46875 C 747.66307 -214.36115 745.90735 -213.68719 744.09375 -213 C 743.47705 -212.76637 743.0973 -212.55797 742.8125 -212.40625 C 742.81251 -212.40625 742.8125 -212.37673 742.8125 -212.375 L 734.8125 -209.1875 L 736.625 -194.46875 C 736.36701 -194.52956 742.8125 -191.15625 742.8125 -191.15625 C 743.03891 -191.30093 743.26145 -191.42886 743.53125 -191.53125 C 744.61177 -191.94123 745.70285 -191.74702 749.53125 -193.21875 C 753.35977 -194.69049 754.7553 -195.22373 755.4375 -195.625 C 756.11711 -196.02478 757.04925 -196.50437 757.65625 -197.15625 C 759.48317 -197.294 761.22705 -197.64948 762.59375 -198.15625 C 765.56175 -199.25677 767.4691 -199.96244 769.375 -200.625 C 771.28081 -201.28754 771.72915 -202.03987 772.78125 -202.40625 C 773.87287 -202.78636 774.97635 -202.57163 778.84375 -203.9375 C 782.71115 -205.30336 784.1269 -205.76458 784.8125 -206.15625 C 785.51361 -206.55677 786.5133 -207.08923 787.125 -207.75 C 789.09581 -207.80466 790.94195 -208.13463 792.40625 -208.625 C 795.40777 -209.63008 797.3324 -210.24671 799.25 -210.875 C 800.78861 -211.3791 801.42415 -211.92177 802.15625 -212.3125 C 802.38647 -212.44681 802.63215 -212.56623 802.90625 -212.65625 C 804.00457 -213.01673 805.0877 -212.73762 809 -213.96875 C 812.91231 -215.19988 814.366 -215.6417 815.0625 -216 C 815.75641 -216.35697 816.6926 -216.79261 817.3125 -217.40625 C 819.17771 -217.42891 820.94835 -217.67308 822.34375 -218.09375 C 825.37415 -219.00729 827.33615 -219.52385 829.28125 -220.0625 C 831.22637 -220.60114 831.70745 -221.32702 832.78125 -221.625 C 833.89527 -221.93415 835.00125 -221.61761 838.96875 -222.65625 C 842.93625 -223.69488 844.38625 -224.08898 845.09375 -224.40625 C 845.82855 -224.73584 846.90765 -225.15997 847.53125 -225.78125 C 849.52907 -225.66525 851.3887 -225.80134 852.875 -226.15625 C 855.95311 -226.89125 857.9584 -227.25719 859.9375 -227.65625 C 861.52541 -227.97643 862.1818 -228.4468 862.9375 -228.75 C 863.17501 -228.8568 863.4044 -228.94276 863.6875 -229 C 864.82091 -229.22919 865.99215 -228.79107 870.03125 -229.5 C 874.07067 -230.20893 875.5315 -230.42709 876.25 -230.6875 C 876.96581 -230.94694 877.95435 -231.25474 878.59375 -231.78125 C 880.51795 -231.54176 882.34165 -231.55672 883.78125 -231.78125 C 886.90767 -232.26887 888.9358 -232.48192 890.9375 -232.75 C 892.93921 -233.01807 893.42625 -233.69514 894.53125 -233.84375 C 895.67767 -233.99793 896.8071 -233.54218 900.875 -234.0625 C 904.94281 -234.58282 906.43525 -234.75823 907.15625 -235 C 907.89337 -235.24714 908.95435 -235.58623 909.59375 -236.125 C 911.64375 -235.78947 913.56745 -235.72704 915.09375 -235.90625 C 918.23595 -236.27521 920.27375 -236.46561 922.28125 -236.6875 C 923.89207 -236.86552 924.5459 -237.2957 925.3125 -237.53125 C 925.55341 -237.61677 925.80655 -237.68685 926.09375 -237.71875 C 927.24345 -237.84647 928.39505 -237.3721 932.46875 -237.84375 C 936.54245 -238.3154 938.0278 -238.45435 938.75 -238.6875 C 939.46941 -238.91977 940.45025 -239.16096 941.09375 -239.65625 C 943.03005 -239.32279 944.8638 -239.25201 946.3125 -239.40625 C 949.45851 -239.7412 951.49 -239.92484 953.5 -240.125 C 955.50991 -240.32514 955.98415 -240.95139 957.09375 -241.0625 C 958.24485 -241.17778 959.39025 -240.69744 963.46875 -241.125 C 967.54725 -241.55256 969.05765 -241.68709 969.78125 -241.90625 C 970.52047 -242.13011 971.57685 -242.4195 972.21875 -242.9375 C 974.27575 -242.53883 976.2206 -242.4441 977.75 -242.59375 C 980.89871 -242.90185 982.9258 -243.067 984.9375 -243.25 C 986.55151 -243.39682 987.20055 -243.81055 987.96875 -244.03125 C 988.21005 -244.11211 988.4623 -244.16116 988.75 -244.1875 C 989.90211 -244.29295 991.0429 -243.79475 995.125 -244.1875 C 999.20711 -244.58025 1000.7139 -244.71834 1001.4375 -244.9375 C 1002.1584 -245.15583 1003.1371 -245.3852 1003.7812 -245.875 C 1005.7193 -245.52501 1007.5501 -245.42062 1009 -245.5625 C 1012.1487 -245.8706 1014.1758 -246.03575 1016.1875 -246.21875 C 1018.1991 -246.40174 1018.7017 -247.05677 1019.8125 -247.15625 C 1020.9648 -247.25948 1022.1047 -246.77142 1026.1875 -247.15625 C 1030.2704 -247.54107 1031.7762 -247.65725 1032.5 -247.875 C 1033.2393 -248.09743 1034.2956 -248.38949 1034.9375 -248.90625 C 1036.9949 -248.50448 1038.9404 -248.40292 1040.4688 -248.5625 C 1043.6153 -248.89102 1045.6458 -249.0852 1047.6562 -249.28125 C 1049.2692 -249.43854 1049.9219 -249.91273 1050.6875 -250.15625 C 1050.9282 -250.24429 1051.1507 -250.27762 1051.4375 -250.3125 C 1052.5858 -250.4522 1053.7542 -249.97259 1057.8125 -250.5625 C 1061.8708 -251.15242 1063.3743 -251.33964 1064.0938 -251.59375 C 1064.8104 -251.84691 1065.7684 -252.15182 1066.4062 -252.6875 C 1068.3259 -252.47556 1070.1262 -252.53609 1071.5625 -252.78125 C 1074.6816 -253.31365 1076.6741 -253.70986 1078.6562 -254.09375 C 1080.6383 -254.47762 1081.1305 -255.1334 1082.2188 -255.375 C 1083.3475 -255.62566 1084.489 -255.25871 1088.4688 -256.25 C 1092.4483 -257.24127 1093.8983 -257.6693 1094.5938 -258.03125 C 1095.316 -258.40725 1096.3555 -258.90183 1096.9688 -259.5625 C 1098.9317 -259.57454 1100.7625 -259.85355 1102.1875 -260.40625 C 1105.1387 -261.55085 1107.0607 -262.27567 1108.875 -263.15625 C 1110.3307 -263.86277 1111.1941 -264.85828 1111.4062 -265.15625 C 1111.6185 -265.4542 1111.5051 -265.8848 1111.5312 -265.90625 C 1111.5742 -265.94148 1111.8716 -266.00028 1112.0312 -266.34375 C 1112.8902 -268.19082 1114.3544 -271.97139 1114.4688 -272.65625 C 1114.5825 -273.33839 1114.6368 -274.00902 1114.6875 -274.40625 C 1114.7169 -274.63575 1114.5404 -275.28515 1114.5625 -275.34375 C 1114.5934 -275.42579 1114.8508 -275.59432 1114.9062 -275.84375 C 1115.1725 -277.04206 1114.9953 -278.05111 1114.7812 -279.46875 C 1114.5673 -280.88638 1113.8096 -284.08338 1113.1562 -284.9375 C 1112.4973 -285.79922 1111.9314 -285.94801 1111.4062 -285.9375 z "
+         style="fill:#bcb786;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+         id="path7423"
+         d="M 1111.4062,-285.9375 L 1107.4688,-284.0625 C 1107.4283,-284.05228 1107.3692,-284.04201 1107.3438,-284.03125 C 1106.925,-283.8184 1107.1791,-283.93067 1106.6875,-283.71875 C 1106.2014,-283.50919 1104.9499,-283.13456 1102.5938,-282.25 C 1099.2626,-280.99942 1096.7895,-280.10016 1095.5938,-279.1875 C 1094.0576,-279.16623 1091.8733,-278.95419 1089.9375,-278.46875 C 1086.956,-277.72108 1085.0823,-277.29474 1083.1875,-276.875 C 1081.2927,-276.45527 1081.512,-276.23281 1080.3125,-276 C 1079.0159,-275.74833 1078.5911,-276.00899 1074.875,-275.21875 C 1071.3851,-274.4766 1065.9802,-273.28768 1064.7188,-272.53125 C 1063.1348,-272.71203 1060.8513,-272.85303 1058.875,-272.5625 C 1055.8346,-272.11554 1053.9588,-271.88974 1052.0312,-271.65625 C 1051.3758,-271.57687 1050.9902,-271.45547 1050.6875,-271.375 C 1050.2613,-271.24334 1050.0017,-271.11498 1049.3125,-271.03125 C 1048.0009,-270.87188 1047.5503,-271.18808 1043.7812,-270.75 C 1040.2273,-270.33691 1034.7758,-269.47718 1033.5312,-268.8125 C 1031.9322,-269.10979 1029.6735,-269.34669 1027.6875,-269.15625 C 1024.6287,-268.86293 1022.7155,-268.67226 1020.7812,-268.5 C 1018.847,-268.32773 1019.0926,-268.07763 1017.875,-267.96875 C 1016.5588,-267.85105 1016.1152,-268.13238 1012.3438,-267.71875 C 1008.8017,-267.3303 1003.3359,-266.50948 1002.0625,-265.84375 C 1000.4636,-266.13844 998.1753,-266.35076 996.1875,-266.15625 C 993.12921,-265.857 991.2463,-265.67601 989.3125,-265.5 C 988.65501,-265.44015 988.27245,-265.32144 987.96875,-265.25 C 987.54105,-265.13104 987.28525,-265.03193 986.59375,-264.96875 C 985.27775,-264.84849 984.834,-265.16363 981.0625,-264.75 C 977.50631,-264.35998 972.0569,-263.51084 970.8125,-262.84375 C 969.21381,-263.13793 966.95265,-263.36747 964.96875,-263.15625 C 961.91305,-262.83092 959.9947,-262.63001 958.0625,-262.4375 C 956.13031,-262.24499 956.37275,-261.99662 955.15625,-261.875 C 953.84137,-261.74353 953.3932,-262.03954 949.625,-261.59375 C 946.08611,-261.17509 940.6473,-260.30158 939.375,-259.625 C 937.77741,-259.90604 935.51505,-260.04543 933.53125,-259.8125 C 930.47927,-259.45413 928.58625,-259.24464 926.65625,-259.03125 C 926.00007,-258.95869 925.6156,-258.85856 925.3125,-258.78125 C 924.88571,-258.65402 924.6276,-258.51405 923.9375,-258.4375 C 922.62411,-258.29181 922.17015,-258.61152 918.40625,-258.125 C 914.85737,-257.66624 909.4276,-256.70598 908.1875,-256 C 906.59441,-256.24424 904.3537,-256.38135 902.375,-256.125 C 899.32741,-255.73018 897.4243,-255.47655 895.5,-255.21875 C 893.57571,-254.96096 893.7739,-254.72522 892.5625,-254.5625 C 891.25301,-254.3866 890.8153,-254.66688 887.0625,-254.09375 C 883.53821,-253.55551 878.1393,-252.39458 876.875,-251.65625 C 875.28751,-251.85979 873.0295,-251.91098 871.0625,-251.5625 C 868.03631,-251.02638 866.1636,-250.70081 864.25,-250.375 C 863.59941,-250.26423 863.2363,-250.10406 862.9375,-250 C 862.51681,-249.83512 862.27405,-249.6687 861.59375,-249.53125 C 860.29905,-249.26966 859.86665,-249.53745 856.15625,-248.71875 C 852.65777,-247.9468 847.31035,-246.33582 846.09375,-245.5 C 844.53085,-245.57745 842.33625,-245.41472 840.40625,-244.90625 C 837.43387,-244.12312 835.58855,-243.67416 833.71875,-243.15625 C 831.84875,-242.63835 832.0521,-242.38897 830.875,-242.0625 C 829.60251,-241.7096 829.17795,-241.95541 825.53125,-240.875 C 822.10657,-239.86037 816.88185,-237.94183 815.65625,-237.03125 C 814.11747,-237.01851 811.93645,-236.75903 810.03125,-236.15625 C 807.10027,-235.22891 805.2809,-234.69783 803.4375,-234.09375 C 802.81071,-233.88837 802.44585,-233.70117 802.15625,-233.5625 C 801.74867,-233.34889 801.50295,-233.15375 800.84375,-232.9375 C 799.58925,-232.52596 799.1576,-232.74846 795.5625,-231.5 C 792.17261,-230.32283 786.96755,-228.2863 785.78125,-227.34375 C 784.25737,-227.28408 782.1312,-226.94888 780.25,-226.28125 C 777.35261,-225.25296 775.55095,-224.60577 773.71875,-223.96875 C 771.88655,-223.33174 772.0909,-223.12021 770.9375,-222.71875 C 769.69071,-222.28479 769.27395,-222.51903 765.71875,-221.15625 C 762.38005,-219.87645 757.23165,-217.6737 756.03125,-216.6875 C 754.52407,-216.57981 752.39555,-216.1887 750.53125,-215.46875 C 747.66307,-214.36115 745.90735,-213.68719 744.09375,-213 C 743.47705,-212.76637 743.0973,-212.55797 742.8125,-212.40625 C 742.81251,-212.40625 742.8125,-212.37673 742.8125,-212.375 L 734.8125,-209.1875 L 736.625,-194.46875 C 736.36701,-194.52956 742.8125,-191.15625 742.8125,-191.15625 C 743.03891,-191.30093 743.26145,-191.42886 743.53125,-191.53125 C 744.61177,-191.94123 745.70285,-191.74702 749.53125,-193.21875 C 753.35977,-194.69049 754.7553,-195.22373 755.4375,-195.625 C 756.11711,-196.02478 757.04925,-196.50437 757.65625,-197.15625 C 759.48317,-197.294 761.22705,-197.64948 762.59375,-198.15625 C 765.56175,-199.25677 767.4691,-199.96244 769.375,-200.625 C 771.28081,-201.28754 771.72915,-202.03987 772.78125,-202.40625 C 773.87287,-202.78636 774.97635,-202.57163 778.84375,-203.9375 C 782.71115,-205.30336 784.1269,-205.76458 784.8125,-206.15625 C 785.51361,-206.55677 786.5133,-207.08923 787.125,-207.75 C 789.09581,-207.80466 790.94195,-208.13463 792.40625,-208.625 C 795.40777,-209.63008 797.3324,-210.24671 799.25,-210.875 C 800.78861,-211.3791 801.42415,-211.92177 802.15625,-212.3125 C 802.38647,-212.44681 802.63215,-212.56623 802.90625,-212.65625 C 804.00457,-213.01673 805.0877,-212.73762 809,-213.96875 C 812.91231,-215.19988 814.366,-215.6417 815.0625,-216 C 815.75641,-216.35697 816.6926,-216.79261 817.3125,-217.40625 C 819.17771,-217.42891 820.94835,-217.67308 822.34375,-218.09375 C 825.37415,-219.00729 827.33615,-219.52385 829.28125,-220.0625 C 831.22637,-220.60114 831.70745,-221.32702 832.78125,-221.625 C 833.89527,-221.93415 835.00125,-221.61761 838.96875,-222.65625 C 842.93625,-223.69488 844.38625,-224.08898 845.09375,-224.40625 C 845.82855,-224.73584 846.90765,-225.15997 847.53125,-225.78125 C 849.52907,-225.66525 851.3887,-225.80134 852.875,-226.15625 C 855.95311,-226.89125 857.9584,-227.25719 859.9375,-227.65625 C 861.52541,-227.97643 862.1818,-228.4468 862.9375,-228.75 C 863.17501,-228.8568 863.4044,-228.94276 863.6875,-229 C 864.82091,-229.22919 865.99215,-228.79107 870.03125,-229.5 C 874.07067,-230.20893 875.5315,-230.42709 876.25,-230.6875 C 876.96581,-230.94694 877.95435,-231.25474 878.59375,-231.78125 C 880.51795,-231.54176 882.34165,-231.55672 883.78125,-231.78125 C 886.90767,-232.26887 888.9358,-232.48192 890.9375,-232.75 C 892.93921,-233.01807 893.42625,-233.69514 894.53125,-233.84375 C 895.67767,-233.99793 896.8071,-233.54218 900.875,-234.0625 C 904.94281,-234.58282 906.43525,-234.75823 907.15625,-235 C 907.89337,-235.24714 908.95435,-235.58623 909.59375,-236.125 C 911.64375,-235.78947 913.56745,-235.72704 915.09375,-235.90625 C 918.23595,-236.27521 920.27375,-236.46561 922.28125,-236.6875 C 923.89207,-236.86552 924.5459,-237.2957 925.3125,-237.53125 C 925.55341,-237.61677 925.80655,-237.68685 926.09375,-237.71875 C 927.24345,-237.84647 928.39505,-237.3721 932.46875,-237.84375 C 936.54245,-238.3154 938.0278,-238.45435 938.75,-238.6875 C 939.46941,-238.91977 940.45025,-239.16096 941.09375,-239.65625 C 943.03005,-239.32279 944.8638,-239.25201 946.3125,-239.40625 C 949.45851,-239.7412 951.49,-239.92484 953.5,-240.125 C 955.50991,-240.32514 955.98415,-240.95139 957.09375,-241.0625 C 958.24485,-241.17778 959.39025,-240.69744 963.46875,-241.125 C 967.54725,-241.55256 969.05765,-241.68709 969.78125,-241.90625 C 970.52047,-242.13011 971.57685,-242.4195 972.21875,-242.9375 C 974.27575,-242.53883 976.2206,-242.4441 977.75,-242.59375 C 980.89871,-242.90185 982.9258,-243.067 984.9375,-243.25 C 986.55151,-243.39682 987.20055,-243.81055 987.96875,-244.03125 C 988.21005,-244.11211 988.4623,-244.16116 988.75,-244.1875 C 989.90211,-244.29295 991.0429,-243.79475 995.125,-244.1875 C 999.20711,-244.58025 1000.7139,-244.71834 1001.4375,-244.9375 C 1002.1584,-245.15583 1003.1371,-245.3852 1003.7812,-245.875 C 1005.7193,-245.52501 1007.5501,-245.42062 1009,-245.5625 C 1012.1487,-245.8706 1014.1758,-246.03575 1016.1875,-246.21875 C 1018.1991,-246.40174 1018.7017,-247.05677 1019.8125,-247.15625 C 1020.9648,-247.25948 1022.1047,-246.77142 1026.1875,-247.15625 C 1030.2704,-247.54107 1031.7762,-247.65725 1032.5,-247.875 C 1033.2393,-248.09743 1034.2956,-248.38949 1034.9375,-248.90625 C 1036.9949,-248.50448 1038.9404,-248.40292 1040.4688,-248.5625 C 1043.6153,-248.89102 1045.6458,-249.0852 1047.6562,-249.28125 C 1049.2692,-249.43854 1049.9219,-249.91273 1050.6875,-250.15625 C 1050.9282,-250.24429 1051.1507,-250.27762 1051.4375,-250.3125 C 1052.5858,-250.4522 1053.7542,-249.97259 1057.8125,-250.5625 C 1061.8708,-251.15242 1063.3743,-251.33964 1064.0938,-251.59375 C 1064.8104,-251.84691 1065.7684,-252.15182 1066.4062,-252.6875 C 1068.3259,-252.47556 1070.1262,-252.53609 1071.5625,-252.78125 C 1074.6816,-253.31365 1076.6741,-253.70986 1078.6562,-254.09375 C 1080.6383,-254.47762 1081.1305,-255.1334 1082.2188,-255.375 C 1083.3475,-255.62566 1084.489,-255.25871 1088.4688,-256.25 C 1092.4483,-257.24127 1093.8983,-257.6693 1094.5938,-258.03125 C 1095.316,-258.40725 1096.3555,-258.90183 1096.9688,-259.5625 C 1098.9317,-259.57454 1100.7625,-259.85355 1102.1875,-260.40625 C 1105.1387,-261.55085 1107.0607,-262.27567 1108.875,-263.15625 C 1110.3307,-263.86277 1111.1941,-264.85828 1111.4062,-265.15625 C 1111.6185,-265.4542 1111.5051,-265.8848 1111.5312,-265.90625 C 1111.5742,-265.94148 1111.8716,-266.00028 1112.0312,-266.34375 C 1112.8902,-268.19082 1114.3544,-271.97139 1114.4688,-272.65625 C 1114.5825,-273.33839 1114.6368,-274.00902 1114.6875,-274.40625 C 1114.7169,-274.63575 1114.5404,-275.28515 1114.5625,-275.34375 C 1114.5934,-275.42579 1114.8508,-275.59432 1114.9062,-275.84375 C 1115.1725,-277.04206 1114.9953,-278.05111 1114.7812,-279.46875 C 1114.5673,-280.88638 1113.8096,-284.08338 1113.1562,-284.9375 C 1112.4973,-285.79922 1111.9314,-285.94801 1111.4062,-285.9375 z"
+         transform="translate(8.0045714e-2,-3.125e-2)" />
+    </clipPath>
+    <filter
+       inkscape:collect="always"
+       id="filter7578"
+       x="-0.08160872"
+       width="1.1632174"
+       y="-0.22659944"
+       height="1.4531989">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="2.437399"
+         id="feGaussianBlur7580" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter7594"
+       x="-0.040804356"
+       width="1.0816087"
+       y="-0.11329972"
+       height="1.2265995">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.2186995"
+         id="feGaussianBlur7596" />
+    </filter>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath7606">
+      <path
+         id="path7608"
+         d="M 1049.205,-282.26672 L 1049.1152,-282.25891 C 1047.7278,-281.37446 1042.5119,-280.65171 1042.4862,-272.73547 C 1042.462,-265.31022 1057.4991,-255.64401 1059.6425,-254.64172 C 1061.3727,-253.83263 1063.2341,-253.23296 1065.0488,-252.92297 L 1066.4862,-252.70422 C 1068.4059,-252.49228 1070.2062,-252.55281 1071.6425,-252.79797 C 1074.7616,-253.33037 1076.7541,-253.72658 1078.7362,-254.11047 C 1080.7183,-254.49434 1081.2105,-255.15012 1082.2988,-255.39172 C 1083.4275,-255.64238 1084.569,-255.27543 1088.5488,-256.26672 C 1092.5283,-257.258 1093.9782,-257.68602 1094.6738,-258.04797 C 1095.396,-258.42398 1096.4355,-258.91855 1097.0488,-259.57922 C 1099.0117,-259.59127 1100.8425,-259.87027 1102.2675,-260.42297 C 1105.2187,-261.56758 1107.1407,-262.29239 1108.955,-263.17297 C 1110.4107,-263.8795 1111.2741,-264.875 1111.4862,-265.17297 C 1111.6985,-265.47093 1111.5852,-265.90152 1111.6112,-265.92297 C 1111.6542,-265.95821 1111.9517,-266.017 1112.1112,-266.36047 C 1112.9702,-268.20755 1114.4344,-271.98811 1114.5488,-272.67297 C 1114.6625,-273.35512 1114.7168,-274.02574 1114.7675,-274.42297 C 1114.7969,-274.65248 1114.6204,-275.30187 1114.6425,-275.36047 C 1114.6734,-275.44252 1114.9308,-275.61104 1114.9862,-275.86047 C 1115.2525,-277.05879 1115.0754,-278.06783 1114.8612,-279.48547 C 1114.6473,-280.90311 1113.8896,-284.1001 1113.2362,-284.95422 C 1112.8168,-285.50279 1112.4369,-285.74672 1112.08,-285.86047 C 1112.0129,-285.87776 1111.9561,-285.90721 1111.8925,-285.92297 C 1111.8715,-285.92695 1111.8508,-285.91983 1111.83,-285.92297 C 1111.5184,-285.99847 1111.2215,-286.08164 1110.6738,-286.14172 C 1109.6883,-286.24984 1108.2491,-286.40112 1106.705,-286.39172 C 1106.1903,-286.38859 1105.6679,-286.34408 1105.1425,-286.29797 C 1101.5836,-285.98569 1096.1327,-285.30689 1094.9238,-284.67297 C 1093.2907,-285.00699 1090.9756,-285.2852 1088.9862,-285.14172 C 1085.9222,-284.92075 1084.0185,-284.79953 1082.08,-284.67297 C 1080.1416,-284.54642 1080.3939,-284.28433 1079.1738,-284.20422 C 1077.8547,-284.11762 1077.3869,-284.42747 1073.6112,-284.11047 C 1070.0655,-283.81275 1064.6306,-283.1173 1063.3925,-282.48547 C 1061.7591,-282.81998 1059.4466,-283.09786 1057.455,-282.95422 C 1054.3908,-282.73324 1052.4872,-282.58078 1050.5488,-282.45422 C 1049.8896,-282.41119 1049.5064,-282.33029 1049.205,-282.26672 z"
+         style="opacity:0.82448976;fill:#bcb786;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+    </clipPath>
+    <filter
+       inkscape:collect="always"
+       id="filter7610"
+       x="-0.021942979"
+       width="1.0438859"
+       y="-0.10017137"
+       height="1.2003427">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.57530213"
+         id="feGaussianBlur7612" />
+    </filter>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath7616">
+      <path
+         id="path7618"
+         d="M 205.47016,-408.97318 L 205.38003,-408.97164 C 203.9344,-408.18598 198.68082,-407.82829 198.10378,-399.93307 C 197.56244,-392.52754 211.88973,-381.83741 213.95811,-380.68826 C 215.62775,-379.76062 217.44286,-379.03275 219.23156,-378.59711 L 220.65023,-378.27877 C 222.5505,-377.93363 224.35065,-377.86862 225.80054,-378.01314 C 228.94914,-378.32698 230.9644,-378.58345 232.96843,-378.82834 C 234.97245,-379.07322 235.50913,-379.69312 236.61162,-379.85833 C 237.75504,-380.02976 238.86821,-379.58419 242.90739,-380.29586 C 246.94627,-381.00755 248.42246,-381.33354 249.14158,-381.64616 C 249.88822,-381.97095 250.95964,-382.39191 251.61747,-383.00826 C 253.57644,-382.88355 255.42223,-383.03435 256.88227,-383.48645 C 259.90603,-384.42272 261.87384,-385.01189 263.74507,-385.76396 C 265.24645,-386.36738 266.17709,-387.30032 266.40943,-387.58279 C 266.64197,-387.86524 266.55894,-388.30268 266.58637,-388.32227 C 266.63172,-388.35443 266.93259,-388.39235 267.11563,-388.72388 C 268.1012,-390.50664 269.82518,-394.17603 269.987,-394.85126 C 270.14794,-395.52383 270.24882,-396.18904 270.32707,-396.58177 C 270.37238,-396.80868 270.24154,-397.46878 270.26767,-397.5257 C 270.30421,-397.6054 270.57272,-397.75558 270.64536,-398.00055 C 270.99449,-399.17741 270.8881,-400.19633 270.77316,-401.62545 C 270.65853,-403.05454 270.12535,-406.29655 269.53303,-407.1941 C 269.15286,-407.77056 268.79088,-408.04035 268.44277,-408.17869 C 268.37703,-408.20061 268.32242,-408.23394 268.26007,-408.2541 C 268.2394,-408.25953 268.21826,-408.25387 268.19773,-408.25845 C 267.89214,-408.35547 267.60176,-408.45912 267.05957,-408.5572 C 266.084,-408.7337 264.65883,-408.98486 263.11782,-409.08304 C 262.60416,-409.11577 262.07992,-409.10775 261.55259,-409.09835 C 257.98058,-409.03472 252.49564,-408.73725 251.24552,-408.18907 C 249.63965,-408.63604 247.34955,-409.07483 245.35499,-409.07027 C 242.28304,-409.06325 240.37552,-409.07493 238.43292,-409.0837 C 236.49041,-409.09248 236.72384,-408.81345 235.50112,-408.81852 C 234.1792,-408.82401 233.73411,-409.16569 229.9455,-409.11245 C 226.38768,-409.06243 220.91754,-408.74723 219.63844,-408.20318 C 218.0323,-408.65065 215.74477,-409.08893 213.74801,-409.08436 C 210.67586,-409.07735 208.76626,-409.05786 206.82375,-409.06662 C 206.16316,-409.06961 205.77525,-409.0156 205.47016,-408.97318 z"
+         style="opacity:0.82448976;fill:#bcb786;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+    </clipPath>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7622"
+       id="linearGradient7708"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-19.091883,4.2426407)"
+       x1="774.97668"
+       y1="-211.87105"
+       x2="755.11584"
+       y2="-202.67865" />
+    <mask
+       maskUnits="userSpaceOnUse"
+       id="mask7704">
+      <path
+         style="fill:url(#linearGradient7708);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 718.40812,-224.31217 L 751.65812,-168.31217 L 1027.6581,-192.31217 L 1187.1581,-240.56217 L 1120.6581,-323.31217 L 718.40812,-224.31217 z"
+         id="path7706" />
+    </mask>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8430"
+       id="radialGradient7904"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.3324832,0.9022288,-0.9582407,-0.3531242,305.29227,19.909497)"
+       cx="142.95833"
+       cy="107.09234"
+       fx="142.95833"
+       fy="107.09234"
+       r="66.981766" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3317"
+       id="radialGradient7906"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0036478,-1.0345492e-7,1.7124628e-7,1.6613125,-160.53487,-96.205369)"
+       cx="317.78754"
+       cy="129.65378"
+       fx="317.78754"
+       fy="129.65378"
+       r="47.863216" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8398"
+       id="radialGradient7908"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.0747661,-0.1577957,0.2382425,3.1325183,-550.77432,-65.728909)"
+       cx="325.30847"
+       cy="80.909554"
+       fx="325.30847"
+       fy="80.909554"
+       r="26.937988" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath8209">
+      <path
+         sodipodi:nodetypes="czcc"
+         id="path8211"
+         d="M 734.03125,519.49186 C 734.03125,519.49186 750.78638,556.50992 762.73266,573.44581 C 774.67895,590.3817 815.45982,629.49186 815.45982,629.49186 L 816.05699,490.90211"
+         style="opacity:1;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    </clipPath>
+    <filter
+       inkscape:collect="always"
+       id="filter8225">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="10.661912"
+         id="feGaussianBlur8227" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter8333">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="7.18"
+         id="feGaussianBlur8335" />
+    </filter>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath8338">
+      <path
+         sodipodi:nodetypes="czzzzzzcccccccccczczz"
+         id="path8340"
+         d="M 266.27183,924.57185 C 264.86456,943.37307 265.12693,957.32289 268.35357,973.87513 C 271.58023,990.42751 284.75966,1019.7825 288.68798,1037.0589 C 292.61419,1054.326 291.38211,1075.3686 276.22854,1088.2071 C 260.91093,1101.1846 234.17727,1109.8061 208.39624,1103.9409 C 182.61518,1098.0756 138.84716,1054.7175 119.80605,1033.7126 C 100.6939,1012.6293 56.045182,939.86193 41.867507,909.4368 C 27.689835,879.01168 29.207902,872.71823 33.747792,863.90708 C 24.38107,839.38658 21.33408,813.84026 0.035334479,788.33044 C 30.360814,791.44487 43.915624,815.28676 60.161024,835.47019 C 54.631128,787.39416 42.106309,771.05368 31.787072,744.74589 C 61.781367,750.82754 82.366432,776.61828 95.766855,817.45839 C 105.32101,813.54047 114.00462,808.08545 125.95427,808.39719 C 114.65677,766.70139 108.0048,738.48134 89.267014,707.32725 C 142.70898,712.99757 172.92404,787.96657 168.23844,795.28805 C 178.21641,793.04406 187.24409,788.75767 198.67497,789.63638 C 187.426,751.28935 177.62715,712.76848 195.01526,670.98819 C 195.01526,670.98819 243.30204,736.42507 249.40491,756.79397 C 255.50779,777.16287 250.92373,795.49448 250.92373,795.49448 C 250.92373,795.49448 267.8833,826.57978 271.21765,846.58862 C 274.59075,866.82996 267.68496,905.69193 266.27183,924.57185 z"
+         style="opacity:1;fill:#ada469;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+    </clipPath>
+    <filter
+       inkscape:collect="always"
+       id="filter8354">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="6.82"
+         id="feGaussianBlur8356" />
+    </filter>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath8359">
+      <path
+         sodipodi:nodetypes="czzzzzzcccccccccczczz"
+         id="path8361"
+         d="M 266.27183,924.57185 C 264.86456,943.37307 265.12693,957.32289 268.35357,973.87513 C 271.58023,990.42751 284.75966,1019.7825 288.68798,1037.0589 C 292.61419,1054.326 291.38211,1075.3686 276.22854,1088.2071 C 260.91093,1101.1846 234.17727,1109.8061 208.39624,1103.9409 C 182.61518,1098.0756 138.84716,1054.7175 119.80605,1033.7126 C 100.6939,1012.6293 56.045182,939.86193 41.867507,909.4368 C 27.689835,879.01168 29.207902,872.71823 33.747792,863.90708 C 24.38107,839.38658 21.33408,813.84026 0.035334479,788.33044 C 30.360814,791.44487 43.915624,815.28676 60.161024,835.47019 C 54.631128,787.39416 42.106309,771.05368 31.787072,744.74589 C 61.781367,750.82754 82.366432,776.61828 95.766855,817.45839 C 105.32101,813.54047 114.00462,808.08545 125.95427,808.39719 C 114.65677,766.70139 108.0048,738.48134 89.267014,707.32725 C 142.70898,712.99757 172.92404,787.96657 168.23844,795.28805 C 178.21641,793.04406 187.24409,788.75767 198.67497,789.63638 C 187.426,751.28935 177.62715,712.76848 195.01526,670.98819 C 195.01526,670.98819 243.30204,736.42507 249.40491,756.79397 C 255.50779,777.16287 250.92373,795.49448 250.92373,795.49448 C 250.92373,795.49448 267.8833,826.57978 271.21765,846.58862 C 274.59075,866.82996 267.68496,905.69193 266.27183,924.57185 z"
+         style="opacity:1;fill:#ada469;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+    </clipPath>
+    <filter
+       inkscape:collect="always"
+       id="filter8379"
+       x="-0.14413793"
+       width="1.288276"
+       y="-0.10278689"
+       height="1.2055738">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="7.389266"
+         id="feGaussianBlur8381" />
+    </filter>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath8392">
+      <path
+         sodipodi:nodetypes="czzzzzzcccccccccczczz"
+         id="path8394"
+         d="M 760.16396,935.83377 C 766.95806,954.73656 770.65765,969.13346 772.05426,987.04566 C 773.45088,1004.958 768.27158,1038.8465 769.1538,1057.7018 C 770.03555,1076.547 777.28749,1097.8008 796.49843,1106.6707 C 815.9173,1115.6365 845.81767,1116.882 870.61827,1103.5251 C 895.41887,1090.1681 928.01929,1033.1996 941.59253,1006.2164 C 955.21638,979.13246 980.3536,891.71903 986.25333,856.44781 C 992.15306,821.1766 988.80387,815.14704 981.63585,807.39232 C 984.27615,779.55217 980.13613,752.45689 994.74554,720.20614 C 964.49653,732.03184 957.36325,760.36684 946.42665,785.71122 C 938.42574,734.77829 946.63581,714.43803 949.74554,684.49186 C 920.68078,699.26977 906.88403,731.60588 904.74554,777.349 C 893.82159,776.0448 883.3541,772.91477 871.17411,776.63471 C 870.91007,730.61137 869.71055,699.7453 880.08474,662.42822 C 826.82927,683.45508 817.13746,769.02232 824.03125,775.20614 C 813.14843,775.74114 802.66017,773.90884 791.17411,778.06329 C 791.81303,735.49194 790.91365,693.15468 761.17411,655.20614 C 761.17411,655.20614 730.21605,736.12848 729.74554,758.77757 C 729.27503,781.42666 739.19713,798.94345 739.19713,798.94345 C 739.19713,798.94345 730.62906,835.68396 732.89854,857.17568 C 735.19439,878.91714 753.34144,916.85185 760.16396,935.83377 z"
+         style="opacity:1;fill:#ada469;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+    </clipPath>
+    <filter
+       inkscape:collect="always"
+       id="filter8404"
+       x="-0.090268657"
+       width="1.1805373"
+       y="-0.10250848"
+       height="1.205017">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="5.3457272"
+         id="feGaussianBlur8406" />
+    </filter>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath8417">
+      <path
+         sodipodi:nodetypes="czzzzzzcccccccccczczz"
+         id="path8419"
+         d="M 760.16396,935.83377 C 766.95806,954.73656 770.65765,969.13346 772.05426,987.04566 C 773.45088,1004.958 768.27158,1038.8465 769.1538,1057.7018 C 770.03555,1076.547 777.28749,1097.8008 796.49843,1106.6707 C 815.9173,1115.6365 845.81767,1116.882 870.61827,1103.5251 C 895.41887,1090.1681 928.01929,1033.1996 941.59253,1006.2164 C 955.21638,979.13246 980.3536,891.71903 986.25333,856.44781 C 992.15306,821.1766 988.80387,815.14704 981.63585,807.39232 C 984.27615,779.55217 980.13613,752.45689 994.74554,720.20614 C 964.49653,732.03184 957.36325,760.36684 946.42665,785.71122 C 938.42574,734.77829 946.63581,714.43803 949.74554,684.49186 C 920.68078,699.26977 906.88403,731.60588 904.74554,777.349 C 893.82159,776.0448 883.3541,772.91477 871.17411,776.63471 C 870.91007,730.61137 869.71055,699.7453 880.08474,662.42822 C 826.82927,683.45508 817.13746,769.02232 824.03125,775.20614 C 813.14843,775.74114 802.66017,773.90884 791.17411,778.06329 C 791.81303,735.49194 790.91365,693.15468 761.17411,655.20614 C 761.17411,655.20614 730.21605,736.12848 729.74554,758.77757 C 729.27503,781.42666 739.19713,798.94345 739.19713,798.94345 C 739.19713,798.94345 730.62906,835.68396 732.89854,857.17568 C 735.19439,878.91714 753.34144,916.85185 760.16396,935.83377 z"
+         style="opacity:1;fill:#ada469;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+    </clipPath>
+  </defs>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="Shadow">
+    <path
+       style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter11361);enable-background:new"
+       d="M 304.64285,526.6479 C 294.64285,527.00505 286.42857,529.50504 286.42857,529.50504 L 293.92857,535.57647 L 304.28571,539.1479 L 320.35714,539.50504 L 342.85714,534.1479 L 350.71428,535.21933 L 371.07143,533.07647 L 360.71428,539.86219 C 366.17351,538.83858 378.10757,543.4313 370.35714,545.21933 C 368.61714,545.62075 384.28571,540.57648 384.28571,540.57648 L 386.78571,535.93361 L 390.35714,526.6479 L 401.78571,526.6479 L 419.99999,522.00504 L 423.57143,517.00505 L 407.49999,518.07647 L 395.35714,520.21933 L 380.71428,515.21933 L 310.02218,531.92707 L 304.64285,526.6479 z"
+       id="path10326"
+       sodipodi:nodetypes="cccccccccsccccccccccc"
+       transform="matrix(10.726753,0,0,10.726753,-2882.1235,-4565.4583)"
+       inkscape:export-filename="/home/cheeseness/Documents/LCA09/mascot/tuz_new.png"
+       inkscape:export-xdpi="142.10527"
+       inkscape:export-ydpi="142.10527" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer20"
+     inkscape:label="New Ear">
+    <g
+       style="opacity:1;display:inline;enable-background:new"
+       id="g7882"
+       transform="matrix(0.71084,-0.1937433,0.262963,0.9648058,503.68027,136.48399)">
+      <path
+         sodipodi:nodetypes="czzzzcc"
+         id="path7876"
+         d="M 245.12255,100.05344 C 245.12255,100.05344 197.99444,68.406519 177.9079,64.252501 C 157.86998,60.108538 139.435,60.934923 125.97426,77.859824 C 112.51352,94.784725 113.89687,139.12502 112.43872,164.82937 C 110.98057,190.53372 114.98817,235.00638 130.04332,253.49489 C 145.09848,271.98339 175.92966,267.07991 179.97027,274.90859 C 182.1831,279.19595 245.12255,100.05344 245.12255,100.05344 z"
+         style="opacity:1;fill:url(#radialGradient7904);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         sodipodi:nodetypes="czzzzzc"
+         id="path7878"
+         d="M 135.37935,82.017807 C 135.37935,82.017807 161.7229,83.95659 173.01242,95.920995 C 184.42736,108.01833 186.74699,117.25251 188.30828,133.65558 C 189.87165,150.08057 187.45871,162.0737 180.49446,169.69292 C 173.53021,177.31214 179.49017,189.27624 154.57841,181.76399 C 129.66665,174.25174 127.54617,153.98101 128.06318,135.45924 C 128.58039,116.93026 135.37935,82.017807 135.37935,82.017807 z"
+         style="opacity:1;fill:url(#radialGradient7906);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <path
+         sodipodi:nodetypes="czccssc"
+         id="path7880"
+         d="M 135.648,81.927211 C 135.648,81.927211 131.00335,98.292286 136.23625,110.49031 C 141.72419,123.28285 163.4605,154.75038 163.4605,165.14596 L 186.11675,160.14596 C 188.65893,153.17952 189.32727,144.3939 188.30425,133.64596 C 186.74296,117.24289 184.43795,108.02455 173.023,95.927211 C 163.36812,85.695164 141.42989,82.552354 135.648,81.927211 z"
+         style="opacity:1;fill:url(#radialGradient7908);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+    </g>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer21"
+     inkscape:label="Rendered2"
+     style="display:inline">
+    <path
+       style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 845.03125,1154.7776 C 840.74554,1155.4919 817.4031,1158.3957 787.17411,1164.7776 C 756.94512,1171.1595 729.86016,1169.7437 651.38803,1182.1072 C 571.53625,1194.688 557.32367,1224.6495 543.26578,1229.1715 C 528.56564,1233.9001 397.88839,1163.349 397.88839,1163.349 L 402.17411,1069.0633 C 402.17411,1069.0633 488.05962,1052.8624 514.31696,1035.4919 C 540.57431,1018.1214 559.89934,985.82588 573.60268,964.06329 C 587.30602,942.3007 606.45982,892.63471 606.45982,892.63471 L 845.03125,1154.7776 z"
+       id="path7917"
+       sodipodi:nodetypes="czzzcczzcc" />
+    <path
+       style="opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter8888);enable-background:accumulate"
+       d="M 332.34019,898.38549 L 299.60838,837.08593 L 261.99104,882.19239 C 264.16779,883.5095 267.76529,861.33636 307.59144,817.77531 L 332.34019,898.38549 z"
+       id="path7919"
+       clip-path="url(#clipPath8658)"
+       sodipodi:nodetypes="ccccc"
+       transform="translate(276,136)" />
+    <path
+       style="opacity:1;fill:url(#linearGradient2841);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter8892);enable-background:accumulate"
+       d="M 200.81833,863.03015 L 347.18943,811.41136 L 591.14127,1037.6855 L 349.31075,1177.6927 L 168.29141,1090.0114 L 200.81833,863.03015 z"
+       id="path7923"
+       clip-path="url(#clipPath2833)"
+       sodipodi:nodetypes="cccccc"
+       transform="translate(276,136)" />
+    <path
+       style="opacity:1;fill:#0f0f0f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 642.88839,640.13471 C 642.88839,640.13471 613.33433,680.70776 595.03125,714.42042 C 576.72816,748.13309 536.41016,840.77736 524.67411,885.49185 C 512.91471,930.29529 462.17411,1009.0633 462.17411,1009.0633 L 538.24554,1027.2776 C 538.24554,1027.2776 550.05266,1014.4542 569.31696,981.20614 C 588.58126,947.95806 629.67411,842.63471 629.67411,842.63471 L 642.88839,640.13471 z"
+       id="path7921"
+       sodipodi:nodetypes="czzcczcc" />
+    <path
+       style="opacity:0.4;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter8856);enable-background:accumulate"
+       d="M 430.28131,381.94122 C 423.21025,384.76965 194.10007,414.09303 194.10007,414.09303 L 154.46046,773.92607 L 244.65895,866.56568 L 296.98485,752.01438 L 397.45289,565.62246 L 430.28131,381.94122 z"
+       id="path7925"
+       sodipodi:nodetypes="ccccccc"
+       clip-path="url(#clipPath3665)"
+       transform="translate(276,136)" />
+    <path
+       style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 969.67051,1164.0346 C 969.67051,1164.0346 992.92679,1175.4283 1005.7383,1184.5107 C 1018.4357,1193.5122 1035.2107,1209.1598 1047.4307,1221.8712 C 1059.7362,1234.6714 1067.5434,1244.4699 1088.9634,1246.032 C 1110.3956,1247.5949 1142.2458,1237.2444 1162.2594,1221.3678 C 1182.2729,1205.4912 1207.9063,1152.135 1207.9063,1152.135 L 1080.7455,1009.0633"
+       id="path7927"
+       sodipodi:nodetypes="czzzzcc" />
+    <path
+       style="opacity:0.75;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter8860);enable-background:accumulate"
+       d="M 331.34019,641.50471 L 216.17367,835.36467 L 260.2153,925.96265 L 357.79603,732.21539 L 331.34019,641.50471 z"
+       id="path7929"
+       clip-path="url(#clipPath8642)"
+       sodipodi:nodetypes="ccccc"
+       transform="translate(276,136)" />
+    <g
+       style="opacity:1;display:inline;enable-background:new"
+       id="g7931"
+       transform="matrix(0.9934486,0.1142802,-0.1142802,0.9934486,-9.24324,588.09054)"
+       inkscape:transform-center-x="-347.89063"
+       inkscape:transform-center-y="-28.255779">
+      <path
+         style="opacity:1;fill:#bcb786;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+         d="M 1049.205,-282.26672 L 1049.1152,-282.25891 C 1047.7278,-281.37446 1042.5119,-280.65171 1042.4862,-272.73547 C 1042.462,-265.31022 1057.4991,-255.64401 1059.6425,-254.64172 C 1061.3727,-253.83263 1063.2341,-253.23296 1065.0488,-252.92297 L 1066.4862,-252.70422 C 1068.4059,-252.49228 1070.2062,-252.55281 1071.6425,-252.79797 C 1074.7616,-253.33037 1076.7541,-253.72658 1078.7362,-254.11047 C 1080.7183,-254.49434 1081.2105,-255.15012 1082.2988,-255.39172 C 1083.4275,-255.64238 1084.569,-255.27543 1088.5488,-256.26672 C 1092.5283,-257.258 1093.9782,-257.68602 1094.6738,-258.04797 C 1095.396,-258.42398 1096.4355,-258.91855 1097.0488,-259.57922 C 1099.0117,-259.59127 1100.8425,-259.87027 1102.2675,-260.42297 C 1105.2187,-261.56758 1107.1407,-262.29239 1108.955,-263.17297 C 1110.4107,-263.8795 1111.2741,-264.875 1111.4862,-265.17297 C 1111.6985,-265.47093 1111.5852,-265.90152 1111.6112,-265.92297 C 1111.6542,-265.95821 1111.9517,-266.017 1112.1112,-266.36047 C 1112.9702,-268.20755 1114.4344,-271.98811 1114.5488,-272.67297 C 1114.6625,-273.35512 1114.7168,-274.02574 1114.7675,-274.42297 C 1114.7969,-274.65248 1114.6204,-275.30187 1114.6425,-275.36047 C 1114.6734,-275.44252 1114.9308,-275.61104 1114.9862,-275.86047 C 1115.2525,-277.05879 1115.0754,-278.06783 1114.8612,-279.48547 C 1114.6473,-280.90311 1113.8896,-284.1001 1113.2362,-284.95422 C 1112.8168,-285.50279 1112.4369,-285.74672 1112.08,-285.86047 C 1112.0129,-285.87776 1111.9561,-285.90721 1111.8925,-285.92297 C 1111.8715,-285.92695 1111.8508,-285.91983 1111.83,-285.92297 C 1111.5184,-285.99847 1111.2215,-286.08164 1110.6738,-286.14172 C 1109.6883,-286.24984 1108.2491,-286.40112 1106.705,-286.39172 C 1106.1903,-286.38859 1105.6679,-286.34408 1105.1425,-286.29797 C 1101.5836,-285.98569 1096.1327,-285.30689 1094.9238,-284.67297 C 1093.2907,-285.00699 1090.9756,-285.2852 1088.9862,-285.14172 C 1085.9222,-284.92075 1084.0185,-284.79953 1082.08,-284.67297 C 1080.1416,-284.54642 1080.3939,-284.28433 1079.1738,-284.20422 C 1077.8547,-284.11762 1077.3869,-284.42747 1073.6112,-284.11047 C 1070.0655,-283.81275 1064.6306,-283.1173 1063.3925,-282.48547 C 1061.7591,-282.81998 1059.4466,-283.09786 1057.455,-282.95422 C 1054.3908,-282.73324 1052.4872,-282.58078 1050.5488,-282.45422 C 1049.8896,-282.41119 1049.5064,-282.33029 1049.205,-282.26672 z"
+         id="path7933" />
+      <g
+         clip-path="url(#clipPath7616)"
+         style="display:inline;filter:url(#filter7610);enable-background:new"
+         id="g7935"
+         transform="matrix(0.9975712,-6.9654277e-2,6.9654277e-2,0.9975712,872.72062,140.02502)">
+        <path
+           sodipodi:nodetypes="ccssscsssscscsscsssccscssccsscssscc"
+           id="path7937"
+           d="M 229.94262,-409.12268 C 226.38481,-409.07267 220.91842,-408.76259 219.63928,-408.21854 C 218.03319,-408.66601 215.73612,-409.09985 213.73933,-409.09528 C 210.66734,-409.08826 208.77464,-409.08651 206.83206,-409.09528 C 206.17159,-409.09827 205.78447,-409.02811 205.47939,-408.98569 C 205.47939,-408.98569 205.47939,-407.88976 205.47939,-407.88976 C 205.59911,-408.06923 205.87191,-408.58022 206.42914,-408.65691 C 207.17672,-408.7598 211.59842,-408.80814 213.73933,-408.76651 C 215.51393,-408.73198 218.19456,-408.49224 220.12854,-407.80756 C 220.44994,-407.69378 220.74779,-407.53378 221.02073,-407.39659 C 222.98415,-406.40966 228.96409,-403.09505 228.96409,-403.09505 C 228.96409,-403.09505 222.33134,-407.04273 221.48122,-407.53358 C 221.27791,-407.65097 220.90658,-407.79127 220.44513,-407.94456 C 221.66576,-408.39235 225.5211,-408.56427 228.27336,-408.65691 C 231.29786,-408.75873 231.62112,-408.7465 233.68405,-408.46512 C 235.81336,-408.17469 237.02256,-407.86236 237.02256,-407.86236 C 237.02255,-407.86236 236.9442,-408.50354 238.05865,-408.65691 C 238.80622,-408.7598 243.22794,-408.80814 245.36884,-408.76651 C 247.43834,-408.72625 250.73489,-408.35935 252.65024,-407.39659 C 253.65356,-406.89226 255.68588,-405.82796 257.44559,-404.86088 L 257.5412,-404.88031 C 257.5412,-404.88031 253.96086,-407.04273 253.11073,-407.53358 C 252.90742,-407.65097 252.5361,-407.79127 252.07464,-407.94456 C 253.29526,-408.39235 257.12183,-408.56427 259.87409,-408.65691 C 262.89859,-408.75873 263.22184,-408.7465 265.28478,-408.46512 C 267.23794,-408.19872 268.2977,-407.93506 268.47939,-407.88976 C 268.47939,-407.88976 268.4523,-408.20122 268.4523,-408.20122 C 268.04327,-408.33767 267.73806,-408.43457 267.05192,-408.5587 C 265.75111,-408.79403 263.6528,-409.16026 261.54335,-409.12268 C 257.9714,-409.05904 252.49007,-408.76672 251.24001,-408.21854 C 249.63418,-408.66549 247.36339,-409.09984 245.36884,-409.09528 C 242.29685,-409.08826 240.37536,-409.08651 238.43279,-409.09528 C 236.49023,-409.10406 236.72011,-408.81621 235.49721,-408.8213 C 234.1753,-408.8268 233.73109,-409.17593 229.94262,-409.12268 C 229.94262,-409.12268 229.94262,-409.12268 229.94262,-409.12268"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+        <path
+           id="path7939"
+           d="M 206.1989,-407.47878 C 208.11911,-406.66172 210.77605,-405.28595 212.35787,-404.08139 C 213.93971,-402.87683 215.26544,-402.30771 217.91246,-400.16344 C 218.79803,-399.44606 219.66111,-398.81359 220.50439,-398.2417 L 221.04496,-398.43181 C 220.33173,-398.9152 219.5772,-399.45212 218.77587,-400.05384 C 215.95364,-402.17305 215.14932,-402.86357 212.7608,-404.32798 C 210.37226,-405.79238 208.66132,-406.69374 206.1989,-407.47878 C 206.1989,-407.47878 206.1989,-407.47878 206.1989,-407.47878"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+           sodipodi:nodetypes="cssccsscc" />
+        <path
+           id="path7941"
+           d="M 237.79963,-407.47878 C 239.71984,-406.66172 242.40557,-405.28595 243.98738,-404.08139 C 244.80045,-403.46223 245.54587,-403.01097 246.43784,-402.42738 L 247.08684,-402.54404 C 246.28853,-403.12041 245.51507,-403.63839 244.39031,-404.32798 C 242.00177,-405.79238 240.26205,-406.69374 237.79963,-407.47878 C 237.79963,-407.47878 237.79963,-407.47878 237.79963,-407.47878"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+           sodipodi:nodetypes="csccscc" />
+      </g>
+      <g
+         clip-path="url(#clipPath7606)"
+         id="g7943">
+        <path
+           style="opacity:0.75;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter7578);enable-background:new"
+           d="M 1056.25,-278.80481 C 1060.3946,-280.28358 1066.25,-275.67981 1066.25,-275.67981 C 1067.149,-275.39889 1068.9751,-276.57428 1068.8743,-277.36595 C 1068.8743,-277.36595 1067.324,-279.22657 1068.5,-280.30481 C 1069.676,-281.38305 1073.796,-278.79743 1076,-278.67981 C 1078.204,-278.56219 1081.5621,-278.90922 1083,-279.42981 C 1084.4379,-279.9504 1084.1129,-280.8544 1085.625,-281.17981 C 1087.1371,-281.50522 1090.7439,-280.14227 1092.6855,-280.01098 C 1094.6271,-279.87969 1097.3336,-279.67671 1098.5,-280.17981 C 1099.6664,-280.68291 1098.6782,-281.33902 1100.375,-282.05481 C 1102.0718,-282.7706 1108.1352,-283.01143 1110,-282.17981 C 1111.8648,-281.34819 1111.8099,-281.66061 1112.625,-279.17981 C 1113.4401,-276.69901 1120.0648,-274.01696 1111.5,-265.80481 C 1102.9352,-257.59266 1052.1221,-252.01887 1045.875,-263.05481 C 1039.6279,-274.09075 1052.1054,-277.32604 1056.25,-278.80481 z"
+           id="path7945"
+           sodipodi:nodetypes="czzzzzzzzzzzzzz" />
+        <path
+           style="opacity:0.75;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter7594);enable-background:new"
+           d="M 1058.5,-275.42981 C 1062.6446,-276.90858 1068.5,-272.30481 1068.5,-272.30481 C 1069.399,-272.02389 1071.2251,-273.19928 1071.1243,-273.99095 C 1071.1243,-273.99095 1069.574,-275.85157 1070.75,-276.92981 C 1071.926,-278.00805 1076.046,-275.42243 1078.25,-275.30481 C 1080.454,-275.18719 1083.8121,-275.53422 1085.25,-276.05481 C 1086.6879,-276.5754 1086.3629,-277.4794 1087.875,-277.80481 C 1089.3871,-278.13022 1092.9939,-276.76727 1094.9355,-276.63598 C 1096.8771,-276.50469 1099.5836,-276.30171 1100.75,-276.80481 C 1101.9164,-277.30791 1100.9282,-277.96402 1102.625,-278.67981 C 1104.3218,-279.3956 1110.3852,-279.63643 1112.25,-278.80481 C 1114.1148,-277.97319 1114.0599,-278.28561 1114.875,-275.80481 C 1115.6901,-273.32401 1122.3148,-270.64196 1113.75,-262.42981 C 1105.1852,-254.21766 1054.3721,-248.64387 1048.125,-259.67981 C 1041.8779,-270.71575 1054.3554,-273.95104 1058.5,-275.42981 z"
+           id="path7947"
+           sodipodi:nodetypes="czzzzzzzzzzzzzz" />
+      </g>
+    </g>
+    <path
+       style="opacity:1;fill:#101414;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 628.24553,347.99185 C 624.4411,322.72762 611.43581,297.35383 611.08873,272.46662 C 610.90247,259.1111 614.36158,245.89571 624.84426,232.91257 C 661.19128,167.61674 741.78517,148.21789 810.77892,141.44715 C 897.70131,130.43035 995.69159,159.38722 1044.1503,236.84843 C 1098.2743,312.58173 1100.825,409.38755 1124.7623,496.37638 C 1154.2001,623.50398 1179.5414,752.59052 1185.1545,883.22673 C 1182.0911,961.40858 1176.7282,1048.4109 1124.6513,1111.3609 C 1076.6248,1161.7183 1001.8649,1161.4139 937.58145,1170.3632 C 847.02606,1175.0182 753.22992,1154.2174 675.79755,1106.165 C 611.02191,1068.225 580.06736,992.68633 578.51815,920.14538 C 570.12898,840.27022 604.90967,766.33687 630.13855,692.98577 C 637.60916,610.2247 639.55141,526.73802 639.79189,443.60093 C 638.95507,411.40549 632.70236,379.7836 628.24553,347.99185 z"
+       id="path7949"
+       sodipodi:nodetypes="cscccccccccccc" />
+    <path
+       style="opacity:0.25;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter8940);enable-background:accumulate"
+       d="M 311.83409,415.43155 L 321.73359,537.05392 L 261.62951,673.52553 L 277.18586,848.1809 C 292.79912,910.0601 309.37131,946.84995 351.56201,965.23473 C 355.88112,928.99475 312.95049,822.27485 312.31937,776.11489 C 311.68792,729.93044 323.14971,667.50703 342.99704,617.81842 C 363.04539,567.62654 379.89378,572.972 385.12193,525.22549 C 390.35008,477.47898 367.69553,375.83357 367.69553,375.83357 L 311.83409,415.43155 z"
+       id="path7951"
+       sodipodi:nodetypes="ccccczzzcc"
+       clip-path="url(#clipPath8616)"
+       transform="translate(276,136)" />
+    <path
+       style="opacity:1;fill:url(#linearGradient8970);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 1010.0312,655.49186 C 1010.0312,655.49186 1026.7864,692.50992 1038.7327,709.44581 C 1050.6789,726.3817 1091.4598,765.49186 1091.4598,765.49186 L 1144.057,637.90211"
+       id="path7953"
+       sodipodi:nodetypes="czcc" />
+    <path
+       style="opacity:0.07999998;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter8822);enable-background:accumulate"
+       d="M 730.31998,536.56864 C 730.31998,545.05392 772.86772,595.03667 772.86772,595.03667 L 785.47431,566.26713 L 730.31998,536.56864 z"
+       id="path7955"
+       sodipodi:nodetypes="cccc"
+       clip-path="url(#clipPath8209)"
+       transform="translate(276,136)" />
+    <g
+       transform="translate(450.03125,73.843964)"
+       style="opacity:1;display:inline;enable-background:new"
+       id="g7957"
+       clip-path="url(#clipPath3998)">
+      <g
+         transform="translate(-174.03125,62.156036)"
+         style="filter:url(#filter3677)"
+         id="g7959">
+        <g
+           id="g7961"
+           style="filter:url(#filter3785)">
+          <path
+             sodipodi:nodetypes="czzzzzzzzzz"
+             id="path7963"
+             d="M 425.88244,476.99186 C 436.68787,475.5132 450.62645,480.34637 470.5253,480.20614 C 490.42415,480.06591 527.97852,463.29492 552.66815,463.06328 C 577.35778,462.83164 615.41985,475.34734 631.95387,478.06328 C 648.48789,480.77922 654.80219,477.90476 659.45386,485.92043 C 664.10553,493.9361 661.38057,496.66767 649.09672,506.63472 C 636.81287,516.60177 608.30704,519.27104 583.02529,519.49186 C 557.74295,519.71268 512.644,526.57038 487.66815,523.42042 C 462.6923,520.27046 430.73059,515.59775 418.73958,505.56328 C 406.74857,495.52881 398.88874,488.83146 401.23958,481.63471 C 403.59042,474.43796 415.07701,478.47052 425.88244,476.99186 z"
+             style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <rect
+             y="412.60312"
+             x="343.6539"
+             height="181.01935"
+             width="381.83765"
+             id="rect7965"
+             style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        </g>
+        <g
+           id="g7967"
+           style="filter:url(#filter3785)">
+          <path
+             sodipodi:nodetypes="czzzcc"
+             id="path7969"
+             d="M 687.14286,452.36218 C 676.68117,462.07661 600.16326,471.36732 586.42857,481.6479 C 572.69388,491.92848 571.67605,494.53616 574.28571,501.6479 C 576.89537,508.75964 580.83098,511.05362 600,510.21932 C 619.16902,509.38502 698.57143,482.5976 698.57143,488.79075 L 687.14286,452.36218 z"
+             style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+             transform="translate(174.03125,-62.156036)" />
+          <rect
+             y="344.82138"
+             x="702.86414"
+             height="162.63455"
+             width="207.8894"
+             id="rect7971"
+             style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        </g>
+      </g>
+      <g
+         transform="translate(-174.03125,62.156036)"
+         style="opacity:0.18000004;display:inline;enable-background:new"
+         id="g7973">
+        <g
+           id="g7975"
+           style="filter:url(#filter3785)">
+          <path
+             sodipodi:nodetypes="czzzzzzzzzz"
+             id="path7977"
+             d="M 425.88244,476.99186 C 436.68787,475.5132 450.62645,480.34637 470.5253,480.20614 C 490.42415,480.06591 527.97852,463.29492 552.66815,463.06328 C 577.35778,462.83164 615.41985,475.34734 631.95387,478.06328 C 648.48789,480.77922 654.80219,477.90476 659.45386,485.92043 C 664.10553,493.9361 661.38057,496.66767 649.09672,506.63472 C 636.81287,516.60177 608.30704,519.27104 583.02529,519.49186 C 557.74295,519.71268 512.644,526.57038 487.66815,523.42042 C 462.6923,520.27046 430.73059,515.59775 418.73958,505.56328 C 406.74857,495.52881 398.88874,488.83146 401.23958,481.63471 C 403.59042,474.43796 415.07701,478.47052 425.88244,476.99186 z"
+             style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <rect
+             y="412.60312"
+             x="343.6539"
+             height="181.01935"
+             width="381.83765"
+             id="rect7979"
+             style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        </g>
+        <g
+           id="g7981"
+           style="filter:url(#filter3785)">
+          <path
+             sodipodi:nodetypes="czzzcc"
+             id="path7983"
+             d="M 687.14286,452.36218 C 676.68117,462.07661 600.16326,471.36732 586.42857,481.6479 C 572.69388,491.92848 571.67605,494.53616 574.28571,501.6479 C 576.89537,508.75964 580.83098,511.05362 600,510.21932 C 619.16902,509.38502 698.57143,482.5976 698.57143,488.79075 L 687.14286,452.36218 z"
+             style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+             transform="translate(174.03125,-62.156036)" />
+          <rect
+             y="344.82138"
+             x="702.86414"
+             height="162.63455"
+             width="207.8894"
+             id="rect7985"
+             style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        </g>
+      </g>
+    </g>
+    <path
+       style="opacity:0.75;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter8802);enable-background:accumulate"
+       d="M 582.65599,-7.4183011 L 695.79307,78.848726 L 804.68752,337.64981 L 842.87128,545.5392 L 963.07944,637.46308 C 963.07944,637.46308 950.35151,350.37773 943.28044,323.50767 C 936.20938,296.63761 793.37381,-69.643698 793.37381,-69.643698 L 582.65599,-7.4183011 z"
+       id="path7987"
+       clip-path="url(#clipPath8604)"
+       sodipodi:nodetypes="cccccscc"
+       transform="translate(276,136)" />
+    <path
+       style="opacity:1;fill:url(#linearGradient8958);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 964.13839,239.599 C 964.13839,239.599 972.81571,250.49562 988.24554,251.56328 C 1003.6754,252.63094 1037.9672,211.61061 1058.4241,199.42043 C 1078.9034,187.2169 1105.4705,172.81818 1122.3527,179.06329 C 1139.2348,185.30839 1144.5105,205.49938 1150.2098,227.099 C 1155.9092,248.69861 1156.9284,288.91289 1147.5313,319.95615 C 1138.1341,350.9994 1097.028,393.0599 1082.1741,423.349 C 1067.3202,453.6381 1070.567,463.17043 1070.567,463.17043"
+       id="path7989"
+       sodipodi:nodetypes="czzzzzzc" />
+    <path
+       style="opacity:1;fill:url(#radialGradient3315);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+       d="M 1124.4955,207.63471 C 1108.6027,206.74185 1074.7767,219.74054 1058.4241,231.92043 C 1041.9855,244.16433 1029.2032,256.03483 1029.1384,284.06328 C 1029.0732,312.26932 1042.2575,323.13969 1058.2455,331.02757 C 1074.2335,338.91546 1091.9317,338.14685 1110.2098,319.24186 C 1128.488,300.33686 1124.4955,207.63471 1124.4955,207.63471 z"
+       id="path7991"
+       sodipodi:nodetypes="czzzzc" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:0.75;fill:url(#radialGradient3543);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter4120);enable-background:accumulate"
+       id="path7993"
+       sodipodi:cx="385"
+       sodipodi:cy="237.00504"
+       sodipodi:rx="86.428574"
+       sodipodi:ry="73.928574"
+       d="M 471.42857,237.00504 A 86.428574,73.928574 0 1 1 298.57143,237.00504 A 86.428574,73.928574 0 1 1 471.42857,237.00504 z"
+       transform="matrix(0.9434749,-0.1239943,0.1440089,1.0957669,451.94827,134.5988)"
+       clip-path="url(#clipPath4100)" />
+    <path
+       transform="translate(450.03125,73.843964)"
+       style="opacity:1;fill:url(#radialGradient3915);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 527.60588,407.44884 C 527.60588,407.44884 405.56444,445.85232 340.09154,417.08065 C 274.61865,388.30899 265.71429,292.36218 265.71429,292.36218 C 265.71429,292.36218 339.09587,211.85825 395.63507,208.74742 C 451.46212,205.67578 486.20893,228.89074 510.50508,274.59913 C 534.85708,320.41261 527.60588,407.44884 527.60588,407.44884 z"
+       id="path7995"
+       sodipodi:nodetypes="csczzc"
+       mask="url(#mask3684)" />
+    <path
+       style="opacity:1;fill:url(#linearGradient3959);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 772.17411,393.349 C 772.17411,393.349 808.39165,365.96653 823.78125,357.45614 C 838.95859,349.06313 849.49553,345.849 859.6741,345.849 L 844.13839,412.81328"
+       id="path7997"
+       sodipodi:nodetypes="czcc" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:url(#radialGradient3933);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path7999"
+       sodipodi:cx="409.28571"
+       sodipodi:cy="306.64789"
+       sodipodi:rx="36.25"
+       sodipodi:ry="36.25"
+       d="M 445.53571,306.64789 A 36.25,36.25 0 1 1 373.03571,306.64789 A 36.25,36.25 0 1 1 445.53571,306.64789 z"
+       transform="translate(449.49554,74.915393)" />
+    <path
+       style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter8806);enable-background:accumulate"
+       d="M 311.83409,415.43155 L 321.73359,537.05392 L 261.62951,673.52553 L 277.18586,848.1809 C 292.79912,910.0601 309.37131,946.84995 351.56201,965.23473 C 355.88112,928.99475 360.24362,892.86709 320.31937,742.11489 L 337.99704,672.81842 L 410.12193,534.22549 L 367.69553,375.83357 L 311.83409,415.43155 z"
+       id="path8001"
+       sodipodi:nodetypes="cccccccccc"
+       clip-path="url(#clipPath8616)"
+       transform="translate(276,136)" />
+    <path
+       style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter8826);enable-background:accumulate"
+       d="M 635.21025,581.13004 C 621.06811,593.85796 674.44372,615.71019 711.57778,605.17167 C 748.71184,594.63315 816.22265,569.6073 814.81537,525.97571 C 813.40809,482.34413 738.44784,397.28228 738.44784,397.28228 L 635.21025,581.13004 z"
+       id="path8003"
+       sodipodi:nodetypes="czzcc" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:url(#radialGradient3991);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path8005"
+       sodipodi:cx="410"
+       sodipodi:cy="306.64789"
+       sodipodi:rx="23.214285"
+       sodipodi:ry="23.214285"
+       d="M 433.21428,306.64789 A 23.214285,23.214285 0 1 1 386.78572,306.64789 A 23.214285,23.214285 0 1 1 433.21428,306.64789 z"
+       transform="translate(449.67411,74.915393)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter3981);enable-background:accumulate"
+       id="path8007"
+       sodipodi:cx="414.28571"
+       sodipodi:cy="303.07648"
+       sodipodi:rx="7.5"
+       sodipodi:ry="7.5"
+       d="M 421.78571,303.07648 A 7.5,7.5 0 1 1 406.78571,303.07648 A 7.5,7.5 0 1 1 421.78571,303.07648 z"
+       transform="translate(451.99554,73.486821)" />
+    <path
+       style="opacity:1;fill:url(#radialGradient4112);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 789.31696,478.349 C 789.31696,478.349 796.33977,497.91759 788.24553,513.349 C 780.15129,528.78041 745.92236,552.33722 720.74554,563.349 C 695.43582,574.41891 635.27254,596.31293 618.95982,605.31328 C 602.49834,614.39571 600.74554,617.99185 600.74554,617.99185 C 600.74554,617.99185 593.59861,598.92744 629.49553,566.20615 C 665.66764,533.23401 771.52265,518.15665 789.31696,478.349 z"
+       id="path8009"
+       sodipodi:nodetypes="czzzczc" />
+    <g
+       style="opacity:1;display:inline;enable-background:new"
+       id="g8011"
+       transform="translate(780.74553,74.55825)">
+      <path
+         transform="translate(-329.81481,0)"
+         clip-path="url(#clipPath3999)"
+         sodipodi:nodetypes="czzczzzszc"
+         id="path8013"
+         d="M 179.64286,267.36218 C 157.23242,307.0651 119.02676,383.14247 110.35715,417.00504 C 101.70994,450.78014 101.58516,483.42158 110,503.43362 C 118.3602,523.31575 136.16398,539.06642 150.71428,544.86218 C 150.1179,530.48631 165.08723,501.57635 223.57143,472.36218 C 282.1977,443.07704 301.95306,445.23132 327.14285,425.21932 C 352.77291,404.85756 335.34872,345.57268 330.35714,331.29075 C 325.36556,317.00882 329.12051,327.91101 328.41112,326.19774 C 317.72184,300.38182 294.1968,271.76744 263.92857,261.6479 C 233.66034,251.52836 198.91081,256.79953 179.64286,267.36218 z"
+         style="opacity:1;fill:url(#radialGradient3585);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:20.79999924;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
+      <path
+         transform="matrix(0.8823874,0.4705236,-0.4705236,0.8823874,-166.62245,2.387362)"
+         d="M 248.28731,338.07648 A 64.715881,134.00607 0 1 1 118.85555,338.07648 A 64.715881,134.00607 0 1 1 248.28731,338.07648 z"
+         sodipodi:ry="134.00607"
+         sodipodi:rx="64.715881"
+         sodipodi:cy="338.07648"
+         sodipodi:cx="183.57143"
+         id="path8015"
+         style="opacity:1;fill:url(#radialGradient4060);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:20.79999924;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         sodipodi:type="arc" />
+      <path
+         transform="matrix(0.8823874,0.4705236,-0.4705236,0.8823874,-162.19388,-18.755495)"
+         d="M 248.28731,338.07648 A 64.715881,134.00607 0 1 1 118.85555,338.07648 A 64.715881,134.00607 0 1 1 248.28731,338.07648 z"
+         sodipodi:ry="134.00607"
+         sodipodi:rx="64.715881"
+         sodipodi:cy="338.07648"
+         sodipodi:cx="183.57143"
+         id="path8017"
+         style="opacity:1;fill:url(#radialGradient4062);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:20.79999924;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         sodipodi:type="arc" />
+      <path
+         transform="translate(-329.81481,3e-7)"
+         clip-path="url(#clipPath3999)"
+         sodipodi:nodetypes="czzczzzszc"
+         id="path8019"
+         d="M 179.64286,267.36218 C 157.23242,307.0651 119.02676,383.14247 110.35715,417.00504 C 101.70994,450.78014 101.58516,483.42158 110,503.43362 C 118.3602,523.31575 136.16398,539.06642 150.71428,544.86218 C 150.1179,530.48631 165.08723,501.57635 223.57143,472.36218 C 282.1977,443.07704 301.95306,445.23132 327.14285,425.21932 C 352.77291,404.85756 335.34872,345.57268 330.35714,331.29075 C 325.36556,317.00882 329.12051,327.91101 328.41112,326.19774 C 317.72184,300.38182 294.1968,271.76744 263.92857,261.6479 C 233.66034,251.52836 198.91081,256.79953 179.64286,267.36218 z"
+         style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3587);stroke-width:20.79999924;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;filter:url(#filter4079);enable-background:new" />
+    </g>
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path8021"
+       sodipodi:cx="310.71429"
+       sodipodi:cy="398.07648"
+       sodipodi:rx="19.704132"
+       sodipodi:ry="19.704132"
+       d="M 330.41843,398.07648 A 19.704132,19.704132 0 1 1 291.01016,398.07648 A 19.704132,19.704132 0 1 1 330.41843,398.07648 z"
+       transform="translate(452.55663,72.581273)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:url(#radialGradient4056);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4082);stroke-width:20.79999924;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter4083);enable-background:accumulate"
+       id="path8023"
+       sodipodi:cx="310.71429"
+       sodipodi:cy="398.07648"
+       sodipodi:rx="19.704132"
+       sodipodi:ry="19.704132"
+       d="M 330.41843,398.07648 A 19.704132,19.704132 0 1 1 291.01016,398.07648 A 19.704132,19.704132 0 1 1 330.41843,398.07648 z"
+       transform="translate(450.55663,72.581273)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:url(#radialGradient4119);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path8025"
+       sodipodi:cx="310.71429"
+       sodipodi:cy="398.07648"
+       sodipodi:rx="19.704132"
+       sodipodi:ry="19.704132"
+       d="M 330.41843,398.07648 A 19.704132,19.704132 0 1 1 291.01016,398.07648 A 19.704132,19.704132 0 1 1 330.41843,398.07648 z"
+       transform="translate(450.55663,72.581273)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:url(#radialGradient4868);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter4002);enable-background:accumulate"
+       id="path8027"
+       sodipodi:cx="429.56738"
+       sodipodi:cy="377.42877"
+       sodipodi:rx="72.079735"
+       sodipodi:ry="44.547726"
+       d="M 501.64712,377.42877 A 72.079735,44.547726 0 1 1 357.48765,377.42877 A 72.079735,44.547726 0 1 1 501.64712,377.42877 z"
+       transform="matrix(0.9969564,-7.7961675e-2,7.7961675e-2,0.9969564,436.61877,125.29509)"
+       inkscape:transform-center-x="-47.231976"
+       inkscape:transform-center-y="-3.6935079" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:url(#radialGradient4876);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter4010);enable-background:accumulate"
+       id="path8029"
+       sodipodi:cx="437.6991"
+       sodipodi:cy="391.21735"
+       sodipodi:rx="36.611931"
+       sodipodi:ry="22.627417"
+       d="M 474.31103,391.21735 A 36.611931,22.627417 0 1 1 401.08717,391.21735 A 36.611931,22.627417 0 1 1 474.31103,391.21735 z"
+       transform="matrix(1.4357951,-6.9991037e-2,6.9991037e-2,1.4357951,235.18065,-63.86546)"
+       inkscape:transform-center-x="-20.955902"
+       inkscape:transform-center-y="-13.056625" />
+    <g
+       transform="translate(450.03125,73.843964)"
+       id="g8031"
+       style="opacity:1;display:inline;filter:url(#filter4053);enable-background:new">
+      <path
+         d="M 416.87499,401.82648 A 3.2142856,3.2142856 0 1 1 410.44642,401.82648 A 3.2142856,3.2142856 0 1 1 416.87499,401.82648 z"
+         sodipodi:ry="3.2142856"
+         sodipodi:rx="3.2142856"
+         sodipodi:cy="401.82648"
+         sodipodi:cx="413.66071"
+         id="path8033"
+         style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4484);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         sodipodi:type="arc" />
+      <path
+         transform="translate(13.125009,8.1249913)"
+         d="M 416.87499,401.82648 A 3.2142856,3.2142856 0 1 1 410.44642,401.82648 A 3.2142856,3.2142856 0 1 1 416.87499,401.82648 z"
+         sodipodi:ry="3.2142856"
+         sodipodi:rx="3.2142856"
+         sodipodi:cy="401.82648"
+         sodipodi:cx="413.66071"
+         id="path8035"
+         style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4486);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         sodipodi:type="arc" />
+      <path
+         transform="translate(32.946437,7.4999913)"
+         d="M 416.87499,401.82648 A 3.2142856,3.2142856 0 1 1 410.44642,401.82648 A 3.2142856,3.2142856 0 1 1 416.87499,401.82648 z"
+         sodipodi:ry="3.2142856"
+         sodipodi:rx="3.2142856"
+         sodipodi:cy="401.82648"
+         sodipodi:cx="413.66071"
+         id="path8037"
+         style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4488);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         sodipodi:type="arc" />
+      <path
+         transform="translate(24.910723,-10.267866)"
+         d="M 416.87499,401.82648 A 3.2142856,3.2142856 0 1 1 410.44642,401.82648 A 3.2142856,3.2142856 0 1 1 416.87499,401.82648 z"
+         sodipodi:ry="3.2142856"
+         sodipodi:rx="3.2142856"
+         sodipodi:cy="401.82648"
+         sodipodi:cx="413.66071"
+         id="path8039"
+         style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4490);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         sodipodi:type="arc" />
+      <path
+         transform="translate(47.589294,-0.6250087)"
+         d="M 416.87499,401.82648 A 3.2142856,3.2142856 0 1 1 410.44642,401.82648 A 3.2142856,3.2142856 0 1 1 416.87499,401.82648 z"
+         sodipodi:ry="3.2142856"
+         sodipodi:rx="3.2142856"
+         sodipodi:cy="401.82648"
+         sodipodi:cx="413.66071"
+         id="path8041"
+         style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4492);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         sodipodi:type="arc" />
+    </g>
+    <path
+       style="opacity:1;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+       d="M 896.20301,482.92837 C 897.1881,487.27845 900.74008,489.10785 903.58974,490.82019 C 908.05042,493.33311 910.1099,492.3423 912.74425,490.06258 C 914.3462,488.14141 923.42736,485.36393 928.33848,482.99151 C 932.66809,481.5326 937.24178,477.63278 941.723,474.65775 C 945.11814,473.03051 947.06964,475.01239 949.55168,475.6679 C 952.4958,476.38451 953.96285,477.83965 955.6126,479.20344 C 958.00876,480.37863 954.6847,482.34657 958.8956,483.49658 C 960.08651,483.71452 961.31255,484.07303 962.17859,482.99151"
+       id="path8043"
+       sodipodi:nodetypes="ccccccccc" />
+    <path
+       style="opacity:1;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+       d="M 910.85021,475.35223 C 913.16515,475.32025 914.02799,475.99476 916.34292,474.53148 C 919.79856,471.45035 921.74546,471.38671 924.29787,470.11206 C 927.32444,468.79683 930.83357,478.26375 934.3994,479.96105 C 936.79449,479.13963 935.68854,481.75484 935.85149,482.6127 C 935.90862,485.25954 938.65843,486.29076 940.20777,488.04227 C 943.52381,490.29776 947.583,494.33773 951.31945,493.34557 C 957.7647,490.4145 961.59867,492.06411 967.60816,485.95883 C 968.31221,484.77749 967.02391,479.06423 970.70175,478.76149 C 973.22574,479.01487 974.86842,478.81164 976.76267,479.32971 C 982.20367,481.4469 984.50045,485.77971 991.47301,487.28466 C 997.65591,488.25105 999.08565,491.07892 1005.3626,492.33542"
+       id="path8045"
+       sodipodi:nodetypes="cccccccccccc" />
+    <path
+       style="opacity:1;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+       d="M 876.98133,483.52197 C 879.37991,482.72817 883.08746,487.71407 885.15446,490.56765 C 885.74727,493.24717 886.30823,496.0541 885.91207,502.68948 C 886.6972,505.10702 888.59256,505.72043 890.7103,505.97248 C 893.82775,505.4357 896.58699,504.64818 898.0339,502.94202 C 899.9055,501.00035 903.34643,505.33596 906.11512,506.98263 C 909.72521,508.89472 913.8889,508.96149 917.98442,509.25547 C 919.688,509.02483 920.35482,513.77062 921.26741,517.3367 C 921.65155,521.71476 920.38197,524.23239 919.49965,527.18568 C 919.20535,529.68223 922.48815,530.71542 925.8131,531.73137 C 928.99554,532.47261 932.35734,533.39321 934.90447,533.49914 C 940.04633,534.37405 942.99321,536.18966 947.0263,537.53975 C 949.26544,538.3563 950.28649,539.78191 951.57199,541.07528"
+       id="path8047"
+       sodipodi:nodetypes="ccccccccccccc" />
+    <path
+       style="opacity:0.25;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter8814);enable-background:new"
+       d="M 332,187.69519 C 332,187.69519 389.5,162.19519 389.5,159.69519 C 389.5,157.19519 395,107.69519 395,107.69519 C 395,107.69519 486,59.195189 486.5,57.195189 C 487,55.195189 572.5,-4.8048114 572.5,-4.8048114 L 386.5,17.195189 L 311,123.19519 L 332,187.69519 z"
+       id="path8049"
+       clip-path="url(#clipPath8514)"
+       transform="translate(276,136)" />
+    <path
+       style="opacity:0.25;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 1697.2846,722.5514 C 1697.2846,722.5514 1581.3191,796.0905 1574.2481,800.33314 C 1567.177,804.57578 1343.7312,937.51186 1343.7312,937.51186 L 1347.9739,977.10984 L 1564.3486,876.70067 L 1681.7283,774.8773 L 1697.2846,722.5514 z"
+       id="path8051" />
+    <path
+       style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter8810);enable-background:accumulate"
+       d="M 528.91587,556.85291 C 523.25902,555.4387 347.89654,631.80623 347.89654,631.80623 L 313.95541,812.82557 L 365.05087,1006.7738 L 622.25397,1074.4551 C 622.25397,1074.4551 828.72915,1227.1901 834.386,1222.9475 C 840.04286,1218.7049 1002.6774,1029.2002 1002.6774,1029.2002 L 842.87128,845.35248 L 796.20224,667.16157 L 528.91587,556.85291 z"
+       id="path8053"
+       clip-path="url(#clipPath8610)"
+       sodipodi:nodetypes="cccccscccc"
+       transform="translate(276,136)" />
+    <path
+       style="opacity:1;fill:#0c0c0c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+       d="M 1097.6433,613.88997 C 1097.6433,613.88997 1120.2628,607.38316 1133.386,608.01724 C 1146.5093,608.65133 1164.0276,609.95586 1177.0949,620.20343 C 1190.1622,630.45099 1202.1626,647.3435 1211.2073,678.57308 C 1220.2519,709.80266 1212.9056,777.82509 1205.0312,821.92043 C 1197.1569,866.01577 1176.7661,928.03341 1160.0312,961.92043 C 1143.2964,995.80745 1110.2335,1039.4156 1099.4618,1051.7966 C 1088.0976,1064.8586 1043.2559,1088.2228 1020.0312,1094.0633 C 1025.3346,1083.4567 1068.931,1043.4744 1055.0312,1033.349 C 1041.0123,1023.1367 1009.2712,1079.3314 970.7381,1062.3822 C 992.12041,1049.2501 1012.5175,1011.1961 1004.7787,995.78772 C 996.93846,980.17733 974.07378,1044.5453 911.24317,1032.8006 C 941.29521,1005.2739 966.65023,961.89659 952.50587,949.8209 C 938.09071,937.51403 892.04412,1004.1141 892.04412,1004.1141 C 892.04412,1004.1141 889.22222,962.41287 905.81732,935.50673 C 922.45667,908.52886 985.47029,853.89146 1005.3704,823.80331 C 1025.2706,793.71517 1038.983,757.79429 1047.5059,731.28537 C 1056.0287,704.77645 1063.3068,654.18583 1063.3068,654.18583"
+       id="path8055"
+       sodipodi:nodetypes="czzzzzzczczczczzzc" />
+    <path
+       style="opacity:0.25;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter8818);enable-background:accumulate"
+       d="M 770.74639,609.17881 L 719.8347,706.75955 L 639.93163,817.77531 L 674.57987,889.19309 L 717.00628,968.38906 L 789.13117,923.13422 L 803.27331,730.80117 L 824.48651,592.20825 L 810.34437,502.05213 L 770.74639,609.17881 z"
+       id="path8057"
+       clip-path="url(#clipPath8622)"
+       sodipodi:nodetypes="cccccccccc"
+       transform="translate(276,136)" />
+    <path
+       style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter8810);enable-background:accumulate"
+       d="M 295,846.19519 L 301.64488,777.27234 C 301.64488,777.27234 391.96439,866.27691 464,900.19519 C 536.03561,934.11347 772,962.19519 772,962.19519 L 926,936.19519 L 890,1098.1952 L 604,1124.1952 L 306,1035.1952 L 295,846.19519 z"
+       id="path8059"
+       clip-path="url(#clipPath8906)"
+       sodipodi:nodetypes="cczcccccc"
+       transform="translate(276,136)" />
+    <path
+       transform="translate(450.03125,73.843964)"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter3587);enable-background:new"
+       d="M 405.79629,845.99023 L 480.74961,911.04406 L 483.24924,927.92446 L 502.6526,938.08337 L 509.14464,961.13446 L 540.85369,952.76336 L 555.70293,1000.8466 C 567.95945,1013.5745 645.49637,887.7369 611.56436,1039.0304 L 550.75318,1055.2939 L 461.55026,960.60104 L 398.72523,906.80141 L 405.79629,845.99023 z"
+       id="path8061"
+       sodipodi:nodetypes="cccccccccccc"
+       clip-path="url(#clipPath3602)" />
+    <path
+       style="opacity:1;fill:#121212;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 1159.317,918.349 C 1213.6027,916.92043 1285.352,903.29701 1329.317,891.56328 C 1373.3697,879.80614 1455.2033,855.21604 1504.674,833.70614 C 1554.0133,812.25342 1618.2778,774.42454 1658.9599,741.56329 C 1699.468,708.8426 1711.3498,685.74348 1719.6741,707.99186 C 1728.0432,730.35965 1703.2672,764.31748 1681.817,789.06329 C 1660.2128,813.98669 1629.0856,841.76862 1582.8883,878.349 C 1536.691,914.92938 1426.8058,979.93363 1370.0312,1006.9204 C 1312.9652,1034.0458 1241.8279,1065.1589 1197.8884,1079.4205 C 1153.9489,1093.6821 1066.4598,1110.4919 1066.4598,1110.4919 L 1159.317,918.349 z"
+       id="path8063"
+       sodipodi:nodetypes="czzzzzzzzcc" />
+    <path
+       transform="translate(450.03125,73.843964)"
+       style="opacity:0.5;fill:url(#linearGradient3666);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter3779);enable-background:accumulate"
+       d="M 1241.5965,652.95007 C 1241.5965,652.95007 1176.875,707.28713 1095.9326,751.94501 C 1013.9082,797.19985 811.67556,845.28311 811.67556,845.28311 C 811.67556,845.28311 796.57419,866.33507 856.93045,873.56739 C 917.28671,880.79971 1081.0124,820.2667 1135.5306,777.40085 C 1190.0488,734.535 1255.7387,665.67799 1255.7387,665.67799 L 1241.5965,652.95007 z"
+       id="path8065"
+       sodipodi:nodetypes="czczzcc"
+       clip-path="url(#clipPath3992)" />
+    <g
+       transform="translate(450.03125,73.843964)"
+       style="opacity:1;display:inline;enable-background:new"
+       id="g8067"
+       clip-path="url(#clipPath3986)">
+      <g
+         transform="translate(-174.03125,62.156036)"
+         style="filter:url(#filter3677)"
+         id="g8069">
+        <g
+           style="filter:url(#filter3785)"
+           id="g8071">
+          <path
+             sodipodi:nodetypes="czzccccc"
+             id="path8073"
+             d="M 1094.2857,725.93361 C 1094.2857,725.93361 1093.9896,752.09452 1098.9285,763.79076 C 1103.8674,775.487 1118.9666,790.27741 1127.5,795.21933 C 1136.0334,800.16125 1146.4286,803.79075 1146.4286,803.79075 L 1264.2857,688.79075 L 1282.1429,613.07647 L 1185.7143,651.6479 L 1094.2857,725.93361 z"
+             style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+             transform="translate(174.03125,-62.156036)" />
+          <rect
+             y="486.14224"
+             x="1197.8389"
+             height="309.71277"
+             width="333.75412"
+             id="rect8075"
+             style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        </g>
+      </g>
+      <g
+         transform="translate(-174.03125,62.156036)"
+         style="opacity:0.18000004;display:inline;enable-background:new"
+         id="g8077">
+        <g
+           style="filter:url(#filter3785)"
+           id="g8079">
+          <path
+             sodipodi:nodetypes="czzccccc"
+             id="path8081"
+             d="M 1094.2857,725.93361 C 1094.2857,725.93361 1093.9896,752.09452 1098.9285,763.79076 C 1103.8674,775.487 1118.9666,790.27741 1127.5,795.21933 C 1136.0334,800.16125 1146.4286,803.79075 1146.4286,803.79075 L 1264.2857,688.79075 L 1282.1429,613.07647 L 1185.7143,651.6479 L 1094.2857,725.93361 z"
+             style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+             transform="translate(174.03125,-62.156036)" />
+          <rect
+             y="486.14224"
+             x="1197.8389"
+             height="309.71277"
+             width="333.75412"
+             id="rect8083"
+             style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        </g>
+      </g>
+    </g>
+    <path
+       transform="translate(450.03125,73.843964)"
+       style="opacity:0.83300003;fill:#050505;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter8225);enable-background:accumulate"
+       d="M 1264.1875,605 C 1259.6964,605.73268 1256.0305,608.45509 1252.25,611.40625 C 1242.1687,619.27601 1224.0805,645.83149 1204.2188,661.875 C 1164.3514,694.07816 1100.2228,731.85201 1051.6562,752.96875 C 1003.0422,774.10613 921.11498,798.78676 877.34375,810.46875 C 833.94554,822.05121 762.29972,835.59982 709.09375,837 L 704.53125,837.125 L 702.53125,841.25 L 609.6875,1033.375 L 603.1875,1046.8438 L 617.84375,1044 C 617.84375,1044 705.11343,1027.3486 750.1875,1012.7188 C 794.9127,998.20213 865.97836,967.05197 923.21875,939.84375 C 980.82199,912.46306 1090.1551,847.86412 1137.5,810.375 C 1183.8608,773.66518 1215.3049,745.65818 1237.4375,720.125 C 1248.3386,707.549 1260.1823,692.59356 1268.4688,677.375 C 1276.7552,662.15644 1287.6285,633.15692 1282.1562,618.53125 C 1280.9385,615.27651 1279.6048,612.46995 1277.5625,610.03125 C 1275.5202,607.59255 1269.0878,608.45926 1269,605 C 1268.7902,596.73518 1265.6845,604.75577 1264.1875,605 z M 1266.3438,620.21875 C 1266.7586,620.80449 1267.3749,621.77641 1268.125,623.78125 C 1271.0218,631.52338 1266.6843,655.68 1259.3125,669.21875 C 1251.9407,682.7575 1236.6741,698.14269 1226.125,710.3125 C 1205.0496,734.62606 1174.2213,762.17406 1128.1875,798.625 C 1083.1379,834.29659 972.72717,899.71959 916.78125,926.3125 C 859.88952,953.35499 788.68509,984.4309 745.53125,998.4375 C 709.16634,1010.2406 649.68654,1022.2713 629.8125,1026.2188 L 714.09375,851.75 C 768.80066,849.7007 837.88634,836.53365 881.21875,824.96875 C 925.55297,813.1365 1007.2974,788.63242 1057.625,766.75 C 1107.737,744.96129 1170.1594,705.58184 1211.6562,672.0625 C 1232.3026,655.38529 1253.4011,629.51662 1261.4688,623.21875 C 1263.9058,621.31633 1265.5494,620.58295 1266.3438,620.21875 z"
+       id="path8085"
+       clip-path="url(#clipPath3722)"
+       sodipodi:nodetypes="cssssccccccssssssssccssssssccssssc" />
+    <g
+       style="opacity:1;display:inline;enable-background:new"
+       id="g8087"
+       mask="url(#mask7704)"
+       transform="matrix(0.9934486,0.1142802,-0.1142802,0.9934486,-9.24324,588.09054)"
+       inkscape:transform-center-x="-185.09603"
+       inkscape:transform-center-y="-12.859654">
+      <path
+         transform="translate(8.0045714e-2,-3.125e-2)"
+         style="fill:#bcb786;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+         d="M 1111.4062,-285.9375 L 1107.4688,-284.0625 C 1107.4283,-284.05228 1107.3692,-284.04201 1107.3438,-284.03125 C 1106.925,-283.8184 1107.1791,-283.93067 1106.6875,-283.71875 C 1106.2014,-283.50919 1104.9499,-283.13456 1102.5938,-282.25 C 1099.2626,-280.99942 1096.7895,-280.10016 1095.5938,-279.1875 C 1094.0576,-279.16623 1091.8733,-278.95419 1089.9375,-278.46875 C 1086.956,-277.72108 1085.0823,-277.29474 1083.1875,-276.875 C 1081.2927,-276.45527 1081.512,-276.23281 1080.3125,-276 C 1079.0159,-275.74833 1078.5911,-276.00899 1074.875,-275.21875 C 1071.3851,-274.4766 1065.9802,-273.28768 1064.7188,-272.53125 C 1063.1348,-272.71203 1060.8513,-272.85303 1058.875,-272.5625 C 1055.8346,-272.11554 1053.9588,-271.88974 1052.0312,-271.65625 C 1051.3758,-271.57687 1050.9902,-271.45547 1050.6875,-271.375 C 1050.2613,-271.24334 1050.0017,-271.11498 1049.3125,-271.03125 C 1048.0009,-270.87188 1047.5503,-271.18808 1043.7812,-270.75 C 1040.2273,-270.33691 1034.7758,-269.47718 1033.5312,-268.8125 C 1031.9322,-269.10979 1029.6735,-269.34669 1027.6875,-269.15625 C 1024.6287,-268.86293 1022.7155,-268.67226 1020.7812,-268.5 C 1018.847,-268.32773 1019.0926,-268.07763 1017.875,-267.96875 C 1016.5588,-267.85105 1016.1152,-268.13238 1012.3438,-267.71875 C 1008.8017,-267.3303 1003.3359,-266.50948 1002.0625,-265.84375 C 1000.4636,-266.13844 998.1753,-266.35076 996.1875,-266.15625 C 993.12921,-265.857 991.2463,-265.67601 989.3125,-265.5 C 988.65501,-265.44015 988.27245,-265.32144 987.96875,-265.25 C 987.54105,-265.13104 987.28525,-265.03193 986.59375,-264.96875 C 985.27775,-264.84849 984.834,-265.16363 981.0625,-264.75 C 977.50631,-264.35998 972.0569,-263.51084 970.8125,-262.84375 C 969.21381,-263.13793 966.95265,-263.36747 964.96875,-263.15625 C 961.91305,-262.83092 959.9947,-262.63001 958.0625,-262.4375 C 956.13031,-262.24499 956.37275,-261.99662 955.15625,-261.875 C 953.84137,-261.74353 953.3932,-262.03954 949.625,-261.59375 C 946.08611,-261.17509 940.6473,-260.30158 939.375,-259.625 C 937.77741,-259.90604 935.51505,-260.04543 933.53125,-259.8125 C 930.47927,-259.45413 928.58625,-259.24464 926.65625,-259.03125 C 926.00007,-258.95869 925.6156,-258.85856 925.3125,-258.78125 C 924.88571,-258.65402 924.6276,-258.51405 923.9375,-258.4375 C 922.62411,-258.29181 922.17015,-258.61152 918.40625,-258.125 C 914.85737,-257.66624 909.4276,-256.70598 908.1875,-256 C 906.59441,-256.24424 904.3537,-256.38135 902.375,-256.125 C 899.32741,-255.73018 897.4243,-255.47655 895.5,-255.21875 C 893.57571,-254.96096 893.7739,-254.72522 892.5625,-254.5625 C 891.25301,-254.3866 890.8153,-254.66688 887.0625,-254.09375 C 883.53821,-253.55551 878.1393,-252.39458 876.875,-251.65625 C 875.28751,-251.85979 873.0295,-251.91098 871.0625,-251.5625 C 868.03631,-251.02638 866.1636,-250.70081 864.25,-250.375 C 863.59941,-250.26423 863.2363,-250.10406 862.9375,-250 C 862.51681,-249.83512 862.27405,-249.6687 861.59375,-249.53125 C 860.29905,-249.26966 859.86665,-249.53745 856.15625,-248.71875 C 852.65777,-247.9468 847.31035,-246.33582 846.09375,-245.5 C 844.53085,-245.57745 842.33625,-245.41472 840.40625,-244.90625 C 837.43387,-244.12312 835.58855,-243.67416 833.71875,-243.15625 C 831.84875,-242.63835 832.0521,-242.38897 830.875,-242.0625 C 829.60251,-241.7096 829.17795,-241.95541 825.53125,-240.875 C 822.10657,-239.86037 816.88185,-237.94183 815.65625,-237.03125 C 814.11747,-237.01851 811.93645,-236.75903 810.03125,-236.15625 C 807.10027,-235.22891 805.2809,-234.69783 803.4375,-234.09375 C 802.81071,-233.88837 802.44585,-233.70117 802.15625,-233.5625 C 801.74867,-233.34889 801.50295,-233.15375 800.84375,-232.9375 C 799.58925,-232.52596 799.1576,-232.74846 795.5625,-231.5 C 792.17261,-230.32283 786.96755,-228.2863 785.78125,-227.34375 C 784.25737,-227.28408 782.1312,-226.94888 780.25,-226.28125 C 777.35261,-225.25296 775.55095,-224.60577 773.71875,-223.96875 C 771.88655,-223.33174 772.0909,-223.12021 770.9375,-222.71875 C 769.69071,-222.28479 769.27395,-222.51903 765.71875,-221.15625 C 762.38005,-219.87645 757.23165,-217.6737 756.03125,-216.6875 C 754.52407,-216.57981 752.39555,-216.1887 750.53125,-215.46875 C 747.66307,-214.36115 745.90735,-213.68719 744.09375,-213 C 743.47705,-212.76637 743.0973,-212.55797 742.8125,-212.40625 C 742.81251,-212.40625 742.8125,-212.37673 742.8125,-212.375 L 734.8125,-209.1875 L 722.3366,-205.69561 L 730.26626,-186.41789 C 729.67463,-184.44432 742.8125,-191.15625 742.8125,-191.15625 C 743.03891,-191.30093 743.26145,-191.42886 743.53125,-191.53125 C 744.61177,-191.94123 745.70285,-191.74702 749.53125,-193.21875 C 753.35977,-194.69049 754.7553,-195.22373 755.4375,-195.625 C 756.11711,-196.02478 757.04925,-196.50437 757.65625,-197.15625 C 759.48317,-197.294 761.22705,-197.64948 762.59375,-198.15625 C 765.56175,-199.25677 767.4691,-199.96244 769.375,-200.625 C 771.28081,-201.28754 771.72915,-202.03987 772.78125,-202.40625 C 773.87287,-202.78636 774.97635,-202.57163 778.84375,-203.9375 C 782.71115,-205.30336 784.1269,-205.76458 784.8125,-206.15625 C 785.51361,-206.55677 786.5133,-207.08923 787.125,-207.75 C 789.09581,-207.80466 790.94195,-208.13463 792.40625,-208.625 C 795.40777,-209.63008 797.3324,-210.24671 799.25,-210.875 C 800.78861,-211.3791 801.42415,-211.92177 802.15625,-212.3125 C 802.38647,-212.44681 802.63215,-212.56623 802.90625,-212.65625 C 804.00457,-213.01673 805.0877,-212.73762 809,-213.96875 C 812.91231,-215.19988 814.366,-215.6417 815.0625,-216 C 815.75641,-216.35697 816.6926,-216.79261 817.3125,-217.40625 C 819.17771,-217.42891 820.94835,-217.67308 822.34375,-218.09375 C 825.37415,-219.00729 827.33615,-219.52385 829.28125,-220.0625 C 831.22637,-220.60114 831.70745,-221.32702 832.78125,-221.625 C 833.89527,-221.93415 835.00125,-221.61761 838.96875,-222.65625 C 842.93625,-223.69488 844.38625,-224.08898 845.09375,-224.40625 C 845.82855,-224.73584 846.90765,-225.15997 847.53125,-225.78125 C 849.52907,-225.66525 851.3887,-225.80134 852.875,-226.15625 C 855.95311,-226.89125 857.9584,-227.25719 859.9375,-227.65625 C 861.52541,-227.97643 862.1818,-228.4468 862.9375,-228.75 C 863.17501,-228.8568 863.4044,-228.94276 863.6875,-229 C 864.82091,-229.22919 865.99215,-228.79107 870.03125,-229.5 C 874.07067,-230.20893 875.5315,-230.42709 876.25,-230.6875 C 876.96581,-230.94694 877.95435,-231.25474 878.59375,-231.78125 C 880.51795,-231.54176 882.34165,-231.55672 883.78125,-231.78125 C 886.90767,-232.26887 888.9358,-232.48192 890.9375,-232.75 C 892.93921,-233.01807 893.42625,-233.69514 894.53125,-233.84375 C 895.67767,-233.99793 896.8071,-233.54218 900.875,-234.0625 C 904.94281,-234.58282 906.43525,-234.75823 907.15625,-235 C 907.89337,-235.24714 908.95435,-235.58623 909.59375,-236.125 C 911.64375,-235.78947 913.56745,-235.72704 915.09375,-235.90625 C 918.23595,-236.27521 920.27375,-236.46561 922.28125,-236.6875 C 923.89207,-236.86552 924.5459,-237.2957 925.3125,-237.53125 C 925.55341,-237.61677 925.80655,-237.68685 926.09375,-237.71875 C 927.24345,-237.84647 928.39505,-237.3721 932.46875,-237.84375 C 936.54245,-238.3154 938.0278,-238.45435 938.75,-238.6875 C 939.46941,-238.91977 940.45025,-239.16096 941.09375,-239.65625 C 943.03005,-239.32279 944.8638,-239.25201 946.3125,-239.40625 C 949.45851,-239.7412 951.49,-239.92484 953.5,-240.125 C 955.50991,-240.32514 955.98415,-240.95139 957.09375,-241.0625 C 958.24485,-241.17778 959.39025,-240.69744 963.46875,-241.125 C 967.54725,-241.55256 969.05765,-241.68709 969.78125,-241.90625 C 970.52047,-242.13011 971.57685,-242.4195 972.21875,-242.9375 C 974.27575,-242.53883 976.2206,-242.4441 977.75,-242.59375 C 980.89871,-242.90185 982.9258,-243.067 984.9375,-243.25 C 986.55151,-243.39682 987.20055,-243.81055 987.96875,-244.03125 C 988.21005,-244.11211 988.4623,-244.16116 988.75,-244.1875 C 989.90211,-244.29295 991.0429,-243.79475 995.125,-244.1875 C 999.20711,-244.58025 1000.7139,-244.71834 1001.4375,-244.9375 C 1002.1584,-245.15583 1003.1371,-245.3852 1003.7812,-245.875 C 1005.7193,-245.52501 1007.5501,-245.42062 1009,-245.5625 C 1012.1487,-245.8706 1014.1758,-246.03575 1016.1875,-246.21875 C 1018.1991,-246.40174 1018.7017,-247.05677 1019.8125,-247.15625 C 1020.9648,-247.25948 1022.1047,-246.77142 1026.1875,-247.15625 C 1030.2704,-247.54107 1031.7762,-247.65725 1032.5,-247.875 C 1033.2393,-248.09743 1034.2956,-248.38949 1034.9375,-248.90625 C 1036.9949,-248.50448 1038.9404,-248.40292 1040.4688,-248.5625 C 1043.6153,-248.89102 1045.6458,-249.0852 1047.6562,-249.28125 C 1049.2692,-249.43854 1049.9219,-249.91273 1050.6875,-250.15625 C 1050.9282,-250.24429 1051.1507,-250.27762 1051.4375,-250.3125 C 1052.5858,-250.4522 1053.7542,-249.97259 1057.8125,-250.5625 C 1061.8708,-251.15242 1063.3743,-251.33964 1064.0938,-251.59375 C 1064.8104,-251.84691 1065.7684,-252.15182 1066.4062,-252.6875 C 1068.3259,-252.47556 1070.1262,-252.53609 1071.5625,-252.78125 C 1074.6816,-253.31365 1076.6741,-253.70986 1078.6562,-254.09375 C 1080.6383,-254.47762 1081.1305,-255.1334 1082.2188,-255.375 C 1083.3475,-255.62566 1084.489,-255.25871 1088.4688,-256.25 C 1092.4483,-257.24127 1093.8983,-257.6693 1094.5938,-258.03125 C 1095.316,-258.40725 1096.3555,-258.90183 1096.9688,-259.5625 C 1098.9317,-259.57454 1100.7625,-259.85355 1102.1875,-260.40625 C 1105.1387,-261.55085 1107.0607,-262.27567 1108.875,-263.15625 C 1110.3307,-263.86277 1111.1941,-264.85828 1111.4062,-265.15625 C 1111.6185,-265.4542 1111.5051,-265.8848 1111.5312,-265.90625 C 1111.5742,-265.94148 1111.8716,-266.00028 1112.0312,-266.34375 C 1112.8902,-268.19082 1114.3544,-271.97139 1114.4688,-272.65625 C 1114.5825,-273.33839 1114.6368,-274.00902 1114.6875,-274.40625 C 1114.7169,-274.63575 1114.5404,-275.28515 1114.5625,-275.34375 C 1114.5934,-275.42579 1114.8508,-275.59432 1114.9062,-275.84375 C 1115.1725,-277.04206 1114.9953,-278.05111 1114.7812,-279.46875 C 1114.5673,-280.88638 1113.8096,-284.08338 1113.1562,-284.9375 C 1112.4973,-285.79922 1111.9314,-285.94801 1111.4062,-285.9375 z"
+         id="path8089"
+         sodipodi:nodetypes="ccssscsssscssssscsssscssssscsssscssssscsssscssssscsssscssssscsssscssscccccssscssssscsssssscssssscsssssscssssscsssssscssssscsssssscssssscsssssscssssscsssssssssssc" />
+      <g
+         clip-path="url(#clipPath7421)"
+         id="g8091">
+        <path
+           id="path8093"
+           d="M 1107.409,-284.04961 C 1106.9903,-283.83678 1107.2534,-283.95572 1106.7618,-283.7438 C 1106.2757,-283.53426 1105.0384,-283.16941 1102.6822,-282.28485 C 1099.3511,-281.03428 1096.852,-280.13141 1095.6563,-279.21875 C 1094.1202,-279.19749 1091.9358,-278.98544 1090,-278.5 C 1087.0185,-277.75234 1085.1448,-277.32599 1083.25,-276.90625 C 1081.3552,-276.48653 1081.5745,-276.26406 1080.375,-276.03125 C 1079.0784,-275.77959 1078.6536,-276.04024 1074.9375,-275.25 C 1071.4476,-274.50786 1066.0427,-273.31893 1064.7813,-272.5625 C 1063.1974,-272.74329 1060.9138,-272.88428 1058.9375,-272.59375 C 1055.8971,-272.1468 1054.0213,-271.92099 1052.0938,-271.6875 C 1051.4384,-271.60813 1051.0527,-271.48672 1050.75,-271.40625 C 1050.3238,-271.2746 1050.0642,-271.14623 1049.375,-271.0625 C 1048.0634,-270.90314 1047.6128,-271.21933 1043.8438,-270.78125 C 1040.2899,-270.36817 1034.8384,-269.50843 1033.5938,-268.84375 C 1031.9948,-269.14105 1029.736,-269.37794 1027.75,-269.1875 C 1024.6912,-268.89419 1022.778,-268.70351 1020.8438,-268.53125 C 1018.9095,-268.35899 1019.1551,-268.10888 1017.9375,-268 C 1016.6213,-267.88231 1016.1777,-268.16363 1012.4063,-267.75 C 1008.8644,-267.36156 1003.3984,-266.54073 1002.125,-265.875 C 1000.5261,-266.1697 998.23783,-266.38201 996.25,-266.1875 C 993.19176,-265.88826 991.30887,-265.70726 989.375,-265.53125 C 988.71751,-265.47141 988.33496,-265.35269 988.03125,-265.28125 C 987.6036,-265.1623 987.34774,-265.06318 986.65625,-265 C 985.34029,-264.87975 984.89649,-265.19488 981.125,-264.78125 C 977.56886,-264.39124 972.11946,-263.54209 970.875,-262.875 C 969.27637,-263.16919 967.01516,-263.39872 965.03125,-263.1875 C 961.97565,-262.86218 960.05721,-262.66126 958.125,-262.46875 C 956.19279,-262.27625 956.43513,-262.02787 955.21875,-261.90625 C 953.90387,-261.77479 953.45577,-262.07079 949.6875,-261.625 C 946.14863,-261.20635 940.70982,-260.33283 939.4375,-259.65625 C 937.83995,-259.9373 935.57754,-260.07668 933.59375,-259.84375 C 930.54177,-259.48539 928.64867,-259.27589 926.71875,-259.0625 C 926.06255,-258.98995 925.67809,-258.88981 925.375,-258.8125 C 924.94823,-258.68528 924.69009,-258.5453 924,-258.46875 C 922.68667,-258.32307 922.23254,-258.64277 918.46875,-258.15625 C 914.91986,-257.6975 909.49012,-256.73723 908.25,-256.03125 C 906.65695,-256.27549 904.41619,-256.4126 902.4375,-256.15625 C 899.38991,-255.76144 897.48679,-255.5078 895.5625,-255.25 C 893.63822,-254.99221 893.83639,-254.75647 892.625,-254.59375 C 891.31554,-254.41785 890.87781,-254.69813 887.125,-254.125 C 883.60071,-253.58676 878.20185,-252.42583 876.9375,-251.6875 C 875.35,-251.89104 873.092,-251.94223 871.125,-251.59375 C 868.09883,-251.05763 866.22611,-250.73206 864.3125,-250.40625 C 863.66189,-250.29548 863.29879,-250.13531 863,-250.03125 C 862.57933,-249.86637 862.33655,-249.69995 861.65625,-249.5625 C 860.3616,-249.30091 859.92913,-249.5687 856.21875,-248.75 C 852.72022,-247.97805 847.3728,-246.36707 846.15625,-245.53125 C 844.59347,-245.6087 842.39867,-245.44597 840.46875,-244.9375 C 837.49631,-244.15437 835.65114,-243.70541 833.78125,-243.1875 C 831.91137,-242.6696 832.11465,-242.42022 830.9375,-242.09375 C 829.66504,-241.74085 829.24047,-241.98666 825.59375,-240.90625 C 822.16905,-239.89162 816.94431,-237.97308 815.71875,-237.0625 C 814.17992,-237.04976 811.99892,-236.79028 810.09375,-236.1875 C 807.16269,-235.26016 805.34344,-234.72908 803.5,-234.125 C 802.87324,-233.91962 802.50827,-233.73242 802.21875,-233.59375 C 801.81112,-233.38014 801.56541,-233.185 800.90625,-232.96875 C 799.65179,-232.55721 799.22014,-232.77971 795.625,-231.53125 C 792.23515,-230.35408 787.03002,-228.31755 785.84375,-227.375 C 784.31986,-227.31533 782.1937,-226.98013 780.3125,-226.3125 C 777.41511,-225.28421 775.61342,-224.63702 773.78125,-224 C 771.94908,-223.36299 772.1534,-223.15146 771,-222.75 C 769.75322,-222.31604 769.33639,-222.55028 765.78125,-221.1875 C 762.44258,-219.9077 757.2941,-217.70495 756.09375,-216.71875 C 754.58657,-216.61106 752.45806,-216.21995 750.59375,-215.5 C 747.72557,-214.3924 745.96995,-213.71844 744.15625,-213.03125 C 743.53959,-212.79762 743.15984,-212.58922 742.875,-212.4375 C 742.875,-212.4375 742.875,-211.34375 742.875,-211.34375 C 742.98678,-211.56611 743.26099,-212.16118 743.78125,-212.4375 C 744.47922,-212.80822 748.59488,-214.43087 750.59375,-215.15625 C 752.25061,-215.7575 754.74764,-216.48493 756.5625,-216.46875 C 756.86412,-216.46606 757.15012,-216.41785 757.40625,-216.375 C 759.24874,-216.06675 764.875,-214.8125 764.875,-214.8125 C 764.87499,-214.8125 758.64151,-216.45925 757.84375,-216.65625 C 757.65296,-216.70336 757.30803,-216.72497 756.875,-216.71875 C 758.02046,-217.58846 761.636,-219.11226 764.21875,-220.15625 C 767.05697,-221.30352 767.33556,-221.40807 769.28125,-221.8125 C 771.28955,-222.22994 772.4375,-222.3125 772.4375,-222.3125 C 772.4375,-222.31249 772.35514,-222.91364 773.40625,-223.4375 C 774.11135,-223.78891 778.29327,-225.3299 780.3125,-226 C 782.2644,-226.64773 785.3699,-227.3585 787.1875,-227 C 789.05073,-226.6325 794.71875,-225.1875 794.71875,-225.1875 C 794.71876,-225.1875 788.43175,-227.05861 787.625,-227.28125 C 787.43208,-227.3345 787.09416,-227.36729 786.65625,-227.375 C 787.81459,-228.20788 791.45069,-229.57032 794.0625,-230.53125 C 796.93266,-231.58726 797.22984,-231.69305 799.1875,-232.0625 C 801.04099,-232.41229 802.04634,-232.48798 802.21875,-232.5 C 802.33235,-232.71724 802.5962,-233.31002 803.125,-233.5625 C 803.83444,-233.90124 808.05107,-235.27525 810.09375,-235.875 C 811.78692,-236.37211 814.33452,-236.91177 816.1875,-236.78125 C 816.49545,-236.75957 816.80099,-236.68399 817.0625,-236.625 C 818.94368,-236.20068 824.65625,-234.59375 824.65625,-234.59375 C 824.65626,-234.59375 818.31451,-236.659 817.5,-236.90625 C 817.30521,-236.96539 816.94212,-237.01019 816.5,-237.03125 C 817.66949,-237.8288 821.36302,-239.08747 824,-239.96875 C 826.89781,-240.93722 827.23301,-240.97207 829.21875,-241.25 C 831.2684,-241.53689 832.40625,-241.5625 832.40625,-241.5625 C 832.40623,-241.5625 832.3335,-242.16947 833.40625,-242.625 C 834.12585,-242.93057 838.39723,-244.12575 840.46875,-244.625 C 842.47119,-245.10758 845.66724,-245.55329 847.53125,-245.03125 C 849.44203,-244.4961 855.25,-242.53125 855.25,-242.53125 C 855.25,-242.53125 848.82734,-244.95476 848,-245.25 C 847.80216,-245.32061 847.41784,-245.39039 846.96875,-245.4375 C 848.15665,-246.16615 851.88402,-247.21158 854.5625,-247.9375 C 857.50592,-248.73525 857.85458,-248.70833 859.875,-248.84375 C 861.78789,-248.97198 862.82205,-248.91484 863,-248.90625 C 863.11728,-249.10991 863.39176,-249.68573 863.9375,-249.875 C 864.66969,-250.12894 869.01602,-250.92289 871.125,-251.25 C 872.87313,-251.52111 875.52588,-251.7347 877.4375,-251.34375 C 877.75516,-251.27879 878.04272,-251.15824 878.3125,-251.0625 C 880.25324,-250.37377 886.15625,-247.96875 886.15625,-247.96875 C 886.15626,-247.96875 879.62154,-250.91952 878.78125,-251.28125 C 878.58028,-251.36776 878.20612,-251.44804 877.75,-251.53125 C 878.9565,-252.16443 882.77956,-252.92685 885.5,-253.4375 C 888.48953,-253.99869 888.80023,-253.96704 890.84375,-253.96875 C 892.95301,-253.97052 894.15625,-253.84375 894.15625,-253.84375 C 894.15625,-253.84374 894.08354,-254.47494 895.1875,-254.78125 C 895.92802,-254.98672 900.31362,-255.61512 902.4375,-255.84375 C 904.49052,-256.06474 907.75613,-256.09597 909.65625,-255.375 C 911.60404,-254.63593 917.5,-252 917.5,-252 C 917.50002,-252 910.93712,-255.17897 910.09375,-255.5625 C 909.89207,-255.65423 909.55154,-255.74871 909.09375,-255.84375 C 910.30467,-256.44563 914.07817,-257.09259 916.8125,-257.5 C 919.8173,-257.94772 920.13801,-257.9517 922.1875,-257.90625 C 924.12795,-257.86323 925.19449,-257.71202 925.375,-257.6875 C 925.49392,-257.88066 925.7589,-258.45333 926.3125,-258.59375 C 927.05521,-258.78213 931.46679,-259.32803 933.59375,-259.53125 C 935.35678,-259.69967 938.01384,-259.76554 939.9375,-259.28125 C 940.25718,-259.20077 940.54101,-259.07766 940.8125,-258.96875 C 942.76543,-258.18526 948.71875,-255.5 948.71875,-255.5 C 948.71873,-255.5 942.12684,-258.75348 941.28125,-259.15625 C 941.07903,-259.25257 940.70899,-259.36328 940.25,-259.46875 C 941.46414,-260.04302 945.29366,-260.59094 948.03125,-260.96875 C 951.03963,-261.38395 951.35432,-261.41138 953.40625,-261.34375 C 955.52423,-261.27394 956.71875,-261.09375 956.71875,-261.09375 C 956.71873,-261.09375 956.6415,-261.73116 957.75,-262 C 958.49362,-262.18035 962.90176,-262.66355 965.03125,-262.84375 C 967.08972,-263.01792 970.37449,-262.96807 972.28125,-262.1875 C 974.23584,-261.38734 980.15625,-258.65625 980.15625,-258.65625 C 980.15623,-258.65625 973.59632,-261.96501 972.75,-262.375 C 972.54763,-262.47305 972.17814,-262.5781 971.71875,-262.6875 C 972.93392,-263.2514 976.72883,-263.8018 979.46875,-264.15625 C 982.47966,-264.54577 982.79006,-264.5539 984.84375,-264.46875 C 986.78814,-264.38815 987.85038,-264.21551 988.03125,-264.1875 C 988.15041,-264.37836 988.41402,-264.93281 988.96875,-265.0625 C 989.71301,-265.2365 994.11868,-265.71297 996.25,-265.875 C 998.01662,-266.00927 1000.6997,-266.00071 1002.625,-265.5 C 1002.945,-265.41679 1003.2283,-265.29873 1003.5,-265.1875 C 1005.4546,-264.38734 1011.4063,-261.625 1011.4063,-261.625 C 1011.4062,-261.625 1004.8151,-264.96501 1003.9688,-265.375 C 1003.7664,-265.47305 1003.3969,-265.57811 1002.9375,-265.6875 C 1004.1526,-266.2514 1007.9788,-266.77056 1010.7188,-267.125 C 1013.7297,-267.51453 1014.0713,-267.5539 1016.125,-267.46875 C 1018.2447,-267.38087 1019.4375,-267.15625 1019.4375,-267.15625 C 1019.4375,-267.15625 1019.3591,-267.80527 1020.4688,-268.0625 C 1021.2131,-268.23506 1025.6183,-268.68586 1027.75,-268.84375 C 1029.8106,-268.99635 1033.0929,-268.94052 1035,-268.15625 C 1036.955,-267.3523 1042.875,-264.65625 1042.875,-264.65625 C 1042.875,-264.65625 1036.3152,-267.93212 1035.4688,-268.34375 C 1035.2663,-268.44219 1034.897,-268.54597 1034.4375,-268.65625 C 1035.6529,-269.21779 1039.4494,-269.78403 1042.1875,-270.15625 C 1045.1965,-270.5653 1045.5102,-270.57183 1047.5625,-270.5 C 1049.5056,-270.43201 1050.5697,-270.33515 1050.75,-270.3125 C 1050.8688,-270.5069 1051.1346,-271.04131 1051.6875,-271.1875 C 1052.4293,-271.38362 1056.8186,-272.01628 1058.9375,-272.28125 C 1060.6939,-272.50086 1063.3428,-272.61356 1065.25,-272.25 C 1065.5669,-272.18959 1065.8558,-272.06062 1066.125,-271.96875 C 1068.0612,-271.30783 1073.9688,-269.03125 1073.9688,-269.03125 C 1073.9687,-269.03125 1067.4321,-271.8378 1066.5938,-272.1875 C 1066.3933,-272.27113 1066.0176,-272.36083 1065.5625,-272.4375 C 1066.7662,-273.08796 1070.5816,-273.80945 1073.2813,-274.4375 C 1076.248,-275.1277 1076.5702,-275.19257 1078.5938,-275.3125 C 1080.6824,-275.4363 1081.875,-275.34375 1081.875,-275.34375 C 1081.875,-275.34374 1081.788,-275.9758 1082.875,-276.375 C 1083.6042,-276.6428 1087.9222,-277.71297 1090,-278.1875 C 1092.0085,-278.64619 1095.1679,-279.2168 1097,-278.8125 C 1098.8781,-278.39804 1110.5782,-275.79687 1110.5782,-275.79687 C 1110.5782,-275.79687 1098.2507,-278.81953 1097.4375,-279.0625 C 1097.243,-279.12062 1096.8789,-279.16876 1096.4375,-279.1875 C 1097.6051,-279.99119 1099.9517,-280.8748 1102.5469,-281.89062 C 1104.2283,-282.5488 1103.4706,-282.26721 1105.3228,-282.89422 C 1107.0764,-283.48788 1107.8082,-283.90493 1107.9532,-284.00721 C 1108.2993,-284.21372 1107.5972,-284.12909 1107.409,-284.04961 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter7001);enable-background:new"
+           sodipodi:nodetypes="czscsssscssssscsssscssssscsssscssssscsssscssssscsssscssssscsssscssccsssscscsscssscscsscsssscscsscssscscsscsssscscsscssscscsscsssscscsscssscscsscsssscscsscssscscsscsssscscsscssscscsscc" />
+        <path
+           id="path8095"
+           d="M 1082.625,-275.125 C 1084.498,-274.73152 1087.1211,-273.97945 1088.6563,-273.15625 C 1090.1915,-272.33306 1091.4785,-272.10025 1094.0313,-270.65625 C 1096.5579,-269.22699 1098.8271,-268.64929 1101,-268.125 C 1103.3476,-267.55858 1106.4354,-267.40977 1109.8438,-266.9375 C 1108.7549,-267.77725 1103.2364,-268.10995 1101.4375,-268.5 C 1099.6386,-268.89006 1097.5434,-269.51616 1094.8438,-270.8125 C 1092.1441,-272.10884 1091.3494,-272.61146 1089.0313,-273.5 C 1086.7131,-274.38854 1085.0269,-274.88314 1082.625,-275.125 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter6949);enable-background:new" />
+        <path
+           id="path8097"
+           d="M 1051.4688,-270 C 1053.3741,-269.42241 1055.9969,-268.38428 1057.5625,-267.40625 C 1059.1281,-266.42823 1060.4427,-266.04644 1063.0625,-264.28125 C 1065.6555,-262.53409 1068.0484,-261.57198 1070.3125,-260.6875 C 1072.7586,-259.73193 1075.9951,-259.03037 1079.7188,-257.625 C 1078.5292,-258.76284 1072.6557,-260.31175 1070.7813,-261 C 1068.9068,-261.68825 1066.6995,-262.5662 1063.9063,-264.28125 C 1061.113,-265.99629 1060.3327,-266.56515 1057.9688,-267.6875 C 1055.6047,-268.80984 1053.9121,-269.52205 1051.4688,-270 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter6961);enable-background:new" />
+        <path
+           id="path8099"
+           d="M 1020.2188,-266.84375 C 1022.1307,-266.20564 1024.8,-265.08839 1026.375,-264.03125 C 1027.9501,-262.9741 1029.2706,-262.52258 1031.9063,-260.625 C 1034.5149,-258.74679 1036.9347,-257.59497 1039.2188,-256.5625 C 1041.6865,-255.44705 1044.9833,-254.3892 1048.75,-252.71875 C 1047.5467,-253.94128 1041.5472,-256.03298 1039.6563,-256.84375 C 1037.7653,-257.65452 1035.5914,-258.73754 1032.7813,-260.59375 C 1029.9711,-262.44995 1029.1595,-263.07068 1026.7813,-264.3125 C 1024.403,-265.5543 1022.6706,-266.28819 1020.2188,-266.84375 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter6957);enable-background:new" />
+        <path
+           id="path8101"
+           d="M 1110.1719,-266.89063 C 1110.3227,-266.84207 1110.8599,-266.25963 1110.2813,-265.40625 C 1109.4712,-264.21166 1104.5764,-262.08196 1101.7188,-261.28125 C 1098.8739,-260.48413 1095.4287,-260.30351 1091.1563,-261.65625 C 1086.8547,-263.0182 1085.6866,-264.12497 1080.5,-265.96875 C 1085.164,-263.85358 1086.6953,-262.01642 1090.625,-260.625 C 1092.2457,-260.05113 1093.9921,-259.6854 1095.6875,-259.59375 C 1095.2424,-259.26812 1094.1572,-258.61045 1092.125,-258 C 1089.3295,-257.16031 1085.4759,-256.46622 1083.875,-256.375 C 1082.3604,-256.28868 1080.733,-256.88749 1080.4375,-257 C 1080.6042,-256.89692 1080.8107,-256.62266 1080.1875,-255.96875 C 1079.2882,-255.02512 1074.0401,-254.04575 1071.0625,-253.71875 C 1068.0982,-253.3932 1064.5409,-253.73471 1060.1563,-255.625 C 1056.1783,-257.33997 1054.8173,-258.54036 1050.75,-260.375 C 1050.75,-260.375 1050.75,-260.21875 1050.75,-260.21875 C 1054.3931,-258.12346 1056.034,-256.33548 1059.625,-254.65625 C 1061.3552,-253.84716 1063.2167,-253.24749 1065.0313,-252.9375 C 1064.4964,-252.65074 1063.4735,-252.22599 1061.5938,-251.90625 C 1058.7248,-251.41829 1054.7848,-251.09011 1053.1563,-251.15625 C 1052.3056,-251.19079 1051.4277,-251.34062 1050.75,-251.5625 C 1050.0652,-251.77738 1049.5603,-252.00717 1049.4375,-252.0625 C 1049.6069,-251.95529 1049.8686,-251.65962 1049.2188,-251.03125 C 1048.3091,-250.15163 1042.9727,-249.69487 1039.9688,-249.5625 C 1036.9783,-249.43071 1033.3799,-250.01313 1028.9688,-252.125 C 1024.5276,-254.25126 1023.3273,-255.5266 1018.0625,-257.90625 C 1022.7968,-255.30921 1024.349,-253.27715 1028.4063,-251.1875 C 1030.0796,-250.32565 1031.8915,-249.69325 1033.6563,-249.25 C 1033.193,-249.01668 1032.0669,-248.56186 1029.9688,-248.3125 C 1027.0825,-247.96952 1023.1342,-247.81962 1021.5,-247.9375 C 1019.9538,-248.049 1018.2688,-248.79446 1017.9688,-248.9375 C 1018.1379,-248.81721 1018.3826,-248.52702 1017.75,-247.9375 C 1016.8372,-247.08677 1011.5059,-246.67538 1008.5,-246.5625 C 1005.5075,-246.45013 1001.9103,-247.05293 997.5,-249.15625 C 993.49875,-251.06448 992.11197,-252.29408 988.03125,-254.25 C 988.03122,-254.25 988.03125,-254.09375 988.03125,-254.09375 C 991.68631,-251.88983 993.32546,-250.0412 996.9375,-248.1875 C 998.67779,-247.29435 1000.5745,-246.65923 1002.4063,-246.21875 C 1001.8663,-245.97045 1000.8282,-245.60342 998.9375,-245.375 C 996.05182,-245.02642 992.07145,-244.85405 990.4375,-244.96875 C 989.58405,-245.02865 988.71119,-245.22666 988.03125,-245.46875 C 987.34415,-245.70405 986.8419,-245.94101 986.71875,-246 C 986.88873,-245.88773 987.18323,-245.57775 986.53125,-244.96875 C 985.6186,-244.11625 980.25592,-243.67538 977.25,-243.5625 C 974.25754,-243.45013 970.65654,-244.09055 966.25,-246.15625 C 961.81347,-248.23603 960.60312,-249.48796 955.34375,-251.8125 C 960.07313,-249.26501 961.63449,-247.2347 965.6875,-245.1875 C 967.35905,-244.34317 969.17304,-243.72107 970.9375,-243.28125 C 970.47427,-243.04703 969.3478,-242.59718 967.25,-242.34375 C 964.36431,-241.99517 960.4138,-241.77423 958.78125,-241.875 C 957.23669,-241.97032 955.58094,-242.70385 955.28125,-242.84375 C 955.45024,-242.72522 955.66317,-242.4399 955.03125,-241.84375 C 954.11939,-240.98347 948.7846,-240.5135 945.78125,-240.375 C 942.7913,-240.2371 939.2138,-240.82568 934.8125,-242.84375 C 930.81942,-244.67464 929.44739,-245.87295 925.375,-247.75 C 925.37498,-247.75 925.375,-247.59375 925.375,-247.59375 C 929.02261,-245.46048 930.64533,-243.65888 934.25,-241.875 C 935.98675,-241.01549 937.85727,-240.42486 939.6875,-240 C 939.14803,-239.7471 938.13687,-239.35871 936.25,-239.09375 C 933.37022,-238.68939 929.41187,-238.44813 927.78125,-238.53125 C 926.92953,-238.57466 926.05355,-238.7398 925.375,-238.96875 C 924.68931,-239.19076 924.1854,-239.41214 924.0625,-239.46875 C 924.23209,-239.35976 924.4944,-239.0591 923.84375,-238.4375 C 922.93296,-237.56736 917.59354,-237.04598 914.59375,-236.875 C 911.60742,-236.70479 908.01994,-237.19077 903.625,-239.15625 C 899.20011,-241.13513 898.01904,-242.38444 892.78125,-244.53125 C 897.49122,-242.14358 899.05142,-240.14252 903.09375,-238.1875 C 904.7609,-237.38119 906.55418,-236.79092 908.3125,-236.40625 C 907.85087,-236.15755 906.7155,-235.694 904.625,-235.375 C 901.7494,-234.93624 897.8446,-234.6419 896.21875,-234.6875 C 894.68052,-234.73062 892.98595,-235.43272 892.6875,-235.5625 C 892.85583,-235.44968 893.09807,-235.14875 892.46875,-234.53125 C 891.56063,-233.64015 886.2658,-233.003 883.28125,-232.71875 C 880.31007,-232.43577 876.70783,-232.89455 872.34375,-234.65625 C 868.38441,-236.25456 867.0146,-237.45112 863,-238.96875 C 863.00003,-238.96875 863,-238.8125 863,-238.8125 C 866.5959,-237.00115 868.23831,-235.23017 871.8125,-233.65625 C 873.53457,-232.8979 875.39998,-232.3673 877.21875,-232.03125 C 876.68266,-231.75217 875.65217,-231.34362 873.78125,-230.96875 C 870.92586,-230.39665 866.99183,-229.94936 865.375,-229.9375 C 864.53049,-229.93129 863.66892,-230.01844 863,-230.1875 C 862.32409,-230.34901 861.83991,-230.51673 861.71875,-230.5625 C 861.88597,-230.46848 862.14142,-230.17902 861.5,-229.5 C 860.60213,-228.54948 855.31352,-227.58292 852.375,-227.0625 C 849.44966,-226.54441 845.94285,-226.68826 841.65625,-228.09375 C 837.34045,-229.50882 836.18348,-230.62369 831.09375,-232.0625 C 835.6706,-230.31149 837.1823,-228.50244 841.125,-227.0625 C 842.75108,-226.46861 844.49385,-226.10685 846.21875,-225.90625 C 845.7659,-225.60923 844.66397,-225.02286 842.625,-224.4375 C 839.82028,-223.63233 835.98614,-222.86167 834.40625,-222.6875 C 832.9115,-222.5227 831.29002,-223.00431 831,-223.09375 C 831.16356,-223.00368 831.39278,-222.73382 830.78125,-222.03125 C 829.89878,-221.0174 824.73673,-219.6596 821.84375,-218.96875 C 818.96373,-218.28097 815.50815,-218.20873 811.28125,-219.40625 C 807.4464,-220.4927 806.10867,-221.47862 802.21875,-222.53125 C 802.21874,-222.53125 802.21875,-222.375 802.21875,-222.375 C 805.70293,-220.98015 807.28816,-219.4556 810.75,-218.34375 C 812.41793,-217.80803 814.20578,-217.55701 815.96875,-217.46875 C 815.44911,-217.11663 814.46836,-216.55423 812.65625,-215.9375 C 809.89059,-214.99625 806.06601,-214.00213 804.5,-213.78125 C 803.68206,-213.66586 802.8669,-213.65842 802.21875,-213.75 C 801.56379,-213.83321 801.08615,-213.96827 800.96875,-214 C 801.13079,-213.92536 801.40274,-213.65956 800.78125,-212.90625 C 799.91125,-211.85172 794.77162,-210.247 791.90625,-209.46875 C 789.05372,-208.69399 785.64713,-208.51055 781.46875,-209.5625 C 777.26192,-210.62163 776.11206,-211.60416 771.125,-212.71875 C 775.60954,-211.25929 777.09435,-209.58352 780.9375,-208.46875 C 782.52254,-208.00898 784.22429,-207.8305 785.90625,-207.78125 C 785.46468,-207.44449 784.39374,-206.75352 782.40625,-206 C 779.67232,-204.96351 775.95427,-203.83731 774.40625,-203.5625 C 772.94163,-203.30248 771.34667,-203.67904 771.0625,-203.75 C 771.22275,-203.67035 771.44294,-203.42902 770.84375,-202.6875 C 769.97909,-201.61744 764.92723,-199.86935 762.09375,-199 C 759.27295,-198.13453 755.88625,-197.84369 751.75,-198.78125 C 747.99741,-199.63186 746.70215,-200.49772 742.875,-201.375 C 742.875,-201.375 742.875,-201.21875 742.875,-201.21875 C 746.30296,-199.98096 747.86241,-198.58645 751.25,-197.6875 C 752.88216,-197.25436 754.61704,-197.10449 756.34375,-197.125 C 755.83482,-196.74083 754.867,-196.10318 753.09375,-195.375 C 750.38741,-194.26366 746.65742,-193.06719 745.125,-192.75 C 744.3246,-192.58431 743.51269,-192.53138 742.875,-192.59375 C 742.875,-192.59375 742.875,-192.07823 742.875,-191.67146 C 742.875,-191.40639 742.875,-191.1875 742.875,-191.1875 C 743.10145,-191.33218 743.32391,-191.46011 743.59375,-191.5625 C 744.67427,-191.97248 745.76536,-191.77827 749.59375,-193.25 C 753.42218,-194.72174 754.81787,-195.25498 755.5,-195.65625 C 756.1796,-196.05603 757.11165,-196.53562 757.71875,-197.1875 C 759.5456,-197.32525 761.2895,-197.68073 762.65625,-198.1875 C 765.62437,-199.28802 767.53162,-199.99369 769.4375,-200.65625 C 771.34336,-201.31879 771.79159,-202.07112 772.84375,-202.4375 C 773.9353,-202.81761 775.03886,-202.60288 778.90625,-203.96875 C 782.7737,-205.33461 784.18941,-205.79583 784.875,-206.1875 C 785.57609,-206.58802 786.57581,-207.12048 787.1875,-207.78125 C 789.1583,-207.83591 791.00435,-208.16588 792.46875,-208.65625 C 795.47023,-209.66133 797.3949,-210.27796 799.3125,-210.90625 C 800.8511,-211.41035 801.48652,-211.95302 802.21875,-212.34375 C 802.44891,-212.47806 802.69449,-212.59748 802.96875,-212.6875 C 804.06698,-213.04798 805.1502,-212.76887 809.0625,-214 C 812.97483,-215.23113 814.42855,-215.67295 815.125,-216.03125 C 815.81888,-216.38822 816.75515,-216.82386 817.375,-217.4375 C 819.24021,-217.46016 821.01081,-217.70433 822.40625,-218.125 C 825.43668,-219.03854 827.39863,-219.5551 829.34375,-220.09375 C 831.28886,-220.63239 831.76993,-221.35827 832.84375,-221.65625 C 833.95776,-221.9654 835.06369,-221.64886 839.03125,-222.6875 C 842.99886,-223.72613 844.44883,-224.12023 845.15625,-224.4375 C 845.89112,-224.76709 846.97008,-225.19122 847.59375,-225.8125 C 849.59149,-225.6965 851.45118,-225.83259 852.9375,-226.1875 C 856.01561,-226.9225 858.02094,-227.28844 860,-227.6875 C 861.58792,-228.00768 862.24429,-228.47805 863,-228.78125 C 863.23757,-228.88805 863.46695,-228.97401 863.75,-229.03125 C 864.88347,-229.26044 866.05448,-228.82232 870.09375,-229.53125 C 874.13308,-230.24018 875.594,-230.45834 876.3125,-230.71875 C 877.02836,-230.97819 878.01678,-231.28599 878.65625,-231.8125 C 880.58052,-231.57301 882.40413,-231.58797 883.84375,-231.8125 C 886.97008,-232.30012 888.9983,-232.51317 891,-232.78125 C 893.00171,-233.04932 893.48869,-233.72639 894.59375,-233.875 C 895.74014,-234.02918 896.86967,-233.57343 900.9375,-234.09375 C 905.00534,-234.61407 906.49763,-234.78948 907.21875,-235.03125 C 907.95585,-235.27839 909.01684,-235.61748 909.65625,-236.15625 C 911.70632,-235.82072 913.63003,-235.75829 915.15625,-235.9375 C 918.29856,-236.30646 920.33619,-236.49686 922.34375,-236.71875 C 923.95451,-236.89677 924.60842,-237.32695 925.375,-237.5625 C 925.61594,-237.64802 925.86912,-237.7181 926.15625,-237.75 C 927.30603,-237.87772 928.45754,-237.40335 932.53125,-237.875 C 936.60499,-238.34665 938.09034,-238.4856 938.8125,-238.71875 C 939.53196,-238.95102 940.51274,-239.19221 941.15625,-239.6875 C 943.09262,-239.35404 944.92631,-239.28326 946.375,-239.4375 C 949.52102,-239.77245 951.55256,-239.95609 953.5625,-240.15625 C 955.57246,-240.35639 956.04664,-240.98264 957.15625,-241.09375 C 958.30739,-241.20903 959.45268,-240.72869 963.53125,-241.15625 C 967.60986,-241.58381 969.12011,-241.71834 969.84375,-241.9375 C 970.5829,-242.16136 971.63947,-242.45075 972.28125,-242.96875 C 974.33835,-242.57008 976.28312,-242.47535 977.8125,-242.625 C 980.96123,-242.9331 982.98834,-243.09825 985,-243.28125 C 986.61407,-243.42807 987.2631,-243.8418 988.03125,-244.0625 C 988.27267,-244.14336 988.52478,-244.19241 988.8125,-244.21875 C 989.96461,-244.3242 991.10546,-243.826 995.1875,-244.21875 C 999.26958,-244.6115 1000.7764,-244.74959 1001.5,-244.96875 C 1002.2209,-245.18708 1003.1997,-245.41645 1003.8438,-245.90625 C 1005.7818,-245.55626 1007.6126,-245.45187 1009.0625,-245.59375 C 1012.2112,-245.90185 1014.2383,-246.067 1016.25,-246.25 C 1018.2616,-246.43299 1018.7642,-247.08802 1019.875,-247.1875 C 1021.0273,-247.29073 1022.1672,-246.80267 1026.25,-247.1875 C 1030.3329,-247.57232 1031.8387,-247.6885 1032.5625,-247.90625 C 1033.3018,-248.12868 1034.3581,-248.42074 1035,-248.9375 C 1037.0574,-248.53573 1039.0029,-248.43417 1040.5313,-248.59375 C 1043.6779,-248.92227 1045.7084,-249.11645 1047.7188,-249.3125 C 1049.3318,-249.46979 1049.9844,-249.94398 1050.75,-250.1875 C 1050.9907,-250.27554 1051.2132,-250.30887 1051.5,-250.34375 C 1052.6483,-250.48345 1053.8167,-250.00384 1057.875,-250.59375 C 1061.9333,-251.18367 1063.4368,-251.37089 1064.1563,-251.625 C 1064.873,-251.87816 1065.8308,-252.18307 1066.4688,-252.71875 C 1068.3885,-252.50681 1070.1887,-252.56734 1071.625,-252.8125 C 1074.7441,-253.3449 1076.7366,-253.74111 1078.7188,-254.125 C 1080.7009,-254.50887 1081.1931,-255.16465 1082.2813,-255.40625 C 1083.4101,-255.65691 1084.5516,-255.28996 1088.5313,-256.28125 C 1092.5109,-257.27253 1093.9609,-257.70055 1094.6563,-258.0625 C 1095.3786,-258.43851 1096.4182,-258.93308 1097.0313,-259.59375 C 1098.9943,-259.6058 1100.825,-259.8848 1102.25,-260.4375 C 1105.2012,-261.58211 1107.1232,-262.30692 1108.9375,-263.1875 C 1110.3932,-263.89403 1111.2723,-264.87391 1111.4844,-265.17188 C 1111.6966,-265.46984 1111.5962,-265.91718 1111.6223,-265.93863 C 1111.6652,-265.97387 1111.9416,-266.0236 1112.1013,-266.36707 C 1112.9602,-268.21415 1114.4223,-272.01166 1114.5365,-272.69652 C 1114.6502,-273.37868 1114.7003,-274.04426 1114.751,-274.44149 C 1114.7804,-274.67101 1114.6043,-275.30693 1114.6264,-275.36553 C 1114.6573,-275.44759 1114.9309,-275.63081 1114.9863,-275.88024 C 1115.2526,-277.07857 1115.0752,-278.07153 1114.8612,-279.48917 C 1114.6472,-280.90681 1113.8775,-284.11131 1113.2243,-284.96543 C 1112.5654,-285.82715 1112.0014,-285.9766 1111.4764,-285.96609 C 1111.2678,-285.69633 1111.6132,-285.703 1111.639,-285.65348 C 1112.3196,-285.60269 1112.573,-285.28484 1113.0582,-284.75686 C 1113.5434,-284.22888 1114.501,-280.8173 1114.6376,-279.36691 C 1114.7742,-277.91652 1114.8276,-276.50671 1114.5496,-275.89827 C 1114.2715,-275.28982 1113.6054,-275.46963 1113.313,-275.40375 C 1113.844,-275.21786 1114.2038,-275.19053 1114.2654,-274.34607 C 1114.3247,-273.53269 1114.1322,-272.70638 1113.7456,-271.54045 C 1113.3544,-270.36044 1111.9004,-267.19047 1111.4599,-266.94168 C 1111.0076,-266.68617 1110.5075,-266.75969 1110.1719,-266.89063 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter6997);enable-background:new"
+           sodipodi:nodetypes="cssscscsscsssccscssssssscscsscsssscscssssssscscsscsssscscssssssscscsscsssscscssssssscscsscsssscscssssssscscsscsssccscsscscssscssssscsssssscssssscsssssscssssscsssssscssssscsssssscssssscsssssscssssscsszsszssszzcczzzczzzc" />
+        <path
+           id="path8103"
+           d="M 988.75,-263.84375 C 990.66161,-263.20935 993.30027,-262.08534 994.875,-261.03125 C 996.44977,-259.97716 997.7711,-259.54873 1000.4063,-257.65625 C 1003.0145,-255.78311 1005.4332,-254.64103 1007.7188,-253.59375 C 1010.1881,-252.46228 1013.4709,-251.43901 1017.25,-249.65625 C 1016.0428,-250.91465 1010.111,-253.0207 1008.2188,-253.84375 C 1006.3266,-254.66679 1004.0908,-255.77424 1001.2813,-257.625 C 998.47169,-259.47575 997.65906,-260.10654 995.28125,-261.34375 C 992.90343,-262.58094 991.20137,-263.29295 988.75,-263.84375 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter6953);enable-background:new" />
+        <path
+           id="path8105"
+           d="M 957.5,-260.78125 C 959.41,-260.16315 962.08288,-259.07191 963.65625,-258.03125 C 965.22964,-256.99059 966.55233,-256.54873 969.1875,-254.65625 C 971.79573,-252.7831 974.21442,-251.64104 976.5,-250.59375 C 978.96931,-249.46228 982.25213,-248.439 986.03125,-246.65625 C 984.82397,-247.91465 978.82971,-250.05195 976.9375,-250.875 C 975.04533,-251.69804 972.84084,-252.8055 970.03125,-254.65625 C 967.22167,-256.507 966.4383,-257.09557 964.0625,-258.3125 C 961.68672,-259.52941 959.94929,-260.25135 957.5,-260.78125 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter6993);enable-background:new" />
+        <path
+           id="path8107"
+           d="M 926.09375,-257.375 C 928.00147,-256.77755 930.64723,-255.71116 932.21875,-254.6875 C 933.79025,-253.66385 935.08897,-253.24779 937.71875,-251.40625 C 940.32166,-249.58352 942.74762,-248.43405 945.03125,-247.40625 C 947.49845,-246.29584 950.7866,-245.31302 954.5625,-243.5625 C 953.35627,-244.8106 947.3906,-246.88059 945.5,-247.6875 C 943.60942,-248.4944 941.39758,-249.57854 938.59375,-251.375 C 935.7899,-253.17144 934.96671,-253.77751 932.59375,-254.96875 C 930.22078,-256.15999 928.54013,-256.87158 926.09375,-257.375 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter6989);enable-background:new" />
+        <path
+           id="path8109"
+           d="M 894.90625,-253.5625 C 896.80838,-253.00895 899.49326,-251.97363 901.0625,-250.96875 C 902.63173,-249.96388 903.93651,-249.56011 906.5625,-247.75 C 909.16162,-245.95836 911.56284,-244.87811 913.84375,-243.875 C 916.30803,-242.79126 919.60359,-241.83471 923.375,-240.125 C 922.1702,-241.36007 916.20084,-243.36978 914.3125,-244.15625 C 912.42418,-244.94272 910.2373,-245.98705 907.4375,-247.75 C 904.63773,-249.51294 903.83831,-250.11836 901.46875,-251.28125 C 899.09918,-252.44413 897.3455,-253.11537 894.90625,-253.5625 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter6985);enable-background:new" />
+        <path
+           id="path8111"
+           d="M 863.71875,-248.65625 C 865.59937,-248.22716 868.22302,-247.27587 869.78125,-246.34375 C 871.33948,-245.41164 872.63358,-245.08599 875.25,-243.34375 C 877.83971,-241.61931 880.23067,-240.63573 882.5,-239.71875 C 884.95176,-238.72806 888.23959,-237.84168 892,-236.21875 C 890.79869,-237.42609 884.84751,-239.28484 882.96875,-240 C 881.09,-240.71517 878.88335,-241.68442 876.09375,-243.375 C 873.30412,-245.06557 872.50914,-245.60322 870.15625,-246.65625 C 867.80333,-247.70926 866.13041,-248.36873 863.71875,-248.65625 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter6965);enable-background:new" />
+        <path
+           id="path8113"
+           d="M 833.15625,-241.375 C 835.00461,-241.07856 837.6257,-240.39868 839.15625,-239.59375 C 840.68683,-238.78882 841.96999,-238.53802 844.53125,-237.0625 C 847.06629,-235.60204 849.42193,-234.73741 851.65625,-234 C 854.07024,-233.20332 857.31336,-232.53311 861.03125,-231.15625 C 859.84354,-232.28498 853.94353,-233.746 852.09375,-234.3125 C 850.24398,-234.879 848.09033,-235.68642 845.34375,-237.15625 C 842.59718,-238.62608 841.84239,-239.07653 839.53125,-239.9375 C 837.2201,-240.79845 835.52654,-241.25759 833.15625,-241.375 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter6981);enable-background:new" />
+        <path
+           id="path8115"
+           d="M 802.90625,-232.3125 C 804.72845,-232.10123 807.27201,-231.51193 808.78125,-230.78125 C 810.2905,-230.05059 811.53693,-229.85127 814.0625,-228.5 C 816.56226,-227.16254 818.89404,-226.45157 821.09375,-225.84375 C 823.47028,-225.18708 826.65839,-224.77087 830.3125,-223.65625 C 829.14515,-224.70121 823.38362,-225.75954 821.5625,-226.21875 C 819.74139,-226.67796 817.61025,-227.34571 814.90625,-228.65625 C 812.20222,-229.96677 811.43519,-230.37615 809.15625,-231.125 C 806.8773,-231.87383 805.243,-232.30431 802.90625,-232.3125 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter6977);enable-background:new" />
+        <path
+           id="path8117"
+           d="M 773.1875,-222.1875 C 774.99859,-222.0088 777.50809,-221.52244 779,-220.84375 C 780.49194,-220.16506 781.7534,-220.04553 784.25,-218.78125 C 786.72107,-217.52987 789.04005,-216.88511 791.21875,-216.34375 C 793.57262,-215.75887 796.71009,-215.44623 800.3125,-214.5 C 799.16166,-215.49116 793.45999,-216.2833 791.65625,-216.6875 C 789.85253,-217.0917 787.74072,-217.70866 785.0625,-218.9375 C 782.38432,-220.16634 781.65905,-220.54839 779.40625,-221.21875 C 777.15346,-221.88909 775.50998,-222.22107 773.1875,-222.1875 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter6973);enable-background:new" />
+        <path
+           id="path8119"
+           d="M 743.5625,-211.1875 C 745.35531,-211.05839 747.83563,-210.63785 749.3125,-210 C 750.7894,-209.36215 752.0286,-209.25844 754.5,-208.0625 C 756.94618,-206.87878 759.22054,-206.31584 761.375,-205.84375 C 763.70267,-205.33372 766.7946,-205.16311 770.375,-204.28125 C 769.23121,-205.25185 763.62741,-205.8719 761.84375,-206.21875 C 760.06008,-206.56559 757.9609,-207.10631 755.3125,-208.25 C 752.66409,-209.39368 751.91755,-209.76631 749.6875,-210.375 C 747.45742,-210.98368 745.86156,-211.28466 743.5625,-211.1875 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter6969);enable-background:new" />
+        <g
+           id="g8121"
+           style="fill:#ffffff;fill-opacity:1;filter:url(#filter7345)">
+          <path
+             sodipodi:nodetypes="czzzczzc"
+             id="path8123"
+             d="M 744.9375,-212.11731 C 744.9375,-212.11731 752.15979,-215.34049 754,-215.61731 C 755.84021,-215.89413 757.35225,-215.62054 760,-215.05481 C 762.64775,-214.48908 768.7357,-212.83963 771.1875,-211.67981 C 773.6393,-210.51999 776.5,-208.11731 776.5,-208.11731 C 776.5,-208.11731 769.35356,-210.8975 766.3125,-211.67981 C 763.27144,-212.46212 758.66789,-213.76355 755.9375,-213.99231 C 753.20711,-214.22107 744.9375,-212.11731 744.9375,-212.11731 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+          <path
+             sodipodi:nodetypes="czzzczzc"
+             id="path8125"
+             d="M 735.46875,-206.95416 C 735.46875,-206.95416 739.12854,-209.17734 740.96875,-209.45416 C 742.80896,-209.73098 744.6335,-209.20739 747.28125,-208.64166 C 749.929,-208.07593 756.01695,-206.42648 758.46875,-205.26666 C 760.92055,-204.10684 765.03125,-203.14166 765.03125,-203.14166 C 765.03125,-203.14166 756.63481,-204.48435 753.59375,-205.26666 C 750.55269,-206.04897 745.63664,-207.6004 742.90625,-207.82916 C 740.17586,-208.05792 735.46875,-206.95416 735.46875,-206.95416 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <path
+             sodipodi:nodetypes="czzzczzc"
+             id="path8127"
+             d="M 759.85042,-217.61116 C 759.85042,-217.61116 768.39412,-220.90973 770.2482,-221.06902 C 772.10229,-221.22832 773.88986,-220.58982 776.4963,-219.85694 C 779.10274,-219.12406 785.07354,-217.091 787.44666,-215.77769 C 789.81978,-214.46438 793.86083,-213.23987 793.86083,-213.23987 C 793.86083,-213.23987 785.5667,-215.11352 782.58152,-216.08754 C 779.59633,-217.06156 774.78883,-218.92232 772.0785,-219.32416 C 769.36817,-219.726 759.85042,-217.61116 759.85042,-217.61116 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <path
+             sodipodi:nodetypes="czzzczzc"
+             id="path8129"
+             d="M 775.19813,-223.2266 C 775.19813,-223.2266 782.96946,-226.00904 784.82644,-226.13009 C 786.68341,-226.25113 788.45744,-225.57592 791.04822,-224.78947 C 793.63899,-224.00302 799.56662,-221.8473 801.91216,-220.48535 C 804.25771,-219.1234 808.27265,-217.81585 808.27265,-217.81585 C 808.27265,-217.81585 800.01892,-219.86008 797.05444,-220.89543 C 794.08997,-221.93078 789.32185,-223.89024 786.62038,-224.34786 C 783.91891,-224.80549 775.19813,-223.2266 775.19813,-223.2266 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <path
+             inkscape:transform-center-y="-4.3190906"
+             inkscape:transform-center-x="13.852145"
+             sodipodi:nodetypes="czzzczzc"
+             id="path8131"
+             d="M 789.64298,-227.95417 C 789.64298,-227.95417 798.32554,-231.47448 800.18452,-231.55952 C 802.04349,-231.64455 803.8041,-230.9351 806.37915,-230.09859 C 808.9542,-229.2621 814.83894,-226.99193 817.15766,-225.58479 C 819.47638,-224.17764 823.46523,-222.79255 823.46523,-222.79255 C 823.46523,-222.79255 815.25266,-224.99632 812.3088,-226.08891 C 809.36494,-227.1815 804.63568,-229.23299 801.94358,-229.74288 C 799.25149,-230.25276 789.64298,-227.95417 789.64298,-227.95417 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <path
+             inkscape:transform-center-y="-4.3190906"
+             inkscape:transform-center-x="13.852145"
+             sodipodi:nodetypes="czzzczzc"
+             id="path8133"
+             d="M 804.49513,-233.32948 C 804.49513,-233.32948 812.30269,-235.91229 814.16167,-235.99733 C 816.02064,-236.08236 817.78125,-235.37291 820.3563,-234.5364 C 822.93135,-233.69991 828.81609,-231.42974 831.13481,-230.0226 C 833.45353,-228.61545 837.44238,-227.23036 837.44238,-227.23036 C 837.44238,-227.23036 829.22981,-229.43413 826.28595,-230.52672 C 823.34209,-231.61931 818.61283,-233.6708 815.92073,-234.18069 C 813.22864,-234.69057 804.49513,-233.32948 804.49513,-233.32948 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <path
+             inkscape:transform-center-y="-4.3190906"
+             inkscape:transform-center-x="13.852145"
+             sodipodi:nodetypes="czzzczzc"
+             id="path8135"
+             d="M 819.55763,-237.57948 C 819.55763,-237.57948 828.11519,-240.16229 829.97417,-240.24733 C 831.83314,-240.33236 833.59375,-239.62291 836.1688,-238.7864 C 838.74385,-237.94991 844.62859,-235.67974 846.94731,-234.2726 C 849.26603,-232.86545 853.25488,-231.48036 853.25488,-231.48036 C 853.25488,-231.48036 845.04231,-233.68413 842.09845,-234.77672 C 839.15459,-235.86931 834.42533,-237.9208 831.73323,-238.43069 C 829.04114,-238.94057 819.55763,-237.57948 819.55763,-237.57948 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <path
+             inkscape:transform-center-y="-4.9269042"
+             inkscape:transform-center-x="13.64141"
+             sodipodi:nodetypes="czzzczzc"
+             id="path8137"
+             d="M 836.23395,-242.60125 C 836.23395,-242.60125 843.20097,-244.58848 845.06179,-244.56882 C 846.9226,-244.54915 848.64052,-243.7418 851.16444,-242.76177 C 853.68837,-241.78177 859.4361,-239.18419 861.672,-237.64886 C 863.9079,-236.11351 867.81253,-234.50625 867.81253,-234.50625 C 867.81253,-234.50625 859.73692,-237.16847 856.85917,-238.42491 C 853.98143,-239.68136 849.37505,-241.99561 846.71589,-242.65612 C 844.05674,-243.31661 836.23395,-242.60125 836.23395,-242.60125 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <path
+             inkscape:transform-center-y="-5.1542119"
+             inkscape:transform-center-x="13.55068"
+             sodipodi:nodetypes="czzzczzc"
+             id="path8139"
+             d="M 850.73028,-246.00461 C 850.73028,-246.00461 858.41812,-248.03229 860.2781,-247.97315 C 862.13807,-247.914 863.83848,-247.07036 866.34103,-246.03699 C 868.84358,-245.00365 874.5349,-242.28467 876.73771,-240.70224 C 878.94053,-239.11979 882.81016,-237.43004 882.81016,-237.43004 C 882.81016,-237.43004 874.79287,-240.26302 871.94244,-241.58026 C 869.09201,-242.89749 864.53578,-245.30898 861.89124,-246.02576 C 859.2467,-246.74254 850.73028,-246.00461 850.73028,-246.00461 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <path
+             inkscape:transform-center-y="-5.4740887"
+             inkscape:transform-center-x="13.41151"
+             sodipodi:nodetypes="czzzczzc"
+             id="path8141"
+             d="M 864.82496,-249.21081 C 864.82496,-249.21081 872.99448,-251.17987 874.85184,-251.06477 C 876.70919,-250.94965 878.38342,-250.05521 880.85374,-248.94698 C 883.32405,-247.83877 888.93094,-244.94971 891.08512,-243.30167 C 893.2393,-241.65363 897.05632,-239.84815 897.05632,-239.84815 C 897.05632,-239.84815 889.12793,-242.92121 886.31845,-244.32365 C 883.50896,-245.72609 879.02739,-248.27364 876.40562,-249.06971 C 873.78386,-249.86577 864.82496,-249.21081 864.82496,-249.21081 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <path
+             inkscape:transform-center-y="-5.79376"
+             inkscape:transform-center-x="13.258805"
+             sodipodi:nodetypes="czzzczzc"
+             id="path8143"
+             d="M 881.38485,-251.60282 C 881.38485,-251.60282 889.47021,-253.51091 891.32322,-253.33946 C 893.17622,-253.16799 894.82252,-252.22313 897.25804,-251.04038 C 899.69357,-249.85767 905.21013,-246.79968 907.31327,-245.08699 C 909.41641,-243.37429 913.17684,-241.45373 913.17684,-241.45373 C 913.17684,-241.45373 905.34544,-244.76613 902.57984,-246.25323 C 899.81423,-247.74035 895.41209,-250.42282 892.8157,-251.29814 C 890.21933,-252.17345 881.38485,-251.60282 881.38485,-251.60282 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <path
+             inkscape:transform-center-y="-5.7433893"
+             inkscape:transform-center-x="13.28378"
+             sodipodi:nodetypes="czzzczzc"
+             id="path8145"
+             d="M 896.58415,-254.34724 C 896.58415,-254.34724 904.22581,-255.77494 906.07962,-255.61239 C 907.93342,-255.44983 909.58424,-254.51289 912.02541,-253.34186 C 914.46659,-252.17086 919.99779,-249.1394 922.10913,-247.43684 C 924.22047,-245.73426 927.99009,-243.83179 927.99009,-243.83179 C 927.99009,-243.83179 920.14286,-247.10653 917.37014,-248.58034 C 914.59743,-250.05414 910.18245,-252.71543 907.58189,-253.57827 C 904.98134,-254.44109 896.58415,-254.34724 896.58415,-254.34724 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <path
+             inkscape:transform-center-y="-5.7433893"
+             inkscape:transform-center-x="13.28378"
+             sodipodi:nodetypes="czzzczzc"
+             id="path8147"
+             d="M 911.45328,-255.98544 C 911.45328,-255.98544 920.09494,-257.53814 921.94875,-257.37559 C 923.80255,-257.21303 925.45337,-256.27609 927.89454,-255.10506 C 930.33572,-253.93406 935.86692,-250.9026 937.97826,-249.20004 C 940.0896,-247.49746 943.85922,-245.59499 943.85922,-245.59499 C 943.85922,-245.59499 936.01199,-248.86973 933.23927,-250.34354 C 930.46656,-251.81734 926.05158,-254.47863 923.45102,-255.34147 C 920.85047,-256.20429 911.45328,-255.98544 911.45328,-255.98544 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <path
+             inkscape:transform-center-y="-5.7433893"
+             inkscape:transform-center-x="13.28378"
+             sodipodi:nodetypes="czzzczzc"
+             id="path8149"
+             d="M 927.70328,-258.29794 C 927.70328,-258.29794 935.34494,-259.16314 937.19875,-259.00059 C 939.05255,-258.83803 940.70337,-257.90109 943.14454,-256.73006 C 945.58572,-255.55906 951.11692,-252.5276 953.22826,-250.82504 C 955.3396,-249.12246 959.10922,-247.21999 959.10922,-247.21999 C 959.10922,-247.21999 951.26199,-250.49473 948.48927,-251.96854 C 945.71656,-253.44234 941.30158,-256.10363 938.70102,-256.96647 C 936.10047,-257.82929 927.70328,-258.29794 927.70328,-258.29794 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <path
+             inkscape:transform-center-y="-5.7433893"
+             inkscape:transform-center-x="13.28378"
+             sodipodi:nodetypes="czzzczzc"
+             id="path8151"
+             d="M 942.82828,-259.48544 C 942.82828,-259.48544 951.40744,-260.97564 953.26125,-260.81309 C 955.11505,-260.65053 956.76587,-259.71359 959.20704,-258.54256 C 961.64822,-257.37156 967.17942,-254.3401 969.29076,-252.63754 C 971.4021,-250.93496 975.17172,-249.03249 975.17172,-249.03249 C 975.17172,-249.03249 967.32449,-252.30723 964.55177,-253.78104 C 961.77906,-255.25484 957.36408,-257.91613 954.76352,-258.77897 C 952.16297,-259.64179 942.82828,-259.48544 942.82828,-259.48544 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <path
+             inkscape:transform-center-y="-5.7433893"
+             inkscape:transform-center-x="13.28378"
+             sodipodi:nodetypes="czzzczzc"
+             id="path8153"
+             d="M 959.07828,-261.54794 C 959.07828,-261.54794 966.90744,-262.35064 968.76125,-262.18809 C 970.61505,-262.02553 972.26587,-261.08859 974.70704,-259.91756 C 977.14822,-258.74656 982.67942,-255.7151 984.79076,-254.01254 C 986.9021,-252.30996 990.67172,-250.40749 990.67172,-250.40749 C 990.67172,-250.40749 982.82449,-253.68223 980.05177,-255.15604 C 977.27906,-256.62984 972.86408,-259.29113 970.26352,-260.15397 C 967.66297,-261.01679 959.07828,-261.54794 959.07828,-261.54794 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <path
+             inkscape:transform-center-y="-5.7433893"
+             inkscape:transform-center-x="13.28378"
+             sodipodi:nodetypes="czzzczzc"
+             id="path8155"
+             d="M 974.45328,-262.79794 C 974.45328,-262.79794 982.84494,-263.97564 984.69875,-263.81309 C 986.55255,-263.65053 988.20337,-262.71359 990.64454,-261.54256 C 993.08572,-260.37156 998.61692,-257.3401 1000.7283,-255.63754 C 1002.8396,-253.93496 1006.6092,-252.03249 1006.6092,-252.03249 C 1006.6092,-252.03249 998.76199,-255.30723 995.98927,-256.78104 C 993.21656,-258.25484 988.80158,-260.91613 986.20102,-261.77897 C 983.60047,-262.64179 974.45328,-262.79794 974.45328,-262.79794 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <path
+             inkscape:transform-center-y="-5.7433893"
+             inkscape:transform-center-x="13.28378"
+             sodipodi:nodetypes="czzzczzc"
+             id="path8157"
+             d="M 990.64078,-264.86044 C 990.64078,-264.86044 997.53244,-265.85064 999.38625,-265.68809 C 1001.2401,-265.52553 1002.8909,-264.58859 1005.332,-263.41756 C 1007.7732,-262.24656 1013.3044,-259.2151 1015.4158,-257.51254 C 1017.5271,-255.80996 1021.2967,-253.90749 1021.2967,-253.90749 C 1021.2967,-253.90749 1013.4495,-257.18223 1010.6768,-258.65604 C 1007.9041,-260.12984 1003.4891,-262.79113 1000.8885,-263.65397 C 998.28797,-264.51679 990.64078,-264.86044 990.64078,-264.86044 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <path
+             inkscape:transform-center-y="-5.7433893"
+             inkscape:transform-center-x="13.28378"
+             sodipodi:nodetypes="czzzczzc"
+             id="path8159"
+             d="M 1007.7658,-265.79794 C 1007.7658,-265.79794 1014.5949,-266.97564 1016.4488,-266.81309 C 1018.3026,-266.65053 1019.9534,-265.71359 1022.3945,-264.54256 C 1024.8357,-263.37156 1030.3669,-260.3401 1032.4783,-258.63754 C 1034.5896,-256.93496 1038.3592,-255.03249 1038.3592,-255.03249 C 1038.3592,-255.03249 1030.512,-258.30723 1027.7393,-259.78104 C 1024.9666,-261.25484 1020.5516,-263.91613 1017.951,-264.77897 C 1015.3505,-265.64179 1007.7658,-265.79794 1007.7658,-265.79794 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <path
+             inkscape:transform-center-y="-5.7433893"
+             inkscape:transform-center-x="13.28378"
+             sodipodi:nodetypes="czzzczzc"
+             id="path8161"
+             d="M 1023.8908,-267.79794 C 1023.8908,-267.79794 1029.9699,-268.22564 1031.8238,-268.06309 C 1033.6776,-267.90053 1035.3284,-266.96359 1037.7695,-265.79256 C 1040.2107,-264.62156 1045.7419,-261.5901 1047.8533,-259.88754 C 1049.9646,-258.18496 1053.7342,-256.28249 1053.7342,-256.28249 C 1053.7342,-256.28249 1045.887,-259.55723 1043.1143,-261.03104 C 1040.3416,-262.50484 1035.9266,-265.16613 1033.326,-266.02897 C 1030.7255,-266.89179 1023.8908,-267.79794 1023.8908,-267.79794 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <path
+             inkscape:transform-center-y="-5.7433893"
+             inkscape:transform-center-x="13.28378"
+             sodipodi:nodetypes="czzzczzc"
+             id="path8163"
+             d="M 1039.7033,-269.17294 C 1039.7033,-269.17294 1046.1574,-269.85064 1048.0113,-269.68809 C 1049.8651,-269.52553 1051.5159,-268.58859 1053.957,-267.41756 C 1056.3982,-266.24656 1061.9294,-263.2151 1064.0408,-261.51254 C 1066.1521,-259.80996 1069.9217,-257.90749 1069.9217,-257.90749 C 1069.9217,-257.90749 1062.0745,-261.18223 1059.3018,-262.65604 C 1056.5291,-264.12984 1052.1141,-266.79113 1049.5135,-267.65397 C 1046.913,-268.51679 1039.7033,-269.17294 1039.7033,-269.17294 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <path
+             inkscape:transform-center-y="-5.1360724"
+             inkscape:transform-center-x="13.55813"
+             sodipodi:nodetypes="czzzczzc"
+             id="path8165"
+             d="M 1055.2718,-271.03319 C 1055.2718,-271.03319 1060.7694,-271.94264 1062.6296,-271.88667 C 1064.4897,-271.83067 1066.1915,-270.98993 1068.6957,-269.96081 C 1071.2001,-268.93171 1076.896,-266.22241 1079.1015,-264.64372 C 1081.307,-263.06501 1085.1795,-261.38182 1085.1795,-261.38182 C 1085.1795,-261.38182 1077.1575,-264.20121 1074.3047,-265.5136 C 1071.4521,-266.82598 1066.8918,-269.22973 1064.246,-269.94203 C 1061.6003,-270.65431 1055.2718,-271.03319 1055.2718,-271.03319 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <path
+             inkscape:transform-center-y="-4.6370147"
+             inkscape:transform-center-x="13.74758"
+             sodipodi:nodetypes="czzzczzc"
+             id="path8167"
+             d="M 1072.7007,-273.48537 C 1072.7007,-273.48537 1077.2479,-274.64118 1079.1087,-274.67158 C 1080.9694,-274.70196 1082.7083,-273.94109 1085.2576,-273.02927 C 1087.807,-272.1175 1093.6225,-269.67541 1095.899,-268.20077 C 1098.1753,-266.72609 1102.1217,-265.22441 1102.1217,-265.22441 C 1102.1217,-265.22441 1093.9775,-267.66852 1091.067,-268.84713 C 1088.1565,-270.02573 1083.4896,-272.21528 1080.8136,-272.80404 C 1078.1377,-273.39279 1072.7007,-273.48537 1072.7007,-273.48537 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <path
+             inkscape:transform-center-y="-4.4842392"
+             inkscape:transform-center-x="13.79933"
+             sodipodi:nodetypes="czzzczzc"
+             id="path8169"
+             d="M 1087.1585,-276.5244 C 1087.1585,-276.5244 1093.1185,-278.29795 1094.9787,-278.35464 C 1096.8387,-278.41131 1098.5883,-277.67509 1101.1502,-276.79939 C 1103.7122,-275.92373 1103.6728,-275.94226 1106.4837,-275.30924 C 1109.2806,-274.67938 1113.5604,-273.79611 1113.5604,-273.79611 C 1113.5604,-273.79611 1109.9449,-273.81239 1106.7681,-274.26225 C 1103.6526,-274.70344 1099.3938,-275.9605 1096.7097,-276.51138 C 1094.0258,-277.06226 1087.1585,-276.5244 1087.1585,-276.5244 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+          <path
+             sodipodi:nodetypes="czczc"
+             id="path8171"
+             d="M 1099.25,-279.92981 C 1099.4112,-279.66119 1110.4581,-284.53027 1111.4375,-284.61731 C 1112.4169,-284.70435 1113.4375,-281.49231 1113.4375,-281.49231 C 1113.4375,-281.49231 1112.6624,-282.99665 1110.5625,-282.55481 C 1108.4626,-282.11297 1099.2616,-279.8834 1099.25,-279.92981 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+        </g>
+        <path
+           id="path8173"
+           d="M 1107.4532,-284.0938 C 1107.0345,-283.88097 1107.2976,-283.99991 1106.806,-283.78799 C 1106.3199,-283.57845 1105.0826,-283.2136 1102.7264,-282.32904 C 1099.3953,-281.07847 1096.8962,-280.1756 1095.7005,-279.26294 C 1094.1644,-279.24168 1091.98,-279.02963 1090.0442,-278.54419 C 1087.0627,-277.79653 1085.189,-277.37018 1083.2942,-276.95044 C 1081.3994,-276.53072 1081.6187,-276.30825 1080.4192,-276.07544 C 1079.1226,-275.82378 1078.6978,-276.08443 1074.9817,-275.29419 C 1071.4918,-274.55205 1066.0869,-273.36312 1064.8255,-272.60669 C 1063.2416,-272.78748 1060.958,-272.92847 1058.9817,-272.63794 C 1055.9413,-272.19099 1054.0655,-271.96518 1052.138,-271.73169 C 1051.4826,-271.65232 1051.0969,-271.53091 1050.7942,-271.45044 C 1050.368,-271.31879 1050.1084,-271.19042 1049.4192,-271.10669 C 1048.1076,-270.94733 1047.657,-271.26352 1043.888,-270.82544 C 1040.3341,-270.41236 1034.8826,-269.55262 1033.638,-268.88794 C 1032.039,-269.18524 1029.7802,-269.42213 1027.7942,-269.23169 C 1024.7354,-268.93838 1022.8222,-268.7477 1020.888,-268.57544 C 1018.9537,-268.40318 1019.1993,-268.15307 1017.9817,-268.04419 C 1016.6655,-267.9265 1016.2219,-268.20782 1012.4505,-267.79419 C 1008.9086,-267.40575 1003.4426,-266.58492 1002.1692,-265.91919 C 1000.5703,-266.21389 998.28202,-266.4262 996.29419,-266.23169 C 993.23595,-265.93245 991.35306,-265.75145 989.41919,-265.57544 C 988.7617,-265.5156 988.37915,-265.39688 988.07544,-265.32544 C 987.64779,-265.20649 987.39193,-265.10737 986.70044,-265.04419 C 985.38448,-264.92394 984.94068,-265.23907 981.16919,-264.82544 C 977.61305,-264.43543 972.16365,-263.58628 970.91919,-262.91919 C 969.32056,-263.21338 967.05935,-263.44291 965.07544,-263.23169 C 962.01984,-262.90637 960.1014,-262.70545 958.16919,-262.51294 C 956.23698,-262.32044 956.47932,-262.07206 955.26294,-261.95044 C 953.94806,-261.81898 953.49996,-262.11498 949.73169,-261.66919 C 946.19282,-261.25054 940.75401,-260.37702 939.48169,-259.70044 C 937.88414,-259.98149 935.62173,-260.12087 933.63794,-259.88794 C 930.58596,-259.52958 928.69286,-259.32008 926.76294,-259.10669 C 926.10674,-259.03414 925.72228,-258.934 925.41919,-258.85669 C 924.99242,-258.72947 924.73428,-258.58949 924.04419,-258.51294 C 922.73086,-258.36726 922.27673,-258.68696 918.51294,-258.20044 C 914.96405,-257.74169 909.53431,-256.78142 908.29419,-256.07544 C 906.70114,-256.31968 904.46038,-256.45679 902.48169,-256.20044 C 899.4341,-255.80563 897.53098,-255.55199 895.60669,-255.29419 C 893.68241,-255.0364 893.88058,-254.80066 892.66919,-254.63794 C 891.35973,-254.46204 890.922,-254.74232 887.16919,-254.16919 C 883.6449,-253.63095 878.24604,-252.47002 876.98169,-251.73169 C 875.39419,-251.93523 873.13619,-251.98642 871.16919,-251.63794 C 868.14302,-251.10182 866.2703,-250.77625 864.35669,-250.45044 C 863.70608,-250.33967 863.34298,-250.1795 863.04419,-250.07544 C 862.62352,-249.91056 862.38074,-249.74414 861.70044,-249.60669 C 860.40579,-249.3451 859.97332,-249.61289 856.26294,-248.79419 C 852.76441,-248.02224 847.41699,-246.41126 846.20044,-245.57544 C 844.63766,-245.65289 842.44286,-245.49016 840.51294,-244.98169 C 837.5405,-244.19856 835.69533,-243.7496 833.82544,-243.23169 C 831.95556,-242.71379 832.15884,-242.46441 830.98169,-242.13794 C 829.70923,-241.78504 829.28466,-242.03085 825.63794,-240.95044 C 822.21324,-239.93581 816.9885,-238.01727 815.76294,-237.10669 C 814.22411,-237.09395 812.04311,-236.83447 810.13794,-236.23169 C 807.20688,-235.30435 805.38763,-234.77327 803.54419,-234.16919 C 802.91743,-233.96381 802.55246,-233.77661 802.26294,-233.63794 C 801.85531,-233.42433 801.6096,-233.22919 800.95044,-233.01294 C 799.69598,-232.6014 799.26433,-232.8239 795.66919,-231.57544 C 792.27934,-230.39827 787.07421,-228.36174 785.88794,-227.41919 C 784.36405,-227.35952 782.23789,-227.02432 780.35669,-226.35669 C 777.4593,-225.3284 775.65761,-224.68121 773.82544,-224.04419 C 771.99327,-223.40718 772.19759,-223.19565 771.04419,-222.79419 C 769.79741,-222.36023 769.38058,-222.59447 765.82544,-221.23169 C 762.48677,-219.95189 757.33829,-217.74914 756.13794,-216.76294 C 754.63076,-216.65525 752.50225,-216.26414 750.63794,-215.54419 C 747.76976,-214.43659 746.01414,-213.76263 744.20044,-213.07544 C 743.58378,-212.84181 743.20403,-212.63341 742.91919,-212.48169 C 742.91919,-212.48169 742.91919,-211.38794 742.91919,-211.38794 C 743.03097,-211.6103 743.30518,-212.20537 743.82544,-212.48169 C 744.52341,-212.85241 748.63907,-214.47506 750.63794,-215.20044 C 752.2948,-215.80169 754.79183,-216.52912 756.60669,-216.51294 C 756.90831,-216.51025 757.19431,-216.46204 757.45044,-216.41919 C 759.29293,-216.11094 764.91919,-214.85669 764.91919,-214.85669 C 764.91918,-214.85669 758.6857,-216.50344 757.88794,-216.70044 C 757.69715,-216.74755 757.35222,-216.76916 756.91919,-216.76294 C 758.06465,-217.63265 761.68019,-219.15645 764.26294,-220.20044 C 767.10116,-221.34771 767.37975,-221.45226 769.32544,-221.85669 C 771.33374,-222.27413 772.48169,-222.35669 772.48169,-222.35669 C 772.48169,-222.35668 772.39933,-222.95783 773.45044,-223.48169 C 774.15554,-223.8331 778.33746,-225.37409 780.35669,-226.04419 C 782.30859,-226.69192 785.41409,-227.40269 787.23169,-227.04419 C 789.09492,-226.67669 794.76294,-225.23169 794.76294,-225.23169 C 794.76295,-225.23169 788.47594,-227.1028 787.66919,-227.32544 C 787.47627,-227.37869 787.13835,-227.41148 786.70044,-227.41919 C 787.85878,-228.25207 791.49488,-229.61451 794.10669,-230.57544 C 796.97685,-231.63145 797.27403,-231.73724 799.23169,-232.10669 C 801.08518,-232.45648 802.09053,-232.53217 802.26294,-232.54419 C 802.37654,-232.76143 802.64039,-233.35421 803.16919,-233.60669 C 803.87863,-233.94543 808.09526,-235.31944 810.13794,-235.91919 C 811.83111,-236.4163 814.37871,-236.95596 816.23169,-236.82544 C 816.53964,-236.80376 816.84518,-236.72818 817.10669,-236.66919 C 818.98787,-236.24487 824.70044,-234.63794 824.70044,-234.63794 C 824.70045,-234.63794 818.3587,-236.70319 817.54419,-236.95044 C 817.3494,-237.00958 816.98631,-237.05438 816.54419,-237.07544 C 817.71368,-237.87299 821.40721,-239.13166 824.04419,-240.01294 C 826.942,-240.98141 827.2772,-241.01626 829.26294,-241.29419 C 831.31259,-241.58108 832.45044,-241.60669 832.45044,-241.60669 C 832.45042,-241.60669 832.37769,-242.21366 833.45044,-242.66919 C 834.17004,-242.97476 838.44142,-244.16994 840.51294,-244.66919 C 842.51538,-245.15177 845.71143,-245.59748 847.57544,-245.07544 C 849.48622,-244.54029 855.29419,-242.57544 855.29419,-242.57544 C 855.29419,-242.57544 848.87153,-244.99895 848.04419,-245.29419 C 847.84635,-245.3648 847.46203,-245.43458 847.01294,-245.48169 C 848.20084,-246.21034 851.92821,-247.25577 854.60669,-247.98169 C 857.55011,-248.77944 857.89877,-248.75252 859.91919,-248.88794 C 861.83208,-249.01617 862.86624,-248.95903 863.04419,-248.95044 C 863.16147,-249.1541 863.43595,-249.72992 863.98169,-249.91919 C 864.71388,-250.17313 869.06021,-250.96708 871.16919,-251.29419 C 872.91732,-251.5653 875.57007,-251.77889 877.48169,-251.38794 C 877.79935,-251.32298 878.08691,-251.20243 878.35669,-251.10669 C 880.29743,-250.41796 886.20044,-248.01294 886.20044,-248.01294 C 886.20045,-248.01294 879.66573,-250.96371 878.82544,-251.32544 C 878.62447,-251.41195 878.25031,-251.49223 877.79419,-251.57544 C 879.00069,-252.20862 882.82375,-252.97104 885.54419,-253.48169 C 888.53372,-254.04288 888.84442,-254.01123 890.88794,-254.01294 C 892.9972,-254.01471 894.20044,-253.88794 894.20044,-253.88794 C 894.20044,-253.88793 894.12773,-254.51913 895.23169,-254.82544 C 895.97221,-255.03091 900.35781,-255.65931 902.48169,-255.88794 C 904.53471,-256.10893 907.80032,-256.14016 909.70044,-255.41919 C 911.64823,-254.68012 917.54419,-252.04419 917.54419,-252.04419 C 917.54421,-252.04419 910.98131,-255.22316 910.13794,-255.60669 C 909.93626,-255.69842 909.59573,-255.7929 909.13794,-255.88794 C 910.34886,-256.48982 914.12236,-257.13678 916.85669,-257.54419 C 919.86149,-257.99191 920.1822,-257.99589 922.23169,-257.95044 C 924.17214,-257.90742 925.23868,-257.75621 925.41919,-257.73169 C 925.53811,-257.92485 925.80309,-258.49752 926.35669,-258.63794 C 927.0994,-258.82632 931.51098,-259.37222 933.63794,-259.57544 C 935.40097,-259.74386 938.05803,-259.80973 939.98169,-259.32544 C 940.30137,-259.24496 940.5852,-259.12185 940.85669,-259.01294 C 942.80962,-258.22945 948.76294,-255.54419 948.76294,-255.54419 C 948.76292,-255.54419 942.17103,-258.79767 941.32544,-259.20044 C 941.12322,-259.29676 940.75318,-259.40747 940.29419,-259.51294 C 941.50833,-260.08721 945.33785,-260.63513 948.07544,-261.01294 C 951.08382,-261.42814 951.39851,-261.45557 953.45044,-261.38794 C 955.56842,-261.31813 956.76294,-261.13794 956.76294,-261.13794 C 956.76292,-261.13794 956.68569,-261.77535 957.79419,-262.04419 C 958.53781,-262.22454 962.94595,-262.70774 965.07544,-262.88794 C 967.13391,-263.06211 970.41868,-263.01226 972.32544,-262.23169 C 974.28003,-261.43153 980.20044,-258.70044 980.20044,-258.70044 C 980.20042,-258.70044 973.64051,-262.0092 972.79419,-262.41919 C 972.59182,-262.51724 972.22233,-262.62229 971.76294,-262.73169 C 972.97811,-263.29559 976.77302,-263.84599 979.51294,-264.20044 C 982.52385,-264.58996 982.83425,-264.59809 984.88794,-264.51294 C 986.83233,-264.43234 987.89457,-264.2597 988.07544,-264.23169 C 988.1946,-264.42255 988.45821,-264.977 989.01294,-265.10669 C 989.7572,-265.28069 994.16287,-265.75716 996.29419,-265.91919 C 998.06081,-266.05346 1000.7439,-266.0449 1002.6692,-265.54419 C 1002.9892,-265.46098 1003.2725,-265.34292 1003.5442,-265.23169 C 1005.4988,-264.43153 1011.4505,-261.66919 1011.4505,-261.66919 C 1011.4504,-261.66919 1004.8593,-265.0092 1004.013,-265.41919 C 1003.8106,-265.51724 1003.4411,-265.6223 1002.9817,-265.73169 C 1004.1968,-266.29559 1008.023,-266.81475 1010.763,-267.16919 C 1013.7739,-267.55872 1014.1155,-267.59809 1016.1692,-267.51294 C 1018.2889,-267.42506 1019.4817,-267.20044 1019.4817,-267.20044 C 1019.4817,-267.20044 1019.4033,-267.84946 1020.513,-268.10669 C 1021.2573,-268.27925 1025.6625,-268.73005 1027.7942,-268.88794 C 1029.8548,-269.04054 1033.1371,-268.98471 1035.0442,-268.20044 C 1036.9992,-267.39649 1042.9192,-264.70044 1042.9192,-264.70044 C 1042.9192,-264.70044 1036.3594,-267.97631 1035.513,-268.38794 C 1035.3105,-268.48638 1034.9412,-268.59016 1034.4817,-268.70044 C 1035.6971,-269.26198 1039.4936,-269.82822 1042.2317,-270.20044 C 1045.2407,-270.60949 1045.5544,-270.61602 1047.6067,-270.54419 C 1049.5498,-270.4762 1050.6139,-270.37934 1050.7942,-270.35669 C 1050.913,-270.55109 1051.1788,-271.0855 1051.7317,-271.23169 C 1052.4735,-271.42781 1056.8628,-272.06047 1058.9817,-272.32544 C 1060.7381,-272.54505 1063.387,-272.65775 1065.2942,-272.29419 C 1065.6111,-272.23378 1065.9,-272.10481 1066.1692,-272.01294 C 1068.1054,-271.35202 1074.013,-269.07544 1074.013,-269.07544 C 1074.0129,-269.07544 1067.4763,-271.88199 1066.638,-272.23169 C 1066.4375,-272.31532 1066.0618,-272.40502 1065.6067,-272.48169 C 1066.8104,-273.13215 1070.6258,-273.85364 1073.3255,-274.48169 C 1076.2922,-275.17189 1076.6144,-275.23676 1078.638,-275.35669 C 1080.7266,-275.48049 1081.9192,-275.38794 1081.9192,-275.38794 C 1081.9192,-275.38793 1081.8322,-276.01999 1082.9192,-276.41919 C 1083.6484,-276.68699 1087.9664,-277.75716 1090.0442,-278.23169 C 1092.0527,-278.69038 1095.2121,-279.26099 1097.0442,-278.85669 C 1098.9223,-278.44223 1110.6224,-275.84106 1110.6224,-275.84106 C 1110.6224,-275.84106 1098.2949,-278.86372 1097.4817,-279.10669 C 1097.2872,-279.16481 1096.9231,-279.21295 1096.4817,-279.23169 C 1097.6493,-280.03538 1099.9959,-280.91899 1102.5911,-281.93481 C 1104.2725,-282.59299 1103.5148,-282.3114 1105.367,-282.93841 C 1107.1206,-283.53207 1107.8524,-283.94912 1107.9974,-284.0514 C 1108.3435,-284.25791 1107.6414,-284.17328 1107.4532,-284.0938 z"
+           style="opacity:0.25;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter7333);enable-background:new"
+           sodipodi:nodetypes="czscsssscssssscsssscssssscsssscssssscsssscssssscsssscssssscsssscssccsssscscsscssscscsscsssscscsscssscscsscsssscscsscssscscsscsssscscsscssscscsscsssscscsscssscscsscsssscscsscssscscsscc" />
+        <path
+           id="path8175"
+           d="M 1082.625,-275.125 C 1084.498,-274.73152 1087.1211,-273.97945 1088.6563,-273.15625 C 1090.1915,-272.33306 1091.4785,-272.10025 1094.0313,-270.65625 C 1096.5579,-269.22699 1098.8271,-268.64929 1101,-268.125 C 1103.3476,-267.55858 1106.4354,-267.40977 1109.8438,-266.9375 C 1108.7549,-267.77725 1103.2364,-268.10995 1101.4375,-268.5 C 1099.6386,-268.89006 1097.5434,-269.51616 1094.8438,-270.8125 C 1092.1441,-272.10884 1091.3494,-272.61146 1089.0313,-273.5 C 1086.7131,-274.38854 1085.0269,-274.88314 1082.625,-275.125 z"
+           style="opacity:0.25;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter7285);enable-background:new" />
+        <path
+           id="path8177"
+           d="M 1051.4688,-270 C 1053.3741,-269.42241 1055.9969,-268.38428 1057.5625,-267.40625 C 1059.1281,-266.42823 1060.4427,-266.04644 1063.0625,-264.28125 C 1065.6555,-262.53409 1068.0484,-261.57198 1070.3125,-260.6875 C 1072.7586,-259.73193 1075.9951,-259.03037 1079.7188,-257.625 C 1078.5292,-258.76284 1072.6557,-260.31175 1070.7813,-261 C 1068.9068,-261.68825 1066.6995,-262.5662 1063.9063,-264.28125 C 1061.113,-265.99629 1060.3327,-266.56515 1057.9688,-267.6875 C 1055.6047,-268.80984 1053.9121,-269.52205 1051.4688,-270 z"
+           style="opacity:0.25;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter7289);enable-background:new" />
+        <path
+           id="path8179"
+           d="M 1020.2188,-266.84375 C 1022.1307,-266.20564 1024.8,-265.08839 1026.375,-264.03125 C 1027.9501,-262.9741 1029.2706,-262.52258 1031.9063,-260.625 C 1034.5149,-258.74679 1036.9347,-257.59497 1039.2188,-256.5625 C 1041.6865,-255.44705 1044.9833,-254.3892 1048.75,-252.71875 C 1047.5467,-253.94128 1041.5472,-256.03298 1039.6563,-256.84375 C 1037.7653,-257.65452 1035.5914,-258.73754 1032.7813,-260.59375 C 1029.9711,-262.44995 1029.1595,-263.07068 1026.7813,-264.3125 C 1024.403,-265.5543 1022.6706,-266.28819 1020.2188,-266.84375 z"
+           style="opacity:0.25;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter7293);enable-background:new" />
+        <path
+           id="path8181"
+           d="M 1110.1719,-266.89063 C 1110.3227,-266.84207 1110.8599,-266.25963 1110.2813,-265.40625 C 1109.4712,-264.21166 1104.5764,-262.08196 1101.7188,-261.28125 C 1098.8739,-260.48413 1095.4287,-260.30351 1091.1563,-261.65625 C 1086.8547,-263.0182 1085.6866,-264.12497 1080.5,-265.96875 C 1085.164,-263.85358 1086.6953,-262.01642 1090.625,-260.625 C 1092.2457,-260.05113 1093.9921,-259.6854 1095.6875,-259.59375 C 1095.2424,-259.26812 1094.1572,-258.61045 1092.125,-258 C 1089.3295,-257.16031 1085.4759,-256.46622 1083.875,-256.375 C 1082.3604,-256.28868 1080.733,-256.88749 1080.4375,-257 C 1080.6042,-256.89692 1080.8107,-256.62266 1080.1875,-255.96875 C 1079.2882,-255.02512 1074.0401,-254.04575 1071.0625,-253.71875 C 1068.0982,-253.3932 1064.5409,-253.73471 1060.1563,-255.625 C 1056.1783,-257.33997 1054.8173,-258.54036 1050.75,-260.375 C 1050.75,-260.375 1050.75,-260.21875 1050.75,-260.21875 C 1054.3931,-258.12346 1056.034,-256.33548 1059.625,-254.65625 C 1061.3552,-253.84716 1063.2167,-253.24749 1065.0313,-252.9375 C 1064.4964,-252.65074 1063.4735,-252.22599 1061.5938,-251.90625 C 1058.7248,-251.41829 1054.7848,-251.09011 1053.1563,-251.15625 C 1052.3056,-251.19079 1051.4277,-251.34062 1050.75,-251.5625 C 1050.0652,-251.77738 1049.5603,-252.00717 1049.4375,-252.0625 C 1049.6069,-251.95529 1049.8686,-251.65962 1049.2188,-251.03125 C 1048.3091,-250.15163 1042.9727,-249.69487 1039.9688,-249.5625 C 1036.9783,-249.43071 1033.3799,-250.01313 1028.9688,-252.125 C 1024.5276,-254.25126 1023.3273,-255.5266 1018.0625,-257.90625 C 1022.7968,-255.30921 1024.349,-253.27715 1028.4063,-251.1875 C 1030.0796,-250.32565 1031.8915,-249.69325 1033.6563,-249.25 C 1033.193,-249.01668 1032.0669,-248.56186 1029.9688,-248.3125 C 1027.0825,-247.96952 1023.1342,-247.81962 1021.5,-247.9375 C 1019.9538,-248.049 1018.2688,-248.79446 1017.9688,-248.9375 C 1018.1379,-248.81721 1018.3826,-248.52702 1017.75,-247.9375 C 1016.8372,-247.08677 1011.5059,-246.67538 1008.5,-246.5625 C 1005.5075,-246.45013 1001.9103,-247.05293 997.5,-249.15625 C 993.49875,-251.06448 992.11197,-252.29408 988.03125,-254.25 C 988.03122,-254.25 988.03125,-254.09375 988.03125,-254.09375 C 991.68631,-251.88983 993.32546,-250.0412 996.9375,-248.1875 C 998.67779,-247.29435 1000.5745,-246.65923 1002.4063,-246.21875 C 1001.8663,-245.97045 1000.8282,-245.60342 998.9375,-245.375 C 996.05182,-245.02642 992.07145,-244.85405 990.4375,-244.96875 C 989.58405,-245.02865 988.71119,-245.22666 988.03125,-245.46875 C 987.34415,-245.70405 986.8419,-245.94101 986.71875,-246 C 986.88873,-245.88773 987.18323,-245.57775 986.53125,-244.96875 C 985.6186,-244.11625 980.25592,-243.67538 977.25,-243.5625 C 974.25754,-243.45013 970.65654,-244.09055 966.25,-246.15625 C 961.81347,-248.23603 960.60312,-249.48796 955.34375,-251.8125 C 960.07313,-249.26501 961.63449,-247.2347 965.6875,-245.1875 C 967.35905,-244.34317 969.17304,-243.72107 970.9375,-243.28125 C 970.47427,-243.04703 969.3478,-242.59718 967.25,-242.34375 C 964.36431,-241.99517 960.4138,-241.77423 958.78125,-241.875 C 957.23669,-241.97032 955.58094,-242.70385 955.28125,-242.84375 C 955.45024,-242.72522 955.66317,-242.4399 955.03125,-241.84375 C 954.11939,-240.98347 948.7846,-240.5135 945.78125,-240.375 C 942.7913,-240.2371 939.2138,-240.82568 934.8125,-242.84375 C 930.81942,-244.67464 929.44739,-245.87295 925.375,-247.75 C 925.37498,-247.75 925.375,-247.59375 925.375,-247.59375 C 929.02261,-245.46048 930.64533,-243.65888 934.25,-241.875 C 935.98675,-241.01549 937.85727,-240.42486 939.6875,-240 C 939.14803,-239.7471 938.13687,-239.35871 936.25,-239.09375 C 933.37022,-238.68939 929.41187,-238.44813 927.78125,-238.53125 C 926.92953,-238.57466 926.05355,-238.7398 925.375,-238.96875 C 924.68931,-239.19076 924.1854,-239.41214 924.0625,-239.46875 C 924.23209,-239.35976 924.4944,-239.0591 923.84375,-238.4375 C 922.93296,-237.56736 917.59354,-237.04598 914.59375,-236.875 C 911.60742,-236.70479 908.01994,-237.19077 903.625,-239.15625 C 899.20011,-241.13513 898.01904,-242.38444 892.78125,-244.53125 C 897.49122,-242.14358 899.05142,-240.14252 903.09375,-238.1875 C 904.7609,-237.38119 906.55418,-236.79092 908.3125,-236.40625 C 907.85087,-236.15755 906.7155,-235.694 904.625,-235.375 C 901.7494,-234.93624 897.8446,-234.6419 896.21875,-234.6875 C 894.68052,-234.73062 892.98595,-235.43272 892.6875,-235.5625 C 892.85583,-235.44968 893.09807,-235.14875 892.46875,-234.53125 C 891.56063,-233.64015 886.2658,-233.003 883.28125,-232.71875 C 880.31007,-232.43577 876.70783,-232.89455 872.34375,-234.65625 C 868.38441,-236.25456 867.0146,-237.45112 863,-238.96875 C 863.00003,-238.96875 863,-238.8125 863,-238.8125 C 866.5959,-237.00115 868.23831,-235.23017 871.8125,-233.65625 C 873.53457,-232.8979 875.39998,-232.3673 877.21875,-232.03125 C 876.68266,-231.75217 875.65217,-231.34362 873.78125,-230.96875 C 870.92586,-230.39665 866.99183,-229.94936 865.375,-229.9375 C 864.53049,-229.93129 863.66892,-230.01844 863,-230.1875 C 862.32409,-230.34901 861.83991,-230.51673 861.71875,-230.5625 C 861.88597,-230.46848 862.14142,-230.17902 861.5,-229.5 C 860.60213,-228.54948 855.31352,-227.58292 852.375,-227.0625 C 849.44966,-226.54441 845.94285,-226.68826 841.65625,-228.09375 C 837.34045,-229.50882 836.18348,-230.62369 831.09375,-232.0625 C 835.6706,-230.31149 837.1823,-228.50244 841.125,-227.0625 C 842.75108,-226.46861 844.49385,-226.10685 846.21875,-225.90625 C 845.7659,-225.60923 844.66397,-225.02286 842.625,-224.4375 C 839.82028,-223.63233 835.98614,-222.86167 834.40625,-222.6875 C 832.9115,-222.5227 831.29002,-223.00431 831,-223.09375 C 831.16356,-223.00368 831.39278,-222.73382 830.78125,-222.03125 C 829.89878,-221.0174 824.73673,-219.6596 821.84375,-218.96875 C 818.96373,-218.28097 815.50815,-218.20873 811.28125,-219.40625 C 807.4464,-220.4927 806.10867,-221.47862 802.21875,-222.53125 C 802.21874,-222.53125 802.21875,-222.375 802.21875,-222.375 C 805.70293,-220.98015 807.28816,-219.4556 810.75,-218.34375 C 812.41793,-217.80803 814.20578,-217.55701 815.96875,-217.46875 C 815.44911,-217.11663 814.46836,-216.55423 812.65625,-215.9375 C 809.89059,-214.99625 806.06601,-214.00213 804.5,-213.78125 C 803.68206,-213.66586 802.8669,-213.65842 802.21875,-213.75 C 801.56379,-213.83321 801.08615,-213.96827 800.96875,-214 C 801.13079,-213.92536 801.40274,-213.65956 800.78125,-212.90625 C 799.91125,-211.85172 794.77162,-210.247 791.90625,-209.46875 C 789.05372,-208.69399 785.64713,-208.51055 781.46875,-209.5625 C 777.26192,-210.62163 776.11206,-211.60416 771.125,-212.71875 C 775.60954,-211.25929 777.09435,-209.58352 780.9375,-208.46875 C 782.52254,-208.00898 784.22429,-207.8305 785.90625,-207.78125 C 785.46468,-207.44449 784.39374,-206.75352 782.40625,-206 C 779.67232,-204.96351 775.95427,-203.83731 774.40625,-203.5625 C 772.94163,-203.30248 771.34667,-203.67904 771.0625,-203.75 C 771.22275,-203.67035 771.44294,-203.42902 770.84375,-202.6875 C 769.97909,-201.61744 764.92723,-199.86935 762.09375,-199 C 759.27295,-198.13453 755.88625,-197.84369 751.75,-198.78125 C 747.99741,-199.63186 746.70215,-200.49772 742.875,-201.375 C 742.875,-201.375 742.875,-201.21875 742.875,-201.21875 C 746.30296,-199.98096 747.86241,-198.58645 751.25,-197.6875 C 752.88216,-197.25436 754.61704,-197.10449 756.34375,-197.125 C 755.83482,-196.74083 754.867,-196.10318 753.09375,-195.375 C 750.38741,-194.26366 746.65742,-193.06719 745.125,-192.75 C 744.3246,-192.58431 743.51269,-192.53138 742.875,-192.59375 C 742.875,-192.59375 742.875,-192.07823 742.875,-191.67146 C 742.875,-191.40639 742.875,-191.1875 742.875,-191.1875 C 743.10145,-191.33218 743.32391,-191.46011 743.59375,-191.5625 C 744.67427,-191.97248 745.76536,-191.77827 749.59375,-193.25 C 753.42218,-194.72174 754.81787,-195.25498 755.5,-195.65625 C 756.1796,-196.05603 757.11165,-196.53562 757.71875,-197.1875 C 759.5456,-197.32525 761.2895,-197.68073 762.65625,-198.1875 C 765.62437,-199.28802 767.53162,-199.99369 769.4375,-200.65625 C 771.34336,-201.31879 771.79159,-202.07112 772.84375,-202.4375 C 773.9353,-202.81761 775.03886,-202.60288 778.90625,-203.96875 C 782.7737,-205.33461 784.18941,-205.79583 784.875,-206.1875 C 785.57609,-206.58802 786.57581,-207.12048 787.1875,-207.78125 C 789.1583,-207.83591 791.00435,-208.16588 792.46875,-208.65625 C 795.47023,-209.66133 797.3949,-210.27796 799.3125,-210.90625 C 800.8511,-211.41035 801.48652,-211.95302 802.21875,-212.34375 C 802.44891,-212.47806 802.69449,-212.59748 802.96875,-212.6875 C 804.06698,-213.04798 805.1502,-212.76887 809.0625,-214 C 812.97483,-215.23113 814.42855,-215.67295 815.125,-216.03125 C 815.81888,-216.38822 816.75515,-216.82386 817.375,-217.4375 C 819.24021,-217.46016 821.01081,-217.70433 822.40625,-218.125 C 825.43668,-219.03854 827.39863,-219.5551 829.34375,-220.09375 C 831.28886,-220.63239 831.76993,-221.35827 832.84375,-221.65625 C 833.95776,-221.9654 835.06369,-221.64886 839.03125,-222.6875 C 842.99886,-223.72613 844.44883,-224.12023 845.15625,-224.4375 C 845.89112,-224.76709 846.97008,-225.19122 847.59375,-225.8125 C 849.59149,-225.6965 851.45118,-225.83259 852.9375,-226.1875 C 856.01561,-226.9225 858.02094,-227.28844 860,-227.6875 C 861.58792,-228.00768 862.24429,-228.47805 863,-228.78125 C 863.23757,-228.88805 863.46695,-228.97401 863.75,-229.03125 C 864.88347,-229.26044 866.05448,-228.82232 870.09375,-229.53125 C 874.13308,-230.24018 875.594,-230.45834 876.3125,-230.71875 C 877.02836,-230.97819 878.01678,-231.28599 878.65625,-231.8125 C 880.58052,-231.57301 882.40413,-231.58797 883.84375,-231.8125 C 886.97008,-232.30012 888.9983,-232.51317 891,-232.78125 C 893.00171,-233.04932 893.48869,-233.72639 894.59375,-233.875 C 895.74014,-234.02918 896.86967,-233.57343 900.9375,-234.09375 C 905.00534,-234.61407 906.49763,-234.78948 907.21875,-235.03125 C 907.95585,-235.27839 909.01684,-235.61748 909.65625,-236.15625 C 911.70632,-235.82072 913.63003,-235.75829 915.15625,-235.9375 C 918.29856,-236.30646 920.33619,-236.49686 922.34375,-236.71875 C 923.95451,-236.89677 924.60842,-237.32695 925.375,-237.5625 C 925.61594,-237.64802 925.86912,-237.7181 926.15625,-237.75 C 927.30603,-237.87772 928.45754,-237.40335 932.53125,-237.875 C 936.60499,-238.34665 938.09034,-238.4856 938.8125,-238.71875 C 939.53196,-238.95102 940.51274,-239.19221 941.15625,-239.6875 C 943.09262,-239.35404 944.92631,-239.28326 946.375,-239.4375 C 949.52102,-239.77245 951.55256,-239.95609 953.5625,-240.15625 C 955.57246,-240.35639 956.04664,-240.98264 957.15625,-241.09375 C 958.30739,-241.20903 959.45268,-240.72869 963.53125,-241.15625 C 967.60986,-241.58381 969.12011,-241.71834 969.84375,-241.9375 C 970.5829,-242.16136 971.63947,-242.45075 972.28125,-242.96875 C 974.33835,-242.57008 976.28312,-242.47535 977.8125,-242.625 C 980.96123,-242.9331 982.98834,-243.09825 985,-243.28125 C 986.61407,-243.42807 987.2631,-243.8418 988.03125,-244.0625 C 988.27267,-244.14336 988.52478,-244.19241 988.8125,-244.21875 C 989.96461,-244.3242 991.10546,-243.826 995.1875,-244.21875 C 999.26958,-244.6115 1000.7764,-244.74959 1001.5,-244.96875 C 1002.2209,-245.18708 1003.1997,-245.41645 1003.8438,-245.90625 C 1005.7818,-245.55626 1007.6126,-245.45187 1009.0625,-245.59375 C 1012.2112,-245.90185 1014.2383,-246.067 1016.25,-246.25 C 1018.2616,-246.43299 1018.7642,-247.08802 1019.875,-247.1875 C 1021.0273,-247.29073 1022.1672,-246.80267 1026.25,-247.1875 C 1030.3329,-247.57232 1031.8387,-247.6885 1032.5625,-247.90625 C 1033.3018,-248.12868 1034.3581,-248.42074 1035,-248.9375 C 1037.0574,-248.53573 1039.0029,-248.43417 1040.5313,-248.59375 C 1043.6779,-248.92227 1045.7084,-249.11645 1047.7188,-249.3125 C 1049.3318,-249.46979 1049.9844,-249.94398 1050.75,-250.1875 C 1050.9907,-250.27554 1051.2132,-250.30887 1051.5,-250.34375 C 1052.6483,-250.48345 1053.8167,-250.00384 1057.875,-250.59375 C 1061.9333,-251.18367 1063.4368,-251.37089 1064.1563,-251.625 C 1064.873,-251.87816 1065.8308,-252.18307 1066.4688,-252.71875 C 1068.3885,-252.50681 1070.1887,-252.56734 1071.625,-252.8125 C 1074.7441,-253.3449 1076.7366,-253.74111 1078.7188,-254.125 C 1080.7009,-254.50887 1081.1931,-255.16465 1082.2813,-255.40625 C 1083.4101,-255.65691 1084.5516,-255.28996 1088.5313,-256.28125 C 1092.5109,-257.27253 1093.9609,-257.70055 1094.6563,-258.0625 C 1095.3786,-258.43851 1096.4182,-258.93308 1097.0313,-259.59375 C 1098.9943,-259.6058 1100.825,-259.8848 1102.25,-260.4375 C 1105.2012,-261.58211 1107.1232,-262.30692 1108.9375,-263.1875 C 1110.3932,-263.89403 1111.2723,-264.87391 1111.4844,-265.17188 C 1111.6966,-265.46984 1111.5962,-265.91718 1111.6223,-265.93863 C 1111.6652,-265.97387 1111.9416,-266.0236 1112.1013,-266.36707 C 1112.9602,-268.21415 1114.4223,-272.01166 1114.5365,-272.69652 C 1114.6502,-273.37868 1114.7003,-274.04426 1114.751,-274.44149 C 1114.7804,-274.67101 1114.6043,-275.30693 1114.6264,-275.36553 C 1114.6573,-275.44759 1114.9309,-275.63081 1114.9863,-275.88024 C 1115.2526,-277.07857 1115.0752,-278.07153 1114.8612,-279.48917 C 1114.6472,-280.90681 1113.8775,-284.11131 1113.2243,-284.96543 C 1112.5654,-285.82715 1112.0014,-285.9766 1111.4764,-285.96609 C 1111.2678,-285.69633 1111.6132,-285.703 1111.639,-285.65348 C 1112.3196,-285.60269 1112.573,-285.28484 1113.0582,-284.75686 C 1113.5434,-284.22888 1114.28,-280.90569 1114.4166,-279.4553 C 1114.5532,-278.00491 1114.6066,-276.5951 1114.3286,-275.98666 C 1114.0505,-275.37821 1113.6054,-275.46963 1113.313,-275.40375 C 1113.844,-275.21786 1113.9828,-275.27892 1114.0444,-274.43446 C 1114.1037,-273.62108 1113.9112,-272.79477 1113.5246,-271.62884 C 1113.1334,-270.44883 1111.6794,-267.27886 1111.2389,-267.03007 C 1110.7866,-266.77456 1110.5075,-266.75969 1110.1719,-266.89063 z"
+           style="opacity:0.25;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter7337);enable-background:new"
+           sodipodi:nodetypes="cssscscsscsssccscssssssscscsscsssscscssssssscscsscsssscscssssssscscsscsssscscssssssscscsscsssscscssssssscscsscsssccscsscscssscssssscsssssscssssscsssssscssssscsssssscssssscsssssscssssscsssssscssssscsszsszssszzcczzzczzzc" />
+        <path
+           id="path8183"
+           d="M 988.75,-263.84375 C 990.66161,-263.20935 993.30027,-262.08534 994.875,-261.03125 C 996.44977,-259.97716 997.7711,-259.54873 1000.4063,-257.65625 C 1003.0145,-255.78311 1005.4332,-254.64103 1007.7188,-253.59375 C 1010.1881,-252.46228 1013.4709,-251.43901 1017.25,-249.65625 C 1016.0428,-250.91465 1010.111,-253.0207 1008.2188,-253.84375 C 1006.3266,-254.66679 1004.0908,-255.77424 1001.2813,-257.625 C 998.47169,-259.47575 997.65906,-260.10654 995.28125,-261.34375 C 992.90343,-262.58094 991.20137,-263.29295 988.75,-263.84375 z"
+           style="opacity:0.25;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter7297);enable-background:new" />
+        <path
+           id="path8185"
+           d="M 957.5,-260.78125 C 959.41,-260.16315 962.08288,-259.07191 963.65625,-258.03125 C 965.22964,-256.99059 966.55233,-256.54873 969.1875,-254.65625 C 971.79573,-252.7831 974.21442,-251.64104 976.5,-250.59375 C 978.96931,-249.46228 982.25213,-248.439 986.03125,-246.65625 C 984.82397,-247.91465 978.82971,-250.05195 976.9375,-250.875 C 975.04533,-251.69804 972.84084,-252.8055 970.03125,-254.65625 C 967.22167,-256.507 966.4383,-257.09557 964.0625,-258.3125 C 961.68672,-259.52941 959.94929,-260.25135 957.5,-260.78125 z"
+           style="opacity:0.25;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter7301);enable-background:new" />
+        <path
+           id="path8187"
+           d="M 926.09375,-257.375 C 928.00147,-256.77755 930.64723,-255.71116 932.21875,-254.6875 C 933.79025,-253.66385 935.08897,-253.24779 937.71875,-251.40625 C 940.32166,-249.58352 942.74762,-248.43405 945.03125,-247.40625 C 947.49845,-246.29584 950.7866,-245.31302 954.5625,-243.5625 C 953.35627,-244.8106 947.3906,-246.88059 945.5,-247.6875 C 943.60942,-248.4944 941.39758,-249.57854 938.59375,-251.375 C 935.7899,-253.17144 934.96671,-253.77751 932.59375,-254.96875 C 930.22078,-256.15999 928.54013,-256.87158 926.09375,-257.375 z"
+           style="opacity:0.25;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter7305);enable-background:new" />
+        <path
+           id="path8189"
+           d="M 894.90625,-253.5625 C 896.80838,-253.00895 899.49326,-251.97363 901.0625,-250.96875 C 902.63173,-249.96388 903.93651,-249.56011 906.5625,-247.75 C 909.16162,-245.95836 911.56284,-244.87811 913.84375,-243.875 C 916.30803,-242.79126 919.60359,-241.83471 923.375,-240.125 C 922.1702,-241.36007 916.20084,-243.36978 914.3125,-244.15625 C 912.42418,-244.94272 910.2373,-245.98705 907.4375,-247.75 C 904.63773,-249.51294 903.83831,-250.11836 901.46875,-251.28125 C 899.09918,-252.44413 897.3455,-253.11537 894.90625,-253.5625 z"
+           style="opacity:0.25;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter7309);enable-background:new" />
+        <path
+           id="path8191"
+           d="M 863.71875,-248.65625 C 865.59937,-248.22716 868.22302,-247.27587 869.78125,-246.34375 C 871.33948,-245.41164 872.63358,-245.08599 875.25,-243.34375 C 877.83971,-241.61931 880.23067,-240.63573 882.5,-239.71875 C 884.95176,-238.72806 888.23959,-237.84168 892,-236.21875 C 890.79869,-237.42609 884.84751,-239.28484 882.96875,-240 C 881.09,-240.71517 878.88335,-241.68442 876.09375,-243.375 C 873.30412,-245.06557 872.50914,-245.60322 870.15625,-246.65625 C 867.80333,-247.70926 866.13041,-248.36873 863.71875,-248.65625 z"
+           style="opacity:0.25;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter7313);enable-background:new" />
+        <path
+           id="path8193"
+           d="M 833.15625,-241.375 C 835.00461,-241.07856 837.6257,-240.39868 839.15625,-239.59375 C 840.68683,-238.78882 841.96999,-238.53802 844.53125,-237.0625 C 847.06629,-235.60204 849.42193,-234.73741 851.65625,-234 C 854.07024,-233.20332 857.31336,-232.53311 861.03125,-231.15625 C 859.84354,-232.28498 853.94353,-233.746 852.09375,-234.3125 C 850.24398,-234.879 848.09033,-235.68642 845.34375,-237.15625 C 842.59718,-238.62608 841.84239,-239.07653 839.53125,-239.9375 C 837.2201,-240.79845 835.52654,-241.25759 833.15625,-241.375 z"
+           style="opacity:0.25;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter7317);enable-background:new" />
+        <path
+           id="path8195"
+           d="M 802.90625,-232.3125 C 804.72845,-232.10123 807.27201,-231.51193 808.78125,-230.78125 C 810.2905,-230.05059 811.53693,-229.85127 814.0625,-228.5 C 816.56226,-227.16254 818.89404,-226.45157 821.09375,-225.84375 C 823.47028,-225.18708 826.65839,-224.77087 830.3125,-223.65625 C 829.14515,-224.70121 823.38362,-225.75954 821.5625,-226.21875 C 819.74139,-226.67796 817.61025,-227.34571 814.90625,-228.65625 C 812.20222,-229.96677 811.43519,-230.37615 809.15625,-231.125 C 806.8773,-231.87383 805.243,-232.30431 802.90625,-232.3125 z"
+           style="opacity:0.25;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter7321);enable-background:new" />
+        <path
+           id="path8197"
+           d="M 773.1875,-222.1875 C 774.99859,-222.0088 777.50809,-221.52244 779,-220.84375 C 780.49194,-220.16506 781.7534,-220.04553 784.25,-218.78125 C 786.72107,-217.52987 789.04005,-216.88511 791.21875,-216.34375 C 793.57262,-215.75887 796.71009,-215.44623 800.3125,-214.5 C 799.16166,-215.49116 793.45999,-216.2833 791.65625,-216.6875 C 789.85253,-217.0917 787.74072,-217.70866 785.0625,-218.9375 C 782.38432,-220.16634 781.65905,-220.54839 779.40625,-221.21875 C 777.15346,-221.88909 775.50998,-222.22107 773.1875,-222.1875 z"
+           style="opacity:0.25;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter7329);enable-background:new" />
+        <path
+           id="path8199"
+           d="M 743.5625,-211.1875 C 745.35531,-211.05839 747.83563,-210.63785 749.3125,-210 C 750.7894,-209.36215 752.0286,-209.25844 754.5,-208.0625 C 756.94618,-206.87878 759.22054,-206.31584 761.375,-205.84375 C 763.70267,-205.33372 766.7946,-205.16311 770.375,-204.28125 C 769.23121,-205.25185 763.62741,-205.8719 761.84375,-206.21875 C 760.06008,-206.56559 757.9609,-207.10631 755.3125,-208.25 C 752.66409,-209.39368 751.91755,-209.76631 749.6875,-210.375 C 747.45742,-210.98368 745.86156,-211.28466 743.5625,-211.1875 z"
+           style="opacity:0.25;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;filter:url(#filter7325);enable-background:new" />
+      </g>
+    </g>
+    <path
+       style="opacity:1;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+       d="M 863.87812,475.6679 C 865.52024,472.4499 867.39593,469.93261 868.73948,465.81892 C 869.5382,462.16103 872.05152,463.78819 875.99995,457.42202 C 877.40188,455.18252 881.47648,457.81338 884.96505,455.02291 C 886.23577,454.21972 887.84993,454.6186 889.44761,454.95978 C 893.213,456.27874 895.27337,458.66333 897.78137,460.76815 C 903.92043,466.73838 918.31551,468.71142 921.26741,467.08161 C 922.70146,464.17687 929.14869,461.67273 933.64178,455.96993 C 934.38989,454.84726 945.37114,447.22547 948.28899,449.40394"
+       id="path8201"
+       sodipodi:nodetypes="ccccccccc" />
+    <path
+       style="opacity:1;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+       d="M 888.50059,465.25071 C 895.864,462.01774 902.31149,456.34231 909.20872,451.86619 C 912.51929,449.89665 916.07855,455.0822 920.00472,455.46485 C 922.30245,455.24672 923.71762,456.66744 925.68683,457.10635 C 930.84319,458.42414 928.08476,460.97123 935.66209,463.54607 C 941.8177,465.26647 944.56949,456.7476 950.56184,456.22247 C 955.43923,455.71948 958.66076,455.90644 962.17859,455.96993 C 966.10555,456.10882 966.25714,452.47233 968.23951,450.66663 C 971.22007,447.86141 975.39512,448.81691 978.38436,445.92573 C 979.4019,444.54105 980.33894,442.91488 981.11895,440.81764 C 982.00096,438.8173 984.15901,441.12362 985.91718,442.08033"
+       id="path8203"
+       sodipodi:nodetypes="ccccccccccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer15"
+     inkscape:label="Feet"
+     style="display:inline">
+    <path
+       style="opacity:0.25;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter9048);enable-background:accumulate"
+       d="M 403.27922,1056.3058 L 459.84776,1013.8794 L 531.97265,1028.0215 L 485.30361,1080.3474 L 431.56349,1087.4185 L 403.27922,1056.3058 z"
+       id="path8994" />
+    <path
+       style="opacity:1;fill:#ada469;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+       d="M 542.27183,1060.5719 C 540.86456,1079.3731 541.12693,1093.3229 544.35357,1109.8752 C 547.58023,1126.4275 560.75966,1155.7825 564.68798,1173.0589 C 568.61419,1190.326 567.38211,1211.3686 552.22854,1224.2072 C 536.91093,1237.1846 510.17726,1245.8061 484.39623,1239.9409 C 458.61518,1234.0757 414.84716,1190.7175 395.80604,1169.7126 C 376.6939,1148.6293 332.04518,1075.862 317.86751,1045.4368 C 303.68984,1015.0117 305.2079,1008.7182 309.74779,999.90708 C 300.38107,975.38658 297.33408,949.84027 276.03534,924.33044 C 306.36081,927.44488 319.91562,951.28677 336.16102,971.47019 C 330.63113,923.39416 318.10631,907.05369 307.78707,880.74589 C 337.78137,886.82754 358.36643,912.61828 371.76686,953.45839 C 381.32101,949.54048 390.00462,944.08545 401.95427,944.39719 C 390.65677,902.70139 384.00481,874.48135 365.26702,843.32725 C 418.70898,848.99758 448.92404,923.96657 444.23844,931.28805 C 454.21641,929.04406 463.24409,924.75767 474.67497,925.63638 C 463.426,887.28936 453.62716,848.76848 471.01526,806.98819 C 471.01526,806.98819 519.30204,872.42507 525.40492,892.79397 C 531.50779,913.16287 526.92373,931.49448 526.92373,931.49448 C 526.92373,931.49448 543.8833,962.57978 547.21765,982.58862 C 550.59075,1002.83 543.68496,1041.6919 542.27183,1060.5719 z"
+       id="path4189"
+       sodipodi:nodetypes="czzzzzzcccccccccczczz" />
+    <path
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter3587);enable-background:accumulate"
+       d="M 719.5,738.69519 L 737.81177,754.12715 L 782.2228,738.73894 L 805.5,713.19519 L 816.96397,732.41584 L 847.63558,745.19938 L 872.73295,750.92775 L 892,723.19519 L 908.02309,747.02126 L 947,752.19519 L 957.24541,745.99667 L 964.00012,754.69487 L 989.5,765.69519 L 991.5,725.19519 L 955.94866,710.6576 L 923.45591,689.1305 L 883.0038,677.66492 L 861.69668,662.13148 L 840,685.19519 L 755.02878,638.61208 L 722,676.69519 L 719.5,738.69519 z"
+       id="path4191"
+       sodipodi:nodetypes="cccccccccccccccccccccc"
+       clip-path="url(#clipPath3631)"
+       transform="matrix(-0.9045327,0.2506626,0.2506626,0.9045327,995.28646,23.53493)" />
+    <path
+       style="opacity:0.58775509;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:20.79999924;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;filter:url(#filter3898);enable-background:new"
+       d="M 584,696.5 L 577.4375,713.65625 C 577.4375,713.65625 569.62598,734.02113 561.75,757.3125 C 557.81201,768.95818 553.86698,781.35395 550.8125,792.4375 C 547.75802,803.52105 545.47664,812.81736 545.3125,820.71875 C 544.91443,839.88071 551.05903,855.60705 554.25,862.46875 C 553.47847,866.02398 552.25863,871.92307 550.90625,880.5625 C 548.98583,892.83071 547.18798,907.71691 548.53125,920.4375 C 549.91334,933.52585 555.34347,948.62515 561.125,963.46875 C 566.90653,978.31235 573.17935,992.69586 576.34375,1001.5 C 582.97581,1019.9519 586.33671,1033.0763 587.65625,1050 C 588.2376,1057.4561 587.41398,1070.336 586.40625,1083.375 C 585.39852,1096.414 584.21964,1109.6764 584.71875,1120.3438 C 585.70786,1141.4836 594.04673,1167.1785 618.09375,1178.2812 C 640.86858,1188.7966 673.42057,1189.9834 701.53125,1174.8438 C 717.69117,1166.1404 731.60759,1147.7462 744.90625,1127.9375 C 758.20491,1108.1288 769.87542,1086.8841 776.84375,1073.0312 C 792.19667,1042.51 816.23728,957.56702 822.46875,920.3125 C 825.48734,902.26597 826.39041,891.24695 825.09375,882.28125 C 824.11522,875.51521 821.26556,870.13385 818.21875,866.0625 C 820.26149,838.55459 817.48668,814.69372 830.1875,786.65625 L 840.75,763.375 L 816.9375,772.6875 C 799.44775,779.52503 788.03586,791.73286 780.34375,804.75 C 780.02124,805.29577 779.78061,805.85776 779.46875,806.40625 C 779.69078,783.89104 783.87659,768.76866 786.0625,747.71875 L 788.03125,728.71875 L 771,737.375 C 740.40551,752.93071 725.30511,785.56821 721.28125,827.59375 C 717.03593,826.96828 712.44985,826.5741 707.46875,826.75 C 707.17726,787.56964 707.07246,759.71315 716.0625,727.375 L 721.65625,707.25 L 702.21875,714.90625 C 671.30938,727.11019 654.35921,756.83698 645.59375,783.28125 C 641.21102,796.50339 638.84793,809.08246 638,819.21875 C 637.76797,821.99248 637.68894,824.53007 637.6875,826.9375 C 634.44563,826.90109 631.26698,827.07339 627.625,827.4375 C 627.66662,788.43277 624.14076,747.68335 595.34375,710.9375 L 584,696.5 z M 589.8125,740.3125 C 606.61941,770.95633 607.28701,804.27978 606.75,840.0625 L 606.53125,855.125 L 618.56618,848.58579 C 627.22823,845.45277 638.12676,848.35827 650.5,847.75 L 665.17465,857.1066 L 658.84375,831.3125 C 658.7541,831.08253 658.62329,830.89581 658.59375,830.59375 C 658.39424,828.55389 658.37143,825.12068 658.71875,820.96875 C 659.41339,812.66489 661.50832,801.38351 665.34375,789.8125 C 670.49907,774.25956 678.83176,758.62002 690.46875,747.28125 C 685.78494,775.91923 687.25316,807.54059 687.45711,843.08639 L 684.69118,856.34803 L 700.1875,848.75 C 709.2169,845.99229 717.37647,848.40004 729.46875,849.84375 L 742.71507,859.28798 L 741.09375,840 C 742.54168,809.02823 749.31524,786.32192 761.8125,771.125 C 758.82562,790.90384 756.38207,812.9098 762.125,849.46875 L 763.19052,855.84193 L 760.25237,867.35878 L 770.86948,859.1906 L 780.05921,869.41258 L 778.51093,858.94898 L 781.9375,852 C 787.63852,838.78851 792.11032,825.78663 798.28125,815.34375 C 799.24111,813.71941 800.31278,812.27939 801.34375,810.78125 C 797.66309,831.9366 798.91659,850.9894 797.25,868.5625 L 792.56986,876.36948 L 799.96875,876.59375 C 803.1888,880.07736 803.83625,880.44443 804.53125,885.25 C 805.22625,890.05557 804.84987,899.65035 801.96875,916.875 C 796.40076,950.16292 770.12313,994.71481 758.22835,1018.3614 C 751.62344,1031.4918 739.70002,1075.8473 727.105,1094.6079 C 714.50998,1113.3684 698.57363,1134.3752 689.93296,1139.0288 C 668.44244,1150.603 645.37702,1164.5347 629.31407,1157.1183 C 614.93921,1150.4813 606.27438,1135.9256 605.5,1119.375 C 605.11689,1111.187 606.11279,1098.0658 607.125,1084.9688 C 608.13721,1071.8717 618.41391,1062.398 622.54839,1048.4062 C 627.92068,1030.2254 621.10152,1011.8118 610.04839,994.46875 C 603.56184,984.29097 586.07159,970.21085 580.5,955.90625 C 574.92841,941.60165 570.13249,926.9031 569.21875,918.25 C 568.29254,909.47887 569.64125,895.22498 571.4375,883.75 C 573.23375,872.27503 575.28125,863.46875 575.28125,863.46875 L 584.70403,859.85355 L 574.21875,855.96875 C 574.21875,855.96875 565.71986,840.65865 566.125,821.15625 C 566.19611,817.73309 567.96126,808.4282 570.84375,797.96875 C 573.72624,787.5093 577.60841,775.41604 581.46875,764 C 584.51314,754.99692 587.24938,747.39655 589.8125,740.3125 z"
+       id="path4193"
+       clip-path="url(#clipPath3677)"
+       sodipodi:nodetypes="ccssscsssssssssssssccccscccccccccsscccccccccccssscccccccccccccccsccccssssssssssssscccsssc"
+       transform="matrix(-0.9045327,0.2506626,0.2506626,0.9045327,822.28931,10.93589)" />
+    <g
+       id="g3617"
+       clip-path="url(#clipPath3622)"
+       transform="translate(276,136)">
+      <path
+         transform="matrix(-0.9045327,0.2506626,0.2506626,0.9045327,-52.200498,74.09707)"
+         id="path4195"
+         d="M -15.66751,843.48852 L -65.16499,827.93217 L -92.03504,880.25807 L -51.02285,925.51291 L -1.52538,887.32914 L -15.66751,843.48852 z"
+         style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter9024);enable-background:accumulate" />
+      <path
+         sodipodi:nodetypes="ccccccccccccc"
+         transform="matrix(-0.9045327,0.2506626,0.2506626,0.9045327,-46.92842,75.511284)"
+         id="path4197"
+         d="M 118.70648,859.93048 L 63.552152,813.26144 L 19.711532,850.03099 L 53.652662,903.7711 L 40.055848,989.23313 L 0.61048221,1017.5253 L -40.401718,1028.839 L -43.230138,1075.508 L 13.338402,1100.9639 L 32.282389,1031.3139 L 55.738939,972.45727 L 102.08648,899.84236 L 118.70648,859.93048 z"
+         style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter9020);enable-background:accumulate" />
+    </g>
+    <path
+       style="opacity:0.25;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter9044);enable-background:accumulate"
+       d="M -70.82184,932.58397 L -10.01066,905.71392 L 90.3985,936.82662 L 26.75889,967.93931 L -55.26549,950.96875 L -70.82184,932.58397 z"
+       id="path4199"
+       transform="matrix(-0.9045327,0.2506626,0.2506626,0.9045327,229.07158,211.51128)" />
+    <path
+       style="opacity:0.58775509;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:20.79999924;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;filter:url(#filter4105);enable-background:new"
+       d="M 583.0625,715.75 C 570.95641,750.19974 556.348,784.28333 551.3125,820.59375 C 550.48042,835.52242 555.90165,849.75318 560.15625,863.65625 C 554.24001,890.85751 550.01944,920.5562 561.3125,946.78125 C 574.82967,984.9421 596.31397,1022.4634 593.73529,1064.2495 C 592.78699,1093.5437 584.72085,1125.2436 599.125,1152.5312 C 609.32364,1171.866 632.26456,1179.8429 653.09285,1180.1988 C 680.95504,1181.3729 709.55546,1168.5772 725.09375,1144.9375 C 747.68924,1115.5658 766.89426,1083.4402 780.3324,1048.8777 C 797.22293,1003.3717 810.0042,956.31698 818.26642,908.4788 C 820.09082,895.53774 821.3675,881.00895 813.6875,869.65625 C 810.25635,862.31993 813.72957,854.09611 813.00293,846.34648 C 813.67693,821.35182 817.01525,795.68272 829.65625,773.75 C 811.92312,780.1946 794.58357,790.30971 785.65318,807.61425 C 781.7181,814.3238 778.04836,821.18838 774.28125,828 C 770.73126,797.98592 778.00088,768.35172 781.0625,738.71875 C 760.89646,747.77338 744.18578,764.37397 736.88755,785.40075 C 730.58292,800.98078 728.08533,817.71793 726.625,834.4375 C 718.37166,832.91825 709.94053,832.33595 701.5625,832.9375 C 700.59942,794.23963 701.09554,753.53035 712.53125,717.03125 C 693.85012,723.24901 677.36504,735.76676 666.90322,752.41848 C 653.05068,773.29827 645.64182,798.17243 643.84375,823.03125 C 644.42909,827.35579 643.78249,834.87134 637.5,832.90625 C 632.16882,832.9238 626.87092,833.58508 621.5625,834 C 622.71034,794.61852 618.22106,752.3718 594.5,719.78125 C 591.43929,716.14408 588.86315,712.09687 585.875,708.4375 C 584.9375,710.875 584,713.3125 583.0625,715.75 z M 590.8125,729.59375 C 609.37777,758.89004 613.295,794.41387 612.9375,828.46875 C 613.14159,833.64401 612.42094,840.29795 613.0625,844.53125 C 625.38106,838.4285 639.80162,842.09135 652.84375,842.34375 C 655.16087,843.567 656.03585,843.99618 654.75,840.9375 C 650.58545,826.98465 652.90172,812.3245 656.55504,798.52986 C 662.92191,772.23922 677.18332,747.44188 699.375,731.5 C 690.75791,768.73706 693.65842,808.06161 693.28125,845.46875 C 705.53469,838.55885 720.56004,842.02262 733.3125,845.21875 C 736.70472,848.75355 735.60185,844.48927 735.5,841.40625 C 735.01691,820.03567 739.63133,798.33662 749.1875,779.25 C 755.15016,768.56273 763.43088,759.44621 771.625,750.375 C 763.75344,784.2131 762.4221,819.71093 768.90625,853.875 C 770.6311,852.46382 773.51306,853.42086 774.5625,853.5 C 784.24619,832.26318 790.91362,808.11938 809.45266,792.75815 C 811.32595,792.38693 808.00448,801.2831 807.96875,804.65625 C 804.43387,826.50206 800.79359,848.79859 799.18454,870.87536 C 790.40075,873.21707 802.03289,873.1989 802.65329,874.93786 C 810.5764,885.50366 807.31628,899.34258 806.28494,911.2912 C 799.22089,956.32475 784.14263,998.65314 770.33139,1041.971 C 758.25663,1074.9203 742.95719,1100.8235 722.44331,1129.1725 C 711.49074,1142.7239 699.19859,1157.0238 681.59956,1161.6725 C 661.44355,1167.9138 637.3928,1172.5494 619,1161.7188 C 601.71034,1149.3774 597.97607,1126.0099 599.73774,1106.0324 C 599.78653,1090.2062 604.6766,1077.5203 604.14834,1062.5406 C 603.6101,1047.2777 601.85699,1031.9759 597.60573,1015.6743 C 593.35447,999.37268 588.56248,990.75636 581.48667,974.10092 C 574.24556,957.05636 566.41652,937.35229 563.28125,917.8125 C 561.53177,899.18536 566.17296,880.68988 569.0625,862.5625 C 572.35873,859.72554 567.46451,857.36591 566.75,854.375 C 559.14887,837.35992 558.34253,817.6001 564.00766,799.81502 C 571.13786,774.74272 579.76853,750.18261 588.6875,725.6875 C 589.39583,726.98958 590.10417,728.29167 590.8125,729.59375 z"
+       id="path4201"
+       sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccczzzcccccc"
+       clip-path="url(#clipPath4177)"
+       transform="matrix(-0.9045327,0.2506626,0.2506626,0.9045327,822.28931,10.93589)" />
+    <path
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter4130);enable-background:accumulate"
+       d="M 735.05635,733.03834 L 737.81177,754.12715 L 782.2228,738.73894 L 787.07343,716.34919 L 783.13726,694.29697 L 760.68563,657.70396 L 752.40559,688.0089 L 735.05635,733.03834 z"
+       id="path4203"
+       sodipodi:nodetypes="cccccccc"
+       clip-path="url(#clipPath3631)"
+       transform="matrix(-0.9045327,0.2506626,0.2506626,0.9045327,995.28646,23.53493)" />
+    <path
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter4141);enable-background:accumulate"
+       d="M 831.81321,730.29452 L 847.63558,745.19938 L 868.49031,748.09932 L 866.90002,708.17334 L 875.22563,677.66492 L 868.06064,671.32386 L 846.36395,692.26626 L 831.81321,730.29452 z"
+       id="path4205"
+       sodipodi:nodetypes="cccccccc"
+       clip-path="url(#clipPath3631)"
+       transform="matrix(-0.9045327,0.2506626,0.2506626,0.9045327,995.28646,23.53493)" />
+    <g
+       id="g8317"
+       style="filter:url(#filter8333)"
+       clip-path="url(#clipPath8338)"
+       transform="translate(276,136)">
+      <path
+         transform="matrix(-0.9045327,0.2506626,0.2506626,0.9045327,719.28646,-112.46507)"
+         clip-path="none"
+         sodipodi:nodetypes="ccccc"
+         id="path4209"
+         d="M 964.00012,754.69487 L 982.42893,762.15966 L 991.5,725.19519 L 976.62969,730.03405 L 964.00012,754.69487 z"
+         style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <rect
+         y="757.19519"
+         x="-55"
+         height="177"
+         width="182"
+         id="rect8315"
+         style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:25;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    </g>
+    <g
+       id="g8346"
+       style="filter:url(#filter8354)"
+       clip-path="url(#clipPath8359)"
+       transform="translate(276,136)">
+      <path
+         transform="matrix(-0.9045327,0.2506626,0.2506626,0.9045327,719.28646,-112.46507)"
+         clip-path="none"
+         sodipodi:nodetypes="ccccccc"
+         id="path4207"
+         d="M 910.14441,746.31415 L 942.75736,751.48808 L 942.39617,727.61189 L 949.5847,697.92968 L 941.13358,692.66603 L 919.31164,719.1768 L 910.14441,746.31415 z"
+         style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <rect
+         y="696.19519"
+         x="-22"
+         height="176"
+         width="165"
+         id="rect8344"
+         style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:25;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    </g>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer16"
+     inkscape:label="Left Foot"
+     style="display:inline">
+    <path
+       style="opacity:1;fill:#ada469;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+       d="M 1036.164,1071.8338 C 1042.9581,1090.7366 1046.6577,1105.1335 1048.0543,1123.0457 C 1049.4509,1140.958 1044.2716,1174.8465 1045.1538,1193.7018 C 1046.0356,1212.547 1053.2875,1233.8008 1072.4984,1242.6707 C 1091.9173,1251.6365 1121.8177,1252.882 1146.6183,1239.5251 C 1171.4189,1226.1681 1204.0193,1169.1996 1217.5925,1142.2164 C 1231.2164,1115.1325 1256.3536,1027.719 1262.2533,992.44781 C 1268.1531,957.1766 1264.8039,951.14704 1257.6359,943.39232 C 1260.2762,915.55217 1256.1361,888.45689 1270.7455,856.20614 C 1240.4965,868.03184 1233.3632,896.36684 1222.4266,921.71122 C 1214.4257,870.77829 1222.6358,850.43803 1225.7455,820.49186 C 1196.6808,835.26977 1182.884,867.60588 1180.7455,913.349 C 1169.8216,912.0448 1159.3541,908.91477 1147.1741,912.63471 C 1146.9101,866.61137 1145.7106,835.7453 1156.0847,798.42822 C 1102.8293,819.45508 1093.1375,905.02232 1100.0312,911.20614 C 1089.1484,911.74114 1078.6602,909.90884 1067.1741,914.06329 C 1067.813,871.49194 1066.9136,829.15468 1037.1741,791.20614 C 1037.1741,791.20614 1006.2161,872.12848 1005.7455,894.77757 C 1005.275,917.42666 1015.1971,934.94345 1015.1971,934.94345 C 1015.1971,934.94345 1006.6291,971.68396 1008.8985,993.17568 C 1011.1944,1014.9171 1029.3414,1052.8519 1036.164,1071.8338 z"
+       id="path8848"
+       sodipodi:nodetypes="czzzzzzcccccccccczczz" />
+    <path
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter3587);enable-background:accumulate"
+       d="M 719.5,738.69519 L 737.81177,754.12715 L 782.2228,738.73894 L 805.5,713.19519 L 816.96397,732.41584 L 847.63558,745.19938 L 872.73295,750.92775 L 892,723.19519 L 908.02309,747.02126 L 947,752.19519 L 957.24541,745.99667 L 964.00012,754.69487 L 989.5,765.69519 L 991.5,725.19519 L 955.94866,710.6576 L 923.45591,689.1305 L 883.0038,677.66492 L 861.69668,662.13148 L 840,685.19519 L 755.02878,638.61208 L 722,676.69519 L 719.5,738.69519 z"
+       id="path3635"
+       sodipodi:nodetypes="cccccccccccccccccccccc"
+       clip-path="url(#clipPath3631)"
+       transform="translate(276,136)" />
+    <path
+       transform="translate(450.03125,73.843964)"
+       style="opacity:0.58775509;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:20.79999924;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;filter:url(#filter3898);enable-background:new"
+       d="M 584,696.5 L 577.4375,713.65625 C 577.4375,713.65625 569.62598,734.02113 561.75,757.3125 C 557.81201,768.95818 553.86698,781.35395 550.8125,792.4375 C 547.75802,803.52105 545.47664,812.81736 545.3125,820.71875 C 544.91443,839.88071 551.05903,855.60705 554.25,862.46875 C 553.47847,866.02398 552.25863,871.92307 550.90625,880.5625 C 548.98583,892.83071 547.18798,907.71691 548.53125,920.4375 C 549.91334,933.52585 555.34347,948.62515 561.125,963.46875 C 566.90653,978.31235 573.17935,992.69586 576.34375,1001.5 C 582.97581,1019.9519 586.33671,1033.0763 587.65625,1050 C 588.2376,1057.4561 587.41398,1070.336 586.40625,1083.375 C 585.39852,1096.414 584.21964,1109.6764 584.71875,1120.3438 C 585.70786,1141.4836 594.04673,1167.1785 618.09375,1178.2812 C 640.86858,1188.7966 673.42057,1189.9834 701.53125,1174.8438 C 717.69117,1166.1404 731.60759,1147.7462 744.90625,1127.9375 C 758.20491,1108.1288 769.87542,1086.8841 776.84375,1073.0312 C 792.19667,1042.51 816.23728,957.56702 822.46875,920.3125 C 825.48734,902.26597 826.39041,891.24695 825.09375,882.28125 C 824.11522,875.51521 821.26556,870.13385 818.21875,866.0625 C 820.26149,838.55459 817.48668,814.69372 830.1875,786.65625 L 840.75,763.375 L 816.9375,772.6875 C 799.44775,779.52503 788.03586,791.73286 780.34375,804.75 C 780.02124,805.29577 779.78061,805.85776 779.46875,806.40625 C 779.69078,783.89104 783.87659,768.76866 786.0625,747.71875 L 788.03125,728.71875 L 771,737.375 C 740.40551,752.93071 725.30511,785.56821 721.28125,827.59375 C 717.03593,826.96828 712.44985,826.5741 707.46875,826.75 C 707.17726,787.56964 707.07246,759.71315 716.0625,727.375 L 721.65625,707.25 L 702.21875,714.90625 C 671.30938,727.11019 654.35921,756.83698 645.59375,783.28125 C 641.21102,796.50339 638.84793,809.08246 638,819.21875 C 637.76797,821.99248 637.68894,824.53007 637.6875,826.9375 C 634.44563,826.90109 631.26698,827.07339 627.625,827.4375 C 627.66662,788.43277 624.14076,747.68335 595.34375,710.9375 L 584,696.5 z M 589.8125,740.3125 C 606.61941,770.95633 607.28701,804.27978 606.75,840.0625 L 606.53125,855.125 L 618.56618,848.58579 C 627.22823,845.45277 638.12676,848.35827 650.5,847.75 L 665.17465,857.1066 L 658.84375,831.3125 C 658.7541,831.08253 658.62329,830.89581 658.59375,830.59375 C 658.39424,828.55389 658.37143,825.12068 658.71875,820.96875 C 659.41339,812.66489 661.50832,801.38351 665.34375,789.8125 C 670.49907,774.25956 678.83176,758.62002 690.46875,747.28125 C 685.78494,775.91923 687.25316,807.54059 687.45711,843.08639 L 684.69118,856.34803 L 700.1875,848.75 C 709.2169,845.99229 717.37647,848.40004 729.46875,849.84375 L 742.71507,859.28798 L 741.09375,840 C 742.54168,809.02823 749.31524,786.32192 761.8125,771.125 C 758.82562,790.90384 756.38207,812.9098 762.125,849.46875 L 763.19052,855.84193 L 760.25237,867.35878 L 770.86948,859.1906 L 780.05921,869.41258 L 778.51093,858.94898 L 781.9375,852 C 787.63852,838.78851 792.11032,825.78663 798.28125,815.34375 C 799.24111,813.71941 800.31278,812.27939 801.34375,810.78125 C 797.66309,831.9366 798.91659,850.9894 797.25,868.5625 L 792.56986,876.36948 L 799.96875,876.59375 C 803.1888,880.07736 803.83625,880.44443 804.53125,885.25 C 805.22625,890.05557 804.84987,899.65035 801.96875,916.875 C 796.40076,950.16292 770.17603,1040.0409 758.28125,1063.6875 C 751.67634,1076.8179 740.25127,1097.5832 727.65625,1116.3438 C 715.06123,1135.1043 700.29692,1151.8776 691.65625,1156.5312 C 670.16573,1168.1054 642.87545,1166.7914 626.8125,1159.375 C 612.43764,1152.738 606.27438,1135.9256 605.5,1119.375 C 605.11689,1111.187 606.11279,1098.0658 607.125,1084.9688 C 608.13721,1071.8717 618.41391,1062.398 622.54839,1048.4062 C 627.92068,1030.2254 621.10152,1011.8118 610.04839,994.46875 C 603.56184,984.29097 586.07159,970.21085 580.5,955.90625 C 574.92841,941.60165 570.13249,926.9031 569.21875,918.25 C 568.29254,909.47887 569.64125,895.22498 571.4375,883.75 C 573.23375,872.27503 575.28125,863.46875 575.28125,863.46875 L 584.70403,859.85355 L 574.21875,855.96875 C 574.21875,855.96875 565.71986,840.65865 566.125,821.15625 C 566.19611,817.73309 567.96126,808.4282 570.84375,797.96875 C 573.72624,787.5093 577.60841,775.41604 581.46875,764 C 584.51314,754.99692 587.24938,747.39655 589.8125,740.3125 z"
+       id="path3669"
+       clip-path="url(#clipPath3677)"
+       sodipodi:nodetypes="ccssscsssssssssssssccccscccccccccsscccccccccccssscccccccccccccccsccccssssssssssssscccsssc" />
+    <g
+       id="g3628"
+       clip-path="url(#clipPath3636)"
+       transform="translate(276,136)">
+      <path
+         id="path8988"
+         d="M 824.48651,818.48242 L 774.98903,802.92607 L 748.11898,855.25197 L 789.13117,900.50681 L 838.62864,862.32304 L 824.48651,818.48242 z"
+         style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter9024);enable-background:accumulate" />
+      <path
+         id="path8990"
+         d="M 964.49365,855.25197 L 909.33932,808.58293 L 865.4987,845.35248 L 899.43983,899.09259 L 906.51089,965.56063 L 855.59921,1000.916 L 814.58701,1012.2297 L 811.75859,1058.8987 L 868.32713,1084.3546 L 931.96674,1007.987 L 956.00837,913.23473 L 964.49365,855.25197 z"
+         style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter9020);enable-background:accumulate" />
+    </g>
+    <path
+       style="opacity:0.25;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter9044);enable-background:accumulate"
+       d="M 1045.3322,1043.5779 L 1106.1434,1016.7078 L 1206.5525,1047.8205 L 1142.9129,1078.9332 L 1060.8885,1061.9626 L 1045.3322,1043.5779 z"
+       id="path8992" />
+    <path
+       transform="translate(450.03125,73.843964)"
+       style="opacity:0.58775509;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:20.79999924;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;filter:url(#filter4185);enable-background:new"
+       d="M 583.0625,715.75 C 570.95641,750.19974 556.348,784.28333 551.3125,820.59375 C 550.48042,835.52242 555.90165,849.75318 560.15625,863.65625 C 554.24001,890.85751 550.01944,920.5562 561.3125,946.78125 C 574.82967,984.9421 596.31397,1022.4634 593.73529,1064.2495 C 592.78699,1093.5437 584.72085,1125.2436 599.125,1152.5312 C 609.32364,1171.866 632.26456,1179.8429 653.09285,1180.1988 C 680.95504,1181.3729 709.55546,1168.5772 725.09375,1144.9375 C 747.68924,1115.5658 766.89426,1083.4402 780.3324,1048.8777 C 797.22293,1003.3717 810.0042,956.31698 818.26642,908.4788 C 820.09082,895.53774 821.3675,881.00895 813.6875,869.65625 C 810.25635,862.31993 813.72957,854.09611 813.00293,846.34648 C 813.67693,821.35182 817.01525,795.68272 829.65625,773.75 C 811.92312,780.1946 794.58357,790.30971 785.65318,807.61425 C 781.7181,814.3238 778.04836,821.18838 774.28125,828 C 770.73126,797.98592 778.00088,768.35172 781.0625,738.71875 C 760.89646,747.77338 744.18578,764.37397 736.88755,785.40075 C 730.58292,800.98078 728.08533,817.71793 726.625,834.4375 C 718.37166,832.91825 709.94053,832.33595 701.5625,832.9375 C 700.59942,794.23963 701.09554,753.53035 712.53125,717.03125 C 693.85012,723.24901 677.36504,735.76676 666.90322,752.41848 C 653.05068,773.29827 645.64182,798.17243 643.84375,823.03125 C 644.42909,827.35579 643.78249,834.87134 637.5,832.90625 C 632.16882,832.9238 626.87092,833.58508 621.5625,834 C 622.71034,794.61852 618.22106,752.3718 594.5,719.78125 C 591.43929,716.14408 588.86315,712.09687 585.875,708.4375 C 584.9375,710.875 584,713.3125 583.0625,715.75 z M 590.8125,729.59375 C 609.37777,758.89004 613.295,794.41387 612.9375,828.46875 C 613.14159,833.64401 612.42094,840.29795 613.0625,844.53125 C 625.38106,838.4285 639.80162,842.09135 652.84375,842.34375 C 655.16087,843.567 656.03585,843.99618 654.75,840.9375 C 650.58545,826.98465 652.90172,812.3245 656.55504,798.52986 C 662.92191,772.23922 677.18332,747.44188 699.375,731.5 C 690.75791,768.73706 693.65842,808.06161 693.28125,845.46875 C 705.53469,838.55885 720.56004,842.02262 733.3125,845.21875 C 736.70472,848.75355 735.60185,844.48927 735.5,841.40625 C 735.01691,820.03567 739.63133,798.33662 749.1875,779.25 C 755.15016,768.56273 763.43088,759.44621 771.625,750.375 C 763.75344,784.2131 762.4221,819.71093 768.90625,853.875 C 770.6311,852.46382 773.51306,853.42086 774.5625,853.5 C 784.24619,832.26318 790.91362,808.11938 809.45266,792.75815 C 811.32595,792.38693 808.00448,801.2831 807.96875,804.65625 C 804.43387,826.50206 804.67155,848.82948 803.0625,870.90625 C 801.75012,872.28304 805.91085,873.22979 806.53125,874.96875 C 814.45436,885.53455 809.65419,899.80024 808.62285,911.74886 C 801.5588,956.78241 786.85732,1000.1282 773.04608,1043.446 C 760.97132,1076.3953 742.32638,1106.526 721.8125,1134.875 C 710.85993,1148.4264 698.56778,1162.7263 680.96875,1167.375 C 660.81274,1173.6163 637.3928,1172.5494 619,1161.7188 C 601.71034,1149.3774 597.97607,1126.0099 599.73774,1106.0324 C 599.78653,1090.2062 602.10985,1078.2316 607.65521,1063.2271 C 613.20056,1048.2226 610.12626,1031.8954 605.875,1015.5938 C 601.62374,999.2922 593.69597,989.33378 584.05342,973.38963 C 574.41087,957.44548 566.41652,937.35229 563.28125,917.8125 C 561.53177,899.18536 566.17296,880.68988 569.0625,862.5625 C 572.35873,859.72554 567.46451,857.36591 566.75,854.375 C 559.14887,837.35992 558.34253,817.6001 564.00766,799.81502 C 571.13786,774.74272 579.76853,750.18261 588.6875,725.6875 C 589.39583,726.98958 590.10417,728.29167 590.8125,729.59375 z"
+       id="path4149"
+       sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccczzzcccccc"
+       clip-path="url(#clipPath4177)" />
+    <path
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter4130);enable-background:accumulate"
+       d="M 735.05635,733.03834 L 737.81177,754.12715 L 782.2228,738.73894 L 787.07343,716.34919 L 783.13726,694.29697 L 760.68563,657.70396 L 752.40559,688.0089 L 735.05635,733.03834 z"
+       id="path3902"
+       sodipodi:nodetypes="cccccccc"
+       clip-path="url(#clipPath3631)"
+       transform="translate(276,136)" />
+    <path
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter4141);enable-background:accumulate"
+       d="M 831.81321,730.29452 L 847.63558,745.19938 L 868.49031,748.09932 L 866.90002,708.17334 L 875.22563,677.66492 L 868.06064,671.32386 L 846.36395,692.26626 L 831.81321,730.29452 z"
+       id="path4135"
+       sodipodi:nodetypes="cccccccc"
+       clip-path="url(#clipPath3631)"
+       transform="translate(276,136)" />
+    <g
+       id="g8367"
+       style="filter:url(#filter8379)"
+       clip-path="url(#clipPath8392)"
+       transform="translate(276,136)">
+      <path
+         clip-path="none"
+         sodipodi:nodetypes="ccccccc"
+         id="path4145"
+         d="M 910.14441,746.31415 L 942.75736,751.48808 L 942.39617,727.61189 L 949.5847,697.92968 L 941.13358,692.66603 L 919.31164,719.1768 L 910.14441,746.31415 z"
+         style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <rect
+         y="650.19098"
+         x="877.51953"
+         height="172.53406"
+         width="123.03658"
+         id="rect8365"
+         style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:25;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    </g>
+    <g
+       id="g8400"
+       style="filter:url(#filter8404)"
+       clip-path="url(#clipPath8417)"
+       transform="translate(276,136)">
+      <path
+         clip-path="none"
+         sodipodi:nodetypes="ccccc"
+         id="path4147"
+         d="M 964.00012,754.69487 L 982.42893,762.15966 L 991.5,725.19519 L 976.62969,730.03405 L 964.00012,754.69487 z"
+         style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <rect
+         y="677.06104"
+         x="924.89569"
+         height="125.1579"
+         width="142.12846"
+         id="rect8398"
+         style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:25;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    </g>
+  </g>
+</svg>
index 296f0f7..a2e6244 100644 (file)
@@ -1,13 +1,4 @@
-This is the full-colour version of the currently unofficial Linux logo
-("currently unofficial" just means that there has been no paperwork and
-that I have not really announced it yet).  It was created by Larry Ewing,
-and is freely usable as long as you acknowledge Larry as the original
-artist. 
-
-Note that there are black-and-white versions of this available that
-scale down to smaller sizes and are better for letterheads or whatever
-you want to use it for: for the full range of logos take a look at
-Larry's web-page:
-
-       http://www.isc.tamu.edu/~lewing/linux/
+Tux is taking a three month sabbatical to work as a barber, so Tuz is
+standing in.  He's taken pains to ensure you'll hardly notice.
 
+Image by Andrew McGown and Josh Bush.  Image is licensed CC BY-SA.
index 61aeb5a..5d460c9 100644 (file)
@@ -3350,10 +3350,8 @@ S:       Maintained
 PARISC ARCHITECTURE
 P:     Kyle McMartin
 M:     kyle@mcmartin.ca
-P:     Matthew Wilcox
-M:     matthew@wil.cx
-P:     Grant Grundler
-M:     grundler@parisc-linux.org
+P:     Helge Deller
+M:     deller@gmx.de
 L:     linux-parisc@vger.kernel.org
 W:     http://www.parisc-linux.org/
 T:     git kernel.org:/pub/scm/linux/kernel/git/kyle/parisc-2.6.git
@@ -3878,6 +3876,15 @@ L:       linux-ide@vger.kernel.org
 T:     git kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git
 S:     Supported
 
+SERVER ENGINES 10Gbps NIC - BladeEngine 2 DRIVER
+P:     Sathya Perla
+M:     sathyap@serverengines.com
+P:      Subbu Seetharaman
+M:      subbus@serverengines.com
+L:      netdev@vger.kernel.org
+W:      http://www.serverengines.com
+S:      Supported
+
 SFC NETWORK DRIVER
 P:     Steve Hodgson
 P:     Ben Hutchings
index 46c04c5..828028d 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -567,6 +567,9 @@ KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
 # disable pointer signed / unsigned warnings in gcc 4.0
 KBUILD_CFLAGS += $(call cc-option,-Wno-pointer-sign,)
 
+# disable invalid "can't wrap" optimzations for signed / pointers
+KBUILD_CFLAGS  += $(call cc-option,-fwrapv)
+
 # Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments
 # But warn user when we do so
 warn-assign = \
index 7bc7489..cc78346 100644 (file)
@@ -90,7 +90,7 @@ show_interrupts(struct seq_file *p, void *v)
                seq_printf(p, "%10u ", kstat_irqs(irq));
 #else
                for_each_online_cpu(j)
-                       seq_printf(p, "%10u ", kstat_cpu(j).irqs[irq]);
+                       seq_printf(p, "%10u ", kstat_irqs_cpu(irq, j));
 #endif
                seq_printf(p, " %14s", irq_desc[irq].chip->typename);
                seq_printf(p, "  %c%s",
index e16aeb6..67c19f8 100644 (file)
@@ -64,7 +64,7 @@ do_entInt(unsigned long type, unsigned long vector,
                smp_percpu_timer_interrupt(regs);
                cpu = smp_processor_id();
                if (cpu != boot_cpuid) {
-                       kstat_cpu(cpu).irqs[RTC_IRQ]++;
+                       kstat_incr_irqs_this_cpu(RTC_IRQ, irq_to_desc(RTC_IRQ));
                } else {
                        handle_irq(RTC_IRQ);
                }
index 49a6ba9..159d041 100644 (file)
@@ -111,6 +111,7 @@ ENTRY(mcount)
        .globl mcount_call
 mcount_call:
        bl ftrace_stub
+       ldr lr, [fp, #-4]                       @ restore lr
        ldmia sp!, {r0-r3, pc}
 
 ENTRY(ftrace_caller)
@@ -122,6 +123,7 @@ ENTRY(ftrace_caller)
        .globl ftrace_call
 ftrace_call:
        bl ftrace_stub
+       ldr lr, [fp, #-4]                       @ restore lr
        ldmia sp!, {r0-r3, pc}
 
 #else
@@ -133,6 +135,7 @@ ENTRY(mcount)
        adr r0, ftrace_stub
        cmp r0, r2
        bne trace
+       ldr lr, [fp, #-4]                       @ restore lr
        ldmia sp!, {r0-r3, pc}
 
 trace:
@@ -141,6 +144,7 @@ trace:
        sub r0, r0, #MCOUNT_INSN_SIZE
        mov lr, pc
        mov pc, r2
+       mov lr, r1                              @ restore lr
        ldmia sp!, {r0-r3, pc}
 
 #endif /* CONFIG_DYNAMIC_FTRACE */
index 36f81d9..6ff7919 100644 (file)
@@ -88,7 +88,7 @@ void set_fiq_handler(void *start, unsigned int length)
  * disable irqs for the duration.  Note - these functions are almost
  * entirely coded in assembly.
  */
-void __attribute__((naked)) set_fiq_regs(struct pt_regs *regs)
+void __naked set_fiq_regs(struct pt_regs *regs)
 {
        register unsigned long tmp;
        asm volatile (
@@ -106,7 +106,7 @@ void __attribute__((naked)) set_fiq_regs(struct pt_regs *regs)
        : "r" (&regs->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE));
 }
 
-void __attribute__((naked)) get_fiq_regs(struct pt_regs *regs)
+void __naked get_fiq_regs(struct pt_regs *regs)
 {
        register unsigned long tmp;
        asm volatile (
index 45eacb5..6874c7d 100644 (file)
@@ -76,7 +76,7 @@ int show_interrupts(struct seq_file *p, void *v)
 
                seq_printf(p, "%3d: ", i);
                for_each_present_cpu(cpu)
-                       seq_printf(p, "%10u ", kstat_cpu(cpu).irqs[i]);
+                       seq_printf(p, "%10u ", kstat_irqs_cpu(i, cpu));
                seq_printf(p, " %10s", irq_desc[i].chip->name ? : "-");
                seq_printf(p, "  %s", action->name);
                for (action = action->next; action; action = action->next)
index 88f7e88..05f0f4f 100644 (file)
@@ -4,6 +4,8 @@
 
 #ifndef __ASSEMBLY__
 
+struct i2c_board_info;
+
 struct ep93xx_eth_data
 {
        unsigned char   dev_addr[6];
index 686d8d2..a956441 100644 (file)
@@ -23,6 +23,8 @@
 #include <linux/init.h>
 #include <linux/platform_device.h>
 #include <linux/gpio.h>
+
+#include <mach/irqs.h>
 #include <mach/hardware.h>
 
 static struct resource imx_csi_resources[] = {
index 2e4b185..3200cf6 100644 (file)
@@ -21,6 +21,7 @@
 #include <asm/mach/arch.h>
 #include <asm/mach/time.h>
 
+#include <mach/irqs.h>
 #include <mach/hardware.h>
 #include <mach/common.h>
 #include <mach/imx-uart.h>
index 22e0eb6..feb0e54 100644 (file)
@@ -63,7 +63,6 @@ static struct irq_chip ns9xxx_chip = {
 #else
 static void handle_prio_irq(unsigned int irq, struct irq_desc *desc)
 {
-       unsigned int cpu = smp_processor_id();
        struct irqaction *action;
        irqreturn_t action_ret;
 
@@ -72,7 +71,7 @@ static void handle_prio_irq(unsigned int irq, struct irq_desc *desc)
        BUG_ON(desc->status & IRQ_INPROGRESS);
 
        desc->status &= ~(IRQ_REPLAY | IRQ_WAITING);
-       kstat_cpu(cpu).irqs[irq]++;
+       kstat_incr_irqs_this_cpu(irq, desc);
 
        action = desc->action;
        if (unlikely(!action || (desc->status & IRQ_DISABLED)))
index 38c88fb..e39cd2c 100644 (file)
@@ -178,7 +178,9 @@ static int __init omap3_beagle_i2c_init(void)
 #ifdef CONFIG_I2C2_OMAP_BEAGLE
        omap_register_i2c_bus(2, 400, NULL, 0);
 #endif
-       omap_register_i2c_bus(3, 400, NULL, 0);
+       /* Bus 3 is attached to the DVI port where devices like the pico DLP
+        * projector don't work reliably with 400kHz */
+       omap_register_i2c_bus(3, 100, NULL, 0);
        return 0;
 }
 
index 0a62337..8a0e49d 100644 (file)
@@ -431,6 +431,10 @@ void __init orion5x_uart1_init(void)
 /*****************************************************************************
  * XOR engine
  ****************************************************************************/
+struct mv_xor_platform_shared_data orion5x_xor_shared_data = {
+       .dram           = &orion5x_mbus_dram_info,
+};
+
 static struct resource orion5x_xor_shared_resources[] = {
        {
                .name   = "xor low",
@@ -448,6 +452,9 @@ static struct resource orion5x_xor_shared_resources[] = {
 static struct platform_device orion5x_xor_shared = {
        .name           = MV_XOR_SHARED_NAME,
        .id             = 0,
+       .dev            = {
+               .platform_data  = &orion5x_xor_shared_data,
+       },
        .num_resources  = ARRAY_SIZE(orion5x_xor_shared_resources),
        .resource       = orion5x_xor_shared_resources,
 };
index 3c4d471..25f7935 100644 (file)
@@ -129,7 +129,7 @@ static struct s3c_fb_platdata smdk6410_lcd_pdata __initdata = {
        .vidcon1        = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
 };
 
-struct map_desc smdk6410_iodesc[] = {};
+static struct map_desc smdk6410_iodesc[] = {};
 
 static struct platform_device *smdk6410_devices[] __initdata = {
 #ifdef CONFIG_SMDK6410_SD_CH0
@@ -146,7 +146,7 @@ static struct platform_device *smdk6410_devices[] __initdata = {
 
 static struct i2c_board_info i2c_devs0[] __initdata = {
        { I2C_BOARD_INFO("24c08", 0x50), },
-       { I2C_BOARD_INFO("WM8580", 0X1b), },
+       { I2C_BOARD_INFO("wm8580", 0x1b), },
 };
 
 static struct i2c_board_info i2c_devs1[] __initdata = {
index c3ba6a9..70997d5 100644 (file)
@@ -13,7 +13,7 @@
 #include <linux/init.h>
 #include <linux/highmem.h>
 
-static void __attribute__((naked))
+static void __naked
 feroceon_copy_user_page(void *kto, const void *kfrom)
 {
        asm("\
index 70ed96c..de9c068 100644 (file)
@@ -15,7 +15,7 @@
  *
  * FIXME: do we need to handle cache stuff...
  */
-static void __attribute__((naked))
+static void __naked
 v3_copy_user_page(void *kto, const void *kfrom)
 {
        asm("\n\
index 1601698..7370a71 100644 (file)
@@ -44,7 +44,7 @@ static DEFINE_SPINLOCK(minicache_lock);
  * instruction.  If your processor does not supply this, you have to write your
  * own copy_user_highpage that does the right thing.
  */
-static void __attribute__((naked))
+static void __naked
 mc_copy_user_page(void *from, void *to)
 {
        asm volatile(
index 3ec93da..9ab0984 100644 (file)
@@ -22,7 +22,7 @@
  * instruction.  If your processor does not supply this, you have to write your
  * own copy_user_highpage that does the right thing.
  */
-static void __attribute__((naked))
+static void __naked
 v4wb_copy_user_page(void *kto, const void *kfrom)
 {
        asm("\
index 0f1188e..300efaf 100644 (file)
@@ -20,7 +20,7 @@
  * dirty data in the cache.  However, we do have to ensure that
  * subsequent reads are up to date.
  */
-static void __attribute__((naked))
+static void __naked
 v4wt_copy_user_page(void *kto, const void *kfrom)
 {
        asm("\
index 39a9945..bc4525f 100644 (file)
@@ -29,7 +29,7 @@
  * if we eventually end up using our copied page.
  *
  */
-static void __attribute__((naked))
+static void __naked
 xsc3_mc_copy_user_page(void *kto, const void *kfrom)
 {
        asm("\
index d18f239..76824d3 100644 (file)
@@ -42,7 +42,7 @@ static DEFINE_SPINLOCK(minicache_lock);
  * Dcache aliasing issue.  The writes will be forwarded to the write buffer,
  * and merged as appropriate.
  */
-static void __attribute__((naked))
+static void __naked
 mc_copy_user_page(void *from, void *to)
 {
        /*
index 310e479..f1ef561 100644 (file)
@@ -490,26 +490,30 @@ core_initcall(consistent_init);
  */
 void dma_cache_maint(const void *start, size_t size, int direction)
 {
-       const void *end = start + size;
+       void (*inner_op)(const void *, const void *);
+       void (*outer_op)(unsigned long, unsigned long);
 
-       BUG_ON(!virt_addr_valid(start) || !virt_addr_valid(end - 1));
+       BUG_ON(!virt_addr_valid(start) || !virt_addr_valid(start + size - 1));
 
        switch (direction) {
        case DMA_FROM_DEVICE:           /* invalidate only */
-               dmac_inv_range(start, end);
-               outer_inv_range(__pa(start), __pa(end));
+               inner_op = dmac_inv_range;
+               outer_op = outer_inv_range;
                break;
        case DMA_TO_DEVICE:             /* writeback only */
-               dmac_clean_range(start, end);
-               outer_clean_range(__pa(start), __pa(end));
+               inner_op = dmac_clean_range;
+               outer_op = outer_clean_range;
                break;
        case DMA_BIDIRECTIONAL:         /* writeback and invalidate */
-               dmac_flush_range(start, end);
-               outer_flush_range(__pa(start), __pa(end));
+               inner_op = dmac_flush_range;
+               outer_op = outer_flush_range;
                break;
        default:
                BUG();
        }
+
+       inner_op(start, start + size);
+       outer_op(__pa(start), __pa(start) + size);
 }
 EXPORT_SYMBOL(dma_cache_maint);
 
index 34df4d9..80fd3b6 100644 (file)
@@ -382,7 +382,7 @@ void __init bootmem_init(void)
        for_each_node(node)
                bootmem_free_node(node, mi);
 
-       high_memory = __va(memend_pfn << PAGE_SHIFT);
+       high_memory = __va((memend_pfn << PAGE_SHIFT) - 1) + 1;
 
        /*
         * This doesn't seem to be used by the Linux memory manager any
index 5358fcc..f7457fe 100644 (file)
@@ -124,7 +124,7 @@ int valid_phys_addr_range(unsigned long addr, size_t size)
 {
        if (addr < PHYS_OFFSET)
                return 0;
-       if (addr + size > __pa(high_memory))
+       if (addr + size >= __pa(high_memory - 1))
                return 0;
 
        return 1;
index deaff58..04a100c 100644 (file)
@@ -18,7 +18,8 @@ obj-$(CONFIG_CPU_FREQ) += cpu-omap.o
 obj-$(CONFIG_OMAP_DM_TIMER) += dmtimer.o
 obj-$(CONFIG_OMAP_DEBUG_DEVICES) += debug-devices.o
 obj-$(CONFIG_OMAP_DEBUG_LEDS) += debug-leds.o
-obj-$(CONFIG_I2C_OMAP) += i2c.o
+i2c-omap-$(CONFIG_I2C_OMAP) := i2c.o
+obj-y += $(i2c-omap-m) $(i2c-omap-y)
 
 # OMAP mailbox framework
 obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox.o
index 0843b88..6825fbb 100644 (file)
@@ -200,20 +200,16 @@ static struct clocksource clocksource_32k = {
 };
 
 /*
- * Rounds down to nearest nsec.
- */
-unsigned long long omap_32k_ticks_to_nsecs(unsigned long ticks_32k)
-{
-       return cyc2ns(&clocksource_32k, ticks_32k);
-}
-
-/*
  * Returns current time from boot in nsecs. It's OK for this to wrap
  * around for now, as it's just a relative time stamp.
  */
 unsigned long long sched_clock(void)
 {
-       return omap_32k_ticks_to_nsecs(omap_32k_read());
+       unsigned long long ret;
+
+       ret = (unsigned long long)omap_32k_read();
+       ret = (ret * clocksource_32k.mult_orig) >> clocksource_32k.shift;
+       return ret;
 }
 
 static int __init omap_init_clocksource_32k(void)
index ef70e2b..e746ec7 100644 (file)
@@ -35,7 +35,7 @@ extern void omap_map_common_io(void);
 extern struct sys_timer omap_timer;
 extern void omap_serial_init(void);
 extern void omap_serial_enable_clocks(int enable);
-#ifdef CONFIG_I2C_OMAP
+#if defined(CONFIG_I2C_OMAP) || defined(CONFIG_I2C_OMAP_MODULE)
 extern int omap_register_i2c_bus(int bus_id, u32 clkrate,
                                 struct i2c_board_info const *info,
                                 unsigned len);
index 2a9c27a..37e2f0f 100644 (file)
        !defined(CONFIG_ARCH_OMAP15XX) && \
        !defined(CONFIG_ARCH_OMAP16XX) && \
        !defined(CONFIG_ARCH_OMAP24XX)
-#error "Power management for this processor not implemented yet"
+#warning "Power management for this processor not implemented yet"
 #endif
 
 #ifndef __ASSEMBLER__
index 136c982..ad1b968 100644 (file)
@@ -248,7 +248,7 @@ static struct clk *clks[] __initdata = {
        &clk_48m,
 };
 
-void s3c64xx_register_clocks(void)
+void __init s3c64xx_register_clocks(void)
 {
        struct clk *clkp;
        int ret;
index cc62941..ee9188a 100644 (file)
@@ -417,4 +417,4 @@ static __init int s3c64xx_gpiolib_init(void)
        return 0;
 }
 
-arch_initcall(s3c64xx_gpiolib_init);
+core_initcall(s3c64xx_gpiolib_init);
index 2846f55..f865bf4 100644 (file)
 #define IRQ_ONENAND1           S3C64XX_IRQ_VIC1(12)
 #define IRQ_NFC                        S3C64XX_IRQ_VIC1(13)
 #define IRQ_CFCON              S3C64XX_IRQ_VIC1(14)
-#define IRQ_UHOST              S3C64XX_IRQ_VIC1(15)
+#define IRQ_USBH               S3C64XX_IRQ_VIC1(15)
 #define IRQ_SPI0               S3C64XX_IRQ_VIC1(16)
 #define IRQ_SPI1               S3C64XX_IRQ_VIC1(17)
 #define IRQ_IIC                        S3C64XX_IRQ_VIC1(18)
index ebb305c..cf52482 100644 (file)
 
 #include <linux/kernel.h>
 #include <linux/interrupt.h>
+#include <linux/gpio.h>
 #include <linux/irq.h>
 #include <linux/io.h>
 
 #include <asm/hardware/vic.h>
 
 #include <plat/regs-irqtype.h>
+#include <plat/regs-gpio.h>
+#include <plat/gpio-cfg.h>
 
 #include <mach/map.h>
 #include <plat/cpu.h>
@@ -74,6 +77,7 @@ static void s3c_irq_eint_maskack(unsigned int irq)
 static int s3c_irq_eint_set_type(unsigned int irq, unsigned int type)
 {
        int offs = eint_offset(irq);
+       int pin;
        int shift;
        u32 ctrl, mask;
        u32 newvalue = 0;
@@ -125,6 +129,15 @@ static int s3c_irq_eint_set_type(unsigned int irq, unsigned int type)
        ctrl |= newvalue << shift;
        __raw_writel(ctrl, reg);
 
+       /* set the GPIO pin appropriately */
+
+       if (offs < 23)
+               pin = S3C64XX_GPN(offs);
+       else
+               pin = S3C64XX_GPM(offs - 23);
+
+       s3c_gpio_cfgpin(pin, S3C_GPIO_SFN(2));
+
        return 0;
 }
 
@@ -181,7 +194,7 @@ static void s3c_irq_demux_eint20_27(unsigned int irq, struct irq_desc *desc)
        s3c_irq_demux_eint(20, 27);
 }
 
-int __init s3c64xx_init_irq_eint(void)
+static int __init s3c64xx_init_irq_eint(void)
 {
        int irq;
 
index a94f1d5..f22edf7 100644 (file)
@@ -207,7 +207,7 @@ static struct irq_chip s3c_irq_uart = {
 
 static void __init s3c64xx_uart_irq(struct uart_irq *uirq)
 {
-       void *reg_base = uirq->regs;
+       void __iomem *reg_base = uirq->regs;
        unsigned int irq;
        int offs;
 
index 8d9a0ca..05b1752 100644 (file)
@@ -36,7 +36,7 @@
  * ext_xtal_mux for want of an actual name from the manual.
 */
 
-struct clk clk_ext_xtal_mux = {
+static struct clk clk_ext_xtal_mux = {
        .name           = "ext_xtal",
        .id             = -1,
 };
@@ -63,7 +63,7 @@ struct clksrc_clk {
        void __iomem            *reg_divider;
 };
 
-struct clk clk_fout_apll = {
+static struct clk clk_fout_apll = {
        .name           = "fout_apll",
        .id             = -1,
 };
@@ -78,7 +78,7 @@ static struct clk_sources clk_src_apll = {
        .nr_sources     = ARRAY_SIZE(clk_src_apll_list),
 };
 
-struct clksrc_clk clk_mout_apll = {
+static struct clksrc_clk clk_mout_apll = {
        .clk    = {
                .name           = "mout_apll",
                .id             = -1,
@@ -88,7 +88,7 @@ struct clksrc_clk clk_mout_apll = {
        .sources        = &clk_src_apll,
 };
 
-struct clk clk_fout_epll = {
+static struct clk clk_fout_epll = {
        .name           = "fout_epll",
        .id             = -1,
 };
@@ -103,7 +103,7 @@ static struct clk_sources clk_src_epll = {
        .nr_sources     = ARRAY_SIZE(clk_src_epll_list),
 };
 
-struct clksrc_clk clk_mout_epll = {
+static struct clksrc_clk clk_mout_epll = {
        .clk    = {
                .name           = "mout_epll",
                .id             = -1,
@@ -123,7 +123,7 @@ static struct clk_sources clk_src_mpll = {
        .nr_sources     = ARRAY_SIZE(clk_src_mpll_list),
 };
 
-struct clksrc_clk clk_mout_mpll = {
+static struct clksrc_clk clk_mout_mpll = {
        .clk = {
                .name           = "mout_mpll",
                .id             = -1,
@@ -145,7 +145,7 @@ static unsigned long s3c64xx_clk_doutmpll_get_rate(struct clk *clk)
        return rate;
 }
 
-struct clk clk_dout_mpll = {
+static struct clk clk_dout_mpll = {
        .name           = "dout_mpll",
        .id             = -1,
        .parent         = &clk_mout_mpll.clk,
@@ -189,10 +189,10 @@ static struct clk_sources clkset_uart = {
 };
 
 static struct clk *clkset_uhost_list[] = {
+       &clk_48m,
        &clk_mout_epll.clk,
        &clk_dout_mpll,
        &clk_fin_epll,
-       &clk_48m,
 };
 
 static struct clk_sources clkset_uhost = {
@@ -239,10 +239,12 @@ static int s3c64xx_setrate_clksrc(struct clk *clk, unsigned long rate)
 
        rate = clk_round_rate(clk, rate);
        div = clk_get_rate(clk->parent) / rate;
+       if (div > 16)
+               return -EINVAL;
 
        val = __raw_readl(reg);
-       val &= ~sclk->mask;
-       val |= (rate - 1) << sclk->shift;
+       val &= ~(0xf << sclk->shift);
+       val |= (div - 1) << sclk->shift;
        __raw_writel(val, reg);
 
        return 0;
@@ -351,7 +353,7 @@ static struct clksrc_clk clk_mmc2 = {
 
 static struct clksrc_clk clk_usbhost = {
        .clk    = {
-               .name           = "usb-host-bus",
+               .name           = "usb-bus-host",
                .id             = -1,
                .ctrlbit        = S3C_CLKCON_SCLK_UHOST,
                .enable         = s3c64xx_sclk_ctrl,
index fd23c0e..b4211d8 100644 (file)
@@ -12,7 +12,7 @@
 #
 #   http://www.arm.linux.org.uk/developer/machines/?action=new
 #
-# Last update: Sun Nov 30 16:39:36 2008
+# Last update: Thu Mar 12 18:01:45 2009
 #
 # machine_is_xxx       CONFIG_xxxx             MACH_TYPE_xxx           number
 #
@@ -1811,7 +1811,7 @@ pilz_pmi5         MACH_PILZ_PMI5          PILZ_PMI5               1820
 jade                   MACH_JADE               JADE                    1821
 ks8695_softplc         MACH_KS8695_SOFTPLC     KS8695_SOFTPLC          1822
 gprisc3                        MACH_GPRISC3            GPRISC3                 1823
-stamp9260              MACH_STAMP9260          STAMP9260               1824
+stamp9g20              MACH_STAMP9G20          STAMP9G20               1824
 smdk6430               MACH_SMDK6430           SMDK6430                1825
 smdkc100               MACH_SMDKC100           SMDKC100                1826
 tavorevb               MACH_TAVOREVB           TAVOREVB                1827
@@ -1993,4 +1993,134 @@ spark                   MACH_SPARK              SPARK                   2002
 benzina                        MACH_BENZINA            BENZINA                 2003
 blaze                  MACH_BLAZE              BLAZE                   2004
 linkstation_ls_hgl     MACH_LINKSTATION_LS_HGL LINKSTATION_LS_HGL      2005
-htcvenus               MACH_HTCVENUS           HTCVENUS                2006
+htckovsky              MACH_HTCVENUS           HTCVENUS                2006
+sony_prs505            MACH_SONY_PRS505        SONY_PRS505             2007
+hanlin_v3              MACH_HANLIN_V3          HANLIN_V3               2008
+sapphira               MACH_SAPPHIRA           SAPPHIRA                2009
+dack_sda_01            MACH_DACK_SDA_01        DACK_SDA_01             2010
+armbox                 MACH_ARMBOX             ARMBOX                  2011
+harris_rvp             MACH_HARRIS_RVP         HARRIS_RVP              2012
+ribaldo                        MACH_RIBALDO            RIBALDO                 2013
+agora                  MACH_AGORA              AGORA                   2014
+omap3_mini             MACH_OMAP3_MINI         OMAP3_MINI              2015
+a9sam6432_b            MACH_A9SAM6432_B        A9SAM6432_B             2016
+usg2410                        MACH_USG2410            USG2410                 2017
+pc72052_i10_revb       MACH_PC72052_I10_REVB   PC72052_I10_REVB        2018
+mx35_exm32             MACH_MX35_EXM32         MX35_EXM32              2019
+topas910               MACH_TOPAS910           TOPAS910                2020
+hyena                  MACH_HYENA              HYENA                   2021
+pospax                 MACH_POSPAX             POSPAX                  2022
+hdl_gx                 MACH_HDL_GX             HDL_GX                  2023
+ctera_4bay             MACH_CTERA_4BAY         CTERA_4BAY              2024
+ctera_plug_c           MACH_CTERA_PLUG_C       CTERA_PLUG_C            2025
+crwea_plug_i           MACH_CRWEA_PLUG_I       CRWEA_PLUG_I            2026
+egauge2                        MACH_EGAUGE2            EGAUGE2                 2027
+didj                   MACH_DIDJ               DIDJ                    2028
+m_s3c2443              MACH_MEISTER            MEISTER                 2029
+htcblackstone          MACH_HTCBLACKSTONE      HTCBLACKSTONE           2030
+cpuat9g20              MACH_CPUAT9G20          CPUAT9G20               2031
+smdk6440               MACH_SMDK6440           SMDK6440                2032
+omap_35xx_mvp          MACH_OMAP_35XX_MVP      OMAP_35XX_MVP           2033
+ctera_plug_i           MACH_CTERA_PLUG_I       CTERA_PLUG_I            2034
+pvg610_100             MACH_PVG610             PVG610                  2035
+hprw6815               MACH_HPRW6815           HPRW6815                2036
+omap3_oswald           MACH_OMAP3_OSWALD       OMAP3_OSWALD            2037
+nas4220b               MACH_NAS4220B           NAS4220B                2038
+htcraphael_cdma                MACH_HTCRAPHAEL_CDMA    HTCRAPHAEL_CDMA         2039
+htcdiamond_cdma                MACH_HTCDIAMOND_CDMA    HTCDIAMOND_CDMA         2040
+scaler                 MACH_SCALER             SCALER                  2041
+zylonite2              MACH_ZYLONITE2          ZYLONITE2               2042
+aspenite               MACH_ASPENITE           ASPENITE                2043
+teton                  MACH_TETON              TETON                   2044
+ttc_dkb                        MACH_TTC_DKB            TTC_DKB                 2045
+bishop2                        MACH_BISHOP2            BISHOP2                 2046
+ippv5                  MACH_IPPV5              IPPV5                   2047
+farm926                        MACH_FARM926            FARM926                 2048
+mmccpu                 MACH_MMCCPU             MMCCPU                  2049
+sgmsfl                 MACH_SGMSFL             SGMSFL                  2050
+tt8000                 MACH_TT8000             TT8000                  2051
+zrn4300lp              MACH_ZRN4300LP          ZRN4300LP               2052
+mptc                   MACH_MPTC               MPTC                    2053
+h6051                  MACH_H6051              H6051                   2054
+pvg610_101             MACH_PVG610_101         PVG610_101              2055
+stamp9261_pc_evb       MACH_STAMP9261_PC_EVB   STAMP9261_PC_EVB        2056
+pelco_odysseus         MACH_PELCO_ODYSSEUS     PELCO_ODYSSEUS          2057
+tny_a9260              MACH_TNY_A9260          TNY_A9260               2058
+tny_a9g20              MACH_TNY_A9G20          TNY_A9G20               2059
+aesop_mp2530f          MACH_AESOP_MP2530F      AESOP_MP2530F           2060
+dx900                  MACH_DX900              DX900                   2061
+cpodc2                 MACH_CPODC2             CPODC2                  2062
+tilt_8925              MACH_TILT_8925          TILT_8925               2063
+davinci_dm357_evm      MACH_DAVINCI_DM357_EVM  DAVINCI_DM357_EVM       2064
+swordfish              MACH_SWORDFISH          SWORDFISH               2065
+corvus                 MACH_CORVUS             CORVUS                  2066
+taurus                 MACH_TAURUS             TAURUS                  2067
+axm                    MACH_AXM                AXM                     2068
+axc                    MACH_AXC                AXC                     2069
+baby                   MACH_BABY               BABY                    2070
+mp200                  MACH_MP200              MP200                   2071
+pcm043                 MACH_PCM043             PCM043                  2072
+hanlin_v3c             MACH_HANLIN_V3C         HANLIN_V3C              2073
+kbk9g20                        MACH_KBK9G20            KBK9G20                 2074
+adsturbog5             MACH_ADSTURBOG5         ADSTURBOG5              2075
+avenger_lite1          MACH_AVENGER_LITE1      AVENGER_LITE1           2076
+suc82x                 MACH_SUC                SUC                     2077
+at91sam7s256           MACH_AT91SAM7S256       AT91SAM7S256            2078
+mendoza                        MACH_MENDOZA            MENDOZA                 2079
+kira                   MACH_KIRA               KIRA                    2080
+mx1hbm                 MACH_MX1HBM             MX1HBM                  2081
+quatro43xx             MACH_QUATRO43XX         QUATRO43XX              2082
+quatro4230             MACH_QUATRO4230         QUATRO4230              2083
+nsb400                 MACH_NSB400             NSB400                  2084
+drp255                 MACH_DRP255             DRP255                  2085
+thoth                  MACH_THOTH              THOTH                   2086
+firestone              MACH_FIRESTONE          FIRESTONE               2087
+asusp750               MACH_ASUSP750           ASUSP750                2088
+ctera_dl               MACH_CTERA_DL           CTERA_DL                2089
+socr                   MACH_SOCR               SOCR                    2090
+htcoxygen              MACH_HTCOXYGEN          HTCOXYGEN               2091
+heroc                  MACH_HEROC              HEROC                   2092
+zeno6800               MACH_ZENO6800           ZENO6800                2093
+sc2mcs                 MACH_SC2MCS             SC2MCS                  2094
+gene100                        MACH_GENE100            GENE100                 2095
+as353x                 MACH_AS353X             AS353X                  2096
+sheevaplug             MACH_SHEEVAPLUG         SHEEVAPLUG              2097
+at91sam9g20            MACH_AT91SAM9G20        AT91SAM9G20             2098
+mv88f6192gtw_fe                MACH_MV88F6192GTW_FE    MV88F6192GTW_FE         2099
+cc9200                 MACH_CC9200             CC9200                  2100
+sm9200                 MACH_SM9200             SM9200                  2101
+tp9200                 MACH_TP9200             TP9200                  2102
+snapperdv              MACH_SNAPPERDV          SNAPPERDV               2103
+avengers_lite          MACH_AVENGERS_LITE      AVENGERS_LITE           2104
+avengers_lite1         MACH_AVENGERS_LITE1     AVENGERS_LITE1          2105
+omap3axon              MACH_OMAP3AXON          OMAP3AXON               2106
+ma8xx                  MACH_MA8XX              MA8XX                   2107
+mp201ek                        MACH_MP201EK            MP201EK                 2108
+davinci_tux            MACH_DAVINCI_TUX        DAVINCI_TUX             2109
+mpa1600                        MACH_MPA1600            MPA1600                 2110
+pelco_troy             MACH_PELCO_TROY         PELCO_TROY              2111
+nsb667                 MACH_NSB667             NSB667                  2112
+rovers5_4mpix          MACH_ROVERS5_4MPIX      ROVERS5_4MPIX           2113
+twocom                 MACH_TWOCOM             TWOCOM                  2114
+ubisys_p9_rcu3r2       MACH_UBISYS_P9_RCU3R2   UBISYS_P9_RCU3R2        2115
+hero_espresso          MACH_HERO_ESPRESSO      HERO_ESPRESSO           2116
+afeusb                 MACH_AFEUSB             AFEUSB                  2117
+t830                   MACH_T830               T830                    2118
+spd8020_cc             MACH_SPD8020_CC         SPD8020_CC              2119
+om_3d7k                        MACH_OM_3D7K            OM_3D7K                 2120
+picocom2               MACH_PICOCOM2           PICOCOM2                2121
+uwg4mx27               MACH_UWG4MX27           UWG4MX27                2122
+uwg4mx31               MACH_UWG4MX31           UWG4MX31                2123
+cherry                 MACH_CHERRY             CHERRY                  2124
+mx51_babbage           MACH_MX51_BABBAGE       MX51_BABBAGE            2125
+s3c2440turkiye         MACH_S3C2440TURKIYE     S3C2440TURKIYE          2126
+tx37                   MACH_TX37               TX37                    2127
+sbc2800_9g20           MACH_SBC2800_9G20       SBC2800_9G20            2128
+benzglb                        MACH_BENZGLB            BENZGLB                 2129
+benztd                 MACH_BENZTD             BENZTD                  2130
+cartesio_plus          MACH_CARTESIO_PLUS      CARTESIO_PLUS           2131
+solrad_g20             MACH_SOLRAD_G20         SOLRAD_G20              2132
+mx27wallace            MACH_MX27WALLACE        MX27WALLACE             2133
+fmzwebmodul            MACH_FMZWEBMODUL        FMZWEBMODUL             2134
+rd78x00_masa           MACH_RD78X00_MASA       RD78X00_MASA            2135
+smallogger             MACH_SMALLOGGER         SMALLOGGER              2136
index a8e767d..9f57222 100644 (file)
@@ -58,7 +58,7 @@ int show_interrupts(struct seq_file *p, void *v)
 
                seq_printf(p, "%3d: ", i);
                for_each_online_cpu(cpu)
-                       seq_printf(p, "%10u ", kstat_cpu(cpu).irqs[i]);
+                       seq_printf(p, "%10u ", kstat_irqs_cpu(i, cpu));
                seq_printf(p, " %8s", irq_desc[i].chip->name ? : "-");
                seq_printf(p, "  %s", action->name);
                for (action = action->next; action; action = action->next)
index 1ab5b53..401bd32 100644 (file)
@@ -88,7 +88,7 @@ int show_interrupts(struct seq_file *p, void *v)
                        goto skip;
                seq_printf(p, "%3d: ", i);
                for_each_online_cpu(j)
-                       seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
+                       seq_printf(p, "%10u ", kstat_irqs_cpu(i, j));
                seq_printf(p, " %8s", irq_desc[i].chip->name);
                seq_printf(p, "  %s", action->name);
                for (action = action->next; action; action = action->next)
index 2dfac8c..7f642fc 100644 (file)
@@ -66,7 +66,7 @@ int show_interrupts(struct seq_file *p, void *v)
                seq_printf(p, "%10u ", kstat_irqs(i));
 #else
                for_each_online_cpu(j)
-                       seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
+                       seq_printf(p, "%10u ", kstat_irqs_cpu(i, j));
 #endif
                seq_printf(p, " %14s", irq_desc[i].chip->typename);
                seq_printf(p, "  %s", action->name);
index 73abae7..af3e824 100644 (file)
@@ -74,7 +74,7 @@ int show_interrupts(struct seq_file *p, void *v)
                if (action) {
                        seq_printf(p, "%3d: ", i);
                        for_each_present_cpu(cpu)
-                               seq_printf(p, "%10u ", kstat_cpu(cpu).irqs[i]);
+                               seq_printf(p, "%10u ", kstat_irqs_cpu(i, cpu));
                        seq_printf(p, " %10s", irq_desc[i].chip->name ? : "-");
                        seq_printf(p, "  %s", action->name);
                        for (action = action->next;
index ef4f004..74f8dd7 100644 (file)
@@ -183,7 +183,7 @@ asmlinkage void do_IRQ(int irq)
 #if defined(CONFIG_PROC_FS)
 int show_interrupts(struct seq_file *p, void *v)
 {
-       int i = *(loff_t *) v, j;
+       int i = *(loff_t *) v;
        struct irqaction * action;
        unsigned long flags;
 
@@ -196,7 +196,7 @@ int show_interrupts(struct seq_file *p, void *v)
                if (!action)
                        goto unlock;
                seq_printf(p, "%3d: ",i);
-               seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
+               seq_printf(p, "%10u ", kstat_irqs(i));
                seq_printf(p, " %14s", irq_desc[i].chip->name);
                seq_printf(p, "-%-8s", irq_desc[i].name);
                seq_printf(p, "  %s", action->name);
index 226233a..7429752 100644 (file)
@@ -80,7 +80,7 @@ int show_interrupts(struct seq_file *p, void *v)
                seq_printf(p, "%10u ", kstat_irqs(i));
 #else
                for_each_online_cpu(j) {
-                       seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
+                       seq_printf(p, "%10u ", kstat_irqs_cpu(i, j));
                }
 #endif
                seq_printf(p, " %14s", irq_desc[i].chip->name);
index 2aeae46..8dfd31e 100644 (file)
@@ -49,7 +49,7 @@ int show_interrupts(struct seq_file *p, void *v)
                seq_printf(p, "%10u ", kstat_irqs(i));
 #else
                for_each_online_cpu(j)
-                       seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
+                       seq_printf(p, "%10u ", kstat_irqs_cpu(i, j));
 #endif
                seq_printf(p, " %14s", irq_desc[i].chip->typename);
                seq_printf(p, "  %s", action->name);
index 40d1112..85c41b7 100644 (file)
@@ -1,5 +1,26 @@
+#ifndef _M68K_PARAM_H
+#define _M68K_PARAM_H
+
+#ifdef __KERNEL__
+# define HZ            CONFIG_HZ       /* Internal kernel timer frequency */
+# define USER_HZ       100             /* .. some user interfaces are in "ticks" */
+# define CLOCKS_PER_SEC        (USER_HZ)       /* like times() */
+#endif
+
+#ifndef HZ
+#define HZ 100
+#endif
+
 #ifdef __uClinux__
-#include "param_no.h"
+#define EXEC_PAGESIZE  4096
 #else
-#include "param_mm.h"
+#define EXEC_PAGESIZE  8192
+#endif
+
+#ifndef NOGROUP
+#define NOGROUP                (-1)
 #endif
+
+#define MAXHOSTNAMELEN 64      /* max length of hostname */
+
+#endif /* _M68K_PARAM_H */
diff --git a/arch/m68k/include/asm/param_mm.h b/arch/m68k/include/asm/param_mm.h
deleted file mode 100644 (file)
index 536a278..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef _M68K_PARAM_H
-#define _M68K_PARAM_H
-
-#ifdef __KERNEL__
-# define HZ            CONFIG_HZ       /* Internal kernel timer frequency */
-# define USER_HZ       100             /* .. some user interfaces are in "ticks" */
-# define CLOCKS_PER_SEC        (USER_HZ)       /* like times() */
-#endif
-
-#ifndef HZ
-#define HZ 100
-#endif
-
-#define EXEC_PAGESIZE  8192
-
-#ifndef NOGROUP
-#define NOGROUP                (-1)
-#endif
-
-#define MAXHOSTNAMELEN 64      /* max length of hostname */
-
-#endif /* _M68K_PARAM_H */
diff --git a/arch/m68k/include/asm/param_no.h b/arch/m68k/include/asm/param_no.h
deleted file mode 100644 (file)
index 6044397..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef _M68KNOMMU_PARAM_H
-#define _M68KNOMMU_PARAM_H
-
-#ifdef __KERNEL__
-#define HZ CONFIG_HZ
-#define        USER_HZ         HZ
-#define        CLOCKS_PER_SEC  (USER_HZ)
-#endif
-
-#ifndef HZ
-#define HZ     100
-#endif
-
-#define EXEC_PAGESIZE  4096
-
-#ifndef NOGROUP
-#define NOGROUP                (-1)
-#endif
-
-#define MAXHOSTNAMELEN 64      /* max length of hostname */
-
-#endif /* _M68KNOMMU_PARAM_H */
index e83cd2f..8c9194b 100644 (file)
@@ -1,5 +1,87 @@
-#ifdef __uClinux__
-#include "ptrace_no.h"
+#ifndef _M68K_PTRACE_H
+#define _M68K_PTRACE_H
+
+#define PT_D1     0
+#define PT_D2     1
+#define PT_D3     2
+#define PT_D4     3
+#define PT_D5     4
+#define PT_D6     5
+#define PT_D7     6
+#define PT_A0     7
+#define PT_A1     8
+#define PT_A2     9
+#define PT_A3     10
+#define PT_A4     11
+#define PT_A5     12
+#define PT_A6     13
+#define PT_D0     14
+#define PT_USP    15
+#define PT_ORIG_D0 16
+#define PT_SR     17
+#define PT_PC     18
+
+#ifndef __ASSEMBLY__
+
+/* this struct defines the way the registers are stored on the
+   stack during a system call. */
+
+struct pt_regs {
+  long     d1;
+  long     d2;
+  long     d3;
+  long     d4;
+  long     d5;
+  long     a0;
+  long     a1;
+  long     a2;
+  long     d0;
+  long     orig_d0;
+  long     stkadj;
+#ifdef CONFIG_COLDFIRE
+  unsigned format :  4; /* frame format specifier */
+  unsigned vector : 12; /* vector offset */
+  unsigned short sr;
+  unsigned long  pc;
 #else
-#include "ptrace_mm.h"
+  unsigned short sr;
+  unsigned long  pc;
+  unsigned format :  4; /* frame format specifier */
+  unsigned vector : 12; /* vector offset */
 #endif
+};
+
+/*
+ * This is the extended stack used by signal handlers and the context
+ * switcher: it's pushed after the normal "struct pt_regs".
+ */
+struct switch_stack {
+       unsigned long  d6;
+       unsigned long  d7;
+       unsigned long  a3;
+       unsigned long  a4;
+       unsigned long  a5;
+       unsigned long  a6;
+       unsigned long  retpc;
+};
+
+/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
+#define PTRACE_GETREGS            12
+#define PTRACE_SETREGS            13
+#define PTRACE_GETFPREGS          14
+#define PTRACE_SETFPREGS          15
+
+#ifdef __KERNEL__
+
+#ifndef PS_S
+#define PS_S  (0x2000)
+#define PS_M  (0x1000)
+#endif
+
+#define user_mode(regs) (!((regs)->sr & PS_S))
+#define instruction_pointer(regs) ((regs)->pc)
+#define profile_pc(regs) instruction_pointer(regs)
+extern void show_regs(struct pt_regs *);
+#endif /* __KERNEL__ */
+#endif /* __ASSEMBLY__ */
+#endif /* _M68K_PTRACE_H */
diff --git a/arch/m68k/include/asm/ptrace_mm.h b/arch/m68k/include/asm/ptrace_mm.h
deleted file mode 100644 (file)
index 57e763d..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-#ifndef _M68K_PTRACE_H
-#define _M68K_PTRACE_H
-
-#define PT_D1     0
-#define PT_D2     1
-#define PT_D3     2
-#define PT_D4     3
-#define PT_D5     4
-#define PT_D6     5
-#define PT_D7     6
-#define PT_A0     7
-#define PT_A1     8
-#define PT_A2     9
-#define PT_A3     10
-#define PT_A4     11
-#define PT_A5     12
-#define PT_A6     13
-#define PT_D0     14
-#define PT_USP    15
-#define PT_ORIG_D0 16
-#define PT_SR     17
-#define PT_PC     18
-
-#ifndef __ASSEMBLY__
-
-/* this struct defines the way the registers are stored on the
-   stack during a system call. */
-
-struct pt_regs {
-  long     d1;
-  long     d2;
-  long     d3;
-  long     d4;
-  long     d5;
-  long     a0;
-  long     a1;
-  long     a2;
-  long     d0;
-  long     orig_d0;
-  long     stkadj;
-  unsigned short sr;
-  unsigned long  pc;
-  unsigned format :  4; /* frame format specifier */
-  unsigned vector : 12; /* vector offset */
-};
-
-/*
- * This is the extended stack used by signal handlers and the context
- * switcher: it's pushed after the normal "struct pt_regs".
- */
-struct switch_stack {
-       unsigned long  d6;
-       unsigned long  d7;
-       unsigned long  a3;
-       unsigned long  a4;
-       unsigned long  a5;
-       unsigned long  a6;
-       unsigned long  retpc;
-};
-
-/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
-#define PTRACE_GETREGS            12
-#define PTRACE_SETREGS            13
-#define PTRACE_GETFPREGS          14
-#define PTRACE_SETFPREGS          15
-
-#ifdef __KERNEL__
-
-#ifndef PS_S
-#define PS_S  (0x2000)
-#define PS_M  (0x1000)
-#endif
-
-#define user_mode(regs) (!((regs)->sr & PS_S))
-#define instruction_pointer(regs) ((regs)->pc)
-#define profile_pc(regs) instruction_pointer(regs)
-extern void show_regs(struct pt_regs *);
-#endif /* __KERNEL__ */
-#endif /* __ASSEMBLY__ */
-#endif /* _M68K_PTRACE_H */
diff --git a/arch/m68k/include/asm/ptrace_no.h b/arch/m68k/include/asm/ptrace_no.h
deleted file mode 100644 (file)
index 8c9194b..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-#ifndef _M68K_PTRACE_H
-#define _M68K_PTRACE_H
-
-#define PT_D1     0
-#define PT_D2     1
-#define PT_D3     2
-#define PT_D4     3
-#define PT_D5     4
-#define PT_D6     5
-#define PT_D7     6
-#define PT_A0     7
-#define PT_A1     8
-#define PT_A2     9
-#define PT_A3     10
-#define PT_A4     11
-#define PT_A5     12
-#define PT_A6     13
-#define PT_D0     14
-#define PT_USP    15
-#define PT_ORIG_D0 16
-#define PT_SR     17
-#define PT_PC     18
-
-#ifndef __ASSEMBLY__
-
-/* this struct defines the way the registers are stored on the
-   stack during a system call. */
-
-struct pt_regs {
-  long     d1;
-  long     d2;
-  long     d3;
-  long     d4;
-  long     d5;
-  long     a0;
-  long     a1;
-  long     a2;
-  long     d0;
-  long     orig_d0;
-  long     stkadj;
-#ifdef CONFIG_COLDFIRE
-  unsigned format :  4; /* frame format specifier */
-  unsigned vector : 12; /* vector offset */
-  unsigned short sr;
-  unsigned long  pc;
-#else
-  unsigned short sr;
-  unsigned long  pc;
-  unsigned format :  4; /* frame format specifier */
-  unsigned vector : 12; /* vector offset */
-#endif
-};
-
-/*
- * This is the extended stack used by signal handlers and the context
- * switcher: it's pushed after the normal "struct pt_regs".
- */
-struct switch_stack {
-       unsigned long  d6;
-       unsigned long  d7;
-       unsigned long  a3;
-       unsigned long  a4;
-       unsigned long  a5;
-       unsigned long  a6;
-       unsigned long  retpc;
-};
-
-/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
-#define PTRACE_GETREGS            12
-#define PTRACE_SETREGS            13
-#define PTRACE_GETFPREGS          14
-#define PTRACE_SETFPREGS          15
-
-#ifdef __KERNEL__
-
-#ifndef PS_S
-#define PS_S  (0x2000)
-#define PS_M  (0x1000)
-#endif
-
-#define user_mode(regs) (!((regs)->sr & PS_S))
-#define instruction_pointer(regs) ((regs)->pc)
-#define profile_pc(regs) instruction_pointer(regs)
-extern void show_regs(struct pt_regs *);
-#endif /* __KERNEL__ */
-#endif /* __ASSEMBLY__ */
-#endif /* _M68K_PTRACE_H */
index 842f86f..4dfb395 100644 (file)
@@ -1,5 +1,376 @@
-#ifdef __uClinux__
-#include "setup_no.h"
+/*
+** asm/setup.h -- Definition of the Linux/m68k setup information
+**
+** Copyright 1992 by Greg Harp
+**
+** This file is subject to the terms and conditions of the GNU General Public
+** License.  See the file COPYING in the main directory of this archive
+** for more details.
+**
+** Created 09/29/92 by Greg Harp
+**
+** 5/2/94 Roman Hodek:
+**   Added bi_atari part of the machine dependent union bi_un; for now it
+**   contains just a model field to distinguish between TT and Falcon.
+** 26/7/96 Roman Zippel:
+**   Renamed to setup.h; added some useful macros to allow gcc some
+**   optimizations if possible.
+** 5/10/96 Geert Uytterhoeven:
+**   Redesign of the boot information structure; moved boot information
+**   structure to bootinfo.h
+*/
+
+#ifndef _M68K_SETUP_H
+#define _M68K_SETUP_H
+
+
+
+    /*
+     *  Linux/m68k Architectures
+     */
+
+#define MACH_AMIGA    1
+#define MACH_ATARI    2
+#define MACH_MAC      3
+#define MACH_APOLLO   4
+#define MACH_SUN3     5
+#define MACH_MVME147  6
+#define MACH_MVME16x  7
+#define MACH_BVME6000 8
+#define MACH_HP300    9
+#define MACH_Q40     10
+#define MACH_SUN3X   11
+
+#define COMMAND_LINE_SIZE 256
+
+#ifdef __KERNEL__
+
+#define CL_SIZE COMMAND_LINE_SIZE
+
+#ifndef __ASSEMBLY__
+extern unsigned long m68k_machtype;
+#endif /* !__ASSEMBLY__ */
+
+#if !defined(CONFIG_AMIGA)
+#  define MACH_IS_AMIGA (0)
+#elif defined(CONFIG_ATARI) || defined(CONFIG_MAC) || defined(CONFIG_APOLLO) \
+       || defined(CONFIG_MVME16x) || defined(CONFIG_BVME6000)               \
+       || defined(CONFIG_HP300) || defined(CONFIG_Q40)                      \
+       || defined(CONFIG_SUN3X) || defined(CONFIG_MVME147)
+#  define MACH_IS_AMIGA (m68k_machtype == MACH_AMIGA)
 #else
-#include "setup_mm.h"
+#  define MACH_AMIGA_ONLY
+#  define MACH_IS_AMIGA (1)
+#  define MACH_TYPE (MACH_AMIGA)
 #endif
+
+#if !defined(CONFIG_ATARI)
+#  define MACH_IS_ATARI (0)
+#elif defined(CONFIG_AMIGA) || defined(CONFIG_MAC) || defined(CONFIG_APOLLO) \
+       || defined(CONFIG_MVME16x) || defined(CONFIG_BVME6000)               \
+       || defined(CONFIG_HP300) || defined(CONFIG_Q40)                      \
+       || defined(CONFIG_SUN3X) || defined(CONFIG_MVME147)
+#  define MACH_IS_ATARI (m68k_machtype == MACH_ATARI)
+#else
+#  define MACH_ATARI_ONLY
+#  define MACH_IS_ATARI (1)
+#  define MACH_TYPE (MACH_ATARI)
+#endif
+
+#if !defined(CONFIG_MAC)
+#  define MACH_IS_MAC (0)
+#elif defined(CONFIG_AMIGA) || defined(CONFIG_ATARI) || defined(CONFIG_APOLLO) \
+       || defined(CONFIG_MVME16x) || defined(CONFIG_BVME6000)                 \
+       || defined(CONFIG_HP300) || defined(CONFIG_Q40)                        \
+       || defined(CONFIG_SUN3X) || defined(CONFIG_MVME147)
+#  define MACH_IS_MAC (m68k_machtype == MACH_MAC)
+#else
+#  define MACH_MAC_ONLY
+#  define MACH_IS_MAC (1)
+#  define MACH_TYPE (MACH_MAC)
+#endif
+
+#if defined(CONFIG_SUN3)
+#define MACH_IS_SUN3 (1)
+#define MACH_SUN3_ONLY (1)
+#define MACH_TYPE (MACH_SUN3)
+#else
+#define MACH_IS_SUN3 (0)
+#endif
+
+#if !defined (CONFIG_APOLLO)
+#  define MACH_IS_APOLLO (0)
+#elif defined(CONFIG_AMIGA) || defined(CONFIG_MAC) || defined(CONFIG_ATARI) \
+       || defined(CONFIG_MVME16x) || defined(CONFIG_BVME6000)              \
+       || defined(CONFIG_HP300) || defined(CONFIG_Q40)                     \
+       || defined(CONFIG_SUN3X) || defined(CONFIG_MVME147)
+#  define MACH_IS_APOLLO (m68k_machtype == MACH_APOLLO)
+#else
+#  define MACH_APOLLO_ONLY
+#  define MACH_IS_APOLLO (1)
+#  define MACH_TYPE (MACH_APOLLO)
+#endif
+
+#if !defined (CONFIG_MVME147)
+#  define MACH_IS_MVME147 (0)
+#elif defined(CONFIG_AMIGA) || defined(CONFIG_MAC) || defined(CONFIG_ATARI) \
+       || defined(CONFIG_APOLLO) || defined(CONFIG_BVME6000)               \
+       || defined(CONFIG_HP300) || defined(CONFIG_Q40)                     \
+       || defined(CONFIG_SUN3X) || defined(CONFIG_MVME16x)
+#  define MACH_IS_MVME147 (m68k_machtype == MACH_MVME147)
+#else
+#  define MACH_MVME147_ONLY
+#  define MACH_IS_MVME147 (1)
+#  define MACH_TYPE (MACH_MVME147)
+#endif
+
+#if !defined (CONFIG_MVME16x)
+#  define MACH_IS_MVME16x (0)
+#elif defined(CONFIG_AMIGA) || defined(CONFIG_MAC) || defined(CONFIG_ATARI) \
+       || defined(CONFIG_APOLLO) || defined(CONFIG_BVME6000)               \
+       || defined(CONFIG_HP300) || defined(CONFIG_Q40)                     \
+       || defined(CONFIG_SUN3X) || defined(CONFIG_MVME147)
+#  define MACH_IS_MVME16x (m68k_machtype == MACH_MVME16x)
+#else
+#  define MACH_MVME16x_ONLY
+#  define MACH_IS_MVME16x (1)
+#  define MACH_TYPE (MACH_MVME16x)
+#endif
+
+#if !defined (CONFIG_BVME6000)
+#  define MACH_IS_BVME6000 (0)
+#elif defined(CONFIG_AMIGA) || defined(CONFIG_MAC) || defined(CONFIG_ATARI) \
+       || defined(CONFIG_APOLLO) || defined(CONFIG_MVME16x)                \
+       || defined(CONFIG_HP300) || defined(CONFIG_Q40)                     \
+       || defined(CONFIG_SUN3X) || defined(CONFIG_MVME147)
+#  define MACH_IS_BVME6000 (m68k_machtype == MACH_BVME6000)
+#else
+#  define MACH_BVME6000_ONLY
+#  define MACH_IS_BVME6000 (1)
+#  define MACH_TYPE (MACH_BVME6000)
+#endif
+
+#if !defined (CONFIG_HP300)
+#  define MACH_IS_HP300 (0)
+#elif defined(CONFIG_AMIGA) || defined(CONFIG_MAC) || defined(CONFIG_ATARI) \
+       || defined(CONFIG_APOLLO) || defined(CONFIG_MVME16x) \
+       || defined(CONFIG_BVME6000) || defined(CONFIG_Q40) \
+       || defined(CONFIG_SUN3X) || defined(CONFIG_MVME147)
+#  define MACH_IS_HP300 (m68k_machtype == MACH_HP300)
+#else
+#  define MACH_HP300_ONLY
+#  define MACH_IS_HP300 (1)
+#  define MACH_TYPE (MACH_HP300)
+#endif
+
+#if !defined (CONFIG_Q40)
+#  define MACH_IS_Q40 (0)
+#elif defined(CONFIG_AMIGA) || defined(CONFIG_MAC) || defined(CONFIG_ATARI) \
+       || defined(CONFIG_APOLLO) || defined(CONFIG_MVME16x)                \
+       || defined(CONFIG_BVME6000) || defined(CONFIG_HP300)                \
+       || defined(CONFIG_SUN3X) || defined(CONFIG_MVME147)
+#  define MACH_IS_Q40 (m68k_machtype == MACH_Q40)
+#else
+#  define MACH_Q40_ONLY
+#  define MACH_IS_Q40 (1)
+#  define MACH_TYPE (MACH_Q40)
+#endif
+
+#if !defined (CONFIG_SUN3X)
+#  define MACH_IS_SUN3X (0)
+#elif defined(CONFIG_AMIGA) || defined(CONFIG_MAC) || defined(CONFIG_ATARI) \
+       || defined(CONFIG_APOLLO) || defined(CONFIG_MVME16x)                \
+       || defined(CONFIG_BVME6000) || defined(CONFIG_HP300)                \
+       || defined(CONFIG_Q40) || defined(CONFIG_MVME147)
+#  define MACH_IS_SUN3X (m68k_machtype == MACH_SUN3X)
+#else
+#  define CONFIG_SUN3X_ONLY
+#  define MACH_IS_SUN3X (1)
+#  define MACH_TYPE (MACH_SUN3X)
+#endif
+
+#ifndef MACH_TYPE
+#  define MACH_TYPE (m68k_machtype)
+#endif
+
+#endif /* __KERNEL__ */
+
+
+    /*
+     *  CPU, FPU and MMU types
+     *
+     *  Note: we may rely on the following equalities:
+     *
+     *      CPU_68020 == MMU_68851
+     *      CPU_68030 == MMU_68030
+     *      CPU_68040 == FPU_68040 == MMU_68040
+     *      CPU_68060 == FPU_68060 == MMU_68060
+     */
+
+#define CPUB_68020     0
+#define CPUB_68030     1
+#define CPUB_68040     2
+#define CPUB_68060     3
+
+#define CPU_68020      (1<<CPUB_68020)
+#define CPU_68030      (1<<CPUB_68030)
+#define CPU_68040      (1<<CPUB_68040)
+#define CPU_68060      (1<<CPUB_68060)
+
+#define FPUB_68881     0
+#define FPUB_68882     1
+#define FPUB_68040     2                       /* Internal FPU */
+#define FPUB_68060     3                       /* Internal FPU */
+#define FPUB_SUNFPA    4                       /* Sun-3 FPA */
+
+#define FPU_68881      (1<<FPUB_68881)
+#define FPU_68882      (1<<FPUB_68882)
+#define FPU_68040      (1<<FPUB_68040)
+#define FPU_68060      (1<<FPUB_68060)
+#define FPU_SUNFPA     (1<<FPUB_SUNFPA)
+
+#define MMUB_68851     0
+#define MMUB_68030     1                       /* Internal MMU */
+#define MMUB_68040     2                       /* Internal MMU */
+#define MMUB_68060     3                       /* Internal MMU */
+#define MMUB_APOLLO    4                       /* Custom Apollo */
+#define MMUB_SUN3      5                       /* Custom Sun-3 */
+
+#define MMU_68851      (1<<MMUB_68851)
+#define MMU_68030      (1<<MMUB_68030)
+#define MMU_68040      (1<<MMUB_68040)
+#define MMU_68060      (1<<MMUB_68060)
+#define MMU_SUN3       (1<<MMUB_SUN3)
+#define MMU_APOLLO     (1<<MMUB_APOLLO)
+
+#ifdef __KERNEL__
+
+#ifndef __ASSEMBLY__
+extern unsigned long m68k_cputype;
+extern unsigned long m68k_fputype;
+extern unsigned long m68k_mmutype;
+#ifdef CONFIG_VME
+extern unsigned long vme_brdtype;
+#endif
+
+    /*
+     *  m68k_is040or060 is != 0 for a '040 or higher;
+     *  used numbers are 4 for 68040 and 6 for 68060.
+     */
+
+extern int m68k_is040or060;
+#endif /* !__ASSEMBLY__ */
+
+#if !defined(CONFIG_M68020)
+#  define CPU_IS_020 (0)
+#  define MMU_IS_851 (0)
+#  define MMU_IS_SUN3 (0)
+#elif defined(CONFIG_M68030) || defined(CONFIG_M68040) || defined(CONFIG_M68060)
+#  define CPU_IS_020 (m68k_cputype & CPU_68020)
+#  define MMU_IS_851 (m68k_mmutype & MMU_68851)
+#  define MMU_IS_SUN3 (0)      /* Sun3 not supported with other CPU enabled */
+#else
+#  define CPU_M68020_ONLY
+#  define CPU_IS_020 (1)
+#ifdef MACH_SUN3_ONLY
+#  define MMU_IS_SUN3 (1)
+#  define MMU_IS_851 (0)
+#else
+#  define MMU_IS_SUN3 (0)
+#  define MMU_IS_851 (1)
+#endif
+#endif
+
+#if !defined(CONFIG_M68030)
+#  define CPU_IS_030 (0)
+#  define MMU_IS_030 (0)
+#elif defined(CONFIG_M68020) || defined(CONFIG_M68040) || defined(CONFIG_M68060)
+#  define CPU_IS_030 (m68k_cputype & CPU_68030)
+#  define MMU_IS_030 (m68k_mmutype & MMU_68030)
+#else
+#  define CPU_M68030_ONLY
+#  define CPU_IS_030 (1)
+#  define MMU_IS_030 (1)
+#endif
+
+#if !defined(CONFIG_M68040)
+#  define CPU_IS_040 (0)
+#  define MMU_IS_040 (0)
+#elif defined(CONFIG_M68020) || defined(CONFIG_M68030) || defined(CONFIG_M68060)
+#  define CPU_IS_040 (m68k_cputype & CPU_68040)
+#  define MMU_IS_040 (m68k_mmutype & MMU_68040)
+#else
+#  define CPU_M68040_ONLY
+#  define CPU_IS_040 (1)
+#  define MMU_IS_040 (1)
+#endif
+
+#if !defined(CONFIG_M68060)
+#  define CPU_IS_060 (0)
+#  define MMU_IS_060 (0)
+#elif defined(CONFIG_M68020) || defined(CONFIG_M68030) || defined(CONFIG_M68040)
+#  define CPU_IS_060 (m68k_cputype & CPU_68060)
+#  define MMU_IS_060 (m68k_mmutype & MMU_68060)
+#else
+#  define CPU_M68060_ONLY
+#  define CPU_IS_060 (1)
+#  define MMU_IS_060 (1)
+#endif
+
+#if !defined(CONFIG_M68020) && !defined(CONFIG_M68030)
+#  define CPU_IS_020_OR_030 (0)
+#else
+#  define CPU_M68020_OR_M68030
+#  if defined(CONFIG_M68040) || defined(CONFIG_M68060)
+#    define CPU_IS_020_OR_030 (!m68k_is040or060)
+#  else
+#    define CPU_M68020_OR_M68030_ONLY
+#    define CPU_IS_020_OR_030 (1)
+#  endif
+#endif
+
+#if !defined(CONFIG_M68040) && !defined(CONFIG_M68060)
+#  define CPU_IS_040_OR_060 (0)
+#else
+#  define CPU_M68040_OR_M68060
+#  if defined(CONFIG_M68020) || defined(CONFIG_M68030)
+#    define CPU_IS_040_OR_060 (m68k_is040or060)
+#  else
+#    define CPU_M68040_OR_M68060_ONLY
+#    define CPU_IS_040_OR_060 (1)
+#  endif
+#endif
+
+#define CPU_TYPE (m68k_cputype)
+
+#ifdef CONFIG_M68KFPU_EMU
+#  ifdef CONFIG_M68KFPU_EMU_ONLY
+#    define FPU_IS_EMU (1)
+#  else
+#    define FPU_IS_EMU (!m68k_fputype)
+#  endif
+#else
+#  define FPU_IS_EMU (0)
+#endif
+
+
+    /*
+     *  Miscellaneous
+     */
+
+#define NUM_MEMINFO    4
+
+#ifndef __ASSEMBLY__
+struct mem_info {
+       unsigned long addr;             /* physical address of memory chunk */
+       unsigned long size;             /* length of memory chunk (in bytes) */
+};
+
+extern int m68k_num_memory;            /* # of memory blocks found (and used) */
+extern int m68k_realnum_memory;                /* real # of memory blocks found */
+extern struct mem_info m68k_memory[NUM_MEMINFO];/* memory description */
+#endif
+
+#endif /* __KERNEL__ */
+
+#endif /* _M68K_SETUP_H */
diff --git a/arch/m68k/include/asm/setup_mm.h b/arch/m68k/include/asm/setup_mm.h
deleted file mode 100644 (file)
index 4dfb395..0000000
+++ /dev/null
@@ -1,376 +0,0 @@
-/*
-** asm/setup.h -- Definition of the Linux/m68k setup information
-**
-** Copyright 1992 by Greg Harp
-**
-** This file is subject to the terms and conditions of the GNU General Public
-** License.  See the file COPYING in the main directory of this archive
-** for more details.
-**
-** Created 09/29/92 by Greg Harp
-**
-** 5/2/94 Roman Hodek:
-**   Added bi_atari part of the machine dependent union bi_un; for now it
-**   contains just a model field to distinguish between TT and Falcon.
-** 26/7/96 Roman Zippel:
-**   Renamed to setup.h; added some useful macros to allow gcc some
-**   optimizations if possible.
-** 5/10/96 Geert Uytterhoeven:
-**   Redesign of the boot information structure; moved boot information
-**   structure to bootinfo.h
-*/
-
-#ifndef _M68K_SETUP_H
-#define _M68K_SETUP_H
-
-
-
-    /*
-     *  Linux/m68k Architectures
-     */
-
-#define MACH_AMIGA    1
-#define MACH_ATARI    2
-#define MACH_MAC      3
-#define MACH_APOLLO   4
-#define MACH_SUN3     5
-#define MACH_MVME147  6
-#define MACH_MVME16x  7
-#define MACH_BVME6000 8
-#define MACH_HP300    9
-#define MACH_Q40     10
-#define MACH_SUN3X   11
-
-#define COMMAND_LINE_SIZE 256
-
-#ifdef __KERNEL__
-
-#define CL_SIZE COMMAND_LINE_SIZE
-
-#ifndef __ASSEMBLY__
-extern unsigned long m68k_machtype;
-#endif /* !__ASSEMBLY__ */
-
-#if !defined(CONFIG_AMIGA)
-#  define MACH_IS_AMIGA (0)
-#elif defined(CONFIG_ATARI) || defined(CONFIG_MAC) || defined(CONFIG_APOLLO) \
-       || defined(CONFIG_MVME16x) || defined(CONFIG_BVME6000)               \
-       || defined(CONFIG_HP300) || defined(CONFIG_Q40)                      \
-       || defined(CONFIG_SUN3X) || defined(CONFIG_MVME147)
-#  define MACH_IS_AMIGA (m68k_machtype == MACH_AMIGA)
-#else
-#  define MACH_AMIGA_ONLY
-#  define MACH_IS_AMIGA (1)
-#  define MACH_TYPE (MACH_AMIGA)
-#endif
-
-#if !defined(CONFIG_ATARI)
-#  define MACH_IS_ATARI (0)
-#elif defined(CONFIG_AMIGA) || defined(CONFIG_MAC) || defined(CONFIG_APOLLO) \
-       || defined(CONFIG_MVME16x) || defined(CONFIG_BVME6000)               \
-       || defined(CONFIG_HP300) || defined(CONFIG_Q40)                      \
-       || defined(CONFIG_SUN3X) || defined(CONFIG_MVME147)
-#  define MACH_IS_ATARI (m68k_machtype == MACH_ATARI)
-#else
-#  define MACH_ATARI_ONLY
-#  define MACH_IS_ATARI (1)
-#  define MACH_TYPE (MACH_ATARI)
-#endif
-
-#if !defined(CONFIG_MAC)
-#  define MACH_IS_MAC (0)
-#elif defined(CONFIG_AMIGA) || defined(CONFIG_ATARI) || defined(CONFIG_APOLLO) \
-       || defined(CONFIG_MVME16x) || defined(CONFIG_BVME6000)                 \
-       || defined(CONFIG_HP300) || defined(CONFIG_Q40)                        \
-       || defined(CONFIG_SUN3X) || defined(CONFIG_MVME147)
-#  define MACH_IS_MAC (m68k_machtype == MACH_MAC)
-#else
-#  define MACH_MAC_ONLY
-#  define MACH_IS_MAC (1)
-#  define MACH_TYPE (MACH_MAC)
-#endif
-
-#if defined(CONFIG_SUN3)
-#define MACH_IS_SUN3 (1)
-#define MACH_SUN3_ONLY (1)
-#define MACH_TYPE (MACH_SUN3)
-#else
-#define MACH_IS_SUN3 (0)
-#endif
-
-#if !defined (CONFIG_APOLLO)
-#  define MACH_IS_APOLLO (0)
-#elif defined(CONFIG_AMIGA) || defined(CONFIG_MAC) || defined(CONFIG_ATARI) \
-       || defined(CONFIG_MVME16x) || defined(CONFIG_BVME6000)              \
-       || defined(CONFIG_HP300) || defined(CONFIG_Q40)                     \
-       || defined(CONFIG_SUN3X) || defined(CONFIG_MVME147)
-#  define MACH_IS_APOLLO (m68k_machtype == MACH_APOLLO)
-#else
-#  define MACH_APOLLO_ONLY
-#  define MACH_IS_APOLLO (1)
-#  define MACH_TYPE (MACH_APOLLO)
-#endif
-
-#if !defined (CONFIG_MVME147)
-#  define MACH_IS_MVME147 (0)
-#elif defined(CONFIG_AMIGA) || defined(CONFIG_MAC) || defined(CONFIG_ATARI) \
-       || defined(CONFIG_APOLLO) || defined(CONFIG_BVME6000)               \
-       || defined(CONFIG_HP300) || defined(CONFIG_Q40)                     \
-       || defined(CONFIG_SUN3X) || defined(CONFIG_MVME16x)
-#  define MACH_IS_MVME147 (m68k_machtype == MACH_MVME147)
-#else
-#  define MACH_MVME147_ONLY
-#  define MACH_IS_MVME147 (1)
-#  define MACH_TYPE (MACH_MVME147)
-#endif
-
-#if !defined (CONFIG_MVME16x)
-#  define MACH_IS_MVME16x (0)
-#elif defined(CONFIG_AMIGA) || defined(CONFIG_MAC) || defined(CONFIG_ATARI) \
-       || defined(CONFIG_APOLLO) || defined(CONFIG_BVME6000)               \
-       || defined(CONFIG_HP300) || defined(CONFIG_Q40)                     \
-       || defined(CONFIG_SUN3X) || defined(CONFIG_MVME147)
-#  define MACH_IS_MVME16x (m68k_machtype == MACH_MVME16x)
-#else
-#  define MACH_MVME16x_ONLY
-#  define MACH_IS_MVME16x (1)
-#  define MACH_TYPE (MACH_MVME16x)
-#endif
-
-#if !defined (CONFIG_BVME6000)
-#  define MACH_IS_BVME6000 (0)
-#elif defined(CONFIG_AMIGA) || defined(CONFIG_MAC) || defined(CONFIG_ATARI) \
-       || defined(CONFIG_APOLLO) || defined(CONFIG_MVME16x)                \
-       || defined(CONFIG_HP300) || defined(CONFIG_Q40)                     \
-       || defined(CONFIG_SUN3X) || defined(CONFIG_MVME147)
-#  define MACH_IS_BVME6000 (m68k_machtype == MACH_BVME6000)
-#else
-#  define MACH_BVME6000_ONLY
-#  define MACH_IS_BVME6000 (1)
-#  define MACH_TYPE (MACH_BVME6000)
-#endif
-
-#if !defined (CONFIG_HP300)
-#  define MACH_IS_HP300 (0)
-#elif defined(CONFIG_AMIGA) || defined(CONFIG_MAC) || defined(CONFIG_ATARI) \
-       || defined(CONFIG_APOLLO) || defined(CONFIG_MVME16x) \
-       || defined(CONFIG_BVME6000) || defined(CONFIG_Q40) \
-       || defined(CONFIG_SUN3X) || defined(CONFIG_MVME147)
-#  define MACH_IS_HP300 (m68k_machtype == MACH_HP300)
-#else
-#  define MACH_HP300_ONLY
-#  define MACH_IS_HP300 (1)
-#  define MACH_TYPE (MACH_HP300)
-#endif
-
-#if !defined (CONFIG_Q40)
-#  define MACH_IS_Q40 (0)
-#elif defined(CONFIG_AMIGA) || defined(CONFIG_MAC) || defined(CONFIG_ATARI) \
-       || defined(CONFIG_APOLLO) || defined(CONFIG_MVME16x)                \
-       || defined(CONFIG_BVME6000) || defined(CONFIG_HP300)                \
-       || defined(CONFIG_SUN3X) || defined(CONFIG_MVME147)
-#  define MACH_IS_Q40 (m68k_machtype == MACH_Q40)
-#else
-#  define MACH_Q40_ONLY
-#  define MACH_IS_Q40 (1)
-#  define MACH_TYPE (MACH_Q40)
-#endif
-
-#if !defined (CONFIG_SUN3X)
-#  define MACH_IS_SUN3X (0)
-#elif defined(CONFIG_AMIGA) || defined(CONFIG_MAC) || defined(CONFIG_ATARI) \
-       || defined(CONFIG_APOLLO) || defined(CONFIG_MVME16x)                \
-       || defined(CONFIG_BVME6000) || defined(CONFIG_HP300)                \
-       || defined(CONFIG_Q40) || defined(CONFIG_MVME147)
-#  define MACH_IS_SUN3X (m68k_machtype == MACH_SUN3X)
-#else
-#  define CONFIG_SUN3X_ONLY
-#  define MACH_IS_SUN3X (1)
-#  define MACH_TYPE (MACH_SUN3X)
-#endif
-
-#ifndef MACH_TYPE
-#  define MACH_TYPE (m68k_machtype)
-#endif
-
-#endif /* __KERNEL__ */
-
-
-    /*
-     *  CPU, FPU and MMU types
-     *
-     *  Note: we may rely on the following equalities:
-     *
-     *      CPU_68020 == MMU_68851
-     *      CPU_68030 == MMU_68030
-     *      CPU_68040 == FPU_68040 == MMU_68040
-     *      CPU_68060 == FPU_68060 == MMU_68060
-     */
-
-#define CPUB_68020     0
-#define CPUB_68030     1
-#define CPUB_68040     2
-#define CPUB_68060     3
-
-#define CPU_68020      (1<<CPUB_68020)
-#define CPU_68030      (1<<CPUB_68030)
-#define CPU_68040      (1<<CPUB_68040)
-#define CPU_68060      (1<<CPUB_68060)
-
-#define FPUB_68881     0
-#define FPUB_68882     1
-#define FPUB_68040     2                       /* Internal FPU */
-#define FPUB_68060     3                       /* Internal FPU */
-#define FPUB_SUNFPA    4                       /* Sun-3 FPA */
-
-#define FPU_68881      (1<<FPUB_68881)
-#define FPU_68882      (1<<FPUB_68882)
-#define FPU_68040      (1<<FPUB_68040)
-#define FPU_68060      (1<<FPUB_68060)
-#define FPU_SUNFPA     (1<<FPUB_SUNFPA)
-
-#define MMUB_68851     0
-#define MMUB_68030     1                       /* Internal MMU */
-#define MMUB_68040     2                       /* Internal MMU */
-#define MMUB_68060     3                       /* Internal MMU */
-#define MMUB_APOLLO    4                       /* Custom Apollo */
-#define MMUB_SUN3      5                       /* Custom Sun-3 */
-
-#define MMU_68851      (1<<MMUB_68851)
-#define MMU_68030      (1<<MMUB_68030)
-#define MMU_68040      (1<<MMUB_68040)
-#define MMU_68060      (1<<MMUB_68060)
-#define MMU_SUN3       (1<<MMUB_SUN3)
-#define MMU_APOLLO     (1<<MMUB_APOLLO)
-
-#ifdef __KERNEL__
-
-#ifndef __ASSEMBLY__
-extern unsigned long m68k_cputype;
-extern unsigned long m68k_fputype;
-extern unsigned long m68k_mmutype;
-#ifdef CONFIG_VME
-extern unsigned long vme_brdtype;
-#endif
-
-    /*
-     *  m68k_is040or060 is != 0 for a '040 or higher;
-     *  used numbers are 4 for 68040 and 6 for 68060.
-     */
-
-extern int m68k_is040or060;
-#endif /* !__ASSEMBLY__ */
-
-#if !defined(CONFIG_M68020)
-#  define CPU_IS_020 (0)
-#  define MMU_IS_851 (0)
-#  define MMU_IS_SUN3 (0)
-#elif defined(CONFIG_M68030) || defined(CONFIG_M68040) || defined(CONFIG_M68060)
-#  define CPU_IS_020 (m68k_cputype & CPU_68020)
-#  define MMU_IS_851 (m68k_mmutype & MMU_68851)
-#  define MMU_IS_SUN3 (0)      /* Sun3 not supported with other CPU enabled */
-#else
-#  define CPU_M68020_ONLY
-#  define CPU_IS_020 (1)
-#ifdef MACH_SUN3_ONLY
-#  define MMU_IS_SUN3 (1)
-#  define MMU_IS_851 (0)
-#else
-#  define MMU_IS_SUN3 (0)
-#  define MMU_IS_851 (1)
-#endif
-#endif
-
-#if !defined(CONFIG_M68030)
-#  define CPU_IS_030 (0)
-#  define MMU_IS_030 (0)
-#elif defined(CONFIG_M68020) || defined(CONFIG_M68040) || defined(CONFIG_M68060)
-#  define CPU_IS_030 (m68k_cputype & CPU_68030)
-#  define MMU_IS_030 (m68k_mmutype & MMU_68030)
-#else
-#  define CPU_M68030_ONLY
-#  define CPU_IS_030 (1)
-#  define MMU_IS_030 (1)
-#endif
-
-#if !defined(CONFIG_M68040)
-#  define CPU_IS_040 (0)
-#  define MMU_IS_040 (0)
-#elif defined(CONFIG_M68020) || defined(CONFIG_M68030) || defined(CONFIG_M68060)
-#  define CPU_IS_040 (m68k_cputype & CPU_68040)
-#  define MMU_IS_040 (m68k_mmutype & MMU_68040)
-#else
-#  define CPU_M68040_ONLY
-#  define CPU_IS_040 (1)
-#  define MMU_IS_040 (1)
-#endif
-
-#if !defined(CONFIG_M68060)
-#  define CPU_IS_060 (0)
-#  define MMU_IS_060 (0)
-#elif defined(CONFIG_M68020) || defined(CONFIG_M68030) || defined(CONFIG_M68040)
-#  define CPU_IS_060 (m68k_cputype & CPU_68060)
-#  define MMU_IS_060 (m68k_mmutype & MMU_68060)
-#else
-#  define CPU_M68060_ONLY
-#  define CPU_IS_060 (1)
-#  define MMU_IS_060 (1)
-#endif
-
-#if !defined(CONFIG_M68020) && !defined(CONFIG_M68030)
-#  define CPU_IS_020_OR_030 (0)
-#else
-#  define CPU_M68020_OR_M68030
-#  if defined(CONFIG_M68040) || defined(CONFIG_M68060)
-#    define CPU_IS_020_OR_030 (!m68k_is040or060)
-#  else
-#    define CPU_M68020_OR_M68030_ONLY
-#    define CPU_IS_020_OR_030 (1)
-#  endif
-#endif
-
-#if !defined(CONFIG_M68040) && !defined(CONFIG_M68060)
-#  define CPU_IS_040_OR_060 (0)
-#else
-#  define CPU_M68040_OR_M68060
-#  if defined(CONFIG_M68020) || defined(CONFIG_M68030)
-#    define CPU_IS_040_OR_060 (m68k_is040or060)
-#  else
-#    define CPU_M68040_OR_M68060_ONLY
-#    define CPU_IS_040_OR_060 (1)
-#  endif
-#endif
-
-#define CPU_TYPE (m68k_cputype)
-
-#ifdef CONFIG_M68KFPU_EMU
-#  ifdef CONFIG_M68KFPU_EMU_ONLY
-#    define FPU_IS_EMU (1)
-#  else
-#    define FPU_IS_EMU (!m68k_fputype)
-#  endif
-#else
-#  define FPU_IS_EMU (0)
-#endif
-
-
-    /*
-     *  Miscellaneous
-     */
-
-#define NUM_MEMINFO    4
-
-#ifndef __ASSEMBLY__
-struct mem_info {
-       unsigned long addr;             /* physical address of memory chunk */
-       unsigned long size;             /* length of memory chunk (in bytes) */
-};
-
-extern int m68k_num_memory;            /* # of memory blocks found (and used) */
-extern int m68k_realnum_memory;                /* real # of memory blocks found */
-extern struct mem_info m68k_memory[NUM_MEMINFO];/* memory description */
-#endif
-
-#endif /* __KERNEL__ */
-
-#endif /* _M68K_SETUP_H */
diff --git a/arch/m68k/include/asm/setup_no.h b/arch/m68k/include/asm/setup_no.h
deleted file mode 100644 (file)
index 45d286c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifdef __KERNEL__
-
-#include <asm/setup_mm.h>
-
-/* We have a bigger command line buffer. */
-#undef COMMAND_LINE_SIZE
-
-#endif  /*  __KERNEL__  */
-
-#define COMMAND_LINE_SIZE      512
index bff6d40..523db2a 100644 (file)
@@ -1,5 +1,24 @@
+#ifndef _ASM_M68k_SIGCONTEXT_H
+#define _ASM_M68k_SIGCONTEXT_H
+
+struct sigcontext {
+       unsigned long  sc_mask;         /* old sigmask */
+       unsigned long  sc_usp;          /* old user stack pointer */
+       unsigned long  sc_d0;
+       unsigned long  sc_d1;
+       unsigned long  sc_a0;
+       unsigned long  sc_a1;
 #ifdef __uClinux__
-#include "sigcontext_no.h"
-#else
-#include "sigcontext_mm.h"
+       unsigned long  sc_a5;
+#endif
+       unsigned short sc_sr;
+       unsigned long  sc_pc;
+       unsigned short sc_formatvec;
+#ifndef __uClinux__
+       unsigned long  sc_fpregs[2*3];  /* room for two fp registers */
+       unsigned long  sc_fpcntl[3];
+       unsigned char  sc_fpstate[216];
+#endif
+};
+
 #endif
diff --git a/arch/m68k/include/asm/sigcontext_mm.h b/arch/m68k/include/asm/sigcontext_mm.h
deleted file mode 100644 (file)
index 64fbe34..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef _ASM_M68k_SIGCONTEXT_H
-#define _ASM_M68k_SIGCONTEXT_H
-
-struct sigcontext {
-       unsigned long  sc_mask;         /* old sigmask */
-       unsigned long  sc_usp;          /* old user stack pointer */
-       unsigned long  sc_d0;
-       unsigned long  sc_d1;
-       unsigned long  sc_a0;
-       unsigned long  sc_a1;
-       unsigned short sc_sr;
-       unsigned long  sc_pc;
-       unsigned short sc_formatvec;
-       unsigned long  sc_fpregs[2*3];  /* room for two fp registers */
-       unsigned long  sc_fpcntl[3];
-       unsigned char  sc_fpstate[216];
-};
-
-#endif
diff --git a/arch/m68k/include/asm/sigcontext_no.h b/arch/m68k/include/asm/sigcontext_no.h
deleted file mode 100644 (file)
index 36c293f..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef _ASM_M68KNOMMU_SIGCONTEXT_H
-#define _ASM_M68KNOMMU_SIGCONTEXT_H
-
-struct sigcontext {
-       unsigned long  sc_mask;         /* old sigmask */
-       unsigned long  sc_usp;          /* old user stack pointer */
-       unsigned long  sc_d0;
-       unsigned long  sc_d1;
-       unsigned long  sc_a0;
-       unsigned long  sc_a1;
-       unsigned long  sc_a5;
-       unsigned short sc_sr;
-       unsigned long  sc_pc;
-       unsigned short sc_formatvec;
-};
-
-#endif
index 61219d7..ca7dde8 100644 (file)
@@ -1,5 +1,97 @@
-#ifdef __uClinux__
-#include "siginfo_no.h"
+#ifndef _M68K_SIGINFO_H
+#define _M68K_SIGINFO_H
+
+#ifndef __uClinux__
+#define HAVE_ARCH_SIGINFO_T
+#define HAVE_ARCH_COPY_SIGINFO
+#endif
+
+#include <asm-generic/siginfo.h>
+
+#ifndef __uClinux__
+
+typedef struct siginfo {
+       int si_signo;
+       int si_errno;
+       int si_code;
+
+       union {
+               int _pad[SI_PAD_SIZE];
+
+               /* kill() */
+               struct {
+                       __kernel_pid_t _pid;    /* sender's pid */
+                       __kernel_uid_t _uid;    /* backwards compatibility */
+                       __kernel_uid32_t _uid32; /* sender's uid */
+               } _kill;
+
+               /* POSIX.1b timers */
+               struct {
+                       timer_t _tid;           /* timer id */
+                       int _overrun;           /* overrun count */
+                       char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)];
+                       sigval_t _sigval;       /* same as below */
+                       int _sys_private;       /* not to be passed to user */
+               } _timer;
+
+               /* POSIX.1b signals */
+               struct {
+                       __kernel_pid_t _pid;    /* sender's pid */
+                       __kernel_uid_t _uid;    /* backwards compatibility */
+                       sigval_t _sigval;
+                       __kernel_uid32_t _uid32; /* sender's uid */
+               } _rt;
+
+               /* SIGCHLD */
+               struct {
+                       __kernel_pid_t _pid;    /* which child */
+                       __kernel_uid_t _uid;    /* backwards compatibility */
+                       int _status;            /* exit code */
+                       clock_t _utime;
+                       clock_t _stime;
+                       __kernel_uid32_t _uid32; /* sender's uid */
+               } _sigchld;
+
+               /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
+               struct {
+                       void *_addr; /* faulting insn/memory ref. */
+               } _sigfault;
+
+               /* SIGPOLL */
+               struct {
+                       int _band;      /* POLL_IN, POLL_OUT, POLL_MSG */
+                       int _fd;
+               } _sigpoll;
+       } _sifields;
+} siginfo_t;
+
+#define UID16_SIGINFO_COMPAT_NEEDED
+
+/*
+ * How these fields are to be accessed.
+ */
+#undef si_uid
+#ifdef __KERNEL__
+#define si_uid         _sifields._kill._uid32
+#define si_uid16       _sifields._kill._uid
 #else
-#include "siginfo_mm.h"
+#define si_uid         _sifields._kill._uid
+#endif
+
+#ifdef __KERNEL__
+
+#include <linux/string.h>
+
+static inline void copy_siginfo(struct siginfo *to, struct siginfo *from)
+{
+       if (from->si_code < 0)
+               memcpy(to, from, sizeof(*to));
+       else
+               /* _sigchld is currently the largest know union member */
+               memcpy(to, from, 3*sizeof(int) + sizeof(from->_sifields._sigchld));
+}
+
+#endif /* __KERNEL__ */
+#endif /* !__uClinux__ */
+
 #endif
diff --git a/arch/m68k/include/asm/siginfo_mm.h b/arch/m68k/include/asm/siginfo_mm.h
deleted file mode 100644 (file)
index 05a8d6d..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-#ifndef _M68K_SIGINFO_H
-#define _M68K_SIGINFO_H
-
-#define HAVE_ARCH_SIGINFO_T
-#define HAVE_ARCH_COPY_SIGINFO
-
-#include <asm-generic/siginfo.h>
-
-typedef struct siginfo {
-       int si_signo;
-       int si_errno;
-       int si_code;
-
-       union {
-               int _pad[SI_PAD_SIZE];
-
-               /* kill() */
-               struct {
-                       __kernel_pid_t _pid;    /* sender's pid */
-                       __kernel_uid_t _uid;    /* backwards compatibility */
-                       __kernel_uid32_t _uid32; /* sender's uid */
-               } _kill;
-
-               /* POSIX.1b timers */
-               struct {
-                       timer_t _tid;           /* timer id */
-                       int _overrun;           /* overrun count */
-                       char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)];
-                       sigval_t _sigval;       /* same as below */
-                       int _sys_private;       /* not to be passed to user */
-               } _timer;
-
-               /* POSIX.1b signals */
-               struct {
-                       __kernel_pid_t _pid;    /* sender's pid */
-                       __kernel_uid_t _uid;    /* backwards compatibility */
-                       sigval_t _sigval;
-                       __kernel_uid32_t _uid32; /* sender's uid */
-               } _rt;
-
-               /* SIGCHLD */
-               struct {
-                       __kernel_pid_t _pid;    /* which child */
-                       __kernel_uid_t _uid;    /* backwards compatibility */
-                       int _status;            /* exit code */
-                       clock_t _utime;
-                       clock_t _stime;
-                       __kernel_uid32_t _uid32; /* sender's uid */
-               } _sigchld;
-
-               /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
-               struct {
-                       void *_addr; /* faulting insn/memory ref. */
-               } _sigfault;
-
-               /* SIGPOLL */
-               struct {
-                       int _band;      /* POLL_IN, POLL_OUT, POLL_MSG */
-                       int _fd;
-               } _sigpoll;
-       } _sifields;
-} siginfo_t;
-
-#define UID16_SIGINFO_COMPAT_NEEDED
-
-/*
- * How these fields are to be accessed.
- */
-#undef si_uid
-#ifdef __KERNEL__
-#define si_uid         _sifields._kill._uid32
-#define si_uid16       _sifields._kill._uid
-#else
-#define si_uid         _sifields._kill._uid
-#endif
-
-#ifdef __KERNEL__
-
-#include <linux/string.h>
-
-static inline void copy_siginfo(struct siginfo *to, struct siginfo *from)
-{
-       if (from->si_code < 0)
-               memcpy(to, from, sizeof(*to));
-       else
-               /* _sigchld is currently the largest know union member */
-               memcpy(to, from, 3*sizeof(int) + sizeof(from->_sifields._sigchld));
-}
-
-#endif /* __KERNEL__ */
-
-#endif
diff --git a/arch/m68k/include/asm/siginfo_no.h b/arch/m68k/include/asm/siginfo_no.h
deleted file mode 100644 (file)
index b18e5f4..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef _M68KNOMMU_SIGINFO_H
-#define _M68KNOMMU_SIGINFO_H
-
-#include <asm-generic/siginfo.h>
-
-#endif
index 3c19988..08788fd 100644 (file)
@@ -1,5 +1,213 @@
-#ifdef __uClinux__
-#include "signal_no.h"
+#ifndef _M68K_SIGNAL_H
+#define _M68K_SIGNAL_H
+
+#include <linux/types.h>
+
+/* Avoid too many header ordering problems.  */
+struct siginfo;
+
+#ifdef __KERNEL__
+/* Most things should be clean enough to redefine this at will, if care
+   is taken to make libc match.  */
+
+#define _NSIG          64
+#define _NSIG_BPW      32
+#define _NSIG_WORDS    (_NSIG / _NSIG_BPW)
+
+typedef unsigned long old_sigset_t;            /* at least 32 bits */
+
+typedef struct {
+       unsigned long sig[_NSIG_WORDS];
+} sigset_t;
+
 #else
-#include "signal_mm.h"
-#endif
+/* Here we must cater to libcs that poke about in kernel headers.  */
+
+#define NSIG           32
+typedef unsigned long sigset_t;
+
+#endif /* __KERNEL__ */
+
+#define SIGHUP          1
+#define SIGINT          2
+#define SIGQUIT                 3
+#define SIGILL          4
+#define SIGTRAP                 5
+#define SIGABRT                 6
+#define SIGIOT          6
+#define SIGBUS          7
+#define SIGFPE          8
+#define SIGKILL                 9
+#define SIGUSR1                10
+#define SIGSEGV                11
+#define SIGUSR2                12
+#define SIGPIPE                13
+#define SIGALRM                14
+#define SIGTERM                15
+#define SIGSTKFLT      16
+#define SIGCHLD                17
+#define SIGCONT                18
+#define SIGSTOP                19
+#define SIGTSTP                20
+#define SIGTTIN                21
+#define SIGTTOU                22
+#define SIGURG         23
+#define SIGXCPU                24
+#define SIGXFSZ                25
+#define SIGVTALRM      26
+#define SIGPROF                27
+#define SIGWINCH       28
+#define SIGIO          29
+#define SIGPOLL                SIGIO
+/*
+#define SIGLOST                29
+*/
+#define SIGPWR         30
+#define SIGSYS         31
+#define        SIGUNUSED       31
+
+/* These should not be considered constants from userland.  */
+#define SIGRTMIN       32
+#define SIGRTMAX       _NSIG
+
+/*
+ * SA_FLAGS values:
+ *
+ * SA_ONSTACK indicates that a registered stack_t will be used.
+ * SA_RESTART flag to get restarting signals (which were the default long ago)
+ * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop.
+ * SA_RESETHAND clears the handler when the signal is delivered.
+ * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies.
+ * SA_NODEFER prevents the current signal from being masked in the handler.
+ *
+ * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single
+ * Unix names RESETHAND and NODEFER respectively.
+ */
+#define SA_NOCLDSTOP   0x00000001
+#define SA_NOCLDWAIT   0x00000002
+#define SA_SIGINFO     0x00000004
+#define SA_ONSTACK     0x08000000
+#define SA_RESTART     0x10000000
+#define SA_NODEFER     0x40000000
+#define SA_RESETHAND   0x80000000
+
+#define SA_NOMASK      SA_NODEFER
+#define SA_ONESHOT     SA_RESETHAND
+
+/*
+ * sigaltstack controls
+ */
+#define SS_ONSTACK     1
+#define SS_DISABLE     2
+
+#define MINSIGSTKSZ    2048
+#define SIGSTKSZ       8192
+
+#include <asm-generic/signal.h>
+
+#ifdef __KERNEL__
+struct old_sigaction {
+       __sighandler_t sa_handler;
+       old_sigset_t sa_mask;
+       unsigned long sa_flags;
+       __sigrestore_t sa_restorer;
+};
+
+struct sigaction {
+       __sighandler_t sa_handler;
+       unsigned long sa_flags;
+       __sigrestore_t sa_restorer;
+       sigset_t sa_mask;               /* mask last for extensibility */
+};
+
+struct k_sigaction {
+       struct sigaction sa;
+};
+#else
+/* Here we must cater to libcs that poke about in kernel headers.  */
+
+struct sigaction {
+       union {
+         __sighandler_t _sa_handler;
+         void (*_sa_sigaction)(int, struct siginfo *, void *);
+       } _u;
+       sigset_t sa_mask;
+       unsigned long sa_flags;
+       void (*sa_restorer)(void);
+};
+
+#define sa_handler     _u._sa_handler
+#define sa_sigaction   _u._sa_sigaction
+
+#endif /* __KERNEL__ */
+
+typedef struct sigaltstack {
+       void __user *ss_sp;
+       int ss_flags;
+       size_t ss_size;
+} stack_t;
+
+#ifdef __KERNEL__
+#include <asm/sigcontext.h>
+
+#ifndef __uClinux__
+#define __HAVE_ARCH_SIG_BITOPS
+
+static inline void sigaddset(sigset_t *set, int _sig)
+{
+       asm ("bfset %0{%1,#1}"
+               : "+od" (*set)
+               : "id" ((_sig - 1) ^ 31)
+               : "cc");
+}
+
+static inline void sigdelset(sigset_t *set, int _sig)
+{
+       asm ("bfclr %0{%1,#1}"
+               : "+od" (*set)
+               : "id" ((_sig - 1) ^ 31)
+               : "cc");
+}
+
+static inline int __const_sigismember(sigset_t *set, int _sig)
+{
+       unsigned long sig = _sig - 1;
+       return 1 & (set->sig[sig / _NSIG_BPW] >> (sig % _NSIG_BPW));
+}
+
+static inline int __gen_sigismember(sigset_t *set, int _sig)
+{
+       int ret;
+       asm ("bfextu %1{%2,#1},%0"
+               : "=d" (ret)
+               : "od" (*set), "id" ((_sig-1) ^ 31)
+               : "cc");
+       return ret;
+}
+
+#define sigismember(set,sig)                   \
+       (__builtin_constant_p(sig) ?            \
+        __const_sigismember(set,sig) :         \
+        __gen_sigismember(set,sig))
+
+static inline int sigfindinword(unsigned long word)
+{
+       asm ("bfffo %1{#0,#0},%0"
+               : "=d" (word)
+               : "d" (word & -word)
+               : "cc");
+       return word ^ 31;
+}
+
+struct pt_regs;
+extern void ptrace_signal_deliver(struct pt_regs *regs, void *cookie);
+
+#else
+
+#undef __HAVE_ARCH_SIG_BITOPS
+#define ptrace_signal_deliver(regs, cookie) do { } while (0)
+
+#endif /* __uClinux__ */
+#endif /* __KERNEL__ */
+
+#endif /* _M68K_SIGNAL_H */
diff --git a/arch/m68k/include/asm/signal_mm.h b/arch/m68k/include/asm/signal_mm.h
deleted file mode 100644 (file)
index 3db8a81..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-#ifndef _M68K_SIGNAL_H
-#define _M68K_SIGNAL_H
-
-#include <linux/types.h>
-
-/* Avoid too many header ordering problems.  */
-struct siginfo;
-
-#ifdef __KERNEL__
-/* Most things should be clean enough to redefine this at will, if care
-   is taken to make libc match.  */
-
-#define _NSIG          64
-#define _NSIG_BPW      32
-#define _NSIG_WORDS    (_NSIG / _NSIG_BPW)
-
-typedef unsigned long old_sigset_t;            /* at least 32 bits */
-
-typedef struct {
-       unsigned long sig[_NSIG_WORDS];
-} sigset_t;
-
-#else
-/* Here we must cater to libcs that poke about in kernel headers.  */
-
-#define NSIG           32
-typedef unsigned long sigset_t;
-
-#endif /* __KERNEL__ */
-
-#define SIGHUP          1
-#define SIGINT          2
-#define SIGQUIT                 3
-#define SIGILL          4
-#define SIGTRAP                 5
-#define SIGABRT                 6
-#define SIGIOT          6
-#define SIGBUS          7
-#define SIGFPE          8
-#define SIGKILL                 9
-#define SIGUSR1                10
-#define SIGSEGV                11
-#define SIGUSR2                12
-#define SIGPIPE                13
-#define SIGALRM                14
-#define SIGTERM                15
-#define SIGSTKFLT      16
-#define SIGCHLD                17
-#define SIGCONT                18
-#define SIGSTOP                19
-#define SIGTSTP                20
-#define SIGTTIN                21
-#define SIGTTOU                22
-#define SIGURG         23
-#define SIGXCPU                24
-#define SIGXFSZ                25
-#define SIGVTALRM      26
-#define SIGPROF                27
-#define SIGWINCH       28
-#define SIGIO          29
-#define SIGPOLL                SIGIO
-/*
-#define SIGLOST                29
-*/
-#define SIGPWR         30
-#define SIGSYS         31
-#define        SIGUNUSED       31
-
-/* These should not be considered constants from userland.  */
-#define SIGRTMIN       32
-#define SIGRTMAX       _NSIG
-
-/*
- * SA_FLAGS values:
- *
- * SA_ONSTACK indicates that a registered stack_t will be used.
- * SA_RESTART flag to get restarting signals (which were the default long ago)
- * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop.
- * SA_RESETHAND clears the handler when the signal is delivered.
- * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies.
- * SA_NODEFER prevents the current signal from being masked in the handler.
- *
- * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single
- * Unix names RESETHAND and NODEFER respectively.
- */
-#define SA_NOCLDSTOP   0x00000001
-#define SA_NOCLDWAIT   0x00000002
-#define SA_SIGINFO     0x00000004
-#define SA_ONSTACK     0x08000000
-#define SA_RESTART     0x10000000
-#define SA_NODEFER     0x40000000
-#define SA_RESETHAND   0x80000000
-
-#define SA_NOMASK      SA_NODEFER
-#define SA_ONESHOT     SA_RESETHAND
-
-/*
- * sigaltstack controls
- */
-#define SS_ONSTACK     1
-#define SS_DISABLE     2
-
-#define MINSIGSTKSZ    2048
-#define SIGSTKSZ       8192
-
-#include <asm-generic/signal.h>
-
-#ifdef __KERNEL__
-struct old_sigaction {
-       __sighandler_t sa_handler;
-       old_sigset_t sa_mask;
-       unsigned long sa_flags;
-       __sigrestore_t sa_restorer;
-};
-
-struct sigaction {
-       __sighandler_t sa_handler;
-       unsigned long sa_flags;
-       __sigrestore_t sa_restorer;
-       sigset_t sa_mask;               /* mask last for extensibility */
-};
-
-struct k_sigaction {
-       struct sigaction sa;
-};
-#else
-/* Here we must cater to libcs that poke about in kernel headers.  */
-
-struct sigaction {
-       union {
-         __sighandler_t _sa_handler;
-         void (*_sa_sigaction)(int, struct siginfo *, void *);
-       } _u;
-       sigset_t sa_mask;
-       unsigned long sa_flags;
-       void (*sa_restorer)(void);
-};
-
-#define sa_handler     _u._sa_handler
-#define sa_sigaction   _u._sa_sigaction
-
-#endif /* __KERNEL__ */
-
-typedef struct sigaltstack {
-       void __user *ss_sp;
-       int ss_flags;
-       size_t ss_size;
-} stack_t;
-
-#ifdef __KERNEL__
-#include <asm/sigcontext.h>
-
-#define __HAVE_ARCH_SIG_BITOPS
-
-static inline void sigaddset(sigset_t *set, int _sig)
-{
-       asm ("bfset %0{%1,#1}"
-               : "+od" (*set)
-               : "id" ((_sig - 1) ^ 31)
-               : "cc");
-}
-
-static inline void sigdelset(sigset_t *set, int _sig)
-{
-       asm ("bfclr %0{%1,#1}"
-               : "+od" (*set)
-               : "id" ((_sig - 1) ^ 31)
-               : "cc");
-}
-
-static inline int __const_sigismember(sigset_t *set, int _sig)
-{
-       unsigned long sig = _sig - 1;
-       return 1 & (set->sig[sig / _NSIG_BPW] >> (sig % _NSIG_BPW));
-}
-
-static inline int __gen_sigismember(sigset_t *set, int _sig)
-{
-       int ret;
-       asm ("bfextu %1{%2,#1},%0"
-               : "=d" (ret)
-               : "od" (*set), "id" ((_sig-1) ^ 31)
-               : "cc");
-       return ret;
-}
-
-#define sigismember(set,sig)                   \
-       (__builtin_constant_p(sig) ?            \
-        __const_sigismember(set,sig) :         \
-        __gen_sigismember(set,sig))
-
-static inline int sigfindinword(unsigned long word)
-{
-       asm ("bfffo %1{#0,#0},%0"
-               : "=d" (word)
-               : "d" (word & -word)
-               : "cc");
-       return word ^ 31;
-}
-
-struct pt_regs;
-extern void ptrace_signal_deliver(struct pt_regs *regs, void *cookie);
-
-#endif /* __KERNEL__ */
-
-#endif /* _M68K_SIGNAL_H */
diff --git a/arch/m68k/include/asm/signal_no.h b/arch/m68k/include/asm/signal_no.h
deleted file mode 100644 (file)
index 216c08b..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-#ifndef _M68KNOMMU_SIGNAL_H
-#define _M68KNOMMU_SIGNAL_H
-
-#include <linux/types.h>
-
-/* Avoid too many header ordering problems.  */
-struct siginfo;
-
-#ifdef __KERNEL__
-/* Most things should be clean enough to redefine this at will, if care
-   is taken to make libc match.  */
-
-#define _NSIG          64
-#define _NSIG_BPW      32
-#define _NSIG_WORDS    (_NSIG / _NSIG_BPW)
-
-typedef unsigned long old_sigset_t;            /* at least 32 bits */
-
-typedef struct {
-       unsigned long sig[_NSIG_WORDS];
-} sigset_t;
-
-#else
-/* Here we must cater to libcs that poke about in kernel headers.  */
-
-#define NSIG           32
-typedef unsigned long sigset_t;
-
-#endif /* __KERNEL__ */
-
-#define SIGHUP          1
-#define SIGINT          2
-#define SIGQUIT                 3
-#define SIGILL          4
-#define SIGTRAP                 5
-#define SIGABRT                 6
-#define SIGIOT          6
-#define SIGBUS          7
-#define SIGFPE          8
-#define SIGKILL                 9
-#define SIGUSR1                10
-#define SIGSEGV                11
-#define SIGUSR2                12
-#define SIGPIPE                13
-#define SIGALRM                14
-#define SIGTERM                15
-#define SIGSTKFLT      16
-#define SIGCHLD                17
-#define SIGCONT                18
-#define SIGSTOP                19
-#define SIGTSTP                20
-#define SIGTTIN                21
-#define SIGTTOU                22
-#define SIGURG         23
-#define SIGXCPU                24
-#define SIGXFSZ                25
-#define SIGVTALRM      26
-#define SIGPROF                27
-#define SIGWINCH       28
-#define SIGIO          29
-#define SIGPOLL                SIGIO
-/*
-#define SIGLOST                29
-*/
-#define SIGPWR         30
-#define SIGSYS         31
-#define        SIGUNUSED       31
-
-/* These should not be considered constants from userland.  */
-#define SIGRTMIN       32
-#define SIGRTMAX       _NSIG
-
-/*
- * SA_FLAGS values:
- *
- * SA_ONSTACK indicates that a registered stack_t will be used.
- * SA_RESTART flag to get restarting signals (which were the default long ago)
- * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop.
- * SA_RESETHAND clears the handler when the signal is delivered.
- * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies.
- * SA_NODEFER prevents the current signal from being masked in the handler.
- *
- * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single
- * Unix names RESETHAND and NODEFER respectively.
- */
-#define SA_NOCLDSTOP   0x00000001
-#define SA_NOCLDWAIT   0x00000002
-#define SA_SIGINFO     0x00000004
-#define SA_ONSTACK     0x08000000
-#define SA_RESTART     0x10000000
-#define SA_NODEFER     0x40000000
-#define SA_RESETHAND   0x80000000
-
-#define SA_NOMASK      SA_NODEFER
-#define SA_ONESHOT     SA_RESETHAND
-
-/* 
- * sigaltstack controls
- */
-#define SS_ONSTACK     1
-#define SS_DISABLE     2
-
-#define MINSIGSTKSZ    2048
-#define SIGSTKSZ       8192
-
-#include <asm-generic/signal.h>
-
-#ifdef __KERNEL__
-struct old_sigaction {
-       __sighandler_t sa_handler;
-       old_sigset_t sa_mask;
-       unsigned long sa_flags;
-       void (*sa_restorer)(void);
-};
-
-struct sigaction {
-       __sighandler_t sa_handler;
-       unsigned long sa_flags;
-       void (*sa_restorer)(void);
-       sigset_t sa_mask;               /* mask last for extensibility */
-};
-
-struct k_sigaction {
-       struct sigaction sa;
-};
-#else
-/* Here we must cater to libcs that poke about in kernel headers.  */
-
-struct sigaction {
-       union {
-         __sighandler_t _sa_handler;
-         void (*_sa_sigaction)(int, struct siginfo *, void *);
-       } _u;
-       sigset_t sa_mask;
-       unsigned long sa_flags;
-       void (*sa_restorer)(void);
-};
-
-#define sa_handler     _u._sa_handler
-#define sa_sigaction   _u._sa_sigaction
-
-#endif /* __KERNEL__ */
-
-typedef struct sigaltstack {
-       void *ss_sp;
-       int ss_flags;
-       size_t ss_size;
-} stack_t;
-
-#ifdef __KERNEL__
-
-#include <asm/sigcontext.h>
-#undef __HAVE_ARCH_SIG_BITOPS
-
-#define ptrace_signal_deliver(regs, cookie) do { } while (0)
-
-#endif /* __KERNEL__ */
-
-#endif /* _M68KNOMMU_SIGNAL_H */
index 7d7dde1..9e3054e 100644 (file)
@@ -1,5 +1,27 @@
-#ifdef __uClinux__
-#include "swab_no.h"
-#else
-#include "swab_mm.h"
+#ifndef _M68K_SWAB_H
+#define _M68K_SWAB_H
+
+#include <asm/types.h>
+#include <linux/compiler.h>
+
+#define __SWAB_64_THRU_32__
+
+#if defined (__mcfisaaplus__) || defined (__mcfisac__)
+static inline __attribute_const__ __u32 __arch_swab32(__u32 val)
+{
+       __asm__("byterev %0" : "=d" (val) : "0" (val));
+       return val;
+}
+
+#define __arch_swab32 __arch_swab32
+#elif !defined(__uClinux__)
+
+static inline __attribute_const__ __u32 __arch_swab32(__u32 val)
+{
+       __asm__("rolw #8,%0; swap %0; rolw #8,%0" : "=d" (val) : "0" (val));
+       return val;
+}
+#define __arch_swab32 __arch_swab32
 #endif
+
+#endif /* _M68K_SWAB_H */
diff --git a/arch/m68k/include/asm/swab_mm.h b/arch/m68k/include/asm/swab_mm.h
deleted file mode 100644 (file)
index 7221e30..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef _M68K_SWAB_H
-#define _M68K_SWAB_H
-
-#include <asm/types.h>
-#include <linux/compiler.h>
-
-#define __SWAB_64_THRU_32__
-
-static inline __attribute_const__ __u32 __arch_swab32(__u32 val)
-{
-       __asm__("rolw #8,%0; swap %0; rolw #8,%0" : "=d" (val) : "0" (val));
-       return val;
-}
-#define __arch_swab32 __arch_swab32
-
-#endif /* _M68K_SWAB_H */
diff --git a/arch/m68k/include/asm/swab_no.h b/arch/m68k/include/asm/swab_no.h
deleted file mode 100644 (file)
index e582257..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef _M68KNOMMU_SWAB_H
-#define _M68KNOMMU_SWAB_H
-
-#include <linux/types.h>
-
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__)
-#  define __SWAB_64_THRU_32__
-#endif
-
-#if defined (__mcfisaaplus__) || defined (__mcfisac__)
-static inline __attribute_const__ __u32 __arch_swab32(__u32 val)
-{
-       asm(
-                       "byterev %0"
-                       : "=d" (val)
-                       : "0" (val)
-          );
-       return val;
-}
-
-#define __arch_swab32 __arch_swab32
-#endif
-
-#endif /* _M68KNOMMU_SWAB_H */
index df1d9d4..3c19027 100644 (file)
@@ -1,5 +1,372 @@
-#ifdef __uClinux__
-#include "unistd_no.h"
-#else
-#include "unistd_mm.h"
-#endif
+#ifndef _ASM_M68K_UNISTD_H_
+#define _ASM_M68K_UNISTD_H_
+
+/*
+ * This file contains the system call numbers.
+ */
+
+#define __NR_restart_syscall     0
+#define __NR_exit                1
+#define __NR_fork                2
+#define __NR_read                3
+#define __NR_write               4
+#define __NR_open                5
+#define __NR_close               6
+#define __NR_waitpid             7
+#define __NR_creat               8
+#define __NR_link                9
+#define __NR_unlink             10
+#define __NR_execve             11
+#define __NR_chdir              12
+#define __NR_time               13
+#define __NR_mknod              14
+#define __NR_chmod              15
+#define __NR_chown              16
+#define __NR_break              17
+#define __NR_oldstat            18
+#define __NR_lseek              19
+#define __NR_getpid             20
+#define __NR_mount              21
+#define __NR_umount             22
+#define __NR_setuid             23
+#define __NR_getuid             24
+#define __NR_stime              25
+#define __NR_ptrace             26
+#define __NR_alarm              27
+#define __NR_oldfstat           28
+#define __NR_pause              29
+#define __NR_utime              30
+#define __NR_stty               31
+#define __NR_gtty               32
+#define __NR_access             33
+#define __NR_nice               34
+#define __NR_ftime              35
+#define __NR_sync               36
+#define __NR_kill               37
+#define __NR_rename             38
+#define __NR_mkdir              39
+#define __NR_rmdir              40
+#define __NR_dup                41
+#define __NR_pipe               42
+#define __NR_times              43
+#define __NR_prof               44
+#define __NR_brk                45
+#define __NR_setgid             46
+#define __NR_getgid             47
+#define __NR_signal             48
+#define __NR_geteuid            49
+#define __NR_getegid            50
+#define __NR_acct               51
+#define __NR_umount2            52
+#define __NR_lock               53
+#define __NR_ioctl              54
+#define __NR_fcntl              55
+#define __NR_mpx                56
+#define __NR_setpgid            57
+#define __NR_ulimit             58
+#define __NR_oldolduname        59
+#define __NR_umask              60
+#define __NR_chroot             61
+#define __NR_ustat              62
+#define __NR_dup2               63
+#define __NR_getppid            64
+#define __NR_getpgrp            65
+#define __NR_setsid             66
+#define __NR_sigaction          67
+#define __NR_sgetmask           68
+#define __NR_ssetmask           69
+#define __NR_setreuid           70
+#define __NR_setregid           71
+#define __NR_sigsuspend                 72
+#define __NR_sigpending                 73
+#define __NR_sethostname        74
+#define __NR_setrlimit          75
+#define __NR_getrlimit          76
+#define __NR_getrusage          77
+#define __NR_gettimeofday       78
+#define __NR_settimeofday       79
+#define __NR_getgroups          80
+#define __NR_setgroups          81
+#define __NR_select             82
+#define __NR_symlink            83
+#define __NR_oldlstat           84
+#define __NR_readlink           85
+#define __NR_uselib             86
+#define __NR_swapon             87
+#define __NR_reboot             88
+#define __NR_readdir            89
+#define __NR_mmap               90
+#define __NR_munmap             91
+#define __NR_truncate           92
+#define __NR_ftruncate          93
+#define __NR_fchmod             94
+#define __NR_fchown             95
+#define __NR_getpriority        96
+#define __NR_setpriority        97
+#define __NR_profil             98
+#define __NR_statfs             99
+#define __NR_fstatfs           100
+#define __NR_ioperm            101
+#define __NR_socketcall                102
+#define __NR_syslog            103
+#define __NR_setitimer         104
+#define __NR_getitimer         105
+#define __NR_stat              106
+#define __NR_lstat             107
+#define __NR_fstat             108
+#define __NR_olduname          109
+#define __NR_iopl              /* 110 */ not supported
+#define __NR_vhangup           111
+#define __NR_idle              /* 112 */ Obsolete
+#define __NR_vm86              /* 113 */ not supported
+#define __NR_wait4             114
+#define __NR_swapoff           115
+#define __NR_sysinfo           116
+#define __NR_ipc               117
+#define __NR_fsync             118
+#define __NR_sigreturn         119
+#define __NR_clone             120
+#define __NR_setdomainname     121
+#define __NR_uname             122
+#define __NR_cacheflush                123
+#define __NR_adjtimex          124
+#define __NR_mprotect          125
+#define __NR_sigprocmask       126
+#define __NR_create_module     127
+#define __NR_init_module       128
+#define __NR_delete_module     129
+#define __NR_get_kernel_syms   130
+#define __NR_quotactl          131
+#define __NR_getpgid           132
+#define __NR_fchdir            133
+#define __NR_bdflush           134
+#define __NR_sysfs             135
+#define __NR_personality       136
+#define __NR_afs_syscall       137 /* Syscall for Andrew File System */
+#define __NR_setfsuid          138
+#define __NR_setfsgid          139
+#define __NR__llseek           140
+#define __NR_getdents          141
+#define __NR__newselect                142
+#define __NR_flock             143
+#define __NR_msync             144
+#define __NR_readv             145
+#define __NR_writev            146
+#define __NR_getsid            147
+#define __NR_fdatasync         148
+#define __NR__sysctl           149
+#define __NR_mlock             150
+#define __NR_munlock           151
+#define __NR_mlockall          152
+#define __NR_munlockall                153
+#define __NR_sched_setparam            154
+#define __NR_sched_getparam            155
+#define __NR_sched_setscheduler                156
+#define __NR_sched_getscheduler                157
+#define __NR_sched_yield               158
+#define __NR_sched_get_priority_max    159
+#define __NR_sched_get_priority_min    160
+#define __NR_sched_rr_get_interval     161
+#define __NR_nanosleep         162
+#define __NR_mremap            163
+#define __NR_setresuid         164
+#define __NR_getresuid         165
+#define __NR_getpagesize       166
+#define __NR_query_module      167
+#define __NR_poll              168
+#define __NR_nfsservctl                169
+#define __NR_setresgid         170
+#define __NR_getresgid         171
+#define __NR_prctl             172
+#define __NR_rt_sigreturn      173
+#define __NR_rt_sigaction      174
+#define __NR_rt_sigprocmask    175
+#define __NR_rt_sigpending     176
+#define __NR_rt_sigtimedwait   177
+#define __NR_rt_sigqueueinfo   178
+#define __NR_rt_sigsuspend     179
+#define __NR_pread64           180
+#define __NR_pwrite64          181
+#define __NR_lchown            182
+#define __NR_getcwd            183
+#define __NR_capget            184
+#define __NR_capset            185
+#define __NR_sigaltstack       186
+#define __NR_sendfile          187
+#define __NR_getpmsg           188     /* some people actually want streams */
+#define __NR_putpmsg           189     /* some people actually want streams */
+#define __NR_vfork             190
+#define __NR_ugetrlimit                191
+#define __NR_mmap2             192
+#define __NR_truncate64                193
+#define __NR_ftruncate64       194
+#define __NR_stat64            195
+#define __NR_lstat64           196
+#define __NR_fstat64           197
+#define __NR_chown32           198
+#define __NR_getuid32          199
+#define __NR_getgid32          200
+#define __NR_geteuid32         201
+#define __NR_getegid32         202
+#define __NR_setreuid32                203
+#define __NR_setregid32                204
+#define __NR_getgroups32       205
+#define __NR_setgroups32       206
+#define __NR_fchown32          207
+#define __NR_setresuid32       208
+#define __NR_getresuid32       209
+#define __NR_setresgid32       210
+#define __NR_getresgid32       211
+#define __NR_lchown32          212
+#define __NR_setuid32          213
+#define __NR_setgid32          214
+#define __NR_setfsuid32                215
+#define __NR_setfsgid32                216
+#define __NR_pivot_root                217
+#define __NR_getdents64                220
+#define __NR_gettid            221
+#define __NR_tkill             222
+#define __NR_setxattr          223
+#define __NR_lsetxattr         224
+#define __NR_fsetxattr         225
+#define __NR_getxattr          226
+#define __NR_lgetxattr         227
+#define __NR_fgetxattr         228
+#define __NR_listxattr         229
+#define __NR_llistxattr                230
+#define __NR_flistxattr                231
+#define __NR_removexattr       232
+#define __NR_lremovexattr      233
+#define __NR_fremovexattr      234
+#define __NR_futex             235
+#define __NR_sendfile64                236
+#define __NR_mincore           237
+#define __NR_madvise           238
+#define __NR_fcntl64           239
+#define __NR_readahead         240
+#define __NR_io_setup          241
+#define __NR_io_destroy                242
+#define __NR_io_getevents      243
+#define __NR_io_submit         244
+#define __NR_io_cancel         245
+#define __NR_fadvise64         246
+#define __NR_exit_group                247
+#define __NR_lookup_dcookie    248
+#define __NR_epoll_create      249
+#define __NR_epoll_ctl         250
+#define __NR_epoll_wait                251
+#define __NR_remap_file_pages  252
+#define __NR_set_tid_address   253
+#define __NR_timer_create      254
+#define __NR_timer_settime     255
+#define __NR_timer_gettime     256
+#define __NR_timer_getoverrun  257
+#define __NR_timer_delete      258
+#define __NR_clock_settime     259
+#define __NR_clock_gettime     260
+#define __NR_clock_getres      261
+#define __NR_clock_nanosleep   262
+#define __NR_statfs64          263
+#define __NR_fstatfs64         264
+#define __NR_tgkill            265
+#define __NR_utimes            266
+#define __NR_fadvise64_64      267
+#define __NR_mbind             268
+#define __NR_get_mempolicy     269
+#define __NR_set_mempolicy     270
+#define __NR_mq_open           271
+#define __NR_mq_unlink         272
+#define __NR_mq_timedsend      273
+#define __NR_mq_timedreceive   274
+#define __NR_mq_notify         275
+#define __NR_mq_getsetattr     276
+#define __NR_waitid            277
+#define __NR_vserver           278
+#define __NR_add_key           279
+#define __NR_request_key       280
+#define __NR_keyctl            281
+#define __NR_ioprio_set                282
+#define __NR_ioprio_get                283
+#define __NR_inotify_init      284
+#define __NR_inotify_add_watch 285
+#define __NR_inotify_rm_watch  286
+#define __NR_migrate_pages     287
+#define __NR_openat            288
+#define __NR_mkdirat           289
+#define __NR_mknodat           290
+#define __NR_fchownat          291
+#define __NR_futimesat         292
+#define __NR_fstatat64         293
+#define __NR_unlinkat          294
+#define __NR_renameat          295
+#define __NR_linkat            296
+#define __NR_symlinkat         297
+#define __NR_readlinkat                298
+#define __NR_fchmodat          299
+#define __NR_faccessat         300
+#define __NR_pselect6          301
+#define __NR_ppoll             302
+#define __NR_unshare           303
+#define __NR_set_robust_list   304
+#define __NR_get_robust_list   305
+#define __NR_splice            306
+#define __NR_sync_file_range   307
+#define __NR_tee               308
+#define __NR_vmsplice          309
+#define __NR_move_pages                310
+#define __NR_sched_setaffinity 311
+#define __NR_sched_getaffinity 312
+#define __NR_kexec_load                313
+#define __NR_getcpu            314
+#define __NR_epoll_pwait       315
+#define __NR_utimensat         316
+#define __NR_signalfd          317
+#define __NR_timerfd_create    318
+#define __NR_eventfd           319
+#define __NR_fallocate         320
+#define __NR_timerfd_settime   321
+#define __NR_timerfd_gettime   322
+#define __NR_signalfd4         323
+#define __NR_eventfd2          324
+#define __NR_epoll_create1     325
+#define __NR_dup3              326
+#define __NR_pipe2             327
+#define __NR_inotify_init1     328
+
+#ifdef __KERNEL__
+
+#define NR_syscalls            329
+
+#define __ARCH_WANT_IPC_PARSE_VERSION
+#define __ARCH_WANT_OLD_READDIR
+#define __ARCH_WANT_OLD_STAT
+#define __ARCH_WANT_STAT64
+#define __ARCH_WANT_SYS_ALARM
+#define __ARCH_WANT_SYS_GETHOSTNAME
+#define __ARCH_WANT_SYS_PAUSE
+#define __ARCH_WANT_SYS_SGETMASK
+#define __ARCH_WANT_SYS_SIGNAL
+#define __ARCH_WANT_SYS_TIME
+#define __ARCH_WANT_SYS_UTIME
+#define __ARCH_WANT_SYS_WAITPID
+#define __ARCH_WANT_SYS_SOCKETCALL
+#define __ARCH_WANT_SYS_FADVISE64
+#define __ARCH_WANT_SYS_GETPGRP
+#define __ARCH_WANT_SYS_LLSEEK
+#define __ARCH_WANT_SYS_NICE
+#define __ARCH_WANT_SYS_OLD_GETRLIMIT
+#define __ARCH_WANT_SYS_OLDUMOUNT
+#define __ARCH_WANT_SYS_SIGPENDING
+#define __ARCH_WANT_SYS_SIGPROCMASK
+#define __ARCH_WANT_SYS_RT_SIGACTION
+
+/*
+ * "Conditional" syscalls
+ *
+ * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
+ * but it doesn't work on all toolchains, so we just do it by hand
+ */
+#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")
+
+#endif /* __KERNEL__ */
+#endif /* _ASM_M68K_UNISTD_H_ */
diff --git a/arch/m68k/include/asm/unistd_mm.h b/arch/m68k/include/asm/unistd_mm.h
deleted file mode 100644 (file)
index 3c19027..0000000
+++ /dev/null
@@ -1,372 +0,0 @@
-#ifndef _ASM_M68K_UNISTD_H_
-#define _ASM_M68K_UNISTD_H_
-
-/*
- * This file contains the system call numbers.
- */
-
-#define __NR_restart_syscall     0
-#define __NR_exit                1
-#define __NR_fork                2
-#define __NR_read                3
-#define __NR_write               4
-#define __NR_open                5
-#define __NR_close               6
-#define __NR_waitpid             7
-#define __NR_creat               8
-#define __NR_link                9
-#define __NR_unlink             10
-#define __NR_execve             11
-#define __NR_chdir              12
-#define __NR_time               13
-#define __NR_mknod              14
-#define __NR_chmod              15
-#define __NR_chown              16
-#define __NR_break              17
-#define __NR_oldstat            18
-#define __NR_lseek              19
-#define __NR_getpid             20
-#define __NR_mount              21
-#define __NR_umount             22
-#define __NR_setuid             23
-#define __NR_getuid             24
-#define __NR_stime              25
-#define __NR_ptrace             26
-#define __NR_alarm              27
-#define __NR_oldfstat           28
-#define __NR_pause              29
-#define __NR_utime              30
-#define __NR_stty               31
-#define __NR_gtty               32
-#define __NR_access             33
-#define __NR_nice               34
-#define __NR_ftime              35
-#define __NR_sync               36
-#define __NR_kill               37
-#define __NR_rename             38
-#define __NR_mkdir              39
-#define __NR_rmdir              40
-#define __NR_dup                41
-#define __NR_pipe               42
-#define __NR_times              43
-#define __NR_prof               44
-#define __NR_brk                45
-#define __NR_setgid             46
-#define __NR_getgid             47
-#define __NR_signal             48
-#define __NR_geteuid            49
-#define __NR_getegid            50
-#define __NR_acct               51
-#define __NR_umount2            52
-#define __NR_lock               53
-#define __NR_ioctl              54
-#define __NR_fcntl              55
-#define __NR_mpx                56
-#define __NR_setpgid            57
-#define __NR_ulimit             58
-#define __NR_oldolduname        59
-#define __NR_umask              60
-#define __NR_chroot             61
-#define __NR_ustat              62
-#define __NR_dup2               63
-#define __NR_getppid            64
-#define __NR_getpgrp            65
-#define __NR_setsid             66
-#define __NR_sigaction          67
-#define __NR_sgetmask           68
-#define __NR_ssetmask           69
-#define __NR_setreuid           70
-#define __NR_setregid           71
-#define __NR_sigsuspend                 72
-#define __NR_sigpending                 73
-#define __NR_sethostname        74
-#define __NR_setrlimit          75
-#define __NR_getrlimit          76
-#define __NR_getrusage          77
-#define __NR_gettimeofday       78
-#define __NR_settimeofday       79
-#define __NR_getgroups          80
-#define __NR_setgroups          81
-#define __NR_select             82
-#define __NR_symlink            83
-#define __NR_oldlstat           84
-#define __NR_readlink           85
-#define __NR_uselib             86
-#define __NR_swapon             87
-#define __NR_reboot             88
-#define __NR_readdir            89
-#define __NR_mmap               90
-#define __NR_munmap             91
-#define __NR_truncate           92
-#define __NR_ftruncate          93
-#define __NR_fchmod             94
-#define __NR_fchown             95
-#define __NR_getpriority        96
-#define __NR_setpriority        97
-#define __NR_profil             98
-#define __NR_statfs             99
-#define __NR_fstatfs           100
-#define __NR_ioperm            101
-#define __NR_socketcall                102
-#define __NR_syslog            103
-#define __NR_setitimer         104
-#define __NR_getitimer         105
-#define __NR_stat              106
-#define __NR_lstat             107
-#define __NR_fstat             108
-#define __NR_olduname          109
-#define __NR_iopl              /* 110 */ not supported
-#define __NR_vhangup           111
-#define __NR_idle              /* 112 */ Obsolete
-#define __NR_vm86              /* 113 */ not supported
-#define __NR_wait4             114
-#define __NR_swapoff           115
-#define __NR_sysinfo           116
-#define __NR_ipc               117
-#define __NR_fsync             118
-#define __NR_sigreturn         119
-#define __NR_clone             120
-#define __NR_setdomainname     121
-#define __NR_uname             122
-#define __NR_cacheflush                123
-#define __NR_adjtimex          124
-#define __NR_mprotect          125
-#define __NR_sigprocmask       126
-#define __NR_create_module     127
-#define __NR_init_module       128
-#define __NR_delete_module     129
-#define __NR_get_kernel_syms   130
-#define __NR_quotactl          131
-#define __NR_getpgid           132
-#define __NR_fchdir            133
-#define __NR_bdflush           134
-#define __NR_sysfs             135
-#define __NR_personality       136
-#define __NR_afs_syscall       137 /* Syscall for Andrew File System */
-#define __NR_setfsuid          138
-#define __NR_setfsgid          139
-#define __NR__llseek           140
-#define __NR_getdents          141
-#define __NR__newselect                142
-#define __NR_flock             143
-#define __NR_msync             144
-#define __NR_readv             145
-#define __NR_writev            146
-#define __NR_getsid            147
-#define __NR_fdatasync         148
-#define __NR__sysctl           149
-#define __NR_mlock             150
-#define __NR_munlock           151
-#define __NR_mlockall          152
-#define __NR_munlockall                153
-#define __NR_sched_setparam            154
-#define __NR_sched_getparam            155
-#define __NR_sched_setscheduler                156
-#define __NR_sched_getscheduler                157
-#define __NR_sched_yield               158
-#define __NR_sched_get_priority_max    159
-#define __NR_sched_get_priority_min    160
-#define __NR_sched_rr_get_interval     161
-#define __NR_nanosleep         162
-#define __NR_mremap            163
-#define __NR_setresuid         164
-#define __NR_getresuid         165
-#define __NR_getpagesize       166
-#define __NR_query_module      167
-#define __NR_poll              168
-#define __NR_nfsservctl                169
-#define __NR_setresgid         170
-#define __NR_getresgid         171
-#define __NR_prctl             172
-#define __NR_rt_sigreturn      173
-#define __NR_rt_sigaction      174
-#define __NR_rt_sigprocmask    175
-#define __NR_rt_sigpending     176
-#define __NR_rt_sigtimedwait   177
-#define __NR_rt_sigqueueinfo   178
-#define __NR_rt_sigsuspend     179
-#define __NR_pread64           180
-#define __NR_pwrite64          181
-#define __NR_lchown            182
-#define __NR_getcwd            183
-#define __NR_capget            184
-#define __NR_capset            185
-#define __NR_sigaltstack       186
-#define __NR_sendfile          187
-#define __NR_getpmsg           188     /* some people actually want streams */
-#define __NR_putpmsg           189     /* some people actually want streams */
-#define __NR_vfork             190
-#define __NR_ugetrlimit                191
-#define __NR_mmap2             192
-#define __NR_truncate64                193
-#define __NR_ftruncate64       194
-#define __NR_stat64            195
-#define __NR_lstat64           196
-#define __NR_fstat64           197
-#define __NR_chown32           198
-#define __NR_getuid32          199
-#define __NR_getgid32          200
-#define __NR_geteuid32         201
-#define __NR_getegid32         202
-#define __NR_setreuid32                203
-#define __NR_setregid32                204
-#define __NR_getgroups32       205
-#define __NR_setgroups32       206
-#define __NR_fchown32          207
-#define __NR_setresuid32       208
-#define __NR_getresuid32       209
-#define __NR_setresgid32       210
-#define __NR_getresgid32       211
-#define __NR_lchown32          212
-#define __NR_setuid32          213
-#define __NR_setgid32          214
-#define __NR_setfsuid32                215
-#define __NR_setfsgid32                216
-#define __NR_pivot_root                217
-#define __NR_getdents64                220
-#define __NR_gettid            221
-#define __NR_tkill             222
-#define __NR_setxattr          223
-#define __NR_lsetxattr         224
-#define __NR_fsetxattr         225
-#define __NR_getxattr          226
-#define __NR_lgetxattr         227
-#define __NR_fgetxattr         228
-#define __NR_listxattr         229
-#define __NR_llistxattr                230
-#define __NR_flistxattr                231
-#define __NR_removexattr       232
-#define __NR_lremovexattr      233
-#define __NR_fremovexattr      234
-#define __NR_futex             235
-#define __NR_sendfile64                236
-#define __NR_mincore           237
-#define __NR_madvise           238
-#define __NR_fcntl64           239
-#define __NR_readahead         240
-#define __NR_io_setup          241
-#define __NR_io_destroy                242
-#define __NR_io_getevents      243
-#define __NR_io_submit         244
-#define __NR_io_cancel         245
-#define __NR_fadvise64         246
-#define __NR_exit_group                247
-#define __NR_lookup_dcookie    248
-#define __NR_epoll_create      249
-#define __NR_epoll_ctl         250
-#define __NR_epoll_wait                251
-#define __NR_remap_file_pages  252
-#define __NR_set_tid_address   253
-#define __NR_timer_create      254
-#define __NR_timer_settime     255
-#define __NR_timer_gettime     256
-#define __NR_timer_getoverrun  257
-#define __NR_timer_delete      258
-#define __NR_clock_settime     259
-#define __NR_clock_gettime     260
-#define __NR_clock_getres      261
-#define __NR_clock_nanosleep   262
-#define __NR_statfs64          263
-#define __NR_fstatfs64         264
-#define __NR_tgkill            265
-#define __NR_utimes            266
-#define __NR_fadvise64_64      267
-#define __NR_mbind             268
-#define __NR_get_mempolicy     269
-#define __NR_set_mempolicy     270
-#define __NR_mq_open           271
-#define __NR_mq_unlink         272
-#define __NR_mq_timedsend      273
-#define __NR_mq_timedreceive   274
-#define __NR_mq_notify         275
-#define __NR_mq_getsetattr     276
-#define __NR_waitid            277
-#define __NR_vserver           278
-#define __NR_add_key           279
-#define __NR_request_key       280
-#define __NR_keyctl            281
-#define __NR_ioprio_set                282
-#define __NR_ioprio_get                283
-#define __NR_inotify_init      284
-#define __NR_inotify_add_watch 285
-#define __NR_inotify_rm_watch  286
-#define __NR_migrate_pages     287
-#define __NR_openat            288
-#define __NR_mkdirat           289
-#define __NR_mknodat           290
-#define __NR_fchownat          291
-#define __NR_futimesat         292
-#define __NR_fstatat64         293
-#define __NR_unlinkat          294
-#define __NR_renameat          295
-#define __NR_linkat            296
-#define __NR_symlinkat         297
-#define __NR_readlinkat                298
-#define __NR_fchmodat          299
-#define __NR_faccessat         300
-#define __NR_pselect6          301
-#define __NR_ppoll             302
-#define __NR_unshare           303
-#define __NR_set_robust_list   304
-#define __NR_get_robust_list   305
-#define __NR_splice            306
-#define __NR_sync_file_range   307
-#define __NR_tee               308
-#define __NR_vmsplice          309
-#define __NR_move_pages                310
-#define __NR_sched_setaffinity 311
-#define __NR_sched_getaffinity 312
-#define __NR_kexec_load                313
-#define __NR_getcpu            314
-#define __NR_epoll_pwait       315
-#define __NR_utimensat         316
-#define __NR_signalfd          317
-#define __NR_timerfd_create    318
-#define __NR_eventfd           319
-#define __NR_fallocate         320
-#define __NR_timerfd_settime   321
-#define __NR_timerfd_gettime   322
-#define __NR_signalfd4         323
-#define __NR_eventfd2          324
-#define __NR_epoll_create1     325
-#define __NR_dup3              326
-#define __NR_pipe2             327
-#define __NR_inotify_init1     328
-
-#ifdef __KERNEL__
-
-#define NR_syscalls            329
-
-#define __ARCH_WANT_IPC_PARSE_VERSION
-#define __ARCH_WANT_OLD_READDIR
-#define __ARCH_WANT_OLD_STAT
-#define __ARCH_WANT_STAT64
-#define __ARCH_WANT_SYS_ALARM
-#define __ARCH_WANT_SYS_GETHOSTNAME
-#define __ARCH_WANT_SYS_PAUSE
-#define __ARCH_WANT_SYS_SGETMASK
-#define __ARCH_WANT_SYS_SIGNAL
-#define __ARCH_WANT_SYS_TIME
-#define __ARCH_WANT_SYS_UTIME
-#define __ARCH_WANT_SYS_WAITPID
-#define __ARCH_WANT_SYS_SOCKETCALL
-#define __ARCH_WANT_SYS_FADVISE64
-#define __ARCH_WANT_SYS_GETPGRP
-#define __ARCH_WANT_SYS_LLSEEK
-#define __ARCH_WANT_SYS_NICE
-#define __ARCH_WANT_SYS_OLD_GETRLIMIT
-#define __ARCH_WANT_SYS_OLDUMOUNT
-#define __ARCH_WANT_SYS_SIGPENDING
-#define __ARCH_WANT_SYS_SIGPROCMASK
-#define __ARCH_WANT_SYS_RT_SIGACTION
-
-/*
- * "Conditional" syscalls
- *
- * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
- * but it doesn't work on all toolchains, so we just do it by hand
- */
-#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")
-
-#endif /* __KERNEL__ */
-#endif /* _ASM_M68K_UNISTD_H_ */
diff --git a/arch/m68k/include/asm/unistd_no.h b/arch/m68k/include/asm/unistd_no.h
deleted file mode 100644 (file)
index b034a2f..0000000
+++ /dev/null
@@ -1,372 +0,0 @@
-#ifndef _ASM_M68K_UNISTD_H_
-#define _ASM_M68K_UNISTD_H_
-
-/*
- * This file contains the system call numbers.
- */
-
-#define __NR_restart_syscall      0
-#define __NR_exit                1
-#define __NR_fork                2
-#define __NR_read                3
-#define __NR_write               4
-#define __NR_open                5
-#define __NR_close               6
-#define __NR_waitpid             7
-#define __NR_creat               8
-#define __NR_link                9
-#define __NR_unlink             10
-#define __NR_execve             11
-#define __NR_chdir              12
-#define __NR_time               13
-#define __NR_mknod              14
-#define __NR_chmod              15
-#define __NR_chown              16
-#define __NR_break              17
-#define __NR_oldstat            18
-#define __NR_lseek              19
-#define __NR_getpid             20
-#define __NR_mount              21
-#define __NR_umount             22
-#define __NR_setuid             23
-#define __NR_getuid             24
-#define __NR_stime              25
-#define __NR_ptrace             26
-#define __NR_alarm              27
-#define __NR_oldfstat           28
-#define __NR_pause              29
-#define __NR_utime              30
-#define __NR_stty               31
-#define __NR_gtty               32
-#define __NR_access             33
-#define __NR_nice               34
-#define __NR_ftime              35
-#define __NR_sync               36
-#define __NR_kill               37
-#define __NR_rename             38
-#define __NR_mkdir              39
-#define __NR_rmdir              40
-#define __NR_dup                41
-#define __NR_pipe               42
-#define __NR_times              43
-#define __NR_prof               44
-#define __NR_brk                45
-#define __NR_setgid             46
-#define __NR_getgid             47
-#define __NR_signal             48
-#define __NR_geteuid            49
-#define __NR_getegid            50
-#define __NR_acct               51
-#define __NR_umount2            52
-#define __NR_lock               53
-#define __NR_ioctl              54
-#define __NR_fcntl              55
-#define __NR_mpx                56
-#define __NR_setpgid            57
-#define __NR_ulimit             58
-#define __NR_oldolduname        59
-#define __NR_umask              60
-#define __NR_chroot             61
-#define __NR_ustat              62
-#define __NR_dup2               63
-#define __NR_getppid            64
-#define __NR_getpgrp            65
-#define __NR_setsid             66
-#define __NR_sigaction          67
-#define __NR_sgetmask           68
-#define __NR_ssetmask           69
-#define __NR_setreuid           70
-#define __NR_setregid           71
-#define __NR_sigsuspend                 72
-#define __NR_sigpending                 73
-#define __NR_sethostname        74
-#define __NR_setrlimit          75
-#define __NR_getrlimit          76
-#define __NR_getrusage          77
-#define __NR_gettimeofday       78
-#define __NR_settimeofday       79
-#define __NR_getgroups          80
-#define __NR_setgroups          81
-#define __NR_select             82
-#define __NR_symlink            83
-#define __NR_oldlstat           84
-#define __NR_readlink           85
-#define __NR_uselib             86
-#define __NR_swapon             87
-#define __NR_reboot             88
-#define __NR_readdir            89
-#define __NR_mmap               90
-#define __NR_munmap             91
-#define __NR_truncate           92
-#define __NR_ftruncate          93
-#define __NR_fchmod             94
-#define __NR_fchown             95
-#define __NR_getpriority        96
-#define __NR_setpriority        97
-#define __NR_profil             98
-#define __NR_statfs             99
-#define __NR_fstatfs           100
-#define __NR_ioperm            101
-#define __NR_socketcall                102
-#define __NR_syslog            103
-#define __NR_setitimer         104
-#define __NR_getitimer         105
-#define __NR_stat              106
-#define __NR_lstat             107
-#define __NR_fstat             108
-#define __NR_olduname          109
-#define __NR_iopl              /* 110 */ not supported
-#define __NR_vhangup           111
-#define __NR_idle              /* 112 */ Obsolete
-#define __NR_vm86              /* 113 */ not supported
-#define __NR_wait4             114
-#define __NR_swapoff           115
-#define __NR_sysinfo           116
-#define __NR_ipc               117
-#define __NR_fsync             118
-#define __NR_sigreturn         119
-#define __NR_clone             120
-#define __NR_setdomainname     121
-#define __NR_uname             122
-#define __NR_cacheflush                123
-#define __NR_adjtimex          124
-#define __NR_mprotect          125
-#define __NR_sigprocmask       126
-#define __NR_create_module     127
-#define __NR_init_module       128
-#define __NR_delete_module     129
-#define __NR_get_kernel_syms   130
-#define __NR_quotactl          131
-#define __NR_getpgid           132
-#define __NR_fchdir            133
-#define __NR_bdflush           134
-#define __NR_sysfs             135
-#define __NR_personality       136
-#define __NR_afs_syscall       137 /* Syscall for Andrew File System */
-#define __NR_setfsuid          138
-#define __NR_setfsgid          139
-#define __NR__llseek           140
-#define __NR_getdents          141
-#define __NR__newselect                142
-#define __NR_flock             143
-#define __NR_msync             144
-#define __NR_readv             145
-#define __NR_writev            146
-#define __NR_getsid            147
-#define __NR_fdatasync         148
-#define __NR__sysctl           149
-#define __NR_mlock             150
-#define __NR_munlock           151
-#define __NR_mlockall          152
-#define __NR_munlockall                153
-#define __NR_sched_setparam            154
-#define __NR_sched_getparam            155
-#define __NR_sched_setscheduler                156
-#define __NR_sched_getscheduler                157
-#define __NR_sched_yield               158
-#define __NR_sched_get_priority_max    159
-#define __NR_sched_get_priority_min    160
-#define __NR_sched_rr_get_interval     161
-#define __NR_nanosleep         162
-#define __NR_mremap            163
-#define __NR_setresuid         164
-#define __NR_getresuid         165
-#define __NR_getpagesize       166
-#define __NR_query_module      167
-#define __NR_poll              168
-#define __NR_nfsservctl                169
-#define __NR_setresgid         170
-#define __NR_getresgid         171
-#define __NR_prctl             172
-#define __NR_rt_sigreturn      173
-#define __NR_rt_sigaction      174
-#define __NR_rt_sigprocmask    175
-#define __NR_rt_sigpending     176
-#define __NR_rt_sigtimedwait   177
-#define __NR_rt_sigqueueinfo   178
-#define __NR_rt_sigsuspend     179
-#define __NR_pread64           180
-#define __NR_pwrite64          181
-#define __NR_lchown            182
-#define __NR_getcwd            183
-#define __NR_capget            184
-#define __NR_capset            185
-#define __NR_sigaltstack       186
-#define __NR_sendfile          187
-#define __NR_getpmsg           188     /* some people actually want streams */
-#define __NR_putpmsg           189     /* some people actually want streams */
-#define __NR_vfork             190
-#define __NR_ugetrlimit                191
-#define __NR_mmap2             192
-#define __NR_truncate64                193
-#define __NR_ftruncate64       194
-#define __NR_stat64            195
-#define __NR_lstat64           196
-#define __NR_fstat64           197
-#define __NR_chown32           198
-#define __NR_getuid32          199
-#define __NR_getgid32          200
-#define __NR_geteuid32         201
-#define __NR_getegid32         202
-#define __NR_setreuid32                203
-#define __NR_setregid32                204
-#define __NR_getgroups32       205
-#define __NR_setgroups32       206
-#define __NR_fchown32          207
-#define __NR_setresuid32       208
-#define __NR_getresuid32       209
-#define __NR_setresgid32       210
-#define __NR_getresgid32       211
-#define __NR_lchown32          212
-#define __NR_setuid32          213
-#define __NR_setgid32          214
-#define __NR_setfsuid32                215
-#define __NR_setfsgid32                216
-#define __NR_pivot_root                217
-#define __NR_getdents64                220
-#define __NR_gettid            221
-#define __NR_tkill             222
-#define __NR_setxattr          223
-#define __NR_lsetxattr         224
-#define __NR_fsetxattr         225
-#define __NR_getxattr          226
-#define __NR_lgetxattr         227
-#define __NR_fgetxattr         228
-#define __NR_listxattr         229
-#define __NR_llistxattr                230
-#define __NR_flistxattr                231
-#define __NR_removexattr       232
-#define __NR_lremovexattr      233
-#define __NR_fremovexattr      234
-#define __NR_futex             235
-#define __NR_sendfile64                236
-#define __NR_mincore           237
-#define __NR_madvise           238
-#define __NR_fcntl64           239
-#define __NR_readahead         240
-#define __NR_io_setup          241
-#define __NR_io_destroy                242
-#define __NR_io_getevents      243
-#define __NR_io_submit         244
-#define __NR_io_cancel         245
-#define __NR_fadvise64         246
-#define __NR_exit_group                247
-#define __NR_lookup_dcookie    248
-#define __NR_epoll_create      249
-#define __NR_epoll_ctl         250
-#define __NR_epoll_wait                251
-#define __NR_remap_file_pages  252
-#define __NR_set_tid_address   253
-#define __NR_timer_create      254
-#define __NR_timer_settime     255
-#define __NR_timer_gettime     256
-#define __NR_timer_getoverrun  257
-#define __NR_timer_delete      258
-#define __NR_clock_settime     259
-#define __NR_clock_gettime     260
-#define __NR_clock_getres      261
-#define __NR_clock_nanosleep   262
-#define __NR_statfs64          263
-#define __NR_fstatfs64         264
-#define __NR_tgkill            265
-#define __NR_utimes            266
-#define __NR_fadvise64_64      267
-#define __NR_mbind             268
-#define __NR_get_mempolicy     269
-#define __NR_set_mempolicy     270
-#define __NR_mq_open           271
-#define __NR_mq_unlink         272
-#define __NR_mq_timedsend      273
-#define __NR_mq_timedreceive   274
-#define __NR_mq_notify         275
-#define __NR_mq_getsetattr     276
-#define __NR_waitid            277
-#define __NR_vserver           278
-#define __NR_add_key           279
-#define __NR_request_key       280
-#define __NR_keyctl            281
-#define __NR_ioprio_set                282
-#define __NR_ioprio_get                283
-#define __NR_inotify_init      284
-#define __NR_inotify_add_watch 285
-#define __NR_inotify_rm_watch  286
-#define __NR_migrate_pages     287
-#define __NR_openat            288
-#define __NR_mkdirat           289
-#define __NR_mknodat           290
-#define __NR_fchownat          291
-#define __NR_futimesat         292
-#define __NR_fstatat64         293
-#define __NR_unlinkat          294
-#define __NR_renameat          295
-#define __NR_linkat            296
-#define __NR_symlinkat         297
-#define __NR_readlinkat                298
-#define __NR_fchmodat          299
-#define __NR_faccessat         300
-#define __NR_pselect6          301
-#define __NR_ppoll             302
-#define __NR_unshare           303
-#define __NR_set_robust_list   304
-#define __NR_get_robust_list   305
-#define __NR_splice            306
-#define __NR_sync_file_range   307
-#define __NR_tee               308
-#define __NR_vmsplice          309
-#define __NR_move_pages                310
-#define __NR_sched_setaffinity 311
-#define __NR_sched_getaffinity 312
-#define __NR_kexec_load                313
-#define __NR_getcpu            314
-#define __NR_epoll_pwait       315
-#define __NR_utimensat         316
-#define __NR_signalfd          317
-#define __NR_timerfd_create    318
-#define __NR_eventfd           319
-#define __NR_fallocate         320
-#define __NR_timerfd_settime   321
-#define __NR_timerfd_gettime   322
-#define __NR_signalfd4         323
-#define __NR_eventfd2          324
-#define __NR_epoll_create1     325
-#define __NR_dup3              326
-#define __NR_pipe2             327
-#define __NR_inotify_init1     328
-
-#ifdef __KERNEL__
-
-#define NR_syscalls            329
-
-#define __ARCH_WANT_IPC_PARSE_VERSION
-#define __ARCH_WANT_OLD_READDIR
-#define __ARCH_WANT_OLD_STAT
-#define __ARCH_WANT_STAT64
-#define __ARCH_WANT_SYS_ALARM
-#define __ARCH_WANT_SYS_GETHOSTNAME
-#define __ARCH_WANT_SYS_PAUSE
-#define __ARCH_WANT_SYS_SGETMASK
-#define __ARCH_WANT_SYS_SIGNAL
-#define __ARCH_WANT_SYS_TIME
-#define __ARCH_WANT_SYS_UTIME
-#define __ARCH_WANT_SYS_WAITPID
-#define __ARCH_WANT_SYS_SOCKETCALL
-#define __ARCH_WANT_SYS_FADVISE64
-#define __ARCH_WANT_SYS_GETPGRP
-#define __ARCH_WANT_SYS_LLSEEK
-#define __ARCH_WANT_SYS_NICE
-#define __ARCH_WANT_SYS_OLD_GETRLIMIT
-#define __ARCH_WANT_SYS_OLDUMOUNT
-#define __ARCH_WANT_SYS_SIGPENDING
-#define __ARCH_WANT_SYS_SIGPROCMASK
-#define __ARCH_WANT_SYS_RT_SIGACTION
-
-/*
- * "Conditional" syscalls
- *
- * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
- * but it doesn't work on all toolchains, so we just do it by hand
- */
-#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")
-
-#endif /* __KERNEL__ */
-#endif /* _ASM_M68K_UNISTD_H_ */
index e61465a..206cb79 100644 (file)
@@ -238,8 +238,12 @@ config MIPS_SIM
          This option enables support for MIPS Technologies MIPSsim software
          emulator.
 
-config MACH_EMMA
-       bool "NEC EMMA series based machines"
+config NEC_MARKEINS
+       bool "NEC EMMA2RH Mark-eins board"
+       select SOC_EMMA2RH
+       select HW_HAS_PCI
+       help
+         This enables support for the NEC Electronics Mark-eins boards.
 
 config MACH_VR41XX
        bool "NEC VR4100 series based machines"
@@ -637,7 +641,6 @@ endchoice
 
 source "arch/mips/alchemy/Kconfig"
 source "arch/mips/basler/excite/Kconfig"
-source "arch/mips/emma/Kconfig"
 source "arch/mips/jazz/Kconfig"
 source "arch/mips/lasat/Kconfig"
 source "arch/mips/pmc-sierra/Kconfig"
@@ -895,6 +898,18 @@ config MIPS_RM9122
        bool
        select SERIAL_RM9000
 
+config SOC_EMMA2RH
+       bool
+       select CEVT_R4K
+       select CSRC_R4K
+       select DMA_NONCOHERENT
+       select IRQ_CPU
+       select SWAP_IO_SPACE
+       select SYS_HAS_CPU_R5500
+       select SYS_SUPPORTS_32BIT_KERNEL
+       select SYS_SUPPORTS_64BIT_KERNEL
+       select SYS_SUPPORTS_BIG_ENDIAN
+
 config SOC_PNX833X
        bool
        select CEVT_R4K
@@ -930,11 +945,6 @@ config SOC_PNX8550
 config SWAP_IO_SPACE
        bool
 
-config EMMA2RH
-       bool
-       depends on MARKEINS
-       default y
-
 config SERIAL_RM9000
        bool
 
index 21b00e9..22dab2e 100644 (file)
@@ -416,7 +416,7 @@ load-$(CONFIG_PNX8550_STB810)       += 0xffffffff80060000
 #
 # Common NEC EMMAXXX
 #
-core-$(CONFIG_SOC_EMMA)                += arch/mips/emma/common/
+core-$(CONFIG_SOC_EMMA2RH)     += arch/mips/emma/common/
 cflags-$(CONFIG_SOC_EMMA2RH)   += -I$(srctree)/arch/mips/include/asm/mach-emma2rh
 
 #
similarity index 99%
rename from arch/mips/configs/emma2rh_defconfig
rename to arch/mips/configs/markeins_defconfig
index fea9bc9..bad8901 100644 (file)
@@ -35,7 +35,7 @@ CONFIG_ZONE_DMA=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-CONFIG_MARKEINS=y
+CONFIG_NEC_MARKEINS=y
 # CONFIG_SGI_IP22 is not set
 # CONFIG_SGI_IP27 is not set
 # CONFIG_SGI_IP32 is not set
@@ -68,7 +68,7 @@ CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y
 CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y
 CONFIG_IRQ_CPU=y
 CONFIG_SWAP_IO_SPACE=y
-CONFIG_EMMA2RH=y
+CONFIG_SOC_EMMA2RH=y
 CONFIG_MIPS_L1_CACHE_SHIFT=5
 
 #
@@ -574,9 +574,9 @@ CONFIG_MTD_CFI_UTIL=y
 #
 # CONFIG_MTD_COMPLEX_MAPPINGS is not set
 CONFIG_MTD_PHYSMAP=y
-CONFIG_MTD_PHYSMAP_START=0x1e000000
-CONFIG_MTD_PHYSMAP_LEN=0x02000000
-CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+CONFIG_MTD_PHYSMAP_START=0x0
+CONFIG_MTD_PHYSMAP_LEN=0x0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=0
 # CONFIG_MTD_PLATRAM is not set
 
 #
diff --git a/arch/mips/emma/Kconfig b/arch/mips/emma/Kconfig
deleted file mode 100644 (file)
index 9669c72..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-choice
-       prompt "Machine type"
-       depends on MACH_EMMA
-       default NEC_MARKEINS
-
-config NEC_MARKEINS
-       bool "NEC EMMA2RH Mark-eins board"
-       select SOC_EMMA2RH
-       select HW_HAS_PCI
-       help
-         This enables support for the NEC Electronics Mark-eins boards.
-
-endchoice
-
-config SOC_EMMA2RH
-       bool
-       select SOC_EMMA
-       select SYS_HAS_CPU_R5500
-       select SYS_SUPPORTS_32BIT_KERNEL
-       select SYS_SUPPORTS_64BIT_KERNEL
-
-config SOC_EMMA
-       bool
-       select CEVT_R4K
-       select CSRC_R4K
-       select DMA_NONCOHERENT
-       select IRQ_CPU
-       select SWAP_IO_SPACE
-       select SYS_SUPPORTS_BIG_ENDIAN
index 88e87f6..d5f47e4 100644 (file)
@@ -141,13 +141,6 @@ static struct  platform_device serial_emma = {
        },
 };
 
-static struct platform_device *devices[] = {
-       &i2c_emma_devices[0],
-       &i2c_emma_devices[1],
-       &i2c_emma_devices[2],
-       &serial_emma,
-};
-
 static struct mtd_partition markeins_parts[] = {
        [0] = {
                .name = "RootFS",
@@ -181,11 +174,39 @@ static struct mtd_partition markeins_parts[] = {
        },
 };
 
+static struct physmap_flash_data markeins_flash_data = {
+       .width          = 2,
+       .nr_parts       = ARRAY_SIZE(markeins_parts),
+       .parts          = markeins_parts
+};
+
+static struct resource markeins_flash_resource = {
+       .start          = 0x1e000000,
+       .end            = 0x02000000,
+       .flags          = IORESOURCE_MEM
+};
+
+static struct platform_device markeins_flash_device = {
+       .name           = "physmap-flash",
+       .id             = 0,
+       .dev            = {
+               .platform_data  = &markeins_flash_data,
+       },
+       .num_resources  = 1,
+       .resource       = &markeins_flash_resource,
+};
+
+static struct platform_device *devices[] = {
+       i2c_emma_devices,
+       i2c_emma_devices + 1,
+       i2c_emma_devices + 2,
+       &serial_emma,
+       &markeins_flash_device,
+};
+
 static int __init platform_devices_setup(void)
 {
-       physmap_set_partitions(markeins_parts, ARRAY_SIZE(markeins_parts));
        return platform_add_devices(devices, ARRAY_SIZE(devices));
 }
 
 arch_initcall(platform_devices_setup);
-
index a6772e9..ae6306e 100644 (file)
@@ -15,8 +15,6 @@
  */
 #ifdef CONFIG_MIPS32_O32
 
-#define TIF_32BIT TIF_32BIT_REGS
-
 #define __NR_seccomp_read_32           4003
 #define __NR_seccomp_write_32          4004
 #define __NR_seccomp_exit_32           4001
@@ -24,8 +22,6 @@
 
 #elif defined(CONFIG_MIPS32_N32)
 
-#define TIF_32BIT _TIF_32BIT_ADDR
-
 #define __NR_seccomp_read_32           6000
 #define __NR_seccomp_write_32          6001
 #define __NR_seccomp_exit_32           6058
index 3f76de7..676aa2a 100644 (file)
@@ -127,6 +127,12 @@ register struct thread_info *__current_thread_info __asm__("$28");
 #define TIF_LOAD_WATCH         25      /* If set, load watch registers */
 #define TIF_SYSCALL_TRACE      31      /* syscall trace active */
 
+#ifdef CONFIG_MIPS32_O32
+#define TIF_32BIT TIF_32BIT_REGS
+#elif defined(CONFIG_MIPS32_N32)
+#define TIF_32BIT _TIF_32BIT_ADDR
+#endif /* CONFIG_MIPS32_O32 */
+
 #define _TIF_SYSCALL_TRACE     (1<<TIF_SYSCALL_TRACE)
 #define _TIF_SIGPENDING                (1<<TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED      (1<<TIF_NEED_RESCHED)
index 4b4007b..7b845ba 100644 (file)
@@ -108,7 +108,7 @@ int show_interrupts(struct seq_file *p, void *v)
                seq_printf(p, "%10u ", kstat_irqs(i));
 #else
                for_each_online_cpu(j)
-                       seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
+                       seq_printf(p, "%10u ", kstat_irqs_cpu(i, j));
 #endif
                seq_printf(p, " %14s", irq_desc[i].chip->name);
                seq_printf(p, "  %s", action->name);
index 56c64cc..50fdb5c 100644 (file)
@@ -221,7 +221,7 @@ int show_interrupts(struct seq_file *p, void *v)
                if (action) {
                        seq_printf(p, "%3d: ", i);
                        for_each_present_cpu(cpu)
-                               seq_printf(p, "%10u ", kstat_cpu(cpu).irqs[i]);
+                               seq_printf(p, "%10u ", kstat_irqs_cpu(i, cpu));
                        seq_printf(p, " %14s.%u", irq_desc[i].chip->name,
                                   (GxICR(i) & GxICR_LEVEL) >>
                                   GxICR_LEVEL_SHIFT);
index 9fc96e7..bf34a28 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23
-# Fri Oct 12 21:00:07 2007
+# Linux kernel version: 2.6.29-rc8
+# Fri Mar 13 01:32:55 2009
 #
 CONFIG_PARISC=y
 CONFIG_MMU=y
@@ -33,17 +33,35 @@ CONFIG_SYSVIPC_SYSCTL=y
 CONFIG_POSIX_MQUEUE=y
 # CONFIG_BSD_PROCESS_ACCT is not set
 # CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
 # CONFIG_AUDIT is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_CLASSIC_RCU=y
+# CONFIG_TREE_RCU is not set
+# CONFIG_PREEMPT_RCU is not set
+# CONFIG_TREE_RCU_TRACE is not set
+# CONFIG_PREEMPT_RCU_TRACE is not set
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_LOG_BUF_SHIFT=16
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
 CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
 # CONFIG_RELAY is not set
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+# CONFIG_IPC_NS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_NET_NS is not set
 CONFIG_BLK_DEV_INITRD=y
 CONFIG_INITRAMFS_SOURCE=""
 CONFIG_CC_OPTIMIZE_FOR_SIZE=y
 CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
 # CONFIG_EMBEDDED is not set
 CONFIG_SYSCTL_SYSCALL=y
 CONFIG_KALLSYMS=y
@@ -55,29 +73,38 @@ CONFIG_BUG=y
 CONFIG_ELF_CORE=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
 CONFIG_EPOLL=y
 CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
 CONFIG_EVENTFD=y
 CONFIG_SHMEM=y
+CONFIG_AIO=y
 CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_COMPAT_BRK=y
 CONFIG_SLAB=y
 # CONFIG_SLUB is not set
 # CONFIG_SLOB is not set
+CONFIG_PROFILING=y
+CONFIG_TRACEPOINTS=y
+# CONFIG_MARKERS is not set
+CONFIG_OPROFILE=m
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
+CONFIG_SLABINFO=y
 CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
 CONFIG_BASE_SMALL=0
 CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
 CONFIG_MODULE_UNLOAD=y
 CONFIG_MODULE_FORCE_UNLOAD=y
 # CONFIG_MODVERSIONS is not set
 # CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
+CONFIG_INIT_ALL_POSSIBLE=y
 CONFIG_BLOCK=y
 # CONFIG_LBD is not set
 # CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
 # CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
 
 #
 # IO Schedulers
@@ -91,6 +118,7 @@ CONFIG_DEFAULT_AS=y
 # CONFIG_DEFAULT_CFQ is not set
 # CONFIG_DEFAULT_NOOP is not set
 CONFIG_DEFAULT_IOSCHED="anticipatory"
+# CONFIG_FREEZER is not set
 
 #
 # Processor type and features
@@ -114,17 +142,19 @@ CONFIG_HZ_250=y
 # CONFIG_HZ_300 is not set
 # CONFIG_HZ_1000 is not set
 CONFIG_HZ=250
+# CONFIG_SCHED_HRTICK is not set
 CONFIG_SELECT_MEMORY_MODEL=y
 CONFIG_FLATMEM_MANUAL=y
 # CONFIG_DISCONTIGMEM_MANUAL is not set
 # CONFIG_SPARSEMEM_MANUAL is not set
 CONFIG_FLATMEM=y
 CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_PAGEFLAGS_EXTENDED=y
 CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
+# CONFIG_PHYS_ADDR_T_64BIT is not set
 CONFIG_ZONE_DMA_FLAG=0
 CONFIG_VIRT_TO_BUS=y
+CONFIG_UNEVICTABLE_LRU=y
 # CONFIG_HPUX is not set
 
 #
@@ -138,10 +168,6 @@ CONFIG_GSC_LASI=y
 # CONFIG_EISA is not set
 # CONFIG_PCI is not set
 # CONFIG_ARCH_SUPPORTS_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 
 #
@@ -156,16 +182,15 @@ CONFIG_PDC_STABLE=y
 # Executable file formats
 #
 CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+# CONFIG_HAVE_AOUT is not set
 CONFIG_BINFMT_MISC=m
-
-#
-# Networking
-#
 CONFIG_NET=y
 
 #
 # Networking options
 #
+CONFIG_COMPAT_NET_DEV_OPS=y
 CONFIG_PACKET=y
 CONFIG_PACKET_MMAP=y
 CONFIG_UNIX=y
@@ -173,6 +198,7 @@ CONFIG_XFRM=y
 CONFIG_XFRM_USER=m
 # CONFIG_XFRM_SUB_POLICY is not set
 # CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
 CONFIG_NET_KEY=m
 # CONFIG_NET_KEY_MIGRATE is not set
 CONFIG_INET=y
@@ -203,25 +229,25 @@ CONFIG_INET_TCP_DIAG=m
 CONFIG_TCP_CONG_CUBIC=y
 CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_TCP_MD5SIG is not set
-# CONFIG_IP_VS is not set
 # CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
 # CONFIG_NETWORK_SECMARK is not set
 CONFIG_NETFILTER=y
 # CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
 
 #
 # Core Netfilter Configuration
 #
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
+# CONFIG_NETFILTER_NETLINK_LOG is not set
 # CONFIG_NF_CONNTRACK is not set
 # CONFIG_NETFILTER_XTABLES is not set
+# CONFIG_IP_VS is not set
 
 #
 # IP: Netfilter Configuration
 #
+# CONFIG_NF_DEFRAG_IPV4 is not set
 CONFIG_IP_NF_QUEUE=m
 # CONFIG_IP_NF_IPTABLES is not set
 # CONFIG_IP_NF_ARPTABLES is not set
@@ -230,6 +256,7 @@ CONFIG_IP_NF_QUEUE=m
 # CONFIG_TIPC is not set
 # CONFIG_ATM is not set
 # CONFIG_BRIDGE is not set
+# CONFIG_NET_DSA is not set
 # CONFIG_VLAN_8021Q is not set
 # CONFIG_DECNET is not set
 CONFIG_LLC=m
@@ -240,28 +267,26 @@ CONFIG_LLC2=m
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
 
 #
 # Network testing
 #
 CONFIG_NET_PKTGEN=m
 # CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
 # CONFIG_IRDA is not set
 # CONFIG_BT is not set
 # CONFIG_AF_RXRPC is not set
-
-#
-# Wireless
-#
+# CONFIG_PHONET is not set
+CONFIG_WIRELESS=y
 # CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_OLD_REGULATORY=y
 # CONFIG_WIRELESS_EXT is not set
+# CONFIG_LIB80211 is not set
 # CONFIG_MAC80211 is not set
-# CONFIG_IEEE80211 is not set
+# CONFIG_WIMAX is not set
 # CONFIG_RFKILL is not set
 # CONFIG_NET_9P is not set
 
@@ -276,6 +301,8 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 # CONFIG_STANDALONE is not set
 # CONFIG_PREVENT_FIRMWARE_BUILD is not set
 CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
 # CONFIG_DEBUG_DRIVER is not set
 # CONFIG_DEBUG_DEVRES is not set
 # CONFIG_SYS_HYPERVISOR is not set
@@ -298,11 +325,19 @@ CONFIG_BLK_DEV_CRYPTOLOOP=y
 CONFIG_BLK_DEV_RAM=y
 CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_BLK_DEV_RAM_SIZE=6144
-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_BLK_DEV_XIP is not set
 # CONFIG_CDROM_PKTCDVD is not set
 CONFIG_ATA_OVER_ETH=m
+# CONFIG_BLK_DEV_HD is not set
 CONFIG_MISC_DEVICES=y
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
 # CONFIG_EEPROM_93CX6 is not set
+CONFIG_HAVE_IDE=y
 # CONFIG_IDE is not set
 
 #
@@ -342,14 +377,17 @@ CONFIG_SCSI_SPI_ATTRS=y
 # CONFIG_SCSI_FC_ATTRS is not set
 CONFIG_SCSI_ISCSI_ATTRS=m
 # CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
 CONFIG_SCSI_LOWLEVEL=y
 # CONFIG_ISCSI_TCP is not set
+# CONFIG_LIBFC is not set
 # CONFIG_SCSI_PPA is not set
 # CONFIG_SCSI_IMM is not set
 CONFIG_SCSI_LASI700=y
 CONFIG_53C700_LE_ON_BE=y
 # CONFIG_SCSI_ZALON is not set
 CONFIG_SCSI_DEBUG=m
+# CONFIG_SCSI_DH is not set
 # CONFIG_ATA is not set
 CONFIG_MD=y
 CONFIG_BLK_DEV_MD=m
@@ -362,7 +400,6 @@ CONFIG_MD_RAID1=m
 # CONFIG_MD_FAULTY is not set
 # CONFIG_BLK_DEV_DM is not set
 CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
 CONFIG_DUMMY=m
 CONFIG_BONDING=m
 # CONFIG_MACVLAN is not set
@@ -377,6 +414,9 @@ CONFIG_LASI_82596=y
 # CONFIG_IBM_NEW_EMAC_RGMII is not set
 # CONFIG_IBM_NEW_EMAC_TAH is not set
 # CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
 # CONFIG_B44 is not set
 # CONFIG_NET_POCKET is not set
 CONFIG_NETDEV_1000=y
@@ -387,6 +427,11 @@ CONFIG_NETDEV_10000=y
 #
 # CONFIG_WLAN_PRE80211 is not set
 # CONFIG_WLAN_80211 is not set
+# CONFIG_IWLWIFI_LEDS is not set
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
 # CONFIG_WAN is not set
 # CONFIG_PLIP is not set
 CONFIG_PPP=m
@@ -401,7 +446,6 @@ CONFIG_PPPOE=m
 # CONFIG_PPPOL2TP is not set
 # CONFIG_SLIP is not set
 CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
 # CONFIG_NETCONSOLE is not set
 # CONFIG_NETPOLL is not set
 # CONFIG_NET_POLL_CONTROLLER is not set
@@ -423,7 +467,6 @@ CONFIG_INPUT_MOUSEDEV_PSAUX=y
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -446,8 +489,8 @@ CONFIG_MOUSE_PS2=y
 CONFIG_MOUSE_PS2_ALPS=y
 CONFIG_MOUSE_PS2_LOGIPS2PP=y
 CONFIG_MOUSE_PS2_SYNAPTICS=y
-CONFIG_MOUSE_PS2_LIFEBOOK=y
 CONFIG_MOUSE_PS2_TRACKPOINT=y
+# CONFIG_MOUSE_PS2_ELANTECH is not set
 # CONFIG_MOUSE_PS2_TOUCHKIT is not set
 CONFIG_MOUSE_SERIAL=m
 # CONFIG_MOUSE_VSXXXAA is not set
@@ -474,9 +517,11 @@ CONFIG_SERIO_LIBPS2=y
 # Character devices
 #
 CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
 CONFIG_VT_CONSOLE=y
 CONFIG_HW_CONSOLE=y
 # CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
 # CONFIG_SERIAL_NONSTANDARD is not set
 
 #
@@ -501,72 +546,76 @@ CONFIG_PDC_CONSOLE=y
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
 CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=64
 CONFIG_PRINTER=m
 # CONFIG_LP_CONSOLE is not set
 CONFIG_PPDEV=m
-# CONFIG_TIPAR is not set
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 # CONFIG_HW_RANDOM is not set
-CONFIG_GEN_RTC=y
-CONFIG_GEN_RTC_X=y
 # CONFIG_R3964 is not set
 CONFIG_RAW_DRIVER=y
 CONFIG_MAX_RAW_DEVS=256
 # CONFIG_TCG_TPM is not set
 # CONFIG_I2C is not set
-
-#
-# SPI support
-#
 # CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
 # CONFIG_W1 is not set
 # CONFIG_POWER_SUPPLY is not set
 # CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+# CONFIG_THERMAL_HWMON is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
 
 #
 # Sonics Silicon Backplane
 #
-CONFIG_SSB_POSSIBLE=y
 # CONFIG_SSB is not set
 
 #
 # Multifunction device drivers
 #
+# CONFIG_MFD_CORE is not set
 # CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_REGULATOR is not set
 
 #
 # Multimedia devices
 #
+
+#
+# Multimedia core support
+#
 # CONFIG_VIDEO_DEV is not set
 # CONFIG_DVB_CORE is not set
-# CONFIG_DAB is not set
+# CONFIG_VIDEO_MEDIA is not set
 
 #
-# Graphics support
+# Multimedia drivers
 #
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+# CONFIG_DAB is not set
 
 #
-# Display device support
+# Graphics support
 #
-# CONFIG_DISPLAY_SUPPORT is not set
 # CONFIG_VGASTATE is not set
 CONFIG_VIDEO_OUTPUT_CONTROL=m
 CONFIG_FB=y
 # CONFIG_FIRMWARE_EDID is not set
 # CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
 CONFIG_FB_CFB_FILLRECT=y
 CONFIG_FB_CFB_COPYAREA=y
 CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
 # CONFIG_FB_SYS_FILLRECT is not set
 # CONFIG_FB_SYS_COPYAREA is not set
 # CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
 # CONFIG_FB_SYS_FOPS is not set
-CONFIG_FB_DEFERRED_IO=y
 # CONFIG_FB_SVGALIB is not set
 # CONFIG_FB_MACMODES is not set
 # CONFIG_FB_BACKLIGHT is not set
@@ -579,6 +628,14 @@ CONFIG_FB_TILEBLITTING=y
 CONFIG_FB_STI=y
 # CONFIG_FB_S1D13XXX is not set
 # CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
 
 #
 # Console display driver support
@@ -606,15 +663,8 @@ CONFIG_LOGO=y
 # CONFIG_LOGO_LINUX_VGA16 is not set
 # CONFIG_LOGO_LINUX_CLUT224 is not set
 CONFIG_LOGO_PARISC_CLUT224=y
-
-#
-# Sound
-#
 CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
+CONFIG_SOUND_OSS_CORE=y
 CONFIG_SND=y
 CONFIG_SND_TIMER=y
 CONFIG_SND_PCM=y
@@ -630,10 +680,7 @@ CONFIG_SND_SUPPORT_OLD_API=y
 CONFIG_SND_VERBOSE_PROCFS=y
 # CONFIG_SND_VERBOSE_PRINTK is not set
 # CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
+CONFIG_SND_DRIVERS=y
 # CONFIG_SND_DUMMY is not set
 # CONFIG_SND_VIRMIDI is not set
 # CONFIG_SND_MTPAV is not set
@@ -641,63 +688,82 @@ CONFIG_SND_VERBOSE_PROCFS=y
 # CONFIG_SND_SERIAL_U16550 is not set
 # CONFIG_SND_MPU401 is not set
 # CONFIG_SND_PORTMAN2X4 is not set
-
-#
-# GSC devices
-#
+CONFIG_SND_GSC=y
 CONFIG_SND_HARMONY=y
-
-#
-# System on Chip audio support
-#
 # CONFIG_SND_SOC is not set
-
-#
-# SoC Audio support for SuperH
-#
-
-#
-# Open Sound System
-#
 # CONFIG_SOUND_PRIME is not set
 CONFIG_HID_SUPPORT=y
 CONFIG_HID=y
 CONFIG_HID_DEBUG=y
+# CONFIG_HIDRAW is not set
+# CONFIG_HID_PID is not set
+
+#
+# Special HID drivers
+#
+CONFIG_HID_COMPAT=y
 CONFIG_USB_SUPPORT=y
 # CONFIG_USB_ARCH_HAS_HCD is not set
 # CONFIG_USB_ARCH_HAS_OHCI is not set
 # CONFIG_USB_ARCH_HAS_EHCI is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+# Enable Host or Gadget support to see Inventra options
 #
 
 #
-# USB Gadget Support
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
 #
 # CONFIG_USB_GADGET is not set
+
+#
+# OTG and related infrastructure
+#
 # CONFIG_MMC is not set
+# CONFIG_MEMSTICK is not set
 # CONFIG_NEW_LEDS is not set
-# CONFIG_RTC_CLASS is not set
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
 
 #
-# DMA Engine support
+# RTC interfaces
 #
-# CONFIG_DMA_ENGINE is not set
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
 
 #
-# DMA Clients
+# SPI RTC drivers
 #
 
 #
-# DMA Devices
-#
-# CONFIG_AUXDISPLAY is not set
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
 
 #
-# Userspace I/O
+# on-CPU RTC drivers
 #
+CONFIG_RTC_DRV_PARISC=y
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
 # CONFIG_UIO is not set
+# CONFIG_STAGING is not set
 
 #
 # File systems
@@ -707,7 +773,7 @@ CONFIG_EXT2_FS=y
 # CONFIG_EXT2_FS_XIP is not set
 CONFIG_EXT3_FS=y
 # CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4DEV_FS is not set
+# CONFIG_EXT4_FS is not set
 CONFIG_JBD=y
 # CONFIG_JBD_DEBUG is not set
 # CONFIG_REISERFS_FS is not set
@@ -717,19 +783,18 @@ CONFIG_JFS_FS=m
 # CONFIG_JFS_DEBUG is not set
 # CONFIG_JFS_STATISTICS is not set
 CONFIG_FS_POSIX_ACL=y
+CONFIG_FILE_LOCKING=y
 CONFIG_XFS_FS=m
 # CONFIG_XFS_QUOTA is not set
-# CONFIG_XFS_SECURITY is not set
 # CONFIG_XFS_POSIX_ACL is not set
 # CONFIG_XFS_RT is not set
-# CONFIG_GFS2_FS is not set
+# CONFIG_XFS_DEBUG is not set
 # CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
+# CONFIG_BTRFS_FS is not set
+CONFIG_DNOTIFY=y
 CONFIG_INOTIFY=y
 CONFIG_INOTIFY_USER=y
 # CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
 # CONFIG_AUTOFS_FS is not set
 CONFIG_AUTOFS4_FS=y
 # CONFIG_FUSE_FS is not set
@@ -759,16 +824,13 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
 CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
 CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
+CONFIG_MISC_FILESYSTEMS=y
 # CONFIG_ADFS_FS is not set
 # CONFIG_AFFS_FS is not set
 # CONFIG_ECRYPT_FS is not set
@@ -778,35 +840,34 @@ CONFIG_RAMFS=y
 # CONFIG_BFS_FS is not set
 # CONFIG_EFS_FS is not set
 # CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
 # CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
 # CONFIG_HPFS_FS is not set
 # CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
 # CONFIG_SYSV_FS is not set
 CONFIG_UFS_FS=m
 # CONFIG_UFS_FS_WRITE is not set
 # CONFIG_UFS_DEBUG is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
 CONFIG_NFS_V4=y
-CONFIG_NFS_DIRECTIO=y
+CONFIG_ROOT_NFS=y
 CONFIG_NFSD=m
 CONFIG_NFSD_V3=y
 # CONFIG_NFSD_V3_ACL is not set
 CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
-CONFIG_ROOT_NFS=y
 CONFIG_LOCKD=y
 CONFIG_LOCKD_V4=y
 CONFIG_EXPORTFS=m
 CONFIG_NFS_COMMON=y
 CONFIG_SUNRPC=y
 CONFIG_SUNRPC_GSS=y
-# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_SUNRPC_REGISTER_V4 is not set
 CONFIG_RPCSEC_GSS_KRB5=y
 CONFIG_RPCSEC_GSS_SPKM3=m
 CONFIG_SMB_FS=m
@@ -815,6 +876,7 @@ CONFIG_SMB_NLS_REMOTE="cp437"
 CONFIG_CIFS=m
 # CONFIG_CIFS_STATS is not set
 # CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_UPCALL is not set
 # CONFIG_CIFS_XATTR is not set
 # CONFIG_CIFS_DEBUG2 is not set
 # CONFIG_CIFS_EXPERIMENTAL is not set
@@ -827,10 +889,6 @@ CONFIG_CIFS=m
 #
 # CONFIG_PARTITION_ADVANCED is not set
 CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
 CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 CONFIG_NLS_CODEPAGE_437=m
@@ -871,33 +929,28 @@ CONFIG_NLS_ISO8859_15=m
 CONFIG_NLS_KOI8_R=m
 CONFIG_NLS_KOI8_U=m
 CONFIG_NLS_UTF8=m
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 
 #
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
 # Kernel hacking
 #
 # CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
 CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
 CONFIG_MAGIC_SYSRQ=y
 # CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
+CONFIG_DEBUG_FS=y
 # CONFIG_HEADERS_CHECK is not set
 CONFIG_DEBUG_KERNEL=y
 # CONFIG_DEBUG_SHIRQ is not set
 CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
 CONFIG_SCHED_DEBUG=y
 # CONFIG_SCHEDSTATS is not set
 # CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS is not set
 # CONFIG_DEBUG_SLAB is not set
 # CONFIG_DEBUG_RT_MUTEXES is not set
 # CONFIG_RT_MUTEX_TESTER is not set
@@ -909,10 +962,32 @@ CONFIG_DEBUG_MUTEXES=y
 CONFIG_DEBUG_BUGVERBOSE=y
 # CONFIG_DEBUG_INFO is not set
 # CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+CONFIG_DEBUG_MEMORY_INIT=y
 # CONFIG_DEBUG_LIST is not set
-CONFIG_FORCED_INLINING=y
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
 # CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
 # CONFIG_FAULT_INJECTION is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_NOP_TRACER=y
+CONFIG_RING_BUFFER=y
+CONFIG_TRACING=y
+
+#
+# Tracers
+#
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
+# CONFIG_BOOT_TRACER is not set
+# CONFIG_TRACE_BRANCH_PROFILING is not set
+# CONFIG_FTRACE_STARTUP_TEST is not set
+# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
+# CONFIG_SAMPLES is not set
 CONFIG_DEBUG_RODATA=y
 
 #
@@ -921,57 +996,113 @@ CONFIG_DEBUG_RODATA=y
 CONFIG_KEYS=y
 CONFIG_KEYS_DEBUG_PROC_KEYS=y
 # CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
 CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+# CONFIG_CRYPTO_FIPS is not set
 CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD=m
+CONFIG_CRYPTO_AEAD2=y
 CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
 CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG2=y
 CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_NULL=m
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_AUTHENC=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
 CONFIG_CRYPTO_HMAC=y
 # CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=m
 CONFIG_CRYPTO_MD4=m
 CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=m
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
 CONFIG_CRYPTO_SHA1=m
 CONFIG_CRYPTO_SHA256=m
 CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
 CONFIG_CRYPTO_TGR192=m
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=y
-# CONFIG_CRYPTO_PCBC is not set
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_XTS is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-CONFIG_CRYPTO_DES=y
-# CONFIG_CRYPTO_FCRYPT is not set
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_WP512=m
+
+#
+# Ciphers
+#
 CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_BLOWFISH=m
+# CONFIG_CRYPTO_CAMELLIA is not set
 CONFIG_CRYPTO_CAST5=m
 CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
 CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
+# CONFIG_CRYPTO_SALSA20 is not set
 # CONFIG_CRYPTO_SEED is not set
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+
+#
+# Compression
+#
 CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-# CONFIG_CRYPTO_CAMELLIA is not set
-CONFIG_CRYPTO_TEST=m
-# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_LZO is not set
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
 # CONFIG_CRYPTO_HW is not set
 
 #
 # Library routines
 #
 CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
 CONFIG_CRC_CCITT=m
 # CONFIG_CRC16 is not set
-# CONFIG_CRC_ITU_T is not set
+# CONFIG_CRC_T10DIF is not set
+CONFIG_CRC_ITU_T=m
 CONFIG_CRC32=y
 # CONFIG_CRC7 is not set
 CONFIG_LIBCRC32C=m
index ddacc72..f12e4b8 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23
-# Fri Oct 12 21:12:44 2007
+# Linux kernel version: 2.6.29-rc8
+# Fri Mar 13 01:32:56 2009
 #
 CONFIG_PARISC=y
 CONFIG_MMU=y
@@ -34,18 +34,30 @@ CONFIG_SYSVIPC_SYSCTL=y
 CONFIG_POSIX_MQUEUE=y
 # CONFIG_BSD_PROCESS_ACCT is not set
 # CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
 # CONFIG_AUDIT is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_CLASSIC_RCU=y
+# CONFIG_TREE_RCU is not set
+# CONFIG_PREEMPT_RCU is not set
+# CONFIG_TREE_RCU_TRACE is not set
+# CONFIG_PREEMPT_RCU_TRACE is not set
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_LOG_BUF_SHIFT=16
-# CONFIG_CPUSETS is not set
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
 CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
 # CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
 CONFIG_BLK_DEV_INITRD=y
 CONFIG_INITRAMFS_SOURCE=""
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
 CONFIG_EMBEDDED=y
 CONFIG_SYSCTL_SYSCALL=y
 CONFIG_KALLSYMS=y
@@ -57,28 +69,40 @@ CONFIG_BUG=y
 CONFIG_ELF_CORE=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
 CONFIG_EPOLL=y
 CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
 CONFIG_EVENTFD=y
 CONFIG_SHMEM=y
+CONFIG_AIO=y
 CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_PCI_QUIRKS=y
+CONFIG_COMPAT_BRK=y
 CONFIG_SLAB=y
 # CONFIG_SLUB is not set
 # CONFIG_SLOB is not set
+CONFIG_PROFILING=y
+CONFIG_TRACEPOINTS=y
+# CONFIG_MARKERS is not set
+CONFIG_OPROFILE=m
+CONFIG_HAVE_OPROFILE=y
+CONFIG_USE_GENERIC_SMP_HELPERS=y
+# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
+CONFIG_SLABINFO=y
 CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
 CONFIG_BASE_SMALL=0
 CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
 CONFIG_MODULE_UNLOAD=y
 CONFIG_MODULE_FORCE_UNLOAD=y
 # CONFIG_MODVERSIONS is not set
 # CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
+CONFIG_INIT_ALL_POSSIBLE=y
 CONFIG_STOP_MACHINE=y
 CONFIG_BLOCK=y
 # CONFIG_BLK_DEV_IO_TRACE is not set
 # CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
 CONFIG_BLOCK_COMPAT=y
 
 #
@@ -93,6 +117,7 @@ CONFIG_IOSCHED_CFQ=y
 CONFIG_DEFAULT_CFQ=y
 # CONFIG_DEFAULT_NOOP is not set
 CONFIG_DEFAULT_IOSCHED="cfq"
+# CONFIG_FREEZER is not set
 
 #
 # Processor type and features
@@ -118,12 +143,12 @@ CONFIG_NODES_SHIFT=3
 CONFIG_PREEMPT_NONE=y
 # CONFIG_PREEMPT_VOLUNTARY is not set
 # CONFIG_PREEMPT is not set
-CONFIG_PREEMPT_BKL=y
 # CONFIG_HZ_100 is not set
 CONFIG_HZ_250=y
 # CONFIG_HZ_300 is not set
 # CONFIG_HZ_1000 is not set
 CONFIG_HZ=250
+# CONFIG_SCHED_HRTICK is not set
 CONFIG_SELECT_MEMORY_MODEL=y
 # CONFIG_FLATMEM_MANUAL is not set
 CONFIG_DISCONTIGMEM_MANUAL=y
@@ -131,11 +156,12 @@ CONFIG_DISCONTIGMEM_MANUAL=y
 CONFIG_DISCONTIGMEM=y
 CONFIG_FLAT_NODE_MEM_MAP=y
 CONFIG_NEED_MULTIPLE_NODES=y
-# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_PAGEFLAGS_EXTENDED=y
 CONFIG_SPLIT_PTLOCK_CPUS=4
-CONFIG_RESOURCES_64BIT=y
+CONFIG_PHYS_ADDR_T_64BIT=y
 CONFIG_ZONE_DMA_FLAG=0
 CONFIG_VIRT_TO_BUS=y
+CONFIG_UNEVICTABLE_LRU=y
 CONFIG_COMPAT=y
 CONFIG_NR_CPUS=8
 
@@ -145,14 +171,13 @@ CONFIG_NR_CPUS=8
 # CONFIG_GSC is not set
 CONFIG_PCI=y
 # CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_PCI_LEGACY=y
 # CONFIG_PCI_DEBUG is not set
+# CONFIG_PCI_STUB is not set
 CONFIG_PCI_LBA=y
 CONFIG_IOSAPIC=y
 CONFIG_IOMMU_SBA=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
+CONFIG_IOMMU_HELPER=y
 CONFIG_PCCARD=m
 # CONFIG_PCMCIA_DEBUG is not set
 CONFIG_PCMCIA=m
@@ -187,16 +212,15 @@ CONFIG_PDC_STABLE=y
 # Executable file formats
 #
 CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+# CONFIG_HAVE_AOUT is not set
 # CONFIG_BINFMT_MISC is not set
-
-#
-# Networking
-#
 CONFIG_NET=y
 
 #
 # Networking options
 #
+CONFIG_COMPAT_NET_DEV_OPS=y
 CONFIG_PACKET=y
 CONFIG_PACKET_MMAP=y
 CONFIG_UNIX=y
@@ -204,6 +228,8 @@ CONFIG_XFRM=y
 CONFIG_XFRM_USER=m
 # CONFIG_XFRM_SUB_POLICY is not set
 # CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_XFRM_IPCOMP=m
 CONFIG_NET_KEY=m
 # CONFIG_NET_KEY_MIGRATE is not set
 CONFIG_INET=y
@@ -234,7 +260,6 @@ CONFIG_INET_TCP_DIAG=y
 CONFIG_TCP_CONG_CUBIC=y
 CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_TCP_MD5SIG is not set
-# CONFIG_IP_VS is not set
 CONFIG_IPV6=m
 # CONFIG_IPV6_PRIVACY is not set
 # CONFIG_IPV6_ROUTER_PREF is not set
@@ -250,66 +275,72 @@ CONFIG_INET6_XFRM_MODE_TUNNEL=m
 CONFIG_INET6_XFRM_MODE_BEET=m
 # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
 CONFIG_IPV6_SIT=m
+CONFIG_IPV6_NDISC_NODETYPE=y
 CONFIG_IPV6_TUNNEL=m
 # CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_IPV6_MROUTE is not set
 # CONFIG_NETWORK_SECMARK is not set
 CONFIG_NETFILTER=y
 # CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
 
 #
 # Core Netfilter Configuration
 #
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
+# CONFIG_NETFILTER_NETLINK_LOG is not set
 # CONFIG_NF_CONNTRACK is not set
 CONFIG_NETFILTER_XTABLES=m
 # CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
 # CONFIG_NETFILTER_XT_TARGET_DSCP is not set
 # CONFIG_NETFILTER_XT_TARGET_MARK is not set
-# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
 # CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
 # CONFIG_NETFILTER_XT_TARGET_TRACE is not set
 # CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
 # CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
 # CONFIG_NETFILTER_XT_MATCH_DCCP is not set
 # CONFIG_NETFILTER_XT_MATCH_DSCP is not set
 # CONFIG_NETFILTER_XT_MATCH_ESP is not set
+# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
+# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
 # CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
 # CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
 # CONFIG_NETFILTER_XT_MATCH_MAC is not set
 # CONFIG_NETFILTER_XT_MATCH_MARK is not set
-# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
 # CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
 # CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
 # CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
 # CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
 # CONFIG_NETFILTER_XT_MATCH_SCTP is not set
 # CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
 # CONFIG_NETFILTER_XT_MATCH_STRING is not set
 # CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
 # CONFIG_NETFILTER_XT_MATCH_TIME is not set
 # CONFIG_NETFILTER_XT_MATCH_U32 is not set
-# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
+# CONFIG_IP_VS is not set
 
 #
 # IP: Netfilter Configuration
 #
+# CONFIG_NF_DEFRAG_IPV4 is not set
 CONFIG_IP_NF_QUEUE=m
 CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_IPRANGE=m
-CONFIG_IP_NF_MATCH_TOS=m
-CONFIG_IP_NF_MATCH_RECENT=m
-CONFIG_IP_NF_MATCH_ECN=m
+# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
 # CONFIG_IP_NF_MATCH_AH is not set
+CONFIG_IP_NF_MATCH_ECN=m
 CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_OWNER=m
-# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
 CONFIG_IP_NF_FILTER=m
 CONFIG_IP_NF_TARGET_REJECT=m
 CONFIG_IP_NF_TARGET_LOG=m
 CONFIG_IP_NF_TARGET_ULOG=m
 CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
 CONFIG_IP_NF_TARGET_ECN=m
 # CONFIG_IP_NF_TARGET_TTL is not set
 CONFIG_IP_NF_RAW=m
@@ -318,33 +349,30 @@ CONFIG_IP_NF_ARPFILTER=m
 CONFIG_IP_NF_ARP_MANGLE=m
 
 #
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
+# IPv6: Netfilter Configuration
 #
 # CONFIG_IP6_NF_QUEUE is not set
 CONFIG_IP6_NF_IPTABLES=m
-CONFIG_IP6_NF_MATCH_RT=m
-CONFIG_IP6_NF_MATCH_OPTS=m
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
 CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_OPTS=m
 CONFIG_IP6_NF_MATCH_HL=m
-# CONFIG_IP6_NF_MATCH_OWNER is not set
 CONFIG_IP6_NF_MATCH_IPV6HEADER=m
-# CONFIG_IP6_NF_MATCH_AH is not set
 # CONFIG_IP6_NF_MATCH_MH is not set
-# CONFIG_IP6_NF_MATCH_EUI64 is not set
-CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_MATCH_RT=m
 CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_FILTER=m
 CONFIG_IP6_NF_TARGET_REJECT=m
 CONFIG_IP6_NF_MANGLE=m
 # CONFIG_IP6_NF_TARGET_HL is not set
 CONFIG_IP6_NF_RAW=m
 CONFIG_IP_DCCP=m
 CONFIG_INET_DCCP_DIAG=m
-CONFIG_IP_DCCP_ACKVEC=y
 
 #
 # DCCP CCIDs Configuration (EXPERIMENTAL)
 #
-CONFIG_IP_DCCP_CCID2=m
 # CONFIG_IP_DCCP_CCID2_DEBUG is not set
 # CONFIG_IP_DCCP_CCID3 is not set
 
@@ -356,6 +384,7 @@ CONFIG_IP_DCCP_CCID2=m
 # CONFIG_TIPC is not set
 # CONFIG_ATM is not set
 # CONFIG_BRIDGE is not set
+# CONFIG_NET_DSA is not set
 # CONFIG_VLAN_8021Q is not set
 # CONFIG_DECNET is not set
 CONFIG_LLC=m
@@ -366,28 +395,26 @@ CONFIG_LLC2=m
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
 
 #
 # Network testing
 #
 CONFIG_NET_PKTGEN=m
 # CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
 # CONFIG_IRDA is not set
 # CONFIG_BT is not set
 # CONFIG_AF_RXRPC is not set
-
-#
-# Wireless
-#
+# CONFIG_PHONET is not set
+CONFIG_WIRELESS=y
 # CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_OLD_REGULATORY=y
 # CONFIG_WIRELESS_EXT is not set
+# CONFIG_LIB80211 is not set
 # CONFIG_MAC80211 is not set
-# CONFIG_IEEE80211 is not set
+# CONFIG_WIMAX is not set
 # CONFIG_RFKILL is not set
 # CONFIG_NET_9P is not set
 
@@ -402,6 +429,8 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 # CONFIG_STANDALONE is not set
 # CONFIG_PREVENT_FIRMWARE_BUILD is not set
 CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
 # CONFIG_DEBUG_DRIVER is not set
 # CONFIG_DEBUG_DEVRES is not set
 # CONFIG_SYS_HYPERVISOR is not set
@@ -421,14 +450,23 @@ CONFIG_BLK_DEV_LOOP=y
 CONFIG_BLK_DEV_RAM=y
 CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_BLK_DEV_RAM_SIZE=6144
-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_BLK_DEV_XIP is not set
 # CONFIG_CDROM_PKTCDVD is not set
 # CONFIG_ATA_OVER_ETH is not set
+# CONFIG_BLK_DEV_HD is not set
 CONFIG_MISC_DEVICES=y
 # CONFIG_PHANTOM is not set
-# CONFIG_EEPROM_93CX6 is not set
 # CONFIG_SGI_IOC4 is not set
 # CONFIG_TIFM_CORE is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_HP_ILO is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_HAVE_IDE=y
 # CONFIG_IDE is not set
 
 #
@@ -468,8 +506,10 @@ CONFIG_SCSI_SPI_ATTRS=y
 CONFIG_SCSI_FC_ATTRS=m
 CONFIG_SCSI_ISCSI_ATTRS=m
 # CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
 CONFIG_SCSI_LOWLEVEL=y
 # CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_CXGB3_ISCSI is not set
 # CONFIG_BLK_DEV_3W_XXXX_RAID is not set
 # CONFIG_SCSI_3W_9XXX is not set
 # CONFIG_SCSI_ACARD is not set
@@ -478,16 +518,21 @@ CONFIG_SCSI_LOWLEVEL=y
 # CONFIG_SCSI_AIC7XXX_OLD is not set
 # CONFIG_SCSI_AIC79XX is not set
 # CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ADVANSYS is not set
 # CONFIG_SCSI_ARCMSR is not set
 # CONFIG_MEGARAID_NEWGEN is not set
 # CONFIG_MEGARAID_LEGACY is not set
 # CONFIG_MEGARAID_SAS is not set
 # CONFIG_SCSI_HPTIOP is not set
+# CONFIG_LIBFC is not set
+# CONFIG_FCOE is not set
 # CONFIG_SCSI_DMX3191D is not set
 # CONFIG_SCSI_FUTURE_DOMAIN is not set
 # CONFIG_SCSI_IPS is not set
 # CONFIG_SCSI_INITIO is not set
 # CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_MVSAS is not set
 # CONFIG_SCSI_STEX is not set
 CONFIG_SCSI_SYM53C8XX_2=y
 CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
@@ -503,9 +548,11 @@ CONFIG_SCSI_QLOGIC_1280=m
 CONFIG_SCSI_DEBUG=m
 # CONFIG_SCSI_SRP is not set
 # CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
+# CONFIG_SCSI_DH is not set
 # CONFIG_ATA is not set
 CONFIG_MD=y
 CONFIG_BLK_DEV_MD=y
+CONFIG_MD_AUTODETECT=y
 CONFIG_MD_LINEAR=y
 CONFIG_MD_RAID0=y
 CONFIG_MD_RAID1=y
@@ -514,10 +561,6 @@ CONFIG_MD_RAID1=y
 # CONFIG_MD_MULTIPATH is not set
 # CONFIG_MD_FAULTY is not set
 # CONFIG_BLK_DEV_DM is not set
-
-#
-# Fusion MPT device support
-#
 CONFIG_FUSION=y
 CONFIG_FUSION_SPI=m
 CONFIG_FUSION_FC=m
@@ -529,20 +572,40 @@ CONFIG_FUSION_CTL=m
 #
 # IEEE 1394 (FireWire) support
 #
+
+#
+# Enable only one of the two stacks, unless you know what you are doing
+#
 # CONFIG_FIREWIRE is not set
 # CONFIG_IEEE1394 is not set
 # CONFIG_I2O is not set
 CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
 CONFIG_DUMMY=m
 CONFIG_BONDING=m
 # CONFIG_MACVLAN is not set
 # CONFIG_EQUALIZER is not set
 CONFIG_TUN=m
 # CONFIG_VETH is not set
-# CONFIG_IP1000 is not set
 # CONFIG_ARCNET is not set
-# CONFIG_PHYLIB is not set
+CONFIG_PHYLIB=m
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_NATIONAL_PHY is not set
+# CONFIG_STE10XP is not set
+# CONFIG_LSI_ET1011C_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
 CONFIG_NET_ETHERNET=y
 CONFIG_MII=m
 # CONFIG_HAPPYMEAL is not set
@@ -567,33 +630,38 @@ CONFIG_HP100=m
 # CONFIG_IBM_NEW_EMAC_RGMII is not set
 # CONFIG_IBM_NEW_EMAC_TAH is not set
 # CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
 CONFIG_NET_PCI=y
 CONFIG_PCNET32=m
-# CONFIG_PCNET32_NAPI is not set
 # CONFIG_AMD8111_ETH is not set
 # CONFIG_ADAPTEC_STARFIRE is not set
 # CONFIG_B44 is not set
 # CONFIG_FORCEDETH is not set
-# CONFIG_EEPRO100 is not set
 CONFIG_E100=m
 # CONFIG_FEALNX is not set
 # CONFIG_NATSEMI is not set
 # CONFIG_NE2K_PCI is not set
 # CONFIG_8139CP is not set
 # CONFIG_8139TOO is not set
+# CONFIG_R6040 is not set
 # CONFIG_SIS900 is not set
 # CONFIG_EPIC100 is not set
+# CONFIG_SMSC9420 is not set
 # CONFIG_SUNDANCE is not set
+# CONFIG_TLAN is not set
 # CONFIG_VIA_RHINE is not set
 # CONFIG_SC92031 is not set
+# CONFIG_ATL2 is not set
 CONFIG_NETDEV_1000=y
 CONFIG_ACENIC=m
 CONFIG_ACENIC_OMIT_TIGON_I=y
 # CONFIG_DL2K is not set
 CONFIG_E1000=m
-CONFIG_E1000_NAPI=y
-# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
 # CONFIG_E1000E is not set
+# CONFIG_IP1000 is not set
+# CONFIG_IGB is not set
 # CONFIG_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -601,23 +669,31 @@ CONFIG_E1000_NAPI=y
 # CONFIG_SIS190 is not set
 # CONFIG_SKGE is not set
 # CONFIG_SKY2 is not set
-# CONFIG_SK98LIN is not set
 # CONFIG_VIA_VELOCITY is not set
 CONFIG_TIGON3=m
 # CONFIG_BNX2 is not set
 # CONFIG_QLA3XXX is not set
 # CONFIG_ATL1 is not set
+# CONFIG_ATL1E is not set
+# CONFIG_ATL1C is not set
+# CONFIG_JME is not set
 CONFIG_NETDEV_10000=y
 # CONFIG_CHELSIO_T1 is not set
+CONFIG_CHELSIO_T3_DEPENDS=y
 # CONFIG_CHELSIO_T3 is not set
+# CONFIG_ENIC is not set
 # CONFIG_IXGBE is not set
 # CONFIG_IXGB is not set
 # CONFIG_S2IO is not set
 # CONFIG_MYRI10GE is not set
 # CONFIG_NETXEN_NIC is not set
 # CONFIG_NIU is not set
+# CONFIG_MLX4_EN is not set
 # CONFIG_MLX4_CORE is not set
 # CONFIG_TEHUTI is not set
+# CONFIG_BNX2X is not set
+# CONFIG_QLGE is not set
+# CONFIG_SFC is not set
 # CONFIG_TR is not set
 
 #
@@ -625,6 +701,11 @@ CONFIG_NETDEV_10000=y
 #
 # CONFIG_WLAN_PRE80211 is not set
 # CONFIG_WLAN_80211 is not set
+# CONFIG_IWLWIFI_LEDS is not set
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
 CONFIG_NET_PCMCIA=y
 CONFIG_PCMCIA_3C589=m
 CONFIG_PCMCIA_3C574=m
@@ -650,7 +731,6 @@ CONFIG_PPP_BSDCOMP=m
 # CONFIG_SLIP is not set
 CONFIG_SLHC=m
 # CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
 # CONFIG_NETCONSOLE is not set
 # CONFIG_NETPOLL is not set
 # CONFIG_NET_POLL_CONTROLLER is not set
@@ -669,7 +749,6 @@ CONFIG_INPUT=y
 #
 # CONFIG_INPUT_MOUSEDEV is not set
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -693,10 +772,13 @@ CONFIG_INPUT=y
 # Character devices
 #
 CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
 CONFIG_VT_CONSOLE=y
 CONFIG_HW_CONSOLE=y
 # CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
 # CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_NOZOMI is not set
 
 #
 # Serial drivers
@@ -721,17 +803,12 @@ CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
 # CONFIG_SERIAL_JSM is not set
 CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
 # CONFIG_LEGACY_PTYS is not set
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 # CONFIG_HW_RANDOM is not set
-CONFIG_GEN_RTC=y
-CONFIG_GEN_RTC_X=y
 # CONFIG_R3964 is not set
 # CONFIG_APPLICOM is not set
-CONFIG_AGP=y
-CONFIG_AGP_PARISC=y
-# CONFIG_DRM is not set
 
 #
 # PCMCIA character devices
@@ -739,51 +816,66 @@ CONFIG_AGP_PARISC=y
 # CONFIG_SYNCLINK_CS is not set
 # CONFIG_CARDMAN_4000 is not set
 # CONFIG_CARDMAN_4040 is not set
+# CONFIG_IPWIRELESS is not set
 CONFIG_RAW_DRIVER=y
 CONFIG_MAX_RAW_DEVS=256
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
 # CONFIG_I2C is not set
-
-#
-# SPI support
-#
 # CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
 # CONFIG_W1 is not set
 # CONFIG_POWER_SUPPLY is not set
 # CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+# CONFIG_THERMAL_HWMON is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
 
 #
 # Sonics Silicon Backplane
 #
-CONFIG_SSB_POSSIBLE=y
 # CONFIG_SSB is not set
 
 #
 # Multifunction device drivers
 #
+# CONFIG_MFD_CORE is not set
 # CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_REGULATOR is not set
 
 #
 # Multimedia devices
 #
+
+#
+# Multimedia core support
+#
 # CONFIG_VIDEO_DEV is not set
 # CONFIG_DVB_CORE is not set
+# CONFIG_VIDEO_MEDIA is not set
+
+#
+# Multimedia drivers
+#
 # CONFIG_DAB is not set
 
 #
 # Graphics support
 #
+CONFIG_AGP=y
+CONFIG_AGP_PARISC=y
+# CONFIG_DRM is not set
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+# CONFIG_FB is not set
 # CONFIG_BACKLIGHT_LCD_SUPPORT is not set
 
 #
 # Display device support
 #
 # CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-# CONFIG_FB is not set
 
 #
 # Console display driver support
@@ -792,50 +884,83 @@ CONFIG_DUMMY_CONSOLE=y
 CONFIG_DUMMY_CONSOLE_COLUMNS=160
 CONFIG_DUMMY_CONSOLE_ROWS=64
 # CONFIG_STI_CONSOLE is not set
-
-#
-# Sound
-#
 # CONFIG_SOUND is not set
 CONFIG_HID_SUPPORT=y
 CONFIG_HID=y
 # CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+# CONFIG_HID_PID is not set
+
+#
+# Special HID drivers
+#
+CONFIG_HID_COMPAT=y
 CONFIG_USB_SUPPORT=y
 CONFIG_USB_ARCH_HAS_HCD=y
 CONFIG_USB_ARCH_HAS_OHCI=y
 CONFIG_USB_ARCH_HAS_EHCI=y
 # CONFIG_USB is not set
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+# Enable Host or Gadget support to see Inventra options
 #
 
 #
-# USB Gadget Support
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
 #
 # CONFIG_USB_GADGET is not set
+
+#
+# OTG and related infrastructure
+#
+# CONFIG_UWB is not set
 # CONFIG_MMC is not set
+# CONFIG_MEMSTICK is not set
 # CONFIG_NEW_LEDS is not set
+# CONFIG_ACCESSIBILITY is not set
 # CONFIG_INFINIBAND is not set
-# CONFIG_RTC_CLASS is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
 
 #
-# DMA Engine support
+# RTC interfaces
 #
-# CONFIG_DMA_ENGINE is not set
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
 
 #
-# DMA Clients
+# SPI RTC drivers
 #
 
 #
-# DMA Devices
-#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
 
 #
-# Userspace I/O
+# on-CPU RTC drivers
 #
+CONFIG_RTC_DRV_PARISC=y
+# CONFIG_DMADEVICES is not set
 # CONFIG_UIO is not set
+# CONFIG_STAGING is not set
 
 #
 # File systems
@@ -845,7 +970,7 @@ CONFIG_EXT2_FS=y
 # CONFIG_EXT2_FS_XIP is not set
 CONFIG_EXT3_FS=y
 # CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4DEV_FS is not set
+# CONFIG_EXT4_FS is not set
 CONFIG_JBD=y
 # CONFIG_JBD_DEBUG is not set
 # CONFIG_REISERFS_FS is not set
@@ -855,19 +980,19 @@ CONFIG_JFS_FS=m
 # CONFIG_JFS_DEBUG is not set
 # CONFIG_JFS_STATISTICS is not set
 CONFIG_FS_POSIX_ACL=y
+CONFIG_FILE_LOCKING=y
 CONFIG_XFS_FS=m
 # CONFIG_XFS_QUOTA is not set
-# CONFIG_XFS_SECURITY is not set
 # CONFIG_XFS_POSIX_ACL is not set
 # CONFIG_XFS_RT is not set
+# CONFIG_XFS_DEBUG is not set
 # CONFIG_GFS2_FS is not set
 # CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
+# CONFIG_BTRFS_FS is not set
+CONFIG_DNOTIFY=y
 CONFIG_INOTIFY=y
 CONFIG_INOTIFY_USER=y
 # CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
 # CONFIG_AUTOFS_FS is not set
 CONFIG_AUTOFS4_FS=y
 # CONFIG_FUSE_FS is not set
@@ -897,16 +1022,13 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
 CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
 CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
+CONFIG_MISC_FILESYSTEMS=y
 # CONFIG_ADFS_FS is not set
 # CONFIG_AFFS_FS is not set
 # CONFIG_ECRYPT_FS is not set
@@ -916,34 +1038,33 @@ CONFIG_RAMFS=y
 # CONFIG_BFS_FS is not set
 # CONFIG_EFS_FS is not set
 # CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
 # CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
 # CONFIG_HPFS_FS is not set
 # CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
 # CONFIG_SYSV_FS is not set
 CONFIG_UFS_FS=m
 # CONFIG_UFS_FS_WRITE is not set
 # CONFIG_UFS_DEBUG is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=m
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
 CONFIG_NFS_V4=y
-CONFIG_NFS_DIRECTIO=y
 CONFIG_NFSD=m
 CONFIG_NFSD_V3=y
 # CONFIG_NFSD_V3_ACL is not set
 CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
 CONFIG_LOCKD=m
 CONFIG_LOCKD_V4=y
 CONFIG_EXPORTFS=m
 CONFIG_NFS_COMMON=y
 CONFIG_SUNRPC=m
 CONFIG_SUNRPC_GSS=m
-# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_SUNRPC_REGISTER_V4 is not set
 CONFIG_RPCSEC_GSS_KRB5=m
 CONFIG_RPCSEC_GSS_SPKM3=m
 CONFIG_SMB_FS=m
@@ -952,6 +1073,7 @@ CONFIG_SMB_NLS_REMOTE="cp437"
 CONFIG_CIFS=m
 # CONFIG_CIFS_STATS is not set
 # CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_UPCALL is not set
 # CONFIG_CIFS_XATTR is not set
 # CONFIG_CIFS_DEBUG2 is not set
 # CONFIG_CIFS_EXPERIMENTAL is not set
@@ -964,10 +1086,6 @@ CONFIG_CIFS=m
 #
 # CONFIG_PARTITION_ADVANCED is not set
 CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
 CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 CONFIG_NLS_CODEPAGE_437=m
@@ -1008,33 +1126,28 @@ CONFIG_NLS_ISO8859_15=m
 # CONFIG_NLS_KOI8_R is not set
 # CONFIG_NLS_KOI8_U is not set
 CONFIG_NLS_UTF8=m
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 
 #
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
 # Kernel hacking
 #
 # CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
 CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=2048
 CONFIG_MAGIC_SYSRQ=y
 # CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
+CONFIG_DEBUG_FS=y
 CONFIG_HEADERS_CHECK=y
 CONFIG_DEBUG_KERNEL=y
 # CONFIG_DEBUG_SHIRQ is not set
 CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
 CONFIG_SCHED_DEBUG=y
 # CONFIG_SCHEDSTATS is not set
 # CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS is not set
 # CONFIG_DEBUG_SLAB is not set
 # CONFIG_DEBUG_RT_MUTEXES is not set
 # CONFIG_RT_MUTEX_TESTER is not set
@@ -1046,10 +1159,33 @@ CONFIG_SCHED_DEBUG=y
 # CONFIG_DEBUG_BUGVERBOSE is not set
 # CONFIG_DEBUG_INFO is not set
 # CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
 # CONFIG_DEBUG_LIST is not set
-CONFIG_FORCED_INLINING=y
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
 # CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
 # CONFIG_FAULT_INJECTION is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_NOP_TRACER=y
+CONFIG_RING_BUFFER=y
+CONFIG_TRACING=y
+
+#
+# Tracers
+#
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
+# CONFIG_BOOT_TRACER is not set
+# CONFIG_TRACE_BRANCH_PROFILING is not set
+# CONFIG_FTRACE_STARTUP_TEST is not set
+# CONFIG_BUILD_DOCSRC is not set
+# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
+# CONFIG_SAMPLES is not set
 # CONFIG_DEBUG_RODATA is not set
 
 #
@@ -1058,56 +1194,112 @@ CONFIG_FORCED_INLINING=y
 CONFIG_KEYS=y
 CONFIG_KEYS_DEBUG_PROC_KEYS=y
 # CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
 CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+# CONFIG_CRYPTO_FIPS is not set
 CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD=m
+CONFIG_CRYPTO_AEAD2=y
 CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_BLKCIPHER2=y
 CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG2=y
 CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_NULL=m
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_AUTHENC=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=m
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+# CONFIG_CRYPTO_ECB is not set
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
 CONFIG_CRYPTO_HMAC=y
 # CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=m
 # CONFIG_CRYPTO_MD4 is not set
 CONFIG_CRYPTO_MD5=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
 CONFIG_CRYPTO_SHA1=m
 # CONFIG_CRYPTO_SHA256 is not set
 # CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
 # CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-# CONFIG_CRYPTO_ECB is not set
-CONFIG_CRYPTO_CBC=m
-# CONFIG_CRYPTO_PCBC is not set
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_XTS is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-CONFIG_CRYPTO_DES=m
-# CONFIG_CRYPTO_FCRYPT is not set
-CONFIG_CRYPTO_BLOWFISH=m
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
 # CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_ARC4 is not set
+CONFIG_CRYPTO_BLOWFISH=m
+# CONFIG_CRYPTO_CAMELLIA is not set
 CONFIG_CRYPTO_CAST5=m
 # CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_ARC4 is not set
+CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_FCRYPT is not set
 # CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_SALSA20 is not set
 # CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
 CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-CONFIG_CRYPTO_CRC32C=m
-# CONFIG_CRYPTO_CAMELLIA is not set
-CONFIG_CRYPTO_TEST=m
-# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_LZO is not set
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
 # CONFIG_CRYPTO_HW is not set
 
 #
 # Library routines
 #
 CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
 CONFIG_CRC_CCITT=m
 # CONFIG_CRC16 is not set
-# CONFIG_CRC_ITU_T is not set
+# CONFIG_CRC_T10DIF is not set
+CONFIG_CRC_ITU_T=m
 CONFIG_CRC32=y
 # CONFIG_CRC7 is not set
 CONFIG_LIBCRC32C=m
index 1bf22c9..98bb05e 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23
-# Fri Oct 12 21:16:46 2007
+# Linux kernel version: 2.6.29-rc8
+# Fri Mar 13 01:32:57 2009
 #
 CONFIG_PARISC=y
 CONFIG_MMU=y
@@ -33,13 +33,29 @@ CONFIG_SYSVIPC_SYSCTL=y
 # CONFIG_BSD_PROCESS_ACCT is not set
 # CONFIG_TASKSTATS is not set
 # CONFIG_AUDIT is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_CLASSIC_RCU=y
+# CONFIG_TREE_RCU is not set
+# CONFIG_PREEMPT_RCU is not set
+# CONFIG_TREE_RCU_TRACE is not set
+# CONFIG_PREEMPT_RCU_TRACE is not set
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_LOG_BUF_SHIFT=16
+# CONFIG_CGROUPS is not set
 CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
 # CONFIG_RELAY is not set
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+# CONFIG_IPC_NS is not set
 # CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
 CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
 # CONFIG_EMBEDDED is not set
 CONFIG_SYSCTL_SYSCALL=y
 CONFIG_KALLSYMS=y
@@ -51,27 +67,34 @@ CONFIG_BUG=y
 CONFIG_ELF_CORE=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
 CONFIG_EPOLL=y
 CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
 CONFIG_EVENTFD=y
 CONFIG_SHMEM=y
+CONFIG_AIO=y
 CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_PCI_QUIRKS=y
+CONFIG_COMPAT_BRK=y
 CONFIG_SLAB=y
 # CONFIG_SLUB is not set
 # CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
+CONFIG_SLABINFO=y
 CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
 CONFIG_BASE_SMALL=0
 CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
 # CONFIG_MODULE_UNLOAD is not set
 CONFIG_MODVERSIONS=y
 # CONFIG_MODULE_SRCVERSION_ALL is not set
-# CONFIG_KMOD is not set
+CONFIG_INIT_ALL_POSSIBLE=y
 CONFIG_BLOCK=y
 # CONFIG_LBD is not set
 # CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
 
 #
 # IO Schedulers
@@ -85,6 +108,7 @@ CONFIG_IOSCHED_CFQ=y
 CONFIG_DEFAULT_CFQ=y
 # CONFIG_DEFAULT_NOOP is not set
 CONFIG_DEFAULT_IOSCHED="cfq"
+# CONFIG_FREEZER is not set
 
 #
 # Processor type and features
@@ -108,13 +132,15 @@ CONFIG_HZ_250=y
 # CONFIG_HZ_300 is not set
 # CONFIG_HZ_1000 is not set
 CONFIG_HZ=250
+# CONFIG_SCHED_HRTICK is not set
 CONFIG_FLATMEM=y
 CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_PAGEFLAGS_EXTENDED=y
 CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
+# CONFIG_PHYS_ADDR_T_64BIT is not set
 CONFIG_ZONE_DMA_FLAG=0
 CONFIG_VIRT_TO_BUS=y
+CONFIG_UNEVICTABLE_LRU=y
 # CONFIG_HPUX is not set
 
 #
@@ -130,14 +156,14 @@ CONFIG_EISA_NAMES=y
 CONFIG_ISA=y
 CONFIG_PCI=y
 # CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_PCI_LEGACY=y
 # CONFIG_PCI_DEBUG is not set
+# CONFIG_PCI_STUB is not set
 CONFIG_GSC_DINO=y
 # CONFIG_PCI_LBA is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
+CONFIG_IOMMU_HELPER=y
 # CONFIG_PCCARD is not set
+# CONFIG_HOTPLUG_PCI is not set
 
 #
 # PA-RISC specific drivers
@@ -151,16 +177,15 @@ CONFIG_PDC_STABLE=y
 # Executable file formats
 #
 CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+# CONFIG_HAVE_AOUT is not set
 # CONFIG_BINFMT_MISC is not set
-
-#
-# Networking
-#
 CONFIG_NET=y
 
 #
 # Networking options
 #
+CONFIG_COMPAT_NET_DEV_OPS=y
 CONFIG_PACKET=y
 CONFIG_PACKET_MMAP=y
 CONFIG_UNIX=y
@@ -205,36 +230,37 @@ CONFIG_INET6_XFRM_MODE_TRANSPORT=y
 CONFIG_INET6_XFRM_MODE_TUNNEL=y
 CONFIG_INET6_XFRM_MODE_BEET=y
 CONFIG_IPV6_SIT=y
+CONFIG_IPV6_NDISC_NODETYPE=y
 # CONFIG_IPV6_TUNNEL is not set
 # CONFIG_NETLABEL is not set
 # CONFIG_NETWORK_SECMARK is not set
 # CONFIG_NETFILTER is not set
+# CONFIG_ATM is not set
 # CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
 # CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
 
 #
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
 # CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
 # CONFIG_IRDA is not set
 # CONFIG_BT is not set
-
-#
-# Wireless
-#
+# CONFIG_PHONET is not set
+CONFIG_WIRELESS=y
 # CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_OLD_REGULATORY=y
 # CONFIG_WIRELESS_EXT is not set
-# CONFIG_IEEE80211 is not set
+# CONFIG_LIB80211 is not set
+# CONFIG_MAC80211 is not set
+# CONFIG_WIMAX is not set
 # CONFIG_RFKILL is not set
 
 #
@@ -247,7 +273,9 @@ CONFIG_IPV6_SIT=y
 CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 # CONFIG_PREVENT_FIRMWARE_BUILD is not set
-# CONFIG_FW_LOADER is not set
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
 # CONFIG_DEBUG_DRIVER is not set
 # CONFIG_DEBUG_DEVRES is not set
 # CONFIG_SYS_HYPERVISOR is not set
@@ -275,10 +303,18 @@ CONFIG_BLK_DEV_CRYPTOLOOP=y
 CONFIG_CDROM_PKTCDVD=m
 CONFIG_CDROM_PKTCDVD_BUFFERS=8
 CONFIG_ATA_OVER_ETH=y
+# CONFIG_BLK_DEV_HD is not set
 CONFIG_MISC_DEVICES=y
 # CONFIG_PHANTOM is not set
-# CONFIG_EEPROM_93CX6 is not set
 # CONFIG_SGI_IOC4 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_HP_ILO is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_HAVE_IDE=y
 # CONFIG_IDE is not set
 
 #
@@ -317,8 +353,10 @@ CONFIG_SCSI_SPI_ATTRS=y
 # CONFIG_SCSI_FC_ATTRS is not set
 # CONFIG_SCSI_ISCSI_ATTRS is not set
 # CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
 CONFIG_SCSI_LOWLEVEL=y
 # CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_CXGB3_ISCSI is not set
 # CONFIG_BLK_DEV_3W_XXXX_RAID is not set
 # CONFIG_SCSI_3W_9XXX is not set
 # CONFIG_SCSI_ACARD is not set
@@ -330,12 +368,15 @@ CONFIG_SCSI_LOWLEVEL=y
 # CONFIG_SCSI_AIC79XX is not set
 # CONFIG_SCSI_AIC94XX is not set
 # CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ADVANSYS is not set
 # CONFIG_SCSI_IN2000 is not set
 # CONFIG_SCSI_ARCMSR is not set
 # CONFIG_MEGARAID_NEWGEN is not set
 # CONFIG_MEGARAID_LEGACY is not set
 # CONFIG_MEGARAID_SAS is not set
 # CONFIG_SCSI_HPTIOP is not set
+# CONFIG_LIBFC is not set
+# CONFIG_FCOE is not set
 # CONFIG_SCSI_DMX3191D is not set
 # CONFIG_SCSI_DTC3280 is not set
 # CONFIG_SCSI_FUTURE_DOMAIN is not set
@@ -346,6 +387,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # CONFIG_SCSI_INIA100 is not set
 # CONFIG_SCSI_PPA is not set
 # CONFIG_SCSI_IMM is not set
+# CONFIG_SCSI_MVSAS is not set
 # CONFIG_SCSI_NCR53C406A is not set
 CONFIG_SCSI_LASI700=y
 CONFIG_53C700_LE_ON_BE=y
@@ -360,7 +402,6 @@ CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8
 CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32
 CONFIG_SCSI_NCR53C8XX_SYNC=40
 # CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PSI240I is not set
 # CONFIG_SCSI_QLOGIC_FAS is not set
 # CONFIG_SCSI_QLOGIC_1280 is not set
 # CONFIG_SCSI_QLA_FC is not set
@@ -373,9 +414,11 @@ CONFIG_SCSI_NCR53C8XX_SYNC=40
 # CONFIG_SCSI_NSP32 is not set
 # CONFIG_SCSI_DEBUG is not set
 # CONFIG_SCSI_SRP is not set
+# CONFIG_SCSI_DH is not set
 # CONFIG_ATA is not set
 CONFIG_MD=y
 CONFIG_BLK_DEV_MD=y
+CONFIG_MD_AUTODETECT=y
 CONFIG_MD_LINEAR=y
 CONFIG_MD_RAID0=y
 CONFIG_MD_RAID1=y
@@ -383,26 +426,18 @@ CONFIG_MD_RAID1=y
 # CONFIG_MD_MULTIPATH is not set
 # CONFIG_MD_FAULTY is not set
 # CONFIG_BLK_DEV_DM is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
 #
 
 #
-# An alternative FireWire stack is available with EXPERIMENTAL=y
+# A new alternative FireWire stack is available with EXPERIMENTAL=y
 #
 # CONFIG_IEEE1394 is not set
 # CONFIG_I2O is not set
 CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
@@ -434,36 +469,49 @@ CONFIG_TULIP=y
 # CONFIG_IBM_NEW_EMAC_RGMII is not set
 # CONFIG_IBM_NEW_EMAC_TAH is not set
 # CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
 # CONFIG_NET_PCI is not set
 # CONFIG_B44 is not set
+# CONFIG_CS89x0 is not set
 # CONFIG_NET_POCKET is not set
+# CONFIG_ATL2 is not set
 CONFIG_NETDEV_1000=y
 # CONFIG_ACENIC is not set
 # CONFIG_DL2K is not set
 # CONFIG_E1000 is not set
 # CONFIG_E1000E is not set
+# CONFIG_IGB is not set
 # CONFIG_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_R8169 is not set
 # CONFIG_SIS190 is not set
 # CONFIG_SKGE is not set
 # CONFIG_SKY2 is not set
-# CONFIG_SK98LIN is not set
 # CONFIG_VIA_VELOCITY is not set
 # CONFIG_TIGON3 is not set
 # CONFIG_BNX2 is not set
 # CONFIG_QLA3XXX is not set
+# CONFIG_ATL1 is not set
+# CONFIG_JME is not set
 CONFIG_NETDEV_10000=y
 # CONFIG_CHELSIO_T1 is not set
+CONFIG_CHELSIO_T3_DEPENDS=y
 # CONFIG_CHELSIO_T3 is not set
+# CONFIG_ENIC is not set
 # CONFIG_IXGBE is not set
 # CONFIG_IXGB is not set
 # CONFIG_S2IO is not set
 # CONFIG_MYRI10GE is not set
 # CONFIG_NETXEN_NIC is not set
 # CONFIG_NIU is not set
+# CONFIG_MLX4_EN is not set
 # CONFIG_MLX4_CORE is not set
 # CONFIG_TEHUTI is not set
+# CONFIG_BNX2X is not set
+# CONFIG_QLGE is not set
+# CONFIG_SFC is not set
 # CONFIG_TR is not set
 
 #
@@ -471,6 +519,11 @@ CONFIG_NETDEV_10000=y
 #
 # CONFIG_WLAN_PRE80211 is not set
 # CONFIG_WLAN_80211 is not set
+# CONFIG_IWLWIFI_LEDS is not set
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
 # CONFIG_WAN is not set
 # CONFIG_FDDI is not set
 # CONFIG_PLIP is not set
@@ -503,7 +556,6 @@ CONFIG_INPUT_MOUSEDEV_PSAUX=y
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 CONFIG_INPUT_EVDEV=y
 # CONFIG_INPUT_EVBUG is not set
 
@@ -526,11 +578,12 @@ CONFIG_MOUSE_PS2=y
 CONFIG_MOUSE_PS2_ALPS=y
 CONFIG_MOUSE_PS2_LOGIPS2PP=y
 CONFIG_MOUSE_PS2_SYNAPTICS=y
-CONFIG_MOUSE_PS2_LIFEBOOK=y
 CONFIG_MOUSE_PS2_TRACKPOINT=y
+# CONFIG_MOUSE_PS2_ELANTECH is not set
 # CONFIG_MOUSE_PS2_TOUCHKIT is not set
 # CONFIG_MOUSE_SERIAL is not set
 # CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_BCM5974 is not set
 # CONFIG_MOUSE_INPORT is not set
 # CONFIG_MOUSE_LOGIBM is not set
 # CONFIG_MOUSE_PC110PAD is not set
@@ -564,9 +617,11 @@ CONFIG_SERIO_LIBPS2=y
 # Character devices
 #
 CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
 CONFIG_VT_CONSOLE=y
 CONFIG_HW_CONSOLE=y
 # CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
 # CONFIG_SERIAL_NONSTANDARD is not set
 
 #
@@ -598,75 +653,79 @@ CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
 # CONFIG_SERIAL_JSM is not set
 CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 CONFIG_PRINTER=y
 # CONFIG_LP_CONSOLE is not set
 # CONFIG_PPDEV is not set
-# CONFIG_TIPAR is not set
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 # CONFIG_HW_RANDOM is not set
-CONFIG_GEN_RTC=y
-# CONFIG_GEN_RTC_X is not set
 # CONFIG_DTLK is not set
 # CONFIG_R3964 is not set
 # CONFIG_APPLICOM is not set
-# CONFIG_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 CONFIG_DEVPORT=y
 # CONFIG_I2C is not set
-
-#
-# SPI support
-#
 # CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
 # CONFIG_W1 is not set
 # CONFIG_POWER_SUPPLY is not set
 # CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+# CONFIG_THERMAL_HWMON is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
 
 #
 # Sonics Silicon Backplane
 #
-CONFIG_SSB_POSSIBLE=y
 # CONFIG_SSB is not set
 
 #
 # Multifunction device drivers
 #
+# CONFIG_MFD_CORE is not set
 # CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_REGULATOR is not set
 
 #
 # Multimedia devices
 #
+
+#
+# Multimedia core support
+#
 # CONFIG_VIDEO_DEV is not set
 # CONFIG_DVB_CORE is not set
-# CONFIG_DAB is not set
+# CONFIG_VIDEO_MEDIA is not set
 
 #
-# Graphics support
+# Multimedia drivers
 #
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+# CONFIG_DAB is not set
 
 #
-# Display device support
+# Graphics support
 #
-# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
 # CONFIG_VGASTATE is not set
 CONFIG_VIDEO_OUTPUT_CONTROL=m
 CONFIG_FB=y
 # CONFIG_FIRMWARE_EDID is not set
 # CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
 CONFIG_FB_CFB_FILLRECT=y
 CONFIG_FB_CFB_COPYAREA=y
 CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
 # CONFIG_FB_SYS_FILLRECT is not set
 # CONFIG_FB_SYS_COPYAREA is not set
 # CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
 # CONFIG_FB_SYS_FOPS is not set
-CONFIG_FB_DEFERRED_IO=y
 # CONFIG_FB_SVGALIB is not set
 # CONFIG_FB_MACMODES is not set
 # CONFIG_FB_BACKLIGHT is not set
@@ -691,6 +750,7 @@ CONFIG_FB_STI=y
 # CONFIG_FB_ATY is not set
 # CONFIG_FB_S3 is not set
 # CONFIG_FB_SIS is not set
+# CONFIG_FB_VIA is not set
 # CONFIG_FB_NEOMAGIC is not set
 # CONFIG_FB_KYRO is not set
 # CONFIG_FB_3DFX is not set
@@ -698,7 +758,16 @@ CONFIG_FB_STI=y
 # CONFIG_FB_VT8623 is not set
 # CONFIG_FB_TRIDENT is not set
 # CONFIG_FB_ARK is not set
+# CONFIG_FB_CARMINE is not set
 # CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
 
 #
 # Console display driver support
@@ -718,15 +787,8 @@ CONFIG_LOGO_LINUX_MONO=y
 CONFIG_LOGO_LINUX_VGA16=y
 CONFIG_LOGO_LINUX_CLUT224=y
 CONFIG_LOGO_PARISC_CLUT224=y
-
-#
-# Sound
-#
 CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
+CONFIG_SOUND_OSS_CORE=y
 CONFIG_SND=y
 CONFIG_SND_TIMER=y
 CONFIG_SND_PCM=y
@@ -742,10 +804,7 @@ CONFIG_SND_SUPPORT_OLD_API=y
 CONFIG_SND_VERBOSE_PROCFS=y
 # CONFIG_SND_VERBOSE_PRINTK is not set
 # CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
+CONFIG_SND_DRIVERS=y
 # CONFIG_SND_DUMMY is not set
 # CONFIG_SND_VIRMIDI is not set
 # CONFIG_SND_MTPAV is not set
@@ -753,10 +812,7 @@ CONFIG_SND_VERBOSE_PROCFS=y
 # CONFIG_SND_SERIAL_U16550 is not set
 # CONFIG_SND_MPU401 is not set
 # CONFIG_SND_PORTMAN2X4 is not set
-
-#
-# PCI devices
-#
+CONFIG_SND_PCI=y
 # CONFIG_SND_AD1889 is not set
 # CONFIG_SND_ALS300 is not set
 # CONFIG_SND_ALI5451 is not set
@@ -765,9 +821,11 @@ CONFIG_SND_VERBOSE_PROCFS=y
 # CONFIG_SND_AU8810 is not set
 # CONFIG_SND_AU8820 is not set
 # CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AW2 is not set
 # CONFIG_SND_BT87X is not set
 # CONFIG_SND_CA0106 is not set
 # CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_OXYGEN is not set
 # CONFIG_SND_CS4281 is not set
 # CONFIG_SND_CS46XX is not set
 # CONFIG_SND_DARLA20 is not set
@@ -792,6 +850,7 @@ CONFIG_SND_VERBOSE_PROCFS=y
 # CONFIG_SND_HDA_INTEL is not set
 # CONFIG_SND_HDSP is not set
 # CONFIG_SND_HDSPM is not set
+# CONFIG_SND_HIFIER is not set
 # CONFIG_SND_ICE1712 is not set
 # CONFIG_SND_ICE1724 is not set
 # CONFIG_SND_INTEL8X0 is not set
@@ -809,30 +868,23 @@ CONFIG_SND_VERBOSE_PROCFS=y
 # CONFIG_SND_TRIDENT is not set
 # CONFIG_SND_VIA82XX is not set
 # CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VIRTUOSO is not set
 # CONFIG_SND_VX222 is not set
 # CONFIG_SND_YMFPCI is not set
-
-#
-# GSC devices
-#
+CONFIG_SND_GSC=y
 CONFIG_SND_HARMONY=y
-
-#
-# System on Chip audio support
-#
 # CONFIG_SND_SOC is not set
-
-#
-# SoC Audio support for SuperH
-#
-
-#
-# Open Sound System
-#
 # CONFIG_SOUND_PRIME is not set
 CONFIG_HID_SUPPORT=y
 CONFIG_HID=y
 CONFIG_HID_DEBUG=y
+# CONFIG_HIDRAW is not set
+# CONFIG_HID_PID is not set
+
+#
+# Special HID drivers
+#
+CONFIG_HID_COMPAT=y
 CONFIG_USB_SUPPORT=y
 CONFIG_USB_ARCH_HAS_HCD=y
 CONFIG_USB_ARCH_HAS_OHCI=y
@@ -840,36 +892,63 @@ CONFIG_USB_ARCH_HAS_EHCI=y
 # CONFIG_USB is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+# Enable Host or Gadget support to see Inventra options
 #
 
 #
-# USB Gadget Support
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
 #
 # CONFIG_USB_GADGET is not set
+
+#
+# OTG and related infrastructure
+#
 # CONFIG_MMC is not set
+# CONFIG_MEMSTICK is not set
 # CONFIG_NEW_LEDS is not set
+# CONFIG_ACCESSIBILITY is not set
 # CONFIG_INFINIBAND is not set
-# CONFIG_RTC_CLASS is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
 
 #
-# DMA Engine support
+# RTC interfaces
 #
-# CONFIG_DMA_ENGINE is not set
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
 
 #
-# DMA Clients
+# SPI RTC drivers
 #
 
 #
-# DMA Devices
-#
-# CONFIG_AUXDISPLAY is not set
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
 
 #
-# Userspace I/O
+# on-CPU RTC drivers
 #
+CONFIG_RTC_DRV_PARISC=y
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
 # CONFIG_UIO is not set
+# CONFIG_STAGING is not set
 
 #
 # File systems
@@ -879,19 +958,18 @@ CONFIG_EXT2_FS=y
 # CONFIG_EXT2_FS_XIP is not set
 CONFIG_EXT3_FS=y
 # CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4_FS is not set
 CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
 # CONFIG_REISERFS_FS is not set
 # CONFIG_JFS_FS is not set
 # CONFIG_FS_POSIX_ACL is not set
+CONFIG_FILE_LOCKING=y
 # CONFIG_XFS_FS is not set
 # CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
+CONFIG_DNOTIFY=y
 CONFIG_INOTIFY=y
 CONFIG_INOTIFY_USER=y
 # CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
 # CONFIG_AUTOFS_FS is not set
 CONFIG_AUTOFS4_FS=y
 # CONFIG_FUSE_FS is not set
@@ -917,35 +995,32 @@ CONFIG_JOLIET=y
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
 CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
 CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-
-#
-# Miscellaneous filesystems
-#
+# CONFIG_CONFIGFS_FS is not set
+CONFIG_MISC_FILESYSTEMS=y
 # CONFIG_HFSPLUS_FS is not set
 # CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
 # CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
 # CONFIG_HPFS_FS is not set
 # CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_DIRECTIO is not set
+CONFIG_ROOT_NFS=y
 CONFIG_NFSD=y
 CONFIG_NFSD_V3=y
 # CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_TCP=y
-CONFIG_ROOT_NFS=y
 CONFIG_LOCKD=y
 CONFIG_LOCKD_V4=y
 CONFIG_EXPORTFS=y
@@ -962,10 +1037,6 @@ CONFIG_SMB_FS=y
 #
 # CONFIG_PARTITION_ADVANCED is not set
 CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
 CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 CONFIG_NLS_CODEPAGE_437=m
@@ -1011,7 +1082,9 @@ CONFIG_NLS_UTF8=m
 # Kernel hacking
 #
 # CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
 CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
 CONFIG_MAGIC_SYSRQ=y
 # CONFIG_UNUSED_SYMBOLS is not set
 # CONFIG_DEBUG_FS is not set
@@ -1019,9 +1092,12 @@ CONFIG_HEADERS_CHECK=y
 CONFIG_DEBUG_KERNEL=y
 # CONFIG_DEBUG_SHIRQ is not set
 CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
 CONFIG_SCHED_DEBUG=y
 # CONFIG_SCHEDSTATS is not set
 # CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS is not set
 # CONFIG_DEBUG_SLAB is not set
 # CONFIG_DEBUG_RT_MUTEXES is not set
 # CONFIG_RT_MUTEX_TESTER is not set
@@ -1033,10 +1109,29 @@ CONFIG_SCHED_DEBUG=y
 CONFIG_DEBUG_BUGVERBOSE=y
 # CONFIG_DEBUG_INFO is not set
 # CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+CONFIG_DEBUG_MEMORY_INIT=y
 # CONFIG_DEBUG_LIST is not set
-CONFIG_FORCED_INLINING=y
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
 # CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
 # CONFIG_FAULT_INJECTION is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+
+#
+# Tracers
+#
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
+# CONFIG_BOOT_TRACER is not set
+# CONFIG_TRACE_BRANCH_PROFILING is not set
+# CONFIG_BUILD_DOCSRC is not set
+# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
+# CONFIG_SAMPLES is not set
 # CONFIG_DEBUG_RODATA is not set
 
 #
@@ -1044,52 +1139,108 @@ CONFIG_FORCED_INLINING=y
 #
 # CONFIG_KEYS is not set
 CONFIG_SECURITY=y
+# CONFIG_SECURITYFS is not set
 # CONFIG_SECURITY_NETWORK is not set
-CONFIG_SECURITY_CAPABILITIES=y
+# CONFIG_SECURITY_PATH is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0
 CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+# CONFIG_CRYPTO_FIPS is not set
 CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD2=y
 CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG2=y
 CONFIG_CRYPTO_MANAGER=y
-# CONFIG_CRYPTO_HMAC is not set
+CONFIG_CRYPTO_MANAGER2=y
 # CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+# CONFIG_CRYPTO_ECB is not set
+# CONFIG_CRYPTO_PCBC is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+
+#
+# Digest
+#
+# CONFIG_CRYPTO_CRC32C is not set
 # CONFIG_CRYPTO_MD4 is not set
 # CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
 # CONFIG_CRYPTO_SHA1 is not set
 # CONFIG_CRYPTO_SHA256 is not set
 # CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
 # CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_ECB is not set
-CONFIG_CRYPTO_CBC=y
-# CONFIG_CRYPTO_PCBC is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
 # CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
 # CONFIG_CRYPTO_CAST5 is not set
 # CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
 # CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
 # CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
 # CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_LZO is not set
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
 CONFIG_CRYPTO_HW=y
+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
 
 #
 # Library routines
 #
 CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
 # CONFIG_CRC_CCITT is not set
 # CONFIG_CRC16 is not set
+# CONFIG_CRC_T10DIF is not set
 # CONFIG_CRC_ITU_T is not set
 CONFIG_CRC32=y
 # CONFIG_CRC7 is not set
index c6def3c..0aa8014 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23
-# Fri Oct 12 21:24:00 2007
+# Linux kernel version: 2.6.29-rc8
+# Fri Mar 13 01:32:58 2009
 #
 CONFIG_PARISC=y
 CONFIG_MMU=y
@@ -33,16 +33,29 @@ CONFIG_SYSVIPC_SYSCTL=y
 # CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 # CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
 # CONFIG_AUDIT is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_CLASSIC_RCU=y
+# CONFIG_TREE_RCU is not set
+# CONFIG_PREEMPT_RCU is not set
+# CONFIG_TREE_RCU_TRACE is not set
+# CONFIG_PREEMPT_RCU_TRACE is not set
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_LOG_BUF_SHIFT=16
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
 CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
 # CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
 # CONFIG_BLK_DEV_INITRD is not set
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
 CONFIG_EMBEDDED=y
 CONFIG_SYSCTL_SYSCALL=y
 CONFIG_KALLSYMS=y
@@ -54,29 +67,39 @@ CONFIG_BUG=y
 CONFIG_ELF_CORE=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
 CONFIG_EPOLL=y
 CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
 CONFIG_EVENTFD=y
 CONFIG_SHMEM=y
+CONFIG_AIO=y
 CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_PCI_QUIRKS=y
+CONFIG_COMPAT_BRK=y
 CONFIG_SLAB=y
 # CONFIG_SLUB is not set
 # CONFIG_SLOB is not set
+CONFIG_PROFILING=y
+CONFIG_TRACEPOINTS=y
+# CONFIG_MARKERS is not set
+CONFIG_OPROFILE=m
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
+CONFIG_SLABINFO=y
 CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
 CONFIG_BASE_SMALL=0
 CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
 CONFIG_MODULE_UNLOAD=y
 CONFIG_MODULE_FORCE_UNLOAD=y
 # CONFIG_MODVERSIONS is not set
 # CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
+CONFIG_INIT_ALL_POSSIBLE=y
 CONFIG_BLOCK=y
 # CONFIG_LBD is not set
 # CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
 # CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
 
 #
 # IO Schedulers
@@ -90,6 +113,7 @@ CONFIG_DEFAULT_AS=y
 # CONFIG_DEFAULT_CFQ is not set
 # CONFIG_DEFAULT_NOOP is not set
 CONFIG_DEFAULT_IOSCHED="anticipatory"
+# CONFIG_FREEZER is not set
 
 #
 # Processor type and features
@@ -115,17 +139,19 @@ CONFIG_HZ_250=y
 # CONFIG_HZ_300 is not set
 # CONFIG_HZ_1000 is not set
 CONFIG_HZ=250
+# CONFIG_SCHED_HRTICK is not set
 CONFIG_SELECT_MEMORY_MODEL=y
 CONFIG_FLATMEM_MANUAL=y
 # CONFIG_DISCONTIGMEM_MANUAL is not set
 # CONFIG_SPARSEMEM_MANUAL is not set
 CONFIG_FLATMEM=y
 CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_PAGEFLAGS_EXTENDED=y
 CONFIG_SPLIT_PTLOCK_CPUS=4
-# CONFIG_RESOURCES_64BIT is not set
+# CONFIG_PHYS_ADDR_T_64BIT is not set
 CONFIG_ZONE_DMA_FLAG=0
 CONFIG_VIRT_TO_BUS=y
+CONFIG_UNEVICTABLE_LRU=y
 # CONFIG_HPUX is not set
 
 #
@@ -134,14 +160,13 @@ CONFIG_VIRT_TO_BUS=y
 # CONFIG_GSC is not set
 CONFIG_PCI=y
 # CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_PCI_LEGACY=y
 # CONFIG_PCI_DEBUG is not set
+# CONFIG_PCI_STUB is not set
 CONFIG_PCI_LBA=y
 CONFIG_IOSAPIC=y
 CONFIG_IOMMU_SBA=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
+CONFIG_IOMMU_HELPER=y
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 
@@ -158,16 +183,15 @@ CONFIG_PDC_STABLE=y
 # Executable file formats
 #
 CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+# CONFIG_HAVE_AOUT is not set
 # CONFIG_BINFMT_MISC is not set
-
-#
-# Networking
-#
 CONFIG_NET=y
 
 #
 # Networking options
 #
+CONFIG_COMPAT_NET_DEV_OPS=y
 CONFIG_PACKET=y
 CONFIG_PACKET_MMAP=y
 CONFIG_UNIX=y
@@ -175,6 +199,8 @@ CONFIG_XFRM=y
 CONFIG_XFRM_USER=m
 # CONFIG_XFRM_SUB_POLICY is not set
 # CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_XFRM_IPCOMP=m
 CONFIG_NET_KEY=m
 # CONFIG_NET_KEY_MIGRATE is not set
 CONFIG_INET=y
@@ -204,7 +230,6 @@ CONFIG_INET_XFRM_MODE_BEET=y
 CONFIG_TCP_CONG_CUBIC=y
 CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_TCP_MD5SIG is not set
-# CONFIG_IP_VS is not set
 CONFIG_IPV6=m
 # CONFIG_IPV6_PRIVACY is not set
 # CONFIG_IPV6_ROUTER_PREF is not set
@@ -220,29 +245,34 @@ CONFIG_INET6_XFRM_MODE_TUNNEL=m
 CONFIG_INET6_XFRM_MODE_BEET=m
 # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
 CONFIG_IPV6_SIT=m
+CONFIG_IPV6_NDISC_NODETYPE=y
 CONFIG_IPV6_TUNNEL=m
 # CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_IPV6_MROUTE is not set
 # CONFIG_NETWORK_SECMARK is not set
 CONFIG_NETFILTER=y
 CONFIG_NETFILTER_DEBUG=y
+CONFIG_NETFILTER_ADVANCED=y
 
 #
 # Core Netfilter Configuration
 #
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
+# CONFIG_NETFILTER_NETLINK_LOG is not set
 # CONFIG_NF_CONNTRACK is not set
 # CONFIG_NETFILTER_XTABLES is not set
+# CONFIG_IP_VS is not set
 
 #
 # IP: Netfilter Configuration
 #
+# CONFIG_NF_DEFRAG_IPV4 is not set
 CONFIG_IP_NF_QUEUE=m
 # CONFIG_IP_NF_IPTABLES is not set
 # CONFIG_IP_NF_ARPTABLES is not set
 
 #
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
+# IPv6: Netfilter Configuration
 #
 # CONFIG_IP6_NF_QUEUE is not set
 # CONFIG_IP6_NF_IPTABLES is not set
@@ -251,6 +281,7 @@ CONFIG_IP_NF_QUEUE=m
 # CONFIG_TIPC is not set
 # CONFIG_ATM is not set
 # CONFIG_BRIDGE is not set
+# CONFIG_NET_DSA is not set
 # CONFIG_VLAN_8021Q is not set
 # CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
@@ -260,28 +291,26 @@ CONFIG_IP_NF_QUEUE=m
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
 
 #
 # Network testing
 #
 CONFIG_NET_PKTGEN=m
 # CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
 # CONFIG_IRDA is not set
 # CONFIG_BT is not set
 # CONFIG_AF_RXRPC is not set
-
-#
-# Wireless
-#
+# CONFIG_PHONET is not set
+CONFIG_WIRELESS=y
 # CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_OLD_REGULATORY=y
 # CONFIG_WIRELESS_EXT is not set
+# CONFIG_LIB80211 is not set
 # CONFIG_MAC80211 is not set
-# CONFIG_IEEE80211 is not set
+# CONFIG_WIMAX is not set
 # CONFIG_RFKILL is not set
 # CONFIG_NET_9P is not set
 
@@ -296,6 +325,8 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 # CONFIG_STANDALONE is not set
 # CONFIG_PREVENT_FIRMWARE_BUILD is not set
 CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
 # CONFIG_DEBUG_DRIVER is not set
 # CONFIG_DEBUG_DEVRES is not set
 # CONFIG_SYS_HYPERVISOR is not set
@@ -316,59 +347,62 @@ CONFIG_BLK_DEV_CRYPTOLOOP=m
 # CONFIG_BLK_DEV_RAM is not set
 # CONFIG_CDROM_PKTCDVD is not set
 # CONFIG_ATA_OVER_ETH is not set
+# CONFIG_BLK_DEV_HD is not set
 CONFIG_MISC_DEVICES=y
 # CONFIG_PHANTOM is not set
-# CONFIG_EEPROM_93CX6 is not set
 # CONFIG_SGI_IOC4 is not set
 # CONFIG_TIFM_CORE is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_HP_ILO is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_HAVE_IDE=y
 CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=y
 
 #
-# Please see Documentation/ide.txt for help/info on IDE drives
+# Please see Documentation/ide/ide.txt for help/info on IDE drives
 #
+CONFIG_IDE_ATAPI=y
 # CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=m
-# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_IDE_GD=y
+CONFIG_IDE_GD_ATA=y
+# CONFIG_IDE_GD_ATAPI is not set
 CONFIG_BLK_DEV_IDECD=y
+CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
 # CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-CONFIG_BLK_DEV_IDESCSI=y
 # CONFIG_IDE_TASK_IOCTL is not set
 CONFIG_IDE_PROC_FS=y
 
 #
 # IDE chipset support/bugfixes
 #
-CONFIG_IDE_GENERIC=y
 # CONFIG_BLK_DEV_PLATFORM is not set
+CONFIG_BLK_DEV_IDEDMA_SFF=y
 
 #
 # PCI IDE chipsets support
 #
 CONFIG_BLK_DEV_IDEPCI=y
-CONFIG_IDEPCI_SHARE_IRQ=y
 CONFIG_IDEPCI_PCIBUS_ORDER=y
-# CONFIG_BLK_DEV_OFFBOARD is not set
 # CONFIG_BLK_DEV_GENERIC is not set
 # CONFIG_BLK_DEV_OPTI621 is not set
 CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-CONFIG_IDEDMA_ONLYDISK=y
 # CONFIG_BLK_DEV_AEC62XX is not set
 # CONFIG_BLK_DEV_ALI15X3 is not set
 # CONFIG_BLK_DEV_AMD74XX is not set
 # CONFIG_BLK_DEV_CMD64X is not set
 # CONFIG_BLK_DEV_TRIFLEX is not set
-# CONFIG_BLK_DEV_CY82C693 is not set
 # CONFIG_BLK_DEV_CS5520 is not set
 # CONFIG_BLK_DEV_CS5530 is not set
-# CONFIG_BLK_DEV_HPT34X is not set
 # CONFIG_BLK_DEV_HPT366 is not set
 # CONFIG_BLK_DEV_JMICRON is not set
 # CONFIG_BLK_DEV_SC1200 is not set
 # CONFIG_BLK_DEV_PIIX is not set
+# CONFIG_BLK_DEV_IT8172 is not set
 # CONFIG_BLK_DEV_IT8213 is not set
 # CONFIG_BLK_DEV_IT821X is not set
 CONFIG_BLK_DEV_NS87415=y
@@ -380,10 +414,7 @@ CONFIG_BLK_DEV_SIIMAGE=m
 # CONFIG_BLK_DEV_TRM290 is not set
 # CONFIG_BLK_DEV_VIA82CXXX is not set
 # CONFIG_BLK_DEV_TC86C001 is not set
-# CONFIG_IDE_ARM is not set
 CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
-# CONFIG_BLK_DEV_HD is not set
 
 #
 # SCSI device support
@@ -422,8 +453,10 @@ CONFIG_SCSI_SPI_ATTRS=y
 # CONFIG_SCSI_FC_ATTRS is not set
 CONFIG_SCSI_ISCSI_ATTRS=m
 # CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
 CONFIG_SCSI_LOWLEVEL=y
 # CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_CXGB3_ISCSI is not set
 # CONFIG_BLK_DEV_3W_XXXX_RAID is not set
 # CONFIG_SCSI_3W_9XXX is not set
 # CONFIG_SCSI_ACARD is not set
@@ -433,16 +466,20 @@ CONFIG_SCSI_LOWLEVEL=y
 # CONFIG_SCSI_AIC79XX is not set
 # CONFIG_SCSI_AIC94XX is not set
 # CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ADVANSYS is not set
 # CONFIG_SCSI_ARCMSR is not set
 # CONFIG_MEGARAID_NEWGEN is not set
 # CONFIG_MEGARAID_LEGACY is not set
 # CONFIG_MEGARAID_SAS is not set
 # CONFIG_SCSI_HPTIOP is not set
+# CONFIG_LIBFC is not set
+# CONFIG_FCOE is not set
 # CONFIG_SCSI_DMX3191D is not set
 # CONFIG_SCSI_FUTURE_DOMAIN is not set
 # CONFIG_SCSI_IPS is not set
 # CONFIG_SCSI_INITIO is not set
 # CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_MVSAS is not set
 # CONFIG_SCSI_STEX is not set
 CONFIG_SCSI_SYM53C8XX_2=y
 CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0
@@ -458,9 +495,11 @@ CONFIG_SCSI_SYM53C8XX_MMIO=y
 # CONFIG_SCSI_NSP32 is not set
 CONFIG_SCSI_DEBUG=m
 # CONFIG_SCSI_SRP is not set
+# CONFIG_SCSI_DH is not set
 # CONFIG_ATA is not set
 CONFIG_MD=y
 CONFIG_BLK_DEV_MD=y
+CONFIG_MD_AUTODETECT=y
 CONFIG_MD_LINEAR=y
 CONFIG_MD_RAID0=y
 CONFIG_MD_RAID1=y
@@ -475,13 +514,8 @@ CONFIG_DM_SNAPSHOT=m
 CONFIG_DM_MIRROR=m
 CONFIG_DM_ZERO=m
 CONFIG_DM_MULTIPATH=m
-# CONFIG_DM_MULTIPATH_EMC is not set
-# CONFIG_DM_MULTIPATH_RDAC is not set
 # CONFIG_DM_DELAY is not set
-
-#
-# Fusion MPT device support
-#
+# CONFIG_DM_UEVENT is not set
 CONFIG_FUSION=y
 CONFIG_FUSION_SPI=m
 # CONFIG_FUSION_FC is not set
@@ -493,20 +527,40 @@ CONFIG_FUSION_CTL=m
 #
 # IEEE 1394 (FireWire) support
 #
+
+#
+# Enable only one of the two stacks, unless you know what you are doing
+#
 # CONFIG_FIREWIRE is not set
 # CONFIG_IEEE1394 is not set
 # CONFIG_I2O is not set
 CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
 CONFIG_DUMMY=m
 CONFIG_BONDING=m
 # CONFIG_MACVLAN is not set
 # CONFIG_EQUALIZER is not set
 CONFIG_TUN=m
 # CONFIG_VETH is not set
-# CONFIG_IP1000 is not set
 # CONFIG_ARCNET is not set
-# CONFIG_PHYLIB is not set
+CONFIG_PHYLIB=m
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_NATIONAL_PHY is not set
+# CONFIG_STE10XP is not set
+# CONFIG_LSI_ET1011C_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
 CONFIG_NET_ETHERNET=y
 CONFIG_MII=m
 # CONFIG_HAPPYMEAL is not set
@@ -528,33 +582,38 @@ CONFIG_TULIP_MMIO=y
 # CONFIG_IBM_NEW_EMAC_RGMII is not set
 # CONFIG_IBM_NEW_EMAC_TAH is not set
 # CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
 CONFIG_NET_PCI=y
 # CONFIG_PCNET32 is not set
 # CONFIG_AMD8111_ETH is not set
 # CONFIG_ADAPTEC_STARFIRE is not set
 # CONFIG_B44 is not set
 # CONFIG_FORCEDETH is not set
-# CONFIG_EEPRO100 is not set
 CONFIG_E100=m
 # CONFIG_FEALNX is not set
 # CONFIG_NATSEMI is not set
 # CONFIG_NE2K_PCI is not set
 # CONFIG_8139CP is not set
 # CONFIG_8139TOO is not set
+# CONFIG_R6040 is not set
 # CONFIG_SIS900 is not set
 # CONFIG_EPIC100 is not set
+# CONFIG_SMSC9420 is not set
 # CONFIG_SUNDANCE is not set
 # CONFIG_TLAN is not set
 # CONFIG_VIA_RHINE is not set
 # CONFIG_SC92031 is not set
+# CONFIG_ATL2 is not set
 CONFIG_NETDEV_1000=y
 CONFIG_ACENIC=m
 # CONFIG_ACENIC_OMIT_TIGON_I is not set
 # CONFIG_DL2K is not set
 CONFIG_E1000=m
-# CONFIG_E1000_NAPI is not set
-# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
 # CONFIG_E1000E is not set
+# CONFIG_IP1000 is not set
+# CONFIG_IGB is not set
 # CONFIG_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -562,23 +621,31 @@ CONFIG_E1000=m
 # CONFIG_SIS190 is not set
 # CONFIG_SKGE is not set
 # CONFIG_SKY2 is not set
-# CONFIG_SK98LIN is not set
 # CONFIG_VIA_VELOCITY is not set
 CONFIG_TIGON3=m
 # CONFIG_BNX2 is not set
 # CONFIG_QLA3XXX is not set
 # CONFIG_ATL1 is not set
+# CONFIG_ATL1E is not set
+# CONFIG_ATL1C is not set
+# CONFIG_JME is not set
 CONFIG_NETDEV_10000=y
 # CONFIG_CHELSIO_T1 is not set
+CONFIG_CHELSIO_T3_DEPENDS=y
 # CONFIG_CHELSIO_T3 is not set
+# CONFIG_ENIC is not set
 # CONFIG_IXGBE is not set
 # CONFIG_IXGB is not set
 # CONFIG_S2IO is not set
 # CONFIG_MYRI10GE is not set
 # CONFIG_NETXEN_NIC is not set
 # CONFIG_NIU is not set
+# CONFIG_MLX4_EN is not set
 # CONFIG_MLX4_CORE is not set
 # CONFIG_TEHUTI is not set
+# CONFIG_BNX2X is not set
+# CONFIG_QLGE is not set
+# CONFIG_SFC is not set
 # CONFIG_TR is not set
 
 #
@@ -586,6 +653,11 @@ CONFIG_NETDEV_10000=y
 #
 # CONFIG_WLAN_PRE80211 is not set
 # CONFIG_WLAN_80211 is not set
+# CONFIG_IWLWIFI_LEDS is not set
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
 
 #
 # USB Network Adapters
@@ -594,7 +666,6 @@ CONFIG_NETDEV_10000=y
 # CONFIG_USB_KAWETH is not set
 # CONFIG_USB_PEGASUS is not set
 # CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
 # CONFIG_USB_USBNET is not set
 # CONFIG_WAN is not set
 # CONFIG_FDDI is not set
@@ -612,7 +683,6 @@ CONFIG_PPPOE=m
 # CONFIG_SLIP is not set
 CONFIG_SLHC=m
 # CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
 # CONFIG_NETCONSOLE is not set
 # CONFIG_NETPOLL is not set
 # CONFIG_NET_POLL_CONTROLLER is not set
@@ -634,7 +704,6 @@ CONFIG_INPUT_MOUSEDEV=y
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1600
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=1200
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -652,6 +721,7 @@ CONFIG_INPUT_MOUSE=y
 # CONFIG_MOUSE_PS2 is not set
 # CONFIG_MOUSE_SERIAL is not set
 # CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_BCM5974 is not set
 # CONFIG_MOUSE_VSXXXAA is not set
 # CONFIG_INPUT_JOYSTICK is not set
 # CONFIG_INPUT_TABLET is not set
@@ -672,10 +742,13 @@ CONFIG_SERIO_LIBPS2=m
 # Character devices
 #
 CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
 CONFIG_VT_CONSOLE=y
 CONFIG_HW_CONSOLE=y
 # CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
 # CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_NOZOMI is not set
 
 #
 # Serial drivers
@@ -699,72 +772,77 @@ CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
 # CONFIG_SERIAL_JSM is not set
 CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 # CONFIG_HW_RANDOM is not set
-CONFIG_GEN_RTC=y
-CONFIG_GEN_RTC_X=y
 # CONFIG_R3964 is not set
 # CONFIG_APPLICOM is not set
-# CONFIG_AGP is not set
-# CONFIG_DRM is not set
 CONFIG_RAW_DRIVER=y
 CONFIG_MAX_RAW_DEVS=256
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
 # CONFIG_I2C is not set
-
-#
-# SPI support
-#
 # CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
 # CONFIG_W1 is not set
 # CONFIG_POWER_SUPPLY is not set
 # CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+# CONFIG_THERMAL_HWMON is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
 
 #
 # Sonics Silicon Backplane
 #
-CONFIG_SSB_POSSIBLE=y
 # CONFIG_SSB is not set
 
 #
 # Multifunction device drivers
 #
+# CONFIG_MFD_CORE is not set
 # CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_REGULATOR is not set
 
 #
 # Multimedia devices
 #
+
+#
+# Multimedia core support
+#
 # CONFIG_VIDEO_DEV is not set
 # CONFIG_DVB_CORE is not set
-# CONFIG_DAB is not set
+# CONFIG_VIDEO_MEDIA is not set
 
 #
-# Graphics support
+# Multimedia drivers
 #
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+# CONFIG_DAB is not set
 
 #
-# Display device support
+# Graphics support
 #
-# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
 # CONFIG_VGASTATE is not set
 CONFIG_VIDEO_OUTPUT_CONTROL=m
 CONFIG_FB=y
 # CONFIG_FIRMWARE_EDID is not set
 # CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
 CONFIG_FB_CFB_FILLRECT=y
 CONFIG_FB_CFB_COPYAREA=y
 CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
 # CONFIG_FB_SYS_FILLRECT is not set
 # CONFIG_FB_SYS_COPYAREA is not set
 # CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
 # CONFIG_FB_SYS_FOPS is not set
-CONFIG_FB_DEFERRED_IO=y
 # CONFIG_FB_SVGALIB is not set
 # CONFIG_FB_MACMODES is not set
 # CONFIG_FB_BACKLIGHT is not set
@@ -790,6 +868,7 @@ CONFIG_FB_STI=y
 # CONFIG_FB_S3 is not set
 # CONFIG_FB_SAVAGE is not set
 # CONFIG_FB_SIS is not set
+# CONFIG_FB_VIA is not set
 # CONFIG_FB_NEOMAGIC is not set
 # CONFIG_FB_KYRO is not set
 # CONFIG_FB_3DFX is not set
@@ -798,7 +877,16 @@ CONFIG_FB_STI=y
 # CONFIG_FB_TRIDENT is not set
 # CONFIG_FB_ARK is not set
 # CONFIG_FB_PM3 is not set
+# CONFIG_FB_CARMINE is not set
 # CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
 
 #
 # Console display driver support
@@ -818,15 +906,8 @@ CONFIG_LOGO=y
 # CONFIG_LOGO_LINUX_VGA16 is not set
 # CONFIG_LOGO_LINUX_CLUT224 is not set
 CONFIG_LOGO_PARISC_CLUT224=y
-
-#
-# Sound
-#
 CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
+CONFIG_SOUND_OSS_CORE=y
 CONFIG_SND=y
 CONFIG_SND_TIMER=y
 CONFIG_SND_PCM=y
@@ -842,20 +923,16 @@ CONFIG_SND_SUPPORT_OLD_API=y
 CONFIG_SND_VERBOSE_PROCFS=y
 # CONFIG_SND_VERBOSE_PRINTK is not set
 # CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
+CONFIG_SND_VMASTER=y
 CONFIG_SND_AC97_CODEC=y
+CONFIG_SND_DRIVERS=y
 # CONFIG_SND_DUMMY is not set
 # CONFIG_SND_VIRMIDI is not set
 # CONFIG_SND_MTPAV is not set
 # CONFIG_SND_SERIAL_U16550 is not set
 # CONFIG_SND_MPU401 is not set
-
-#
-# PCI devices
-#
+# CONFIG_SND_AC97_POWER_SAVE is not set
+CONFIG_SND_PCI=y
 CONFIG_SND_AD1889=y
 # CONFIG_SND_ALS300 is not set
 # CONFIG_SND_ALI5451 is not set
@@ -864,10 +941,12 @@ CONFIG_SND_AD1889=y
 # CONFIG_SND_AU8810 is not set
 # CONFIG_SND_AU8820 is not set
 # CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AW2 is not set
 # CONFIG_SND_AZT3328 is not set
 # CONFIG_SND_BT87X is not set
 # CONFIG_SND_CA0106 is not set
 # CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_OXYGEN is not set
 # CONFIG_SND_CS4281 is not set
 # CONFIG_SND_CS46XX is not set
 # CONFIG_SND_DARLA20 is not set
@@ -892,6 +971,7 @@ CONFIG_SND_AD1889=y
 # CONFIG_SND_HDA_INTEL is not set
 # CONFIG_SND_HDSP is not set
 # CONFIG_SND_HDSPM is not set
+# CONFIG_SND_HIFIER is not set
 # CONFIG_SND_ICE1712 is not set
 # CONFIG_SND_ICE1724 is not set
 # CONFIG_SND_INTEL8X0 is not set
@@ -909,47 +989,59 @@ CONFIG_SND_AD1889=y
 # CONFIG_SND_TRIDENT is not set
 # CONFIG_SND_VIA82XX is not set
 # CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VIRTUOSO is not set
 # CONFIG_SND_VX222 is not set
 # CONFIG_SND_YMFPCI is not set
-# CONFIG_SND_AC97_POWER_SAVE is not set
-
-#
-# USB devices
-#
+CONFIG_SND_USB=y
 # CONFIG_SND_USB_AUDIO is not set
 # CONFIG_SND_USB_CAIAQ is not set
-
-#
-# System on Chip audio support
-#
 # CONFIG_SND_SOC is not set
-
-#
-# SoC Audio support for SuperH
-#
-
-#
-# Open Sound System
-#
 # CONFIG_SOUND_PRIME is not set
 CONFIG_AC97_BUS=y
 CONFIG_HID_SUPPORT=y
 CONFIG_HID=y
 # CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
 
 #
 # USB Input Devices
 #
 CONFIG_USB_HID=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
+# CONFIG_HID_PID is not set
 CONFIG_USB_HIDDEV=y
+
+#
+# Special HID drivers
+#
+CONFIG_HID_COMPAT=y
+# CONFIG_HID_A4TECH is not set
+# CONFIG_HID_APPLE is not set
+# CONFIG_HID_BELKIN is not set
+# CONFIG_HID_CHERRY is not set
+# CONFIG_HID_CHICONY is not set
+# CONFIG_HID_CYPRESS is not set
+# CONFIG_HID_EZKEY is not set
+# CONFIG_HID_GYRATION is not set
+# CONFIG_HID_LOGITECH is not set
+# CONFIG_HID_MICROSOFT is not set
+# CONFIG_HID_MONTEREY is not set
+# CONFIG_HID_NTRIG is not set
+# CONFIG_HID_PANTHERLORD is not set
+# CONFIG_HID_PETALYNX is not set
+# CONFIG_HID_SAMSUNG is not set
+# CONFIG_HID_SONY is not set
+# CONFIG_HID_SUNPLUS is not set
+# CONFIG_GREENASIA_FF is not set
+# CONFIG_HID_TOPSEED is not set
+# CONFIG_THRUSTMASTER_FF is not set
+# CONFIG_ZEROPLUS_FF is not set
 CONFIG_USB_SUPPORT=y
 CONFIG_USB_ARCH_HAS_HCD=y
 CONFIG_USB_ARCH_HAS_OHCI=y
 CONFIG_USB_ARCH_HAS_EHCI=y
 CONFIG_USB=y
 CONFIG_USB_DEBUG=y
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
 
 #
 # Miscellaneous USB options
@@ -958,12 +1050,20 @@ CONFIG_USB_DEVICEFS=y
 CONFIG_USB_DEVICE_CLASS=y
 # CONFIG_USB_DYNAMIC_MINORS is not set
 # CONFIG_USB_OTG is not set
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+# CONFIG_USB_MON is not set
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
 
 #
 # USB Host Controller Drivers
 #
+# CONFIG_USB_C67X00_HCD is not set
 # CONFIG_USB_EHCI_HCD is not set
+# CONFIG_USB_OXU210HP_HCD is not set
 # CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
 CONFIG_USB_OHCI_HCD=y
 # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
 # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
@@ -971,32 +1071,37 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
 # CONFIG_USB_UHCI_HCD is not set
 # CONFIG_USB_SL811_HCD is not set
 # CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_WHCI_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
 
 #
 # USB Device Class drivers
 #
 # CONFIG_USB_ACM is not set
 CONFIG_USB_PRINTER=m
+# CONFIG_USB_WDM is not set
+# CONFIG_USB_TMC is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
 #
 
 #
-# may also be needed; see USB_STORAGE Help for more information
+# see USB_STORAGE Help for more information
 #
 CONFIG_USB_STORAGE=m
 # CONFIG_USB_STORAGE_DEBUG is not set
 # CONFIG_USB_STORAGE_DATAFAB is not set
 # CONFIG_USB_STORAGE_FREECOM is not set
 # CONFIG_USB_STORAGE_ISD200 is not set
-CONFIG_USB_STORAGE_DPCM=y
 CONFIG_USB_STORAGE_USBAT=y
 CONFIG_USB_STORAGE_SDDR09=y
 CONFIG_USB_STORAGE_SDDR55=y
 CONFIG_USB_STORAGE_JUMPSHOT=y
 # CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
 # CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
 # CONFIG_USB_LIBUSUAL is not set
 
 #
@@ -1004,15 +1109,10 @@ CONFIG_USB_STORAGE_JUMPSHOT=y
 #
 CONFIG_USB_MDC800=m
 CONFIG_USB_MICROTEK=m
-# CONFIG_USB_MON is not set
 
 #
 # USB port drivers
 #
-
-#
-# USB Serial Converter support
-#
 # CONFIG_USB_SERIAL is not set
 
 #
@@ -1021,7 +1121,7 @@ CONFIG_USB_MICROTEK=m
 # CONFIG_USB_EMI62 is not set
 # CONFIG_USB_EMI26 is not set
 # CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_SEVSEG is not set
 # CONFIG_USB_RIO500 is not set
 CONFIG_USB_LEGOTOWER=m
 # CONFIG_USB_LCD is not set
@@ -1037,37 +1137,59 @@ CONFIG_USB_LEGOTOWER=m
 # CONFIG_USB_TRANCEVIBRATOR is not set
 # CONFIG_USB_IOWARRIOR is not set
 # CONFIG_USB_TEST is not set
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_VST is not set
+# CONFIG_USB_GADGET is not set
 
 #
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
+# OTG and related infrastructure
 #
-# CONFIG_USB_GADGET is not set
+# CONFIG_UWB is not set
 # CONFIG_MMC is not set
+# CONFIG_MEMSTICK is not set
 # CONFIG_NEW_LEDS is not set
+# CONFIG_ACCESSIBILITY is not set
 # CONFIG_INFINIBAND is not set
-# CONFIG_RTC_CLASS is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
 
 #
-# DMA Engine support
+# RTC interfaces
 #
-# CONFIG_DMA_ENGINE is not set
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
 
 #
-# DMA Clients
+# SPI RTC drivers
 #
 
 #
-# DMA Devices
+# Platform RTC drivers
 #
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
 
 #
-# Userspace I/O
+# on-CPU RTC drivers
 #
+CONFIG_RTC_DRV_PARISC=y
+# CONFIG_DMADEVICES is not set
 # CONFIG_UIO is not set
+# CONFIG_STAGING is not set
 
 #
 # File systems
@@ -1077,25 +1199,24 @@ CONFIG_EXT2_FS=y
 # CONFIG_EXT2_FS_XIP is not set
 CONFIG_EXT3_FS=y
 # CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4DEV_FS is not set
+# CONFIG_EXT4_FS is not set
 CONFIG_JBD=y
 # CONFIG_JBD_DEBUG is not set
 # CONFIG_REISERFS_FS is not set
 # CONFIG_JFS_FS is not set
 # CONFIG_FS_POSIX_ACL is not set
+CONFIG_FILE_LOCKING=y
 CONFIG_XFS_FS=m
 # CONFIG_XFS_QUOTA is not set
-# CONFIG_XFS_SECURITY is not set
 # CONFIG_XFS_POSIX_ACL is not set
 # CONFIG_XFS_RT is not set
-# CONFIG_GFS2_FS is not set
+# CONFIG_XFS_DEBUG is not set
 # CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
+# CONFIG_BTRFS_FS is not set
+CONFIG_DNOTIFY=y
 CONFIG_INOTIFY=y
 CONFIG_INOTIFY_USER=y
 # CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
 # CONFIG_AUTOFS_FS is not set
 CONFIG_AUTOFS4_FS=y
 # CONFIG_FUSE_FS is not set
@@ -1124,16 +1245,13 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
 CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
 CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
+CONFIG_MISC_FILESYSTEMS=y
 # CONFIG_ADFS_FS is not set
 # CONFIG_AFFS_FS is not set
 # CONFIG_HFS_FS is not set
@@ -1142,32 +1260,31 @@ CONFIG_RAMFS=y
 # CONFIG_BFS_FS is not set
 # CONFIG_EFS_FS is not set
 # CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
 # CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
 # CONFIG_HPFS_FS is not set
 # CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
 # CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
+CONFIG_ROOT_NFS=y
 CONFIG_NFSD=y
 CONFIG_NFSD_V3=y
 # CONFIG_NFSD_V3_ACL is not set
 # CONFIG_NFSD_V4 is not set
-# CONFIG_NFSD_TCP is not set
-CONFIG_ROOT_NFS=y
 CONFIG_LOCKD=y
 CONFIG_LOCKD_V4=y
 CONFIG_EXPORTFS=y
 CONFIG_NFS_COMMON=y
 CONFIG_SUNRPC=y
-# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_SUNRPC_REGISTER_V4 is not set
 # CONFIG_RPCSEC_GSS_KRB5 is not set
 # CONFIG_RPCSEC_GSS_SPKM3 is not set
 # CONFIG_SMB_FS is not set
@@ -1181,10 +1298,6 @@ CONFIG_SUNRPC=y
 #
 # CONFIG_PARTITION_ADVANCED is not set
 CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
 CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 CONFIG_NLS_CODEPAGE_437=m
@@ -1225,33 +1338,28 @@ CONFIG_NLS_ISO8859_15=m
 # CONFIG_NLS_KOI8_R is not set
 # CONFIG_NLS_KOI8_U is not set
 CONFIG_NLS_UTF8=m
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 
 #
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
 # Kernel hacking
 #
 # CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
 CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
 CONFIG_MAGIC_SYSRQ=y
 # CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
+CONFIG_DEBUG_FS=y
 CONFIG_HEADERS_CHECK=y
 CONFIG_DEBUG_KERNEL=y
 # CONFIG_DEBUG_SHIRQ is not set
 CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
 CONFIG_SCHED_DEBUG=y
 # CONFIG_SCHEDSTATS is not set
 # CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS is not set
 # CONFIG_DEBUG_SLAB is not set
 # CONFIG_DEBUG_RT_MUTEXES is not set
 # CONFIG_RT_MUTEX_TESTER is not set
@@ -1263,10 +1371,33 @@ CONFIG_DEBUG_MUTEXES=y
 # CONFIG_DEBUG_BUGVERBOSE is not set
 # CONFIG_DEBUG_INFO is not set
 # CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
 # CONFIG_DEBUG_LIST is not set
-CONFIG_FORCED_INLINING=y
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
 # CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
 # CONFIG_FAULT_INJECTION is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_NOP_TRACER=y
+CONFIG_RING_BUFFER=y
+CONFIG_TRACING=y
+
+#
+# Tracers
+#
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
+# CONFIG_BOOT_TRACER is not set
+# CONFIG_TRACE_BRANCH_PROFILING is not set
+# CONFIG_FTRACE_STARTUP_TEST is not set
+# CONFIG_BUILD_DOCSRC is not set
+# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
+# CONFIG_SAMPLES is not set
 CONFIG_DEBUG_RODATA=y
 
 #
@@ -1274,54 +1405,110 @@ CONFIG_DEBUG_RODATA=y
 #
 # CONFIG_KEYS is not set
 # CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
 CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+# CONFIG_CRYPTO_FIPS is not set
 CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_ALGAPI2=m
+CONFIG_CRYPTO_AEAD2=m
 CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_BLKCIPHER2=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_HASH2=m
+CONFIG_CRYPTO_RNG2=m
 CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_MANAGER2=m
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_NULL=m
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+CONFIG_CRYPTO_TEST=m
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=m
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+# CONFIG_CRYPTO_ECB is not set
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
 # CONFIG_CRYPTO_HMAC is not set
 # CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=m
 # CONFIG_CRYPTO_MD4 is not set
 CONFIG_CRYPTO_MD5=m
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
 # CONFIG_CRYPTO_SHA1 is not set
 # CONFIG_CRYPTO_SHA256 is not set
 # CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
 # CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-# CONFIG_CRYPTO_ECB is not set
-CONFIG_CRYPTO_CBC=m
-# CONFIG_CRYPTO_PCBC is not set
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_XTS is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-CONFIG_CRYPTO_DES=m
-# CONFIG_CRYPTO_FCRYPT is not set
-CONFIG_CRYPTO_BLOWFISH=m
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
 # CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_ARC4 is not set
+CONFIG_CRYPTO_BLOWFISH=m
+# CONFIG_CRYPTO_CAMELLIA is not set
 # CONFIG_CRYPTO_CAST5 is not set
 # CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_ARC4 is not set
+CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_FCRYPT is not set
 # CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_SALSA20 is not set
 # CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
 CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-CONFIG_CRYPTO_CRC32C=m
-# CONFIG_CRYPTO_CAMELLIA is not set
-CONFIG_CRYPTO_TEST=m
-# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_LZO is not set
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
 # CONFIG_CRYPTO_HW is not set
 
 #
 # Library routines
 #
 CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
 CONFIG_CRC_CCITT=m
 # CONFIG_CRC16 is not set
+# CONFIG_CRC_T10DIF is not set
 # CONFIG_CRC_ITU_T is not set
 CONFIG_CRC32=y
 # CONFIG_CRC7 is not set
index 448a757..283a96c 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23
-# Fri Oct 12 20:54:57 2007
+# Linux kernel version: 2.6.29-rc8
+# Fri Mar 13 01:32:59 2009
 #
 CONFIG_PARISC=y
 CONFIG_MMU=y
@@ -33,17 +33,35 @@ CONFIG_SYSVIPC_SYSCTL=y
 CONFIG_POSIX_MQUEUE=y
 # CONFIG_BSD_PROCESS_ACCT is not set
 # CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
 # CONFIG_AUDIT is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_CLASSIC_RCU=y
+# CONFIG_TREE_RCU is not set
+# CONFIG_PREEMPT_RCU is not set
+# CONFIG_TREE_RCU_TRACE is not set
+# CONFIG_PREEMPT_RCU_TRACE is not set
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_LOG_BUF_SHIFT=16
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
 CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
 # CONFIG_RELAY is not set
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+# CONFIG_IPC_NS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_NET_NS is not set
 CONFIG_BLK_DEV_INITRD=y
 CONFIG_INITRAMFS_SOURCE=""
 CONFIG_CC_OPTIMIZE_FOR_SIZE=y
 CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
 # CONFIG_EMBEDDED is not set
 CONFIG_SYSCTL_SYSCALL=y
 CONFIG_KALLSYMS=y
@@ -55,29 +73,39 @@ CONFIG_BUG=y
 CONFIG_ELF_CORE=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
 CONFIG_EPOLL=y
 CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
 CONFIG_EVENTFD=y
 CONFIG_SHMEM=y
+CONFIG_AIO=y
 CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_PCI_QUIRKS=y
+CONFIG_COMPAT_BRK=y
 CONFIG_SLAB=y
 # CONFIG_SLUB is not set
 # CONFIG_SLOB is not set
+CONFIG_PROFILING=y
+CONFIG_TRACEPOINTS=y
+# CONFIG_MARKERS is not set
+CONFIG_OPROFILE=m
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
+CONFIG_SLABINFO=y
 CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
 CONFIG_BASE_SMALL=0
 CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
 CONFIG_MODULE_UNLOAD=y
 CONFIG_MODULE_FORCE_UNLOAD=y
 # CONFIG_MODVERSIONS is not set
 # CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
+CONFIG_INIT_ALL_POSSIBLE=y
 CONFIG_BLOCK=y
 # CONFIG_LBD is not set
 # CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
 # CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
 
 #
 # IO Schedulers
@@ -91,6 +119,7 @@ CONFIG_DEFAULT_AS=y
 # CONFIG_DEFAULT_CFQ is not set
 # CONFIG_DEFAULT_NOOP is not set
 CONFIG_DEFAULT_IOSCHED="anticipatory"
+# CONFIG_FREEZER is not set
 
 #
 # Processor type and features
@@ -114,17 +143,19 @@ CONFIG_HZ_250=y
 # CONFIG_HZ_300 is not set
 # CONFIG_HZ_1000 is not set
 CONFIG_HZ=250
+# CONFIG_SCHED_HRTICK is not set
 CONFIG_SELECT_MEMORY_MODEL=y
 CONFIG_FLATMEM_MANUAL=y
 # CONFIG_DISCONTIGMEM_MANUAL is not set
 # CONFIG_SPARSEMEM_MANUAL is not set
 CONFIG_FLATMEM=y
 CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_PAGEFLAGS_EXTENDED=y
 CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
+# CONFIG_PHYS_ADDR_T_64BIT is not set
 CONFIG_ZONE_DMA_FLAG=0
 CONFIG_VIRT_TO_BUS=y
+CONFIG_UNEVICTABLE_LRU=y
 # CONFIG_HPUX is not set
 
 #
@@ -140,15 +171,14 @@ CONFIG_EISA_NAMES=y
 # CONFIG_ISA is not set
 CONFIG_PCI=y
 # CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_PCI_LEGACY=y
 # CONFIG_PCI_DEBUG is not set
+# CONFIG_PCI_STUB is not set
 CONFIG_GSC_DINO=y
 CONFIG_PCI_LBA=y
 CONFIG_IOSAPIC=y
 CONFIG_IOMMU_SBA=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
+CONFIG_IOMMU_HELPER=y
 CONFIG_PCCARD=y
 # CONFIG_PCMCIA_DEBUG is not set
 CONFIG_PCMCIA=y
@@ -183,16 +213,15 @@ CONFIG_PDC_STABLE=y
 # Executable file formats
 #
 CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+# CONFIG_HAVE_AOUT is not set
 CONFIG_BINFMT_MISC=m
-
-#
-# Networking
-#
 CONFIG_NET=y
 
 #
 # Networking options
 #
+CONFIG_COMPAT_NET_DEV_OPS=y
 CONFIG_PACKET=y
 CONFIG_PACKET_MMAP=y
 CONFIG_UNIX=y
@@ -200,6 +229,8 @@ CONFIG_XFRM=y
 CONFIG_XFRM_USER=m
 # CONFIG_XFRM_SUB_POLICY is not set
 # CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_XFRM_IPCOMP=y
 CONFIG_NET_KEY=m
 # CONFIG_NET_KEY_MIGRATE is not set
 CONFIG_INET=y
@@ -245,8 +276,10 @@ CONFIG_INET6_XFRM_MODE_TUNNEL=y
 CONFIG_INET6_XFRM_MODE_BEET=y
 # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
 CONFIG_IPV6_SIT=y
+CONFIG_IPV6_NDISC_NODETYPE=y
 # CONFIG_IPV6_TUNNEL is not set
 # CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_IPV6_MROUTE is not set
 # CONFIG_NETWORK_SECMARK is not set
 # CONFIG_NETFILTER is not set
 # CONFIG_IP_DCCP is not set
@@ -254,6 +287,7 @@ CONFIG_IPV6_SIT=y
 # CONFIG_TIPC is not set
 # CONFIG_ATM is not set
 # CONFIG_BRIDGE is not set
+# CONFIG_NET_DSA is not set
 # CONFIG_VLAN_8021Q is not set
 # CONFIG_DECNET is not set
 CONFIG_LLC=m
@@ -264,28 +298,26 @@ CONFIG_LLC2=m
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
 
 #
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
 # CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
 # CONFIG_IRDA is not set
 # CONFIG_BT is not set
 # CONFIG_AF_RXRPC is not set
-
-#
-# Wireless
-#
+# CONFIG_PHONET is not set
+CONFIG_WIRELESS=y
 # CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_OLD_REGULATORY=y
 # CONFIG_WIRELESS_EXT is not set
+# CONFIG_LIB80211 is not set
 # CONFIG_MAC80211 is not set
-# CONFIG_IEEE80211 is not set
+# CONFIG_WIMAX is not set
 # CONFIG_RFKILL is not set
 # CONFIG_NET_9P is not set
 
@@ -300,6 +332,8 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 # CONFIG_STANDALONE is not set
 # CONFIG_PREVENT_FIRMWARE_BUILD is not set
 CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
 # CONFIG_DEBUG_DRIVER is not set
 # CONFIG_DEBUG_DEVRES is not set
 # CONFIG_SYS_HYPERVISOR is not set
@@ -330,63 +364,68 @@ CONFIG_BLK_DEV_CRYPTOLOOP=y
 CONFIG_BLK_DEV_RAM=y
 CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_BLK_DEV_RAM_SIZE=6144
-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_BLK_DEV_XIP is not set
 # CONFIG_CDROM_PKTCDVD is not set
 # CONFIG_ATA_OVER_ETH is not set
+# CONFIG_BLK_DEV_HD is not set
 CONFIG_MISC_DEVICES=y
 # CONFIG_PHANTOM is not set
-# CONFIG_EEPROM_93CX6 is not set
 # CONFIG_SGI_IOC4 is not set
 # CONFIG_TIFM_CORE is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_HP_ILO is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_HAVE_IDE=y
 CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
 
 #
-# Please see Documentation/ide.txt for help/info on IDE drives
+# Please see Documentation/ide/ide.txt for help/info on IDE drives
 #
+CONFIG_IDE_ATAPI=y
 # CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-CONFIG_IDEDISK_MULTI_MODE=y
+CONFIG_IDE_GD=y
+CONFIG_IDE_GD_ATA=y
+# CONFIG_IDE_GD_ATAPI is not set
 CONFIG_BLK_DEV_IDECS=y
 # CONFIG_BLK_DEV_DELKIN is not set
 CONFIG_BLK_DEV_IDECD=y
+CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
 # CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-CONFIG_BLK_DEV_IDESCSI=y
 # CONFIG_IDE_TASK_IOCTL is not set
 CONFIG_IDE_PROC_FS=y
 
 #
 # IDE chipset support/bugfixes
 #
-CONFIG_IDE_GENERIC=y
 # CONFIG_BLK_DEV_PLATFORM is not set
+CONFIG_BLK_DEV_IDEDMA_SFF=y
 
 #
 # PCI IDE chipsets support
 #
 CONFIG_BLK_DEV_IDEPCI=y
-CONFIG_IDEPCI_SHARE_IRQ=y
 CONFIG_IDEPCI_PCIBUS_ORDER=y
 # CONFIG_BLK_DEV_OFFBOARD is not set
 CONFIG_BLK_DEV_GENERIC=y
 # CONFIG_BLK_DEV_OPTI621 is not set
 CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-CONFIG_IDEDMA_ONLYDISK=y
 # CONFIG_BLK_DEV_AEC62XX is not set
 # CONFIG_BLK_DEV_ALI15X3 is not set
 # CONFIG_BLK_DEV_AMD74XX is not set
 # CONFIG_BLK_DEV_CMD64X is not set
 # CONFIG_BLK_DEV_TRIFLEX is not set
-# CONFIG_BLK_DEV_CY82C693 is not set
 # CONFIG_BLK_DEV_CS5520 is not set
 # CONFIG_BLK_DEV_CS5530 is not set
-# CONFIG_BLK_DEV_HPT34X is not set
 # CONFIG_BLK_DEV_HPT366 is not set
 # CONFIG_BLK_DEV_JMICRON is not set
 # CONFIG_BLK_DEV_SC1200 is not set
 # CONFIG_BLK_DEV_PIIX is not set
+# CONFIG_BLK_DEV_IT8172 is not set
 # CONFIG_BLK_DEV_IT8213 is not set
 # CONFIG_BLK_DEV_IT821X is not set
 CONFIG_BLK_DEV_NS87415=y
@@ -398,10 +437,7 @@ CONFIG_BLK_DEV_NS87415=y
 # CONFIG_BLK_DEV_TRM290 is not set
 # CONFIG_BLK_DEV_VIA82CXXX is not set
 # CONFIG_BLK_DEV_TC86C001 is not set
-# CONFIG_IDE_ARM is not set
 CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
-# CONFIG_BLK_DEV_HD is not set
 
 #
 # SCSI device support
@@ -440,8 +476,10 @@ CONFIG_SCSI_SPI_ATTRS=y
 # CONFIG_SCSI_FC_ATTRS is not set
 # CONFIG_SCSI_ISCSI_ATTRS is not set
 # CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
 CONFIG_SCSI_LOWLEVEL=y
 # CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_CXGB3_ISCSI is not set
 # CONFIG_BLK_DEV_3W_XXXX_RAID is not set
 # CONFIG_SCSI_3W_9XXX is not set
 # CONFIG_SCSI_ACARD is not set
@@ -452,11 +490,14 @@ CONFIG_SCSI_LOWLEVEL=y
 # CONFIG_SCSI_AIC79XX is not set
 # CONFIG_SCSI_AIC94XX is not set
 # CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ADVANSYS is not set
 # CONFIG_SCSI_ARCMSR is not set
 # CONFIG_MEGARAID_NEWGEN is not set
 # CONFIG_MEGARAID_LEGACY is not set
 # CONFIG_MEGARAID_SAS is not set
 # CONFIG_SCSI_HPTIOP is not set
+# CONFIG_LIBFC is not set
+# CONFIG_FCOE is not set
 # CONFIG_SCSI_DMX3191D is not set
 # CONFIG_SCSI_FUTURE_DOMAIN is not set
 # CONFIG_SCSI_IPS is not set
@@ -464,6 +505,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # CONFIG_SCSI_INIA100 is not set
 # CONFIG_SCSI_PPA is not set
 # CONFIG_SCSI_IMM is not set
+# CONFIG_SCSI_MVSAS is not set
 CONFIG_SCSI_LASI700=y
 CONFIG_53C700_LE_ON_BE=y
 # CONFIG_SCSI_STEX is not set
@@ -487,9 +529,11 @@ CONFIG_SCSI_NCR53C8XX_SYNC=20
 # CONFIG_SCSI_DEBUG is not set
 # CONFIG_SCSI_SRP is not set
 # CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
+# CONFIG_SCSI_DH is not set
 # CONFIG_ATA is not set
 CONFIG_MD=y
 CONFIG_BLK_DEV_MD=y
+CONFIG_MD_AUTODETECT=y
 CONFIG_MD_LINEAR=y
 CONFIG_MD_RAID0=y
 CONFIG_MD_RAID1=y
@@ -505,32 +549,47 @@ CONFIG_BLK_DEV_DM=y
 # CONFIG_DM_ZERO is not set
 # CONFIG_DM_MULTIPATH is not set
 # CONFIG_DM_DELAY is not set
+# CONFIG_DM_UEVENT is not set
+# CONFIG_FUSION is not set
 
 #
-# Fusion MPT device support
+# IEEE 1394 (FireWire) support
 #
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
-# IEEE 1394 (FireWire) support
+# Enable only one of the two stacks, unless you know what you are doing
 #
 # CONFIG_FIREWIRE is not set
 # CONFIG_IEEE1394 is not set
 # CONFIG_I2O is not set
 CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
 CONFIG_DUMMY=m
 CONFIG_BONDING=m
 # CONFIG_MACVLAN is not set
 # CONFIG_EQUALIZER is not set
 CONFIG_TUN=m
 # CONFIG_VETH is not set
-# CONFIG_IP1000 is not set
 # CONFIG_ARCNET is not set
-# CONFIG_PHYLIB is not set
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_NATIONAL_PHY is not set
+# CONFIG_STE10XP is not set
+# CONFIG_LSI_ET1011C_PHY is not set
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
 CONFIG_NET_ETHERNET=y
 CONFIG_MII=m
 CONFIG_LASI_82596=y
@@ -550,13 +609,15 @@ CONFIG_TULIP=y
 # CONFIG_DM9102 is not set
 # CONFIG_ULI526X is not set
 # CONFIG_PCMCIA_XIRCOM is not set
-# CONFIG_PCMCIA_XIRTULIP is not set
 # CONFIG_DEPCA is not set
 # CONFIG_HP100 is not set
 # CONFIG_IBM_NEW_EMAC_ZMII is not set
 # CONFIG_IBM_NEW_EMAC_RGMII is not set
 # CONFIG_IBM_NEW_EMAC_TAH is not set
 # CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
 CONFIG_NET_PCI=y
 # CONFIG_PCNET32 is not set
 # CONFIG_AMD8111_ETH is not set
@@ -564,7 +625,7 @@ CONFIG_NET_PCI=y
 # CONFIG_AC3200 is not set
 # CONFIG_B44 is not set
 # CONFIG_FORCEDETH is not set
-# CONFIG_EEPRO100 is not set
+# CONFIG_CS89x0 is not set
 # CONFIG_E100 is not set
 # CONFIG_LNE390 is not set
 # CONFIG_FEALNX is not set
@@ -574,19 +635,24 @@ CONFIG_NET_PCI=y
 # CONFIG_ES3210 is not set
 # CONFIG_8139CP is not set
 # CONFIG_8139TOO is not set
+# CONFIG_R6040 is not set
 # CONFIG_SIS900 is not set
 # CONFIG_EPIC100 is not set
+# CONFIG_SMSC9420 is not set
 # CONFIG_SUNDANCE is not set
 # CONFIG_TLAN is not set
 # CONFIG_VIA_RHINE is not set
 # CONFIG_SC92031 is not set
 # CONFIG_NET_POCKET is not set
+# CONFIG_ATL2 is not set
 CONFIG_NETDEV_1000=y
 CONFIG_ACENIC=y
 # CONFIG_ACENIC_OMIT_TIGON_I is not set
 # CONFIG_DL2K is not set
 # CONFIG_E1000 is not set
 # CONFIG_E1000E is not set
+# CONFIG_IP1000 is not set
+# CONFIG_IGB is not set
 # CONFIG_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -594,23 +660,31 @@ CONFIG_ACENIC=y
 # CONFIG_SIS190 is not set
 # CONFIG_SKGE is not set
 # CONFIG_SKY2 is not set
-# CONFIG_SK98LIN is not set
 # CONFIG_VIA_VELOCITY is not set
 CONFIG_TIGON3=y
 # CONFIG_BNX2 is not set
 # CONFIG_QLA3XXX is not set
 # CONFIG_ATL1 is not set
+# CONFIG_ATL1E is not set
+# CONFIG_ATL1C is not set
+# CONFIG_JME is not set
 CONFIG_NETDEV_10000=y
 # CONFIG_CHELSIO_T1 is not set
+CONFIG_CHELSIO_T3_DEPENDS=y
 # CONFIG_CHELSIO_T3 is not set
+# CONFIG_ENIC is not set
 # CONFIG_IXGBE is not set
 # CONFIG_IXGB is not set
 # CONFIG_S2IO is not set
 # CONFIG_MYRI10GE is not set
 # CONFIG_NETXEN_NIC is not set
 # CONFIG_NIU is not set
+# CONFIG_MLX4_EN is not set
 # CONFIG_MLX4_CORE is not set
 # CONFIG_TEHUTI is not set
+# CONFIG_BNX2X is not set
+# CONFIG_QLGE is not set
+# CONFIG_SFC is not set
 # CONFIG_TR is not set
 
 #
@@ -618,6 +692,11 @@ CONFIG_NETDEV_10000=y
 #
 # CONFIG_WLAN_PRE80211 is not set
 # CONFIG_WLAN_80211 is not set
+# CONFIG_IWLWIFI_LEDS is not set
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
 
 #
 # USB Network Adapters
@@ -626,7 +705,6 @@ CONFIG_NETDEV_10000=y
 # CONFIG_USB_KAWETH is not set
 # CONFIG_USB_PEGASUS is not set
 # CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
 # CONFIG_USB_USBNET is not set
 CONFIG_NET_PCMCIA=y
 # CONFIG_PCMCIA_3C589 is not set
@@ -654,7 +732,6 @@ CONFIG_PPPOE=m
 # CONFIG_SLIP is not set
 CONFIG_SLHC=m
 # CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
 # CONFIG_NETCONSOLE is not set
 # CONFIG_NETPOLL is not set
 # CONFIG_NET_POLL_CONTROLLER is not set
@@ -676,7 +753,6 @@ CONFIG_INPUT_MOUSEDEV_PSAUX=y
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -699,11 +775,12 @@ CONFIG_MOUSE_PS2=y
 CONFIG_MOUSE_PS2_ALPS=y
 CONFIG_MOUSE_PS2_LOGIPS2PP=y
 CONFIG_MOUSE_PS2_SYNAPTICS=y
-CONFIG_MOUSE_PS2_LIFEBOOK=y
 CONFIG_MOUSE_PS2_TRACKPOINT=y
+# CONFIG_MOUSE_PS2_ELANTECH is not set
 # CONFIG_MOUSE_PS2_TOUCHKIT is not set
 CONFIG_MOUSE_SERIAL=y
 # CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_BCM5974 is not set
 # CONFIG_MOUSE_VSXXXAA is not set
 CONFIG_MOUSE_HIL=y
 # CONFIG_INPUT_JOYSTICK is not set
@@ -729,10 +806,13 @@ CONFIG_SERIO_LIBPS2=y
 # Character devices
 #
 CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
 CONFIG_VT_CONSOLE=y
 CONFIG_HW_CONSOLE=y
 # CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
 # CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_NOZOMI is not set
 
 #
 # Serial drivers
@@ -759,21 +839,16 @@ CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
 # CONFIG_SERIAL_JSM is not set
 CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=64
 CONFIG_PRINTER=m
 # CONFIG_LP_CONSOLE is not set
 CONFIG_PPDEV=m
-# CONFIG_TIPAR is not set
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 # CONFIG_HW_RANDOM is not set
-CONFIG_GEN_RTC=y
-CONFIG_GEN_RTC_X=y
 # CONFIG_R3964 is not set
 # CONFIG_APPLICOM is not set
-# CONFIG_AGP is not set
-# CONFIG_DRM is not set
 
 #
 # PCMCIA character devices
@@ -781,60 +856,70 @@ CONFIG_GEN_RTC_X=y
 # CONFIG_SYNCLINK_CS is not set
 # CONFIG_CARDMAN_4000 is not set
 # CONFIG_CARDMAN_4040 is not set
+# CONFIG_IPWIRELESS is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
 # CONFIG_I2C is not set
-
-#
-# SPI support
-#
 # CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
 # CONFIG_W1 is not set
 # CONFIG_POWER_SUPPLY is not set
 # CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+# CONFIG_THERMAL_HWMON is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
 
 #
 # Sonics Silicon Backplane
 #
-CONFIG_SSB_POSSIBLE=y
 # CONFIG_SSB is not set
 
 #
 # Multifunction device drivers
 #
+# CONFIG_MFD_CORE is not set
 # CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_REGULATOR is not set
 
 #
 # Multimedia devices
 #
+
+#
+# Multimedia core support
+#
 # CONFIG_VIDEO_DEV is not set
 # CONFIG_DVB_CORE is not set
-# CONFIG_DAB is not set
+# CONFIG_VIDEO_MEDIA is not set
 
 #
-# Graphics support
+# Multimedia drivers
 #
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+# CONFIG_DAB is not set
 
 #
-# Display device support
+# Graphics support
 #
-# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
 # CONFIG_VGASTATE is not set
 CONFIG_VIDEO_OUTPUT_CONTROL=m
 CONFIG_FB=y
 # CONFIG_FIRMWARE_EDID is not set
 # CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
 CONFIG_FB_CFB_FILLRECT=y
 CONFIG_FB_CFB_COPYAREA=y
 CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
 # CONFIG_FB_SYS_FILLRECT is not set
 # CONFIG_FB_SYS_COPYAREA is not set
 # CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
 # CONFIG_FB_SYS_FOPS is not set
-CONFIG_FB_DEFERRED_IO=y
 # CONFIG_FB_SVGALIB is not set
 # CONFIG_FB_MACMODES is not set
 # CONFIG_FB_BACKLIGHT is not set
@@ -860,6 +945,7 @@ CONFIG_FB_STI=y
 # CONFIG_FB_S3 is not set
 # CONFIG_FB_SAVAGE is not set
 # CONFIG_FB_SIS is not set
+# CONFIG_FB_VIA is not set
 # CONFIG_FB_NEOMAGIC is not set
 # CONFIG_FB_KYRO is not set
 # CONFIG_FB_3DFX is not set
@@ -868,7 +954,16 @@ CONFIG_FB_STI=y
 # CONFIG_FB_TRIDENT is not set
 # CONFIG_FB_ARK is not set
 # CONFIG_FB_PM3 is not set
+# CONFIG_FB_CARMINE is not set
 # CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
 
 #
 # Console display driver support
@@ -896,15 +991,8 @@ CONFIG_LOGO=y
 # CONFIG_LOGO_LINUX_VGA16 is not set
 # CONFIG_LOGO_LINUX_CLUT224 is not set
 CONFIG_LOGO_PARISC_CLUT224=y
-
-#
-# Sound
-#
 CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
+CONFIG_SOUND_OSS_CORE=y
 CONFIG_SND=y
 CONFIG_SND_TIMER=y
 CONFIG_SND_PCM=y
@@ -920,11 +1008,9 @@ CONFIG_SND_SUPPORT_OLD_API=y
 CONFIG_SND_VERBOSE_PROCFS=y
 # CONFIG_SND_VERBOSE_PRINTK is not set
 # CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
+CONFIG_SND_VMASTER=y
 CONFIG_SND_AC97_CODEC=y
+CONFIG_SND_DRIVERS=y
 # CONFIG_SND_DUMMY is not set
 # CONFIG_SND_VIRMIDI is not set
 # CONFIG_SND_MTPAV is not set
@@ -932,10 +1018,8 @@ CONFIG_SND_AC97_CODEC=y
 # CONFIG_SND_SERIAL_U16550 is not set
 # CONFIG_SND_MPU401 is not set
 # CONFIG_SND_PORTMAN2X4 is not set
-
-#
-# PCI devices
-#
+# CONFIG_SND_AC97_POWER_SAVE is not set
+CONFIG_SND_PCI=y
 CONFIG_SND_AD1889=y
 # CONFIG_SND_ALS300 is not set
 # CONFIG_SND_ALI5451 is not set
@@ -944,10 +1028,12 @@ CONFIG_SND_AD1889=y
 # CONFIG_SND_AU8810 is not set
 # CONFIG_SND_AU8820 is not set
 # CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AW2 is not set
 # CONFIG_SND_AZT3328 is not set
 # CONFIG_SND_BT87X is not set
 # CONFIG_SND_CA0106 is not set
 # CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_OXYGEN is not set
 # CONFIG_SND_CS4281 is not set
 # CONFIG_SND_CS46XX is not set
 # CONFIG_SND_DARLA20 is not set
@@ -972,6 +1058,7 @@ CONFIG_SND_AD1889=y
 # CONFIG_SND_HDA_INTEL is not set
 # CONFIG_SND_HDSP is not set
 # CONFIG_SND_HDSPM is not set
+# CONFIG_SND_HIFIER is not set
 # CONFIG_SND_ICE1712 is not set
 # CONFIG_SND_ICE1724 is not set
 # CONFIG_SND_INTEL8X0 is not set
@@ -989,58 +1076,67 @@ CONFIG_SND_AD1889=y
 # CONFIG_SND_TRIDENT is not set
 # CONFIG_SND_VIA82XX is not set
 # CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VIRTUOSO is not set
 # CONFIG_SND_VX222 is not set
 # CONFIG_SND_YMFPCI is not set
-# CONFIG_SND_AC97_POWER_SAVE is not set
-
-#
-# USB devices
-#
+CONFIG_SND_USB=y
 # CONFIG_SND_USB_AUDIO is not set
 # CONFIG_SND_USB_CAIAQ is not set
-
-#
-# PCMCIA devices
-#
+CONFIG_SND_PCMCIA=y
 # CONFIG_SND_VXPOCKET is not set
 # CONFIG_SND_PDAUDIOCF is not set
-
-#
-# GSC devices
-#
+CONFIG_SND_GSC=y
 CONFIG_SND_HARMONY=y
-
-#
-# System on Chip audio support
-#
 # CONFIG_SND_SOC is not set
-
-#
-# SoC Audio support for SuperH
-#
-
-#
-# Open Sound System
-#
 # CONFIG_SOUND_PRIME is not set
 CONFIG_AC97_BUS=y
 CONFIG_HID_SUPPORT=y
 CONFIG_HID=y
 CONFIG_HID_DEBUG=y
+# CONFIG_HIDRAW is not set
 
 #
 # USB Input Devices
 #
 CONFIG_USB_HID=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
+# CONFIG_HID_PID is not set
 # CONFIG_USB_HIDDEV is not set
+
+#
+# Special HID drivers
+#
+CONFIG_HID_COMPAT=y
+CONFIG_HID_A4TECH=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_BELKIN=y
+CONFIG_HID_CHERRY=y
+CONFIG_HID_CHICONY=y
+CONFIG_HID_CYPRESS=y
+CONFIG_HID_EZKEY=y
+CONFIG_HID_GYRATION=y
+CONFIG_HID_LOGITECH=y
+# CONFIG_LOGITECH_FF is not set
+# CONFIG_LOGIRUMBLEPAD2_FF is not set
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MONTEREY=y
+CONFIG_HID_NTRIG=y
+CONFIG_HID_PANTHERLORD=y
+# CONFIG_PANTHERLORD_FF is not set
+CONFIG_HID_PETALYNX=y
+CONFIG_HID_SAMSUNG=y
+CONFIG_HID_SONY=y
+CONFIG_HID_SUNPLUS=y
+# CONFIG_GREENASIA_FF is not set
+CONFIG_HID_TOPSEED=y
+# CONFIG_THRUSTMASTER_FF is not set
+# CONFIG_ZEROPLUS_FF is not set
 CONFIG_USB_SUPPORT=y
 CONFIG_USB_ARCH_HAS_HCD=y
 CONFIG_USB_ARCH_HAS_OHCI=y
 CONFIG_USB_ARCH_HAS_EHCI=y
 CONFIG_USB=y
 # CONFIG_USB_DEBUG is not set
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
 
 #
 # Miscellaneous USB options
@@ -1049,12 +1145,18 @@ CONFIG_USB_DEVICEFS=y
 CONFIG_USB_DEVICE_CLASS=y
 # CONFIG_USB_DYNAMIC_MINORS is not set
 # CONFIG_USB_OTG is not set
+CONFIG_USB_MON=y
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
 
 #
 # USB Host Controller Drivers
 #
+# CONFIG_USB_C67X00_HCD is not set
 # CONFIG_USB_EHCI_HCD is not set
+# CONFIG_USB_OXU210HP_HCD is not set
 # CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
 CONFIG_USB_OHCI_HCD=y
 # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
 # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
@@ -1062,19 +1164,23 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
 CONFIG_USB_UHCI_HCD=y
 # CONFIG_USB_SL811_HCD is not set
 # CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_WHCI_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
 
 #
 # USB Device Class drivers
 #
 # CONFIG_USB_ACM is not set
 # CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM is not set
+# CONFIG_USB_TMC is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
 #
 
 #
-# may also be needed; see USB_STORAGE Help for more information
+# see USB_STORAGE Help for more information
 #
 # CONFIG_USB_STORAGE is not set
 # CONFIG_USB_LIBUSUAL is not set
@@ -1084,16 +1190,11 @@ CONFIG_USB_UHCI_HCD=y
 #
 # CONFIG_USB_MDC800 is not set
 # CONFIG_USB_MICROTEK is not set
-CONFIG_USB_MON=y
 
 #
 # USB port drivers
 #
 # CONFIG_USB_USS720 is not set
-
-#
-# USB Serial Converter support
-#
 # CONFIG_USB_SERIAL is not set
 
 #
@@ -1102,7 +1203,7 @@ CONFIG_USB_MON=y
 # CONFIG_USB_EMI62 is not set
 # CONFIG_USB_EMI26 is not set
 # CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_SEVSEG is not set
 # CONFIG_USB_RIO500 is not set
 # CONFIG_USB_LEGOTOWER is not set
 # CONFIG_USB_LCD is not set
@@ -1118,38 +1219,60 @@ CONFIG_USB_MON=y
 # CONFIG_USB_TRANCEVIBRATOR is not set
 # CONFIG_USB_IOWARRIOR is not set
 # CONFIG_USB_TEST is not set
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_VST is not set
+# CONFIG_USB_GADGET is not set
 
 #
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
+# OTG and related infrastructure
 #
-# CONFIG_USB_GADGET is not set
+# CONFIG_UWB is not set
 # CONFIG_MMC is not set
+# CONFIG_MEMSTICK is not set
 # CONFIG_NEW_LEDS is not set
+# CONFIG_ACCESSIBILITY is not set
 # CONFIG_INFINIBAND is not set
-# CONFIG_RTC_CLASS is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
 
 #
-# DMA Engine support
+# RTC interfaces
 #
-# CONFIG_DMA_ENGINE is not set
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
 
 #
-# DMA Clients
+# SPI RTC drivers
 #
 
 #
-# DMA Devices
+# Platform RTC drivers
 #
-# CONFIG_AUXDISPLAY is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
 
 #
-# Userspace I/O
+# on-CPU RTC drivers
 #
+CONFIG_RTC_DRV_PARISC=y
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
 # CONFIG_UIO is not set
+# CONFIG_STAGING is not set
 
 #
 # File systems
@@ -1159,21 +1282,20 @@ CONFIG_EXT2_FS=y
 # CONFIG_EXT2_FS_XIP is not set
 CONFIG_EXT3_FS=y
 # CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4DEV_FS is not set
+# CONFIG_EXT4_FS is not set
 CONFIG_JBD=y
 # CONFIG_JBD_DEBUG is not set
 # CONFIG_REISERFS_FS is not set
 # CONFIG_JFS_FS is not set
 CONFIG_FS_POSIX_ACL=y
+CONFIG_FILE_LOCKING=y
 # CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
 # CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
+# CONFIG_BTRFS_FS is not set
+CONFIG_DNOTIFY=y
 CONFIG_INOTIFY=y
 CONFIG_INOTIFY_USER=y
 # CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
 CONFIG_AUTOFS_FS=y
 # CONFIG_AUTOFS4_FS is not set
 # CONFIG_FUSE_FS is not set
@@ -1202,16 +1324,13 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
 CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
 CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
+CONFIG_MISC_FILESYSTEMS=y
 # CONFIG_ADFS_FS is not set
 # CONFIG_AFFS_FS is not set
 # CONFIG_ECRYPT_FS is not set
@@ -1221,33 +1340,32 @@ CONFIG_RAMFS=y
 # CONFIG_BFS_FS is not set
 # CONFIG_EFS_FS is not set
 # CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
 # CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
 # CONFIG_HPFS_FS is not set
 # CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
 # CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
+CONFIG_ROOT_NFS=y
 CONFIG_NFSD=y
 CONFIG_NFSD_V3=y
 # CONFIG_NFSD_V3_ACL is not set
 CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
-CONFIG_ROOT_NFS=y
 CONFIG_LOCKD=y
 CONFIG_LOCKD_V4=y
 CONFIG_EXPORTFS=y
 CONFIG_NFS_COMMON=y
 CONFIG_SUNRPC=y
 CONFIG_SUNRPC_GSS=y
-# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_SUNRPC_REGISTER_V4 is not set
 CONFIG_RPCSEC_GSS_KRB5=y
 CONFIG_RPCSEC_GSS_SPKM3=m
 CONFIG_SMB_FS=m
@@ -1256,6 +1374,7 @@ CONFIG_SMB_NLS_REMOTE="cp437"
 CONFIG_CIFS=m
 # CONFIG_CIFS_STATS is not set
 # CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_UPCALL is not set
 # CONFIG_CIFS_XATTR is not set
 # CONFIG_CIFS_DEBUG2 is not set
 # CONFIG_CIFS_EXPERIMENTAL is not set
@@ -1268,10 +1387,6 @@ CONFIG_CIFS=m
 #
 # CONFIG_PARTITION_ADVANCED is not set
 CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
 CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 CONFIG_NLS_CODEPAGE_437=y
@@ -1312,33 +1427,28 @@ CONFIG_NLS_ISO8859_15=m
 CONFIG_NLS_KOI8_R=m
 CONFIG_NLS_KOI8_U=m
 CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 
 #
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
 # Kernel hacking
 #
 # CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
 CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
 CONFIG_MAGIC_SYSRQ=y
 # CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
+CONFIG_DEBUG_FS=y
 CONFIG_HEADERS_CHECK=y
 CONFIG_DEBUG_KERNEL=y
 # CONFIG_DEBUG_SHIRQ is not set
 CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
 CONFIG_SCHED_DEBUG=y
 # CONFIG_SCHEDSTATS is not set
 # CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS is not set
 # CONFIG_DEBUG_SLAB is not set
 # CONFIG_DEBUG_RT_MUTEXES is not set
 # CONFIG_RT_MUTEX_TESTER is not set
@@ -1350,10 +1460,33 @@ CONFIG_DEBUG_MUTEXES=y
 CONFIG_DEBUG_BUGVERBOSE=y
 # CONFIG_DEBUG_INFO is not set
 # CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+CONFIG_DEBUG_MEMORY_INIT=y
 # CONFIG_DEBUG_LIST is not set
-CONFIG_FORCED_INLINING=y
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
 # CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
 # CONFIG_FAULT_INJECTION is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_NOP_TRACER=y
+CONFIG_RING_BUFFER=y
+CONFIG_TRACING=y
+
+#
+# Tracers
+#
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
+# CONFIG_BOOT_TRACER is not set
+# CONFIG_TRACE_BRANCH_PROFILING is not set
+# CONFIG_FTRACE_STARTUP_TEST is not set
+# CONFIG_BUILD_DOCSRC is not set
+# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
+# CONFIG_SAMPLES is not set
 # CONFIG_DEBUG_RODATA is not set
 
 #
@@ -1362,56 +1495,112 @@ CONFIG_FORCED_INLINING=y
 CONFIG_KEYS=y
 CONFIG_KEYS_DEBUG_PROC_KEYS=y
 # CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
 CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+# CONFIG_CRYPTO_FIPS is not set
 CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD=y
+CONFIG_CRYPTO_AEAD2=y
 CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
 CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG2=y
 CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_NULL=m
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_AUTHENC=y
+CONFIG_CRYPTO_TEST=m
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+# CONFIG_CRYPTO_ECB is not set
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
 CONFIG_CRYPTO_HMAC=y
 # CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=m
 CONFIG_CRYPTO_MD4=m
 CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=m
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
 CONFIG_CRYPTO_SHA1=y
 CONFIG_CRYPTO_SHA256=m
 CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
 CONFIG_CRYPTO_TGR192=m
-# CONFIG_CRYPTO_GF128MUL is not set
-# CONFIG_CRYPTO_ECB is not set
-CONFIG_CRYPTO_CBC=y
-# CONFIG_CRYPTO_PCBC is not set
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_XTS is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-CONFIG_CRYPTO_DES=y
-# CONFIG_CRYPTO_FCRYPT is not set
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_WP512=m
+
+#
+# Ciphers
+#
 CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_BLOWFISH=m
+# CONFIG_CRYPTO_CAMELLIA is not set
 CONFIG_CRYPTO_CAST5=m
 CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
 CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
+# CONFIG_CRYPTO_SALSA20 is not set
 # CONFIG_CRYPTO_SEED is not set
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+
+#
+# Compression
+#
 CONFIG_CRYPTO_DEFLATE=y
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-# CONFIG_CRYPTO_CAMELLIA is not set
-CONFIG_CRYPTO_TEST=m
-# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_LZO is not set
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
 # CONFIG_CRYPTO_HW is not set
 
 #
 # Library routines
 #
 CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
 CONFIG_CRC_CCITT=m
 # CONFIG_CRC16 is not set
+# CONFIG_CRC_T10DIF is not set
 # CONFIG_CRC_ITU_T is not set
 CONFIG_CRC32=y
 # CONFIG_CRC7 is not set
index bd9a4db..5cbe9f9 100644 (file)
@@ -137,7 +137,6 @@ int hpux_getdents(unsigned int fd, struct hpux_dirent __user *dirent, unsigned i
                        error = count - buf.count;
        }
 
-out_putf:
        fput(file);
 out:
        return error;
index ffb2088..89fb400 100644 (file)
@@ -79,6 +79,7 @@
 
 #include <asm/asm-offsets.h>
 #include <asm/page.h>
+#include <asm/types.h>
 
 #include <asm/asmregs.h>
 
 
        /* Shift Left - note the r and t can NOT be the same! */
        .macro shl r, sa, t
-       dep,z   \r, 31-\sa, 32-\sa, \t
+       dep,z   \r, 31-(\sa), 32-(\sa), \t
        .endm
 
        /* The PA 2.0 shift left */
        .macro shlw r, sa, t
-       depw,z  \r, 31-\sa, 32-\sa, \t
+       depw,z  \r, 31-(\sa), 32-(\sa), \t
        .endm
 
        /* And the PA 2.0W shift left */
        .macro shld r, sa, t
-       depd,z  \r, 63-\sa, 64-\sa, \t
+       depd,z  \r, 63-(\sa), 64-(\sa), \t
        .endm
 
        /* Shift Right - note the r and t can NOT be the same! */
        .macro shr r, sa, t
-       extru \r, 31-\sa, 32-\sa, \t
+       extru \r, 31-(\sa), 32-(\sa), \t
        .endm
 
        /* pa20w version of shift right */
        .macro shrd r, sa, t
-       extrd,u \r, 63-\sa, 64-\sa, \t
+       extrd,u \r, 63-(\sa), 64-(\sa), \t
        .endm
 
        /* load 32-bit 'value' into 'reg' compensating for the ldil
index d3031d1..1f6d2ae 100644 (file)
@@ -174,15 +174,48 @@ static inline void __raw_writeq(unsigned long long b, volatile void __iomem *add
        *(volatile unsigned long long __force *) addr = b;
 }
 
-/* readb can never be const, so use __fswab instead of le*_to_cpu */
-#define readb(addr) __raw_readb(addr)
-#define readw(addr) le16_to_cpu(__raw_readw(addr))
-#define readl(addr) le32_to_cpu(__raw_readl(addr))
-#define readq(addr) le64_to_cpu(__raw_readq(addr))
-#define writeb(b, addr) __raw_writeb(b, addr)
-#define writew(b, addr) __raw_writew(cpu_to_le16(b), addr)
-#define writel(b, addr) __raw_writel(cpu_to_le32(b), addr)
-#define writeq(b, addr) __raw_writeq(cpu_to_le64(b), addr)
+static inline unsigned char readb(const volatile void __iomem *addr)
+{
+       return __raw_readb(addr);
+}
+static inline unsigned short readw(const volatile void __iomem *addr)
+{
+       return le16_to_cpu(__raw_readw(addr));
+}
+static inline unsigned int readl(const volatile void __iomem *addr)
+{
+       return le32_to_cpu(__raw_readl(addr));
+}
+static inline unsigned long long readq(const volatile void __iomem *addr)
+{
+       return le64_to_cpu(__raw_readq(addr));
+}
+
+static inline void writeb(unsigned char b, volatile void __iomem *addr)
+{
+       __raw_writeb(b, addr);
+}
+static inline void writew(unsigned short w, volatile void __iomem *addr)
+{
+       __raw_writew(cpu_to_le16(w), addr);
+}
+static inline void writel(unsigned int l, volatile void __iomem *addr)
+{
+       __raw_writel(cpu_to_le32(l), addr);
+}
+static inline void writeq(unsigned long long q, volatile void __iomem *addr)
+{
+       __raw_writeq(cpu_to_le64(q), addr);
+}
+
+#define        readb   readb
+#define        readw   readw
+#define        readl   readl
+#define readq  readq
+#define writeb writeb
+#define writew writew
+#define writel writel
+#define writeq writeq
 
 #define readb_relaxed(addr) readb(addr)
 #define readw_relaxed(addr) readw(addr)
index 399c819..dfa26b6 100644 (file)
@@ -49,7 +49,7 @@ extern unsigned long txn_alloc_addr(unsigned int);
 extern unsigned long txn_affinity_addr(unsigned int irq, int cpu);
 
 extern int cpu_claim_irq(unsigned int irq, struct irq_chip *, void *);
-extern int cpu_check_affinity(unsigned int irq, cpumask_t *dest);
+extern int cpu_check_affinity(unsigned int irq, const struct cpumask *dest);
 
 /* soft power switch support (power.c) */
 extern struct tasklet_struct power_tasklet;
index 1c6dbb6..cd4c0b2 100644 (file)
@@ -241,6 +241,7 @@ unsigned long copy_in_user(void __user *dst, const void __user *src, unsigned lo
 #define __copy_to_user_inatomic __copy_to_user
 #define __copy_from_user_inatomic __copy_from_user
 
+struct pt_regs;
 int fixup_exception(struct pt_regs *regs);
 
 #endif /* __PARISC_UACCESS_H */
index 5259d8c..837530e 100644 (file)
@@ -551,10 +551,7 @@ void flush_cache_range(struct vm_area_struct *vma,
 {
        int sr3;
 
-       if (!vma->vm_mm->context) {
-               BUG();
-               return;
-       }
+       BUG_ON(!vma->vm_mm->context);
 
        sr3 = mfsp(3);
        if (vma->vm_mm->context == sr3) {
index d1fa4ed..0db9fdc 100644 (file)
         * abstractions for the macros */
        .macro          EXTR    reg1,start,length,reg2
 #ifdef CONFIG_64BIT
-       extrd,u         \reg1,32+\start,\length,\reg2
+       extrd,u         \reg1,32+(\start),\length,\reg2
 #else
        extrw,u         \reg1,\start,\length,\reg2
 #endif
 
        .macro          DEP     reg1,start,length,reg2
 #ifdef CONFIG_64BIT
-       depd            \reg1,32+\start,\length,\reg2
+       depd            \reg1,32+(\start),\length,\reg2
 #else
        depw            \reg1,\start,\length,\reg2
 #endif
 
        .macro          DEPI    val,start,length,reg
 #ifdef CONFIG_64BIT
-       depdi           \val,32+\start,\length,\reg
+       depdi           \val,32+(\start),\length,\reg
 #else
        depwi           \val,\start,\length,\reg
 #endif
index 03f26bd..f6d2412 100644 (file)
@@ -151,7 +151,7 @@ static void convert_to_wide(unsigned long *addr)
 }
 
 #ifdef CONFIG_64BIT
-void __init set_firmware_width_unlocked(void)
+void __cpuinit set_firmware_width_unlocked(void)
 {
        int ret;
 
@@ -168,7 +168,7 @@ void __init set_firmware_width_unlocked(void)
  * This function must be called before any pdc_* function that uses the
  * convert_to_wide function.
  */
-void __init set_firmware_width(void)
+void __cpuinit set_firmware_width(void)
 {
        unsigned long flags;
        spin_lock_irqsave(&pdc_lock, flags);
@@ -176,11 +176,11 @@ void __init set_firmware_width(void)
        spin_unlock_irqrestore(&pdc_lock, flags);
 }
 #else
-void __init set_firmware_width_unlocked(void) {
+void __cpuinit set_firmware_width_unlocked(void) {
        return;
 }
 
-void __init set_firmware_width(void) {
+void __cpuinit set_firmware_width(void) {
        return;
 }
 #endif /*CONFIG_64BIT*/
@@ -302,7 +302,7 @@ int pdc_chassis_warn(unsigned long *warn)
        return retval;
 }
 
-int __init pdc_coproc_cfg_unlocked(struct pdc_coproc_cfg *pdc_coproc_info)
+int __cpuinit pdc_coproc_cfg_unlocked(struct pdc_coproc_cfg *pdc_coproc_info)
 {
        int ret;
 
@@ -323,7 +323,7 @@ int __init pdc_coproc_cfg_unlocked(struct pdc_coproc_cfg *pdc_coproc_info)
  * This PDC call returns the presence and status of all the coprocessors
  * attached to the processor.
  */
-int __init pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info)
+int __cpuinit pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info)
 {
        int ret;
        unsigned long flags;
index 4948280..1c740f5 100644 (file)
@@ -112,7 +112,7 @@ void cpu_end_irq(unsigned int irq)
 }
 
 #ifdef CONFIG_SMP
-int cpu_check_affinity(unsigned int irq, cpumask_t *dest)
+int cpu_check_affinity(unsigned int irq, const struct cpumask *dest)
 {
        int cpu_dest;
 
@@ -120,23 +120,25 @@ int cpu_check_affinity(unsigned int irq, cpumask_t *dest)
        if (CHECK_IRQ_PER_CPU(irq)) {
                /* Bad linux design decision.  The mask has already
                 * been set; we must reset it */
-               cpumask_setall(irq_desc[irq].affinity);
+               cpumask_setall(&irq_desc[irq].affinity);
                return -EINVAL;
        }
 
        /* whatever mask they set, we just allow one CPU */
        cpu_dest = first_cpu(*dest);
-       *dest = cpumask_of_cpu(cpu_dest);
 
-       return 0;
+       return cpu_dest;
 }
 
 static void cpu_set_affinity_irq(unsigned int irq, const struct cpumask *dest)
 {
-       if (cpu_check_affinity(irq, dest))
+       int cpu_dest;
+
+       cpu_dest = cpu_check_affinity(irq, dest);
+       if (cpu_dest < 0)
                return;
 
-       cpumask_copy(irq_desc[irq].affinity, dest);
+       cpumask_copy(&irq_desc[irq].affinity, dest);
 }
 #endif
 
@@ -183,7 +185,7 @@ int show_interrupts(struct seq_file *p, void *v)
                seq_printf(p, "%3d: ", i);
 #ifdef CONFIG_SMP
                for_each_online_cpu(j)
-                       seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
+                       seq_printf(p, "%10u ", kstat_irqs_cpu(i, j));
 #else
                seq_printf(p, "%10u ", kstat_irqs(i));
 #endif
@@ -295,7 +297,7 @@ int txn_alloc_irq(unsigned int bits_wide)
 unsigned long txn_affinity_addr(unsigned int irq, int cpu)
 {
 #ifdef CONFIG_SMP
-       cpumask_copy(irq_desc[irq].affinity, cpumask_of(cpu));
+       cpumask_copy(&irq_desc[irq].affinity, cpumask_of(cpu));
 #endif
 
        return per_cpu(cpu_data, cpu).txn_addr;
@@ -352,7 +354,7 @@ void do_cpu_irq_mask(struct pt_regs *regs)
        irq = eirr_to_irq(eirr_val);
 
 #ifdef CONFIG_SMP
-       cpumask_copy(&dest, irq_desc[irq].affinity);
+       cpumask_copy(&dest, &irq_desc[irq].affinity);
        if (CHECK_IRQ_PER_CPU(irq_desc[irq].status) &&
            !cpu_isset(smp_processor_id(), dest)) {
                int cpu = first_cpu(dest);
index df47895..7d927ea 100644 (file)
@@ -447,10 +447,7 @@ static void pa11_dma_free_consistent (struct device *dev, size_t size, void *vad
 
 static dma_addr_t pa11_dma_map_single(struct device *dev, void *addr, size_t size, enum dma_data_direction direction)
 {
-       if (direction == DMA_NONE) {
-               printk(KERN_ERR "pa11_dma_map_single(PCI_DMA_NONE) called by %p\n", __builtin_return_address(0));
-               BUG();
-       }
+       BUG_ON(direction == DMA_NONE);
 
        flush_kernel_dcache_range((unsigned long) addr, size);
        return virt_to_phys(addr);
@@ -458,10 +455,7 @@ static dma_addr_t pa11_dma_map_single(struct device *dev, void *addr, size_t siz
 
 static void pa11_dma_unmap_single(struct device *dev, dma_addr_t dma_handle, size_t size, enum dma_data_direction direction)
 {
-       if (direction == DMA_NONE) {
-               printk(KERN_ERR "pa11_dma_unmap_single(PCI_DMA_NONE) called by %p\n", __builtin_return_address(0));
-               BUG();
-       }
+       BUG_ON(direction == DMA_NONE);
 
        if (direction == DMA_TO_DEVICE)
            return;
@@ -480,8 +474,7 @@ static int pa11_dma_map_sg(struct device *dev, struct scatterlist *sglist, int n
 {
        int i;
 
-       if (direction == DMA_NONE)
-           BUG();
+       BUG_ON(direction == DMA_NONE);
 
        for (i = 0; i < nents; i++, sglist++ ) {
                unsigned long vaddr = sg_virt_addr(sglist);
@@ -496,8 +489,7 @@ static void pa11_dma_unmap_sg(struct device *dev, struct scatterlist *sglist, in
 {
        int i;
 
-       if (direction == DMA_NONE)
-           BUG();
+       BUG_ON(direction == DMA_NONE);
 
        if (direction == DMA_TO_DEVICE)
            return;
@@ -511,16 +503,14 @@ static void pa11_dma_unmap_sg(struct device *dev, struct scatterlist *sglist, in
 
 static void pa11_dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, unsigned long offset, size_t size, enum dma_data_direction direction)
 {
-       if (direction == DMA_NONE)
-           BUG();
+       BUG_ON(direction == DMA_NONE);
 
        flush_kernel_dcache_range((unsigned long) phys_to_virt(dma_handle) + offset, size);
 }
 
 static void pa11_dma_sync_single_for_device(struct device *dev, dma_addr_t dma_handle, unsigned long offset, size_t size, enum dma_data_direction direction)
 {
-       if (direction == DMA_NONE)
-           BUG();
+       BUG_ON(direction == DMA_NONE);
 
        flush_kernel_dcache_range((unsigned long) phys_to_virt(dma_handle) + offset, size);
 }
index 7c155c2..9d704d9 100644 (file)
@@ -304,10 +304,8 @@ static void __init setup_bootmem(void)
         */
        max_low_pfn = max_pfn;
 
-       if ((bootmap_pfn - bootmap_start_pfn) != bootmap_pages) {
-               printk(KERN_WARNING "WARNING! bootmap sizing is messed up!\n");
-               BUG();
-       }
+       /* bootmap sizing messed up? */
+       BUG_ON((bootmap_pfn - bootmap_start_pfn) != bootmap_pages);
 
        /* reserve PAGE0 pdc memory, kernel text/data/bss & bootmap */
 
index b6eee7c..ac14f52 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.27-rc3
-# Wed Aug 20 08:16:53 2008
+# Linux kernel version: 2.6.29-rc8
+# Fri Mar 13 09:28:45 2009
 #
 CONFIG_PPC64=y
 
@@ -16,13 +16,14 @@ CONFIG_PPC_FPU=y
 CONFIG_ALTIVEC=y
 # CONFIG_VSX is not set
 CONFIG_PPC_STD_MMU=y
+CONFIG_PPC_STD_MMU_64=y
 CONFIG_PPC_MM_SLICES=y
 CONFIG_VIRT_CPU_ACCOUNTING=y
 CONFIG_SMP=y
 CONFIG_NR_CPUS=2
 CONFIG_64BIT=y
 CONFIG_WORD_SIZE=64
-CONFIG_PPC_MERGE=y
+CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
 CONFIG_MMU=y
 CONFIG_GENERIC_CMOS_UPDATE=y
 CONFIG_GENERIC_TIME=y
@@ -46,7 +47,7 @@ CONFIG_PPC=y
 CONFIG_EARLY_PRINTK=y
 CONFIG_COMPAT=y
 CONFIG_SYSVIPC_COMPAT=y
-CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+CONFIG_SCHED_OMIT_FRAME_POINTER=y
 CONFIG_ARCH_MAY_HAVE_PC_FDC=y
 CONFIG_PPC_OF=y
 CONFIG_OF=y
@@ -74,10 +75,19 @@ CONFIG_POSIX_MQUEUE=y
 # CONFIG_BSD_PROCESS_ACCT is not set
 # CONFIG_TASKSTATS is not set
 # CONFIG_AUDIT is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_CLASSIC_RCU=y
+# CONFIG_TREE_RCU is not set
+# CONFIG_PREEMPT_RCU is not set
+# CONFIG_TREE_RCU_TRACE is not set
+# CONFIG_PREEMPT_RCU_TRACE is not set
 # CONFIG_IKCONFIG is not set
 CONFIG_LOG_BUF_SHIFT=17
-# CONFIG_CGROUPS is not set
 # CONFIG_GROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
 CONFIG_SYSFS_DEPRECATED=y
 CONFIG_SYSFS_DEPRECATED_V2=y
 # CONFIG_RELAY is not set
@@ -86,11 +96,13 @@ CONFIG_NAMESPACES=y
 # CONFIG_IPC_NS is not set
 # CONFIG_USER_NS is not set
 # CONFIG_PID_NS is not set
+# CONFIG_NET_NS is not set
 CONFIG_BLK_DEV_INITRD=y
 CONFIG_INITRAMFS_SOURCE=""
 CONFIG_CC_OPTIMIZE_FOR_SIZE=y
 CONFIG_SYSCTL=y
-# CONFIG_EMBEDDED is not set
+CONFIG_ANON_INODES=y
+CONFIG_EMBEDDED=y
 CONFIG_SYSCTL_SYSCALL=y
 CONFIG_KALLSYMS=y
 CONFIG_KALLSYMS_ALL=y
@@ -99,37 +111,36 @@ CONFIG_HOTPLUG=y
 CONFIG_PRINTK=y
 CONFIG_BUG=y
 CONFIG_ELF_CORE=y
-# CONFIG_COMPAT_BRK is not set
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
 CONFIG_EPOLL=y
 CONFIG_SIGNALFD=y
 CONFIG_TIMERFD=y
 CONFIG_EVENTFD=y
 CONFIG_SHMEM=y
+CONFIG_AIO=y
 CONFIG_VM_EVENT_COUNTERS=y
+# CONFIG_COMPAT_BRK is not set
 CONFIG_SLAB=y
 # CONFIG_SLUB is not set
 # CONFIG_SLOB is not set
 CONFIG_PROFILING=y
-# CONFIG_MARKERS is not set
+CONFIG_TRACEPOINTS=y
+CONFIG_MARKERS=y
 CONFIG_OPROFILE=m
 CONFIG_HAVE_OPROFILE=y
 # CONFIG_KPROBES is not set
 CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
+CONFIG_HAVE_SYSCALL_WRAPPERS=y
 CONFIG_HAVE_IOREMAP_PROT=y
 CONFIG_HAVE_KPROBES=y
 CONFIG_HAVE_KRETPROBES=y
 CONFIG_HAVE_ARCH_TRACEHOOK=y
 CONFIG_HAVE_DMA_ATTRS=y
 CONFIG_USE_GENERIC_SMP_HELPERS=y
-# CONFIG_HAVE_CLK is not set
-CONFIG_PROC_PAGE_MONITOR=y
 # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
 CONFIG_SLABINFO=y
 CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
 CONFIG_BASE_SMALL=0
 CONFIG_MODULES=y
 # CONFIG_MODULE_FORCE_LOAD is not set
@@ -137,7 +148,6 @@ CONFIG_MODULE_UNLOAD=y
 # CONFIG_MODULE_FORCE_UNLOAD is not set
 # CONFIG_MODVERSIONS is not set
 # CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
 CONFIG_STOP_MACHINE=y
 CONFIG_BLOCK=y
 # CONFIG_BLK_DEV_IO_TRACE is not set
@@ -157,7 +167,7 @@ CONFIG_DEFAULT_AS=y
 # CONFIG_DEFAULT_CFQ is not set
 # CONFIG_DEFAULT_NOOP is not set
 CONFIG_DEFAULT_IOSCHED="anticipatory"
-CONFIG_CLASSIC_RCU=y
+# CONFIG_FREEZER is not set
 
 #
 # Platform support
@@ -183,18 +193,20 @@ CONFIG_PS3_STORAGE=y
 CONFIG_PS3_DISK=y
 CONFIG_PS3_ROM=y
 CONFIG_PS3_FLASH=y
-CONFIG_OPROFILE_PS3=y
+CONFIG_PS3_VRAM=m
 CONFIG_PS3_LPM=m
 CONFIG_PPC_CELL=y
 # CONFIG_PPC_CELL_NATIVE is not set
 # CONFIG_PPC_IBM_CELL_BLADE is not set
 # CONFIG_PPC_CELLEB is not set
+# CONFIG_PPC_CELL_QPACE is not set
 
 #
 # Cell Broadband Engine options
 #
 CONFIG_SPU_FS=y
 CONFIG_SPU_FS_64K_LS=y
+# CONFIG_SPU_TRACE is not set
 CONFIG_SPU_BASE=y
 # CONFIG_PQ2ADS is not set
 # CONFIG_IPIC is not set
@@ -210,6 +222,7 @@ CONFIG_SPU_BASE=y
 # CONFIG_GENERIC_IOMAP is not set
 # CONFIG_CPU_FREQ is not set
 # CONFIG_FSL_ULI1575 is not set
+# CONFIG_SIMPLE_GPIO is not set
 
 #
 # Kernel options
@@ -229,6 +242,8 @@ CONFIG_PREEMPT_NONE=y
 # CONFIG_PREEMPT is not set
 CONFIG_BINFMT_ELF=y
 CONFIG_COMPAT_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+# CONFIG_HAVE_AOUT is not set
 CONFIG_BINFMT_MISC=y
 CONFIG_HUGETLB_PAGE_SIZE_VARIABLE=y
 # CONFIG_IOMMU_VMERGE is not set
@@ -251,7 +266,6 @@ CONFIG_SELECT_MEMORY_MODEL=y
 CONFIG_SPARSEMEM_MANUAL=y
 CONFIG_SPARSEMEM=y
 CONFIG_HAVE_MEMORY_PRESENT=y
-# CONFIG_SPARSEMEM_STATIC is not set
 CONFIG_SPARSEMEM_EXTREME=y
 CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
 # CONFIG_SPARSEMEM_VMEMMAP is not set
@@ -261,11 +275,14 @@ CONFIG_MEMORY_HOTPLUG_SPARSE=y
 CONFIG_PAGEFLAGS_EXTENDED=y
 CONFIG_SPLIT_PTLOCK_CPUS=4
 CONFIG_MIGRATION=y
-CONFIG_RESOURCES_64BIT=y
+CONFIG_PHYS_ADDR_T_64BIT=y
 CONFIG_ZONE_DMA_FLAG=1
 CONFIG_BOUNCE=y
+CONFIG_UNEVICTABLE_LRU=y
 CONFIG_ARCH_MEMORY_PROBE=y
 CONFIG_PPC_HAS_HASH_64K=y
+CONFIG_PPC_4K_PAGES=y
+# CONFIG_PPC_16K_PAGES is not set
 # CONFIG_PPC_64K_PAGES is not set
 CONFIG_FORCE_MAX_ZONEORDER=13
 CONFIG_SCHED_SMT=y
@@ -299,6 +316,7 @@ CONFIG_NET=y
 #
 # Networking options
 #
+CONFIG_COMPAT_NET_DEV_OPS=y
 CONFIG_PACKET=y
 CONFIG_PACKET_MMAP=y
 CONFIG_UNIX=y
@@ -361,6 +379,7 @@ CONFIG_IPV6_NDISC_NODETYPE=y
 # CONFIG_TIPC is not set
 # CONFIG_ATM is not set
 # CONFIG_BRIDGE is not set
+# CONFIG_NET_DSA is not set
 # CONFIG_VLAN_8021Q is not set
 # CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
@@ -371,6 +390,7 @@ CONFIG_IPV6_NDISC_NODETYPE=y
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
 # CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
 
 #
 # Network testing
@@ -392,39 +412,37 @@ CONFIG_BT_HIDP=m
 #
 # Bluetooth device drivers
 #
-CONFIG_BT_HCIUSB=m
-CONFIG_BT_HCIUSB_SCO=y
+CONFIG_BT_HCIBTUSB=m
 # CONFIG_BT_HCIUART is not set
 # CONFIG_BT_HCIBCM203X is not set
 # CONFIG_BT_HCIBPA10X is not set
 # CONFIG_BT_HCIBFUSB is not set
 # CONFIG_BT_HCIVHCI is not set
 # CONFIG_AF_RXRPC is not set
-
-#
-# Wireless
-#
+# CONFIG_PHONET is not set
+CONFIG_WIRELESS=y
 CONFIG_CFG80211=m
+# CONFIG_CFG80211_REG_DEBUG is not set
 CONFIG_NL80211=y
+# CONFIG_WIRELESS_OLD_REGULATORY is not set
 CONFIG_WIRELESS_EXT=y
 # CONFIG_WIRELESS_EXT_SYSFS is not set
+# CONFIG_LIB80211 is not set
 CONFIG_MAC80211=m
 
 #
 # Rate control algorithm selection
 #
 CONFIG_MAC80211_RC_PID=y
+# CONFIG_MAC80211_RC_MINSTREL is not set
 CONFIG_MAC80211_RC_DEFAULT_PID=y
+# CONFIG_MAC80211_RC_DEFAULT_MINSTREL is not set
 CONFIG_MAC80211_RC_DEFAULT="pid"
 # CONFIG_MAC80211_MESH is not set
 # CONFIG_MAC80211_LEDS is not set
 # CONFIG_MAC80211_DEBUGFS is not set
 # CONFIG_MAC80211_DEBUG_MENU is not set
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
+# CONFIG_WIMAX is not set
 # CONFIG_RFKILL is not set
 # CONFIG_NET_9P is not set
 
@@ -450,6 +468,7 @@ CONFIG_MTD_DEBUG=y
 CONFIG_MTD_DEBUG_VERBOSE=0
 # CONFIG_MTD_CONCAT is not set
 # CONFIG_MTD_PARTITIONS is not set
+# CONFIG_MTD_TESTS is not set
 
 #
 # User Modules And Translation Layers
@@ -494,7 +513,6 @@ CONFIG_MTD_CFI_I2=y
 #
 # CONFIG_MTD_SLRAM is not set
 # CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_PS3VRAM=y
 # CONFIG_MTD_MTDRAM is not set
 # CONFIG_MTD_BLOCK2MTD is not set
 
@@ -508,6 +526,11 @@ CONFIG_MTD_PS3VRAM=y
 # CONFIG_MTD_ONENAND is not set
 
 #
+# LPDDR flash memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+
+#
 # UBI - Unsorted block images
 #
 # CONFIG_MTD_UBI is not set
@@ -528,8 +551,13 @@ CONFIG_BLK_DEV_RAM_SIZE=65535
 # CONFIG_ATA_OVER_ETH is not set
 # CONFIG_BLK_DEV_HD is not set
 CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
 # CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_93CX6 is not set
 CONFIG_HAVE_IDE=y
 # CONFIG_IDE is not set
 
@@ -575,7 +603,17 @@ CONFIG_SCSI_WAIT_SCAN=m
 # CONFIG_SCSI_LOWLEVEL is not set
 # CONFIG_SCSI_DH is not set
 # CONFIG_ATA is not set
-# CONFIG_MD is not set
+CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+# CONFIG_DM_CRYPT is not set
+# CONFIG_DM_SNAPSHOT is not set
+# CONFIG_DM_MIRROR is not set
+# CONFIG_DM_ZERO is not set
+# CONFIG_DM_MULTIPATH is not set
+# CONFIG_DM_DELAY is not set
+# CONFIG_DM_UEVENT is not set
 # CONFIG_MACINTOSH_DRIVERS is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
@@ -591,6 +629,9 @@ CONFIG_MII=m
 # CONFIG_IBM_NEW_EMAC_RGMII is not set
 # CONFIG_IBM_NEW_EMAC_TAH is not set
 # CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
 # CONFIG_B44 is not set
 CONFIG_NETDEV_1000=y
 CONFIG_GELIC_NET=y
@@ -604,6 +645,7 @@ CONFIG_GELIC_WIRELESS_OLD_PSK_INTERFACE=y
 # CONFIG_WLAN_PRE80211 is not set
 CONFIG_WLAN_80211=y
 # CONFIG_LIBERTAS is not set
+# CONFIG_LIBERTAS_THINFIRM is not set
 # CONFIG_USB_ZD1201 is not set
 # CONFIG_USB_NET_RNDIS_WLAN is not set
 # CONFIG_RTL8187 is not set
@@ -615,13 +657,11 @@ CONFIG_WLAN_80211=y
 # CONFIG_B43LEGACY is not set
 CONFIG_ZD1211RW=m
 # CONFIG_ZD1211RW_DEBUG is not set
-CONFIG_RT2X00=m
-CONFIG_RT2X00_LIB=m
-CONFIG_RT2X00_LIB_USB=m
-CONFIG_RT2X00_LIB_FIRMWARE=y
-# CONFIG_RT2500USB is not set
-CONFIG_RT73USB=m
-# CONFIG_RT2X00_DEBUG is not set
+# CONFIG_RT2X00 is not set
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
 
 #
 # USB Network Adapters
@@ -634,6 +674,7 @@ CONFIG_USB_USBNET=m
 CONFIG_USB_NET_AX8817X=m
 # CONFIG_USB_NET_CDCETHER is not set
 # CONFIG_USB_NET_DM9601 is not set
+# CONFIG_USB_NET_SMSC95XX is not set
 # CONFIG_USB_NET_GL620A is not set
 # CONFIG_USB_NET_NET1080 is not set
 # CONFIG_USB_NET_PLUSB is not set
@@ -664,7 +705,7 @@ CONFIG_SLHC=m
 # Input device support
 #
 CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
+CONFIG_INPUT_FF_MEMLESS=m
 # CONFIG_INPUT_POLLDEV is not set
 
 #
@@ -735,8 +776,10 @@ CONFIG_DEVKMEM=y
 # Non-8250 serial port support
 #
 CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=16
+# CONFIG_HVC_UDBG is not set
 # CONFIG_IPMI_HANDLER is not set
 # CONFIG_HW_RANDOM is not set
 # CONFIG_R3964 is not set
@@ -753,11 +796,11 @@ CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
 # CONFIG_THERMAL is not set
 # CONFIG_THERMAL_HWMON is not set
 # CONFIG_WATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
 
 #
 # Sonics Silicon Backplane
 #
-CONFIG_SSB_POSSIBLE=y
 # CONFIG_SSB is not set
 
 #
@@ -767,6 +810,7 @@ CONFIG_SSB_POSSIBLE=y
 # CONFIG_MFD_SM501 is not set
 # CONFIG_HTC_PASIC3 is not set
 # CONFIG_MFD_TMIO is not set
+# CONFIG_REGULATOR is not set
 
 #
 # Multimedia devices
@@ -792,6 +836,7 @@ CONFIG_VIDEO_OUTPUT_CONTROL=m
 CONFIG_FB=y
 # CONFIG_FIRMWARE_EDID is not set
 # CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
 # CONFIG_FB_CFB_FILLRECT is not set
 # CONFIG_FB_CFB_COPYAREA is not set
 # CONFIG_FB_CFB_IMAGEBLIT is not set
@@ -817,6 +862,8 @@ CONFIG_FB_SYS_FOPS=y
 CONFIG_FB_PS3=y
 CONFIG_FB_PS3_DEFAULT_SIZE_M=9
 # CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
 # CONFIG_BACKLIGHT_LCD_SUPPORT is not set
 
 #
@@ -841,6 +888,7 @@ CONFIG_FB_LOGO_EXTRA=y
 # CONFIG_LOGO_LINUX_VGA16 is not set
 CONFIG_LOGO_LINUX_CLUT224=y
 CONFIG_SOUND=m
+# CONFIG_SOUND_OSS_CORE is not set
 CONFIG_SND=m
 CONFIG_SND_TIMER=m
 CONFIG_SND_PCM=m
@@ -849,6 +897,7 @@ CONFIG_SND_RAWMIDI=m
 # CONFIG_SND_SEQUENCER is not set
 # CONFIG_SND_MIXER_OSS is not set
 # CONFIG_SND_PCM_OSS is not set
+# CONFIG_SND_HRTIMER is not set
 # CONFIG_SND_DYNAMIC_MINORS is not set
 CONFIG_SND_SUPPORT_OLD_API=y
 CONFIG_SND_VERBOSE_PROCFS=y
@@ -873,15 +922,40 @@ CONFIG_HIDRAW=y
 # USB Input Devices
 #
 CONFIG_USB_HID=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
+# CONFIG_HID_PID is not set
+CONFIG_USB_HIDDEV=y
 
 #
 # USB HID Boot Protocol drivers
 #
 # CONFIG_USB_KBD is not set
 # CONFIG_USB_MOUSE is not set
+
+#
+# Special HID drivers
+#
+# CONFIG_HID_COMPAT is not set
+# CONFIG_HID_A4TECH is not set
+# CONFIG_HID_APPLE is not set
+# CONFIG_HID_BELKIN is not set
+# CONFIG_HID_CHERRY is not set
+# CONFIG_HID_CHICONY is not set
+# CONFIG_HID_CYPRESS is not set
+# CONFIG_HID_EZKEY is not set
+# CONFIG_HID_GYRATION is not set
+# CONFIG_HID_LOGITECH is not set
+# CONFIG_HID_MICROSOFT is not set
+# CONFIG_HID_MONTEREY is not set
+# CONFIG_HID_NTRIG is not set
+# CONFIG_HID_PANTHERLORD is not set
+# CONFIG_HID_PETALYNX is not set
+# CONFIG_HID_SAMSUNG is not set
+# CONFIG_HID_SONY is not set
+# CONFIG_HID_SUNPLUS is not set
+# CONFIG_GREENASIA_FF is not set
+# CONFIG_HID_TOPSEED is not set
+# CONFIG_THRUSTMASTER_FF is not set
+# CONFIG_ZEROPLUS_FF is not set
 CONFIG_USB_SUPPORT=y
 CONFIG_USB_ARCH_HAS_HCD=y
 CONFIG_USB_ARCH_HAS_OHCI=y
@@ -898,7 +972,11 @@ CONFIG_USB_DEVICEFS=y
 # CONFIG_USB_DYNAMIC_MINORS is not set
 CONFIG_USB_SUSPEND=y
 # CONFIG_USB_OTG is not set
-CONFIG_USB_MON=y
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+CONFIG_USB_MON=m
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
 
 #
 # USB Host Controller Drivers
@@ -909,6 +987,7 @@ CONFIG_USB_EHCI_HCD=m
 # CONFIG_USB_EHCI_TT_NEWSCHED is not set
 CONFIG_USB_EHCI_BIG_ENDIAN_MMIO=y
 # CONFIG_USB_EHCI_HCD_PPC_OF is not set
+# CONFIG_USB_OXU210HP_HCD is not set
 # CONFIG_USB_ISP116X_HCD is not set
 # CONFIG_USB_ISP1760_HCD is not set
 CONFIG_USB_OHCI_HCD=m
@@ -918,6 +997,7 @@ CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
 CONFIG_USB_OHCI_LITTLE_ENDIAN=y
 # CONFIG_USB_SL811_HCD is not set
 # CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
 
 #
 # Enable Host or Gadget support to see Inventra options
@@ -929,20 +1009,20 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
 # CONFIG_USB_ACM is not set
 # CONFIG_USB_PRINTER is not set
 # CONFIG_USB_WDM is not set
+# CONFIG_USB_TMC is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
 #
 
 #
-# may also be needed; see USB_STORAGE Help for more information
+# see USB_STORAGE Help for more information
 #
 CONFIG_USB_STORAGE=m
 # CONFIG_USB_STORAGE_DEBUG is not set
 # CONFIG_USB_STORAGE_DATAFAB is not set
 # CONFIG_USB_STORAGE_FREECOM is not set
 # CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
 # CONFIG_USB_STORAGE_USBAT is not set
 # CONFIG_USB_STORAGE_SDDR09 is not set
 # CONFIG_USB_STORAGE_SDDR55 is not set
@@ -950,7 +1030,6 @@ CONFIG_USB_STORAGE=m
 # CONFIG_USB_STORAGE_ALAUDA is not set
 # CONFIG_USB_STORAGE_ONETOUCH is not set
 # CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_STORAGE_SIERRA is not set
 # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
 # CONFIG_USB_LIBUSUAL is not set
 
@@ -971,6 +1050,7 @@ CONFIG_USB_STORAGE=m
 # CONFIG_USB_EMI62 is not set
 # CONFIG_USB_EMI26 is not set
 # CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_SEVSEG is not set
 # CONFIG_USB_RIO500 is not set
 # CONFIG_USB_LEGOTOWER is not set
 # CONFIG_USB_LCD is not set
@@ -988,7 +1068,12 @@ CONFIG_USB_STORAGE=m
 # CONFIG_USB_IOWARRIOR is not set
 # CONFIG_USB_TEST is not set
 # CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_VST is not set
 # CONFIG_USB_GADGET is not set
+
+#
+# OTG and related infrastructure
+#
 # CONFIG_MMC is not set
 # CONFIG_MEMSTICK is not set
 # CONFIG_NEW_LEDS is not set
@@ -1014,12 +1099,15 @@ CONFIG_RTC_INTF_DEV=y
 # Platform RTC drivers
 #
 # CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
 # CONFIG_RTC_DRV_DS1511 is not set
 # CONFIG_RTC_DRV_DS1553 is not set
 # CONFIG_RTC_DRV_DS1742 is not set
 # CONFIG_RTC_DRV_STK17TA8 is not set
 # CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
 # CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
 # CONFIG_RTC_DRV_V3020 is not set
 
 #
@@ -1028,6 +1116,7 @@ CONFIG_RTC_INTF_DEV=y
 CONFIG_RTC_DRV_PPC=m
 # CONFIG_DMADEVICES is not set
 # CONFIG_UIO is not set
+# CONFIG_STAGING is not set
 
 #
 # File systems
@@ -1035,26 +1124,35 @@ CONFIG_RTC_DRV_PPC=m
 CONFIG_EXT2_FS=m
 # CONFIG_EXT2_FS_XATTR is not set
 # CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS=m
 CONFIG_EXT3_FS_XATTR=y
 # CONFIG_EXT3_FS_POSIX_ACL is not set
 # CONFIG_EXT3_FS_SECURITY is not set
-# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=y
+CONFIG_EXT4_FS=y
+# CONFIG_EXT4DEV_COMPAT is not set
+CONFIG_EXT4_FS_XATTR=y
+# CONFIG_EXT4_FS_POSIX_ACL is not set
+# CONFIG_EXT4_FS_SECURITY is not set
+CONFIG_JBD=m
 # CONFIG_JBD_DEBUG is not set
+CONFIG_JBD2=y
+# CONFIG_JBD2_DEBUG is not set
 CONFIG_FS_MBCACHE=y
 # CONFIG_REISERFS_FS is not set
 # CONFIG_JFS_FS is not set
 # CONFIG_FS_POSIX_ACL is not set
+CONFIG_FILE_LOCKING=y
 # CONFIG_XFS_FS is not set
 # CONFIG_GFS2_FS is not set
 # CONFIG_OCFS2_FS is not set
+# CONFIG_BTRFS_FS is not set
 CONFIG_DNOTIFY=y
 CONFIG_INOTIFY=y
 CONFIG_INOTIFY_USER=y
 CONFIG_QUOTA=y
 # CONFIG_QUOTA_NETLINK_INTERFACE is not set
 CONFIG_PRINT_QUOTA_WARNING=y
+CONFIG_QUOTA_TREE=y
 # CONFIG_QFMT_V1 is not set
 CONFIG_QFMT_V2=y
 CONFIG_QUOTACTL=y
@@ -1087,16 +1185,14 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
 CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
 CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 CONFIG_HUGETLBFS=y
 CONFIG_HUGETLB_PAGE=y
 # CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
+CONFIG_MISC_FILESYSTEMS=y
 # CONFIG_ADFS_FS is not set
 # CONFIG_AFFS_FS is not set
 # CONFIG_HFS_FS is not set
@@ -1106,6 +1202,7 @@ CONFIG_HUGETLB_PAGE=y
 # CONFIG_EFS_FS is not set
 # CONFIG_JFFS2_FS is not set
 # CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
 # CONFIG_VXFS_FS is not set
 # CONFIG_MINIX_FS is not set
 # CONFIG_OMFS_FS is not set
@@ -1126,6 +1223,7 @@ CONFIG_LOCKD_V4=y
 CONFIG_NFS_COMMON=y
 CONFIG_SUNRPC=y
 CONFIG_SUNRPC_GSS=y
+# CONFIG_SUNRPC_REGISTER_V4 is not set
 CONFIG_RPCSEC_GSS_KRB5=y
 # CONFIG_RPCSEC_GSS_SPKM3 is not set
 # CONFIG_SMB_FS is not set
@@ -1190,9 +1288,9 @@ CONFIG_NLS_ISO8859_1=y
 # Library routines
 #
 CONFIG_BITREVERSE=y
-# CONFIG_GENERIC_FIND_FIRST_BIT is not set
+CONFIG_GENERIC_FIND_LAST_BIT=y
 CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
+CONFIG_CRC16=y
 CONFIG_CRC_T10DIF=y
 CONFIG_CRC_ITU_T=m
 CONFIG_CRC32=y
@@ -1250,27 +1348,44 @@ CONFIG_DEBUG_WRITECOUNT=y
 CONFIG_DEBUG_MEMORY_INIT=y
 CONFIG_DEBUG_LIST=y
 # CONFIG_DEBUG_SG is not set
-CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_NOTIFIERS is not set
 # CONFIG_BOOT_PRINTK_DELAY is not set
 # CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
 # CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
 # CONFIG_FAULT_INJECTION is not set
 # CONFIG_LATENCYTOP is not set
 CONFIG_SYSCTL_SYSCALL_CHECK=y
-CONFIG_HAVE_FTRACE=y
+CONFIG_NOP_TRACER=y
+CONFIG_HAVE_FUNCTION_TRACER=y
 CONFIG_HAVE_DYNAMIC_FTRACE=y
-# CONFIG_FTRACE is not set
+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
+CONFIG_RING_BUFFER=y
+CONFIG_TRACING=y
+
+#
+# Tracers
+#
+# CONFIG_FUNCTION_TRACER is not set
 # CONFIG_IRQSOFF_TRACER is not set
 # CONFIG_SCHED_TRACER is not set
 # CONFIG_CONTEXT_SWITCH_TRACER is not set
+# CONFIG_BOOT_TRACER is not set
+# CONFIG_TRACE_BRANCH_PROFILING is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_FTRACE_STARTUP_TEST is not set
+# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
 # CONFIG_SAMPLES is not set
 CONFIG_HAVE_ARCH_KGDB=y
 # CONFIG_KGDB is not set
+CONFIG_PRINT_STACK_DEPTH=64
 CONFIG_DEBUG_STACKOVERFLOW=y
 # CONFIG_DEBUG_STACK_USAGE is not set
 # CONFIG_DEBUG_PAGEALLOC is not set
 # CONFIG_CODE_PATCHING_SELFTEST is not set
 # CONFIG_FTR_FIXUP_SELFTEST is not set
+# CONFIG_MSI_BITMAP_SELFTEST is not set
 # CONFIG_XMON is not set
 CONFIG_IRQSTACKS=y
 # CONFIG_VIRQ_DEBUG is not set
@@ -1282,16 +1397,26 @@ CONFIG_IRQSTACKS=y
 #
 # CONFIG_KEYS is not set
 # CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
 # CONFIG_SECURITY_FILE_CAPABILITIES is not set
 CONFIG_CRYPTO=y
 
 #
 # Crypto core or helper
 #
+# CONFIG_CRYPTO_FIPS is not set
 CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
 CONFIG_CRYPTO_AEAD=m
+CONFIG_CRYPTO_AEAD2=y
 CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG=m
+CONFIG_CRYPTO_RNG2=y
 CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
 CONFIG_CRYPTO_GF128MUL=m
 # CONFIG_CRYPTO_NULL is not set
 # CONFIG_CRYPTO_CRYPTD is not set
@@ -1363,6 +1488,11 @@ CONFIG_CRYPTO_SALSA20=m
 #
 # CONFIG_CRYPTO_DEFLATE is not set
 CONFIG_CRYPTO_LZO=m
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
 CONFIG_CRYPTO_HW=y
 # CONFIG_PPC_CLOCK is not set
 # CONFIG_VIRTUALIZATION is not set
index 4911104..21172ba 100644 (file)
@@ -241,9 +241,11 @@ extern const char *powerpc_base_platform;
 /* We need to mark all pages as being coherent if we're SMP or we have a
  * 74[45]x and an MPC107 host bridge. Also 83xx and PowerQUICC II
  * require it for PCI "streaming/prefetch" to work properly.
+ * This is also required by 52xx family.
  */
 #if defined(CONFIG_SMP) || defined(CONFIG_MPC10X_BRIDGE) \
-       || defined(CONFIG_PPC_83xx) || defined(CONFIG_8260)
+       || defined(CONFIG_PPC_83xx) || defined(CONFIG_8260) \
+       || defined(CONFIG_PPC_MPC52xx)
 #define CPU_FTR_COMMON                  CPU_FTR_NEED_COHERENT
 #else
 #define CPU_FTR_COMMON                  0
index a1c4cfd..7db2e42 100644 (file)
@@ -511,7 +511,7 @@ InstructionTLBMiss:
        and     r1,r1,r2                /* writable if _RW and _DIRTY */
        rlwimi  r3,r3,32-1,30,30        /* _PAGE_USER -> PP msb */
        rlwimi  r3,r3,32-1,31,31        /* _PAGE_USER -> PP lsb */
-       ori     r1,r1,0xe14             /* clear out reserved bits and M */
+       ori     r1,r1,0xe04             /* clear out reserved bits */
        andc    r1,r3,r1                /* PP = user? (rw&dirty? 2: 3): 0 */
        mtspr   SPRN_RPA,r1
        mfspr   r3,SPRN_IMISS
@@ -585,7 +585,7 @@ DataLoadTLBMiss:
        and     r1,r1,r2                /* writable if _RW and _DIRTY */
        rlwimi  r3,r3,32-1,30,30        /* _PAGE_USER -> PP msb */
        rlwimi  r3,r3,32-1,31,31        /* _PAGE_USER -> PP lsb */
-       ori     r1,r1,0xe14             /* clear out reserved bits and M */
+       ori     r1,r1,0xe04             /* clear out reserved bits */
        andc    r1,r3,r1                /* PP = user? (rw&dirty? 2: 3): 0 */
        mtspr   SPRN_RPA,r1
        mfspr   r3,SPRN_DMISS
@@ -653,7 +653,7 @@ DataStoreTLBMiss:
        stw     r3,0(r2)                /* update PTE (accessed/dirty bits) */
        /* Convert linux-style PTE to low word of PPC-style PTE */
        rlwimi  r3,r3,32-1,30,30        /* _PAGE_USER -> PP msb */
-       li      r1,0xe15                /* clear out reserved bits and M */
+       li      r1,0xe05                /* clear out reserved bits & PP lsb */
        andc    r1,r3,r1                /* PP = user? 2: 0 */
        mtspr   SPRN_RPA,r1
        mfspr   r3,SPRN_DMISS
index ad1e5ac..1b55ffd 100644 (file)
@@ -190,7 +190,7 @@ int show_interrupts(struct seq_file *p, void *v)
                seq_printf(p, "%3d: ", i);
 #ifdef CONFIG_SMP
                for_each_online_cpu(j)
-                       seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
+                       seq_printf(p, "%10u ", kstat_irqs_cpu(i, j));
 #else
                seq_printf(p, "%10u ", kstat_irqs(i));
 #endif /* CONFIG_SMP */
index 28c04da..882e470 100644 (file)
@@ -237,8 +237,6 @@ extern int noirqdebug;
 
 static void handle_iic_irq(unsigned int irq, struct irq_desc *desc)
 {
-       const unsigned int cpu = smp_processor_id();
-
        spin_lock(&desc->lock);
 
        desc->status &= ~(IRQ_REPLAY | IRQ_WAITING);
@@ -254,7 +252,7 @@ static void handle_iic_irq(unsigned int irq, struct irq_desc *desc)
                goto out_eoi;
        }
 
-       kstat_cpu(cpu).irqs[irq]++;
+       kstat_incr_irqs_this_cpu(irq, desc);
 
        /* Mark the IRQ currently in progress.*/
        desc->status |= IRQ_INPROGRESS;
index 920cf7a..740ef56 100644 (file)
@@ -128,6 +128,13 @@ config PS3_FLASH
          be disabled on the kernel command line using "ps3flash=off", to
          not allocate this fixed buffer.
 
+config PS3_VRAM
+       tristate "PS3 Video RAM Storage Driver"
+       depends on FB_PS3=y && BLOCK && m
+       help
+         This driver allows you to use excess PS3 video RAM as volatile
+         storage or system swap.
+
 config PS3_LPM
        tristate "PS3 Logical Performance Monitor support"
        depends on PPC_PS3
index 7839767..da01432 100644 (file)
@@ -22,4 +22,9 @@
 #define MCL_CURRENT    1               /* lock all current mappings */
 #define MCL_FUTURE     2               /* lock all future mappings */
 
+#if defined(__KERNEL__) && !defined(__ASSEMBLY__) && defined(CONFIG_64BIT)
+int s390_mmap_check(unsigned long addr, unsigned long len);
+#define arch_mmap_check(addr,len,flags)        s390_mmap_check(addr,len)
+#endif
+
 #endif /* __S390_MMAN_H__ */
index 066b995..db4523f 100644 (file)
@@ -61,7 +61,7 @@ extern void print_cpu_info(struct cpuinfo_S390 *);
 extern int get_cpu_capability(unsigned int *);
 
 /*
- * User space process size: 2GB for 31 bit, 4TB for 64 bit.
+ * User space process size: 2GB for 31 bit, 4TB or 8PT for 64 bit.
  */
 #ifndef __s390x__
 
@@ -70,8 +70,7 @@ extern int get_cpu_capability(unsigned int *);
 
 #else /* __s390x__ */
 
-#define TASK_SIZE_OF(tsk)      (test_tsk_thread_flag(tsk,TIF_31BIT) ? \
-                                       (1UL << 31) : (1UL << 53))
+#define TASK_SIZE_OF(tsk)      ((tsk)->mm->context.asce_limit)
 #define TASK_UNMAPPED_BASE     (test_thread_flag(TIF_31BIT) ? \
                                        (1UL << 30) : (1UL << 41))
 #define TASK_SIZE              TASK_SIZE_OF(current)
index c93eb50..c979c3b 100644 (file)
@@ -30,6 +30,8 @@ static inline void s390_init_cpu_topology(void)
 };
 #endif
 
+#define SD_MC_INIT SD_CPU_INIT
+
 #include <asm-generic/topology.h>
 
 #endif /* _ASM_S390_TOPOLOGY_H */
index 397d131..8064122 100644 (file)
@@ -5,6 +5,8 @@
  *
  */
 
+#include <asm/asm-offsets.h>
+
 #ifndef CONFIG_64BIT
 .globl _mcount
 _mcount:
@@ -14,7 +16,7 @@ _mcount:
        ahi     %r15,-96
        l       %r3,100(%r15)
        la      %r2,0(%r14)
-       st      %r1,0(%r15)
+       st      %r1,__SF_BACKCHAIN(%r15)
        la      %r3,0(%r3)
        bras    %r14,0f
        .long   ftrace_trace_function
@@ -38,7 +40,7 @@ _mcount:
        stg     %r14,112(%r15)
        lgr     %r1,%r15
        aghi    %r15,-160
-       stg     %r1,0(%r15)
+       stg     %r1,__SF_BACKCHAIN(%r15)
        lgr     %r2,%r14
        lg      %r3,168(%r15)
        larl    %r14,ftrace_trace_function
index a5f8300..d9e62c0 100644 (file)
@@ -61,7 +61,7 @@ static uint32_t __div64_31(uint64_t *n, uint32_t base)
                "       clr     %0,%3\n"
                "       jl      0f\n"
                "       slr     %0,%3\n"
-               "       alr     %1,%2\n"
+               "       ahi     %1,1\n"
                "0:\n"
                : "+d" (reg2), "+d" (reg3), "=d" (tmp)
                : "d" (base), "2" (1UL) : "cc" );
index d66215b..b0b84c3 100644 (file)
@@ -119,8 +119,6 @@ retry:
                        goto fault;
 
                pfn = pte_pfn(*pte);
-               if (!pfn_valid(pfn))
-                       goto out;
 
                offset = uaddr & (PAGE_SIZE - 1);
                size = min(n - done, PAGE_SIZE - offset);
@@ -135,7 +133,6 @@ retry:
                done += size;
                uaddr += size;
        } while (done < n);
-out:
        spin_unlock(&mm->page_table_lock);
        return n - done;
 fault:
@@ -163,9 +160,6 @@ retry:
                goto fault;
 
        pfn = pte_pfn(*pte);
-       if (!pfn_valid(pfn))
-               goto out;
-
        ret = (pfn << PAGE_SHIFT) + (uaddr & (PAGE_SIZE - 1));
 out:
        return ret;
@@ -244,11 +238,6 @@ retry:
                        goto fault;
 
                pfn = pte_pfn(*pte);
-               if (!pfn_valid(pfn)) {
-                       done = -1;
-                       goto out;
-               }
-
                offset = uaddr & (PAGE_SIZE-1);
                addr = (char *)(pfn << PAGE_SHIFT) + offset;
                len = min(count - done, PAGE_SIZE - offset);
@@ -256,7 +245,6 @@ retry:
                done += len_str;
                uaddr += len_str;
        } while ((len_str == len) && (done < count));
-out:
        spin_unlock(&mm->page_table_lock);
        return done + 1;
 fault:
@@ -325,12 +313,7 @@ retry:
                }
 
                pfn_from = pte_pfn(*pte_from);
-               if (!pfn_valid(pfn_from))
-                       goto out;
                pfn_to = pte_pfn(*pte_to);
-               if (!pfn_valid(pfn_to))
-                       goto out;
-
                offset_from = uaddr_from & (PAGE_SIZE-1);
                offset_to = uaddr_from & (PAGE_SIZE-1);
                offset_max = max(offset_from, offset_to);
@@ -342,7 +325,6 @@ retry:
                uaddr_from += size;
                uaddr_to += size;
        } while (done < n);
-out:
        spin_unlock(&mm->page_table_lock);
        return n - done;
 fault:
index 5932a82..e008d23 100644 (file)
@@ -35,7 +35,7 @@
  * Leave an at least ~128 MB hole.
  */
 #define MIN_GAP (128*1024*1024)
-#define MAX_GAP (TASK_SIZE/6*5)
+#define MAX_GAP (STACK_TOP/6*5)
 
 static inline unsigned long mmap_base(void)
 {
@@ -46,7 +46,7 @@ static inline unsigned long mmap_base(void)
        else if (gap > MAX_GAP)
                gap = MAX_GAP;
 
-       return TASK_SIZE - (gap & PAGE_MASK);
+       return STACK_TOP - (gap & PAGE_MASK);
 }
 
 static inline int mmap_is_legacy(void)
@@ -89,42 +89,58 @@ EXPORT_SYMBOL_GPL(arch_pick_mmap_layout);
 
 #else
 
+int s390_mmap_check(unsigned long addr, unsigned long len)
+{
+       if (!test_thread_flag(TIF_31BIT) &&
+           len >= TASK_SIZE && TASK_SIZE < (1UL << 53))
+               return crst_table_upgrade(current->mm, 1UL << 53);
+       return 0;
+}
+
 static unsigned long
 s390_get_unmapped_area(struct file *filp, unsigned long addr,
                unsigned long len, unsigned long pgoff, unsigned long flags)
 {
        struct mm_struct *mm = current->mm;
+       unsigned long area;
        int rc;
 
-       addr = arch_get_unmapped_area(filp, addr, len, pgoff, flags);
-       if (addr & ~PAGE_MASK)
-               return addr;
-       if (unlikely(mm->context.asce_limit < addr + len)) {
-               rc = crst_table_upgrade(mm, addr + len);
+       area = arch_get_unmapped_area(filp, addr, len, pgoff, flags);
+       if (!(area & ~PAGE_MASK))
+               return area;
+       if (area == -ENOMEM &&
+           !test_thread_flag(TIF_31BIT) && TASK_SIZE < (1UL << 53)) {
+               /* Upgrade the page table to 4 levels and retry. */
+               rc = crst_table_upgrade(mm, 1UL << 53);
                if (rc)
                        return (unsigned long) rc;
+               area = arch_get_unmapped_area(filp, addr, len, pgoff, flags);
        }
-       return addr;
+       return area;
 }
 
 static unsigned long
-s390_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+s390_get_unmapped_area_topdown(struct file *filp, const unsigned long addr,
                          const unsigned long len, const unsigned long pgoff,
                          const unsigned long flags)
 {
        struct mm_struct *mm = current->mm;
-       unsigned long addr = addr0;
+       unsigned long area;
        int rc;
 
-       addr = arch_get_unmapped_area_topdown(filp, addr, len, pgoff, flags);
-       if (addr & ~PAGE_MASK)
-               return addr;
-       if (unlikely(mm->context.asce_limit < addr + len)) {
-               rc = crst_table_upgrade(mm, addr + len);
+       area = arch_get_unmapped_area_topdown(filp, addr, len, pgoff, flags);
+       if (!(area & ~PAGE_MASK))
+               return area;
+       if (area == -ENOMEM &&
+           !test_thread_flag(TIF_31BIT) && TASK_SIZE < (1UL << 53)) {
+               /* Upgrade the page table to 4 levels and retry. */
+               rc = crst_table_upgrade(mm, 1UL << 53);
                if (rc)
                        return (unsigned long) rc;
+               area = arch_get_unmapped_area_topdown(filp, addr, len,
+                                                     pgoff, flags);
        }
-       return addr;
+       return area;
 }
 /*
  * This function, called very early during the creation of a new
index 0767827..6b6ddc4 100644 (file)
@@ -117,6 +117,7 @@ repeat:
                crst_table_init(table, entry);
                pgd_populate(mm, (pgd_t *) table, (pud_t *) pgd);
                mm->pgd = (pgd_t *) table;
+               mm->task_size = mm->context.asce_limit;
                table = NULL;
        }
        spin_unlock(&mm->page_table_lock);
@@ -154,6 +155,7 @@ void crst_table_downgrade(struct mm_struct *mm, unsigned long limit)
                        BUG();
                }
                mm->pgd = (pgd_t *) (pgd_val(*pgd) & _REGION_ENTRY_ORIGIN);
+               mm->task_size = mm->context.asce_limit;
                crst_table_free(mm, (unsigned long *) pgd);
        }
        update_mm(mm, current);
index 64b7690..0080a16 100644 (file)
@@ -51,7 +51,7 @@ int show_interrupts(struct seq_file *p, void *v)
                        goto unlock;
                seq_printf(p, "%3d: ",i);
                for_each_online_cpu(j)
-                       seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
+                       seq_printf(p, "%10u ", kstat_irqs_cpu(i, j));
                seq_printf(p, " %14s", irq_desc[i].chip->name);
                seq_printf(p, "-%-8s", irq_desc[i].name);
                seq_printf(p, "  %s", action->name);
index 233bd87..d0d6a51 100644 (file)
@@ -185,7 +185,7 @@ int show_interrupts(struct seq_file *p, void *v)
                seq_printf(p, "%10u ", kstat_irqs(i));
 #else
                for_each_online_cpu(j)
-                       seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
+                       seq_printf(p, "%10u ", kstat_irqs_cpu(i, j));
 #endif
                seq_printf(p, " %9s", irq_desc[i].chip->typename);
                seq_printf(p, "  %s", action->name);
index db310aa..f95066b 100644 (file)
 #include <linux/clocksource.h>
 #include <linux/of_device.h>
 #include <linux/platform_device.h>
+#include <linux/irq.h>
 
 #include <asm/oplib.h>
 #include <asm/timer.h>
-#include <asm/irq.h>
 #include <asm/io.h>
 #include <asm/prom.h>
 #include <asm/starfire.h>
index 3d7aad0..336b615 100644 (file)
@@ -42,7 +42,7 @@ int show_interrupts(struct seq_file *p, void *v)
                seq_printf(p, "%10u ", kstat_irqs(i));
 #else
                for_each_online_cpu(j)
-                       seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
+                       seq_printf(p, "%10u ", kstat_irqs_cpu(i, j));
 #endif
                seq_printf(p, " %14s", irq_desc[i].chip->typename);
                seq_printf(p, "  %s", action->name);
index e948b28..4558dd3 100644 (file)
@@ -193,6 +193,9 @@ static int __kprobes can_boost(kprobe_opcode_t *opcodes)
        kprobe_opcode_t opcode;
        kprobe_opcode_t *orig_opcodes = opcodes;
 
+       if (search_exception_tables(opcodes))
+               return 0;       /* Page fault may occur on this address. */
+
 retry:
        if (opcodes - orig_opcodes > MAX_INSN_SIZE - 1)
                return 0;
index 83d53ce..462b9ba 100644 (file)
@@ -273,30 +273,43 @@ static unsigned long pit_calibrate_tsc(u32 latch, unsigned long ms, int loopmin)
  * use the TSC value at the transitions to calculate a pretty
  * good value for the TSC frequencty.
  */
-static inline int pit_expect_msb(unsigned char val)
+static inline int pit_expect_msb(unsigned char val, u64 *tscp, unsigned long *deltap)
 {
-       int count = 0;
+       int count;
+       u64 tsc = 0;
 
        for (count = 0; count < 50000; count++) {
                /* Ignore LSB */
                inb(0x42);
                if (inb(0x42) != val)
                        break;
+               tsc = get_cycles();
        }
-       return count > 50;
+       *deltap = get_cycles() - tsc;
+       *tscp = tsc;
+
+       /*
+        * We require _some_ success, but the quality control
+        * will be based on the error terms on the TSC values.
+        */
+       return count > 5;
 }
 
 /*
- * How many MSB values do we want to see? We aim for a
- * 15ms calibration, which assuming a 2us counter read
- * error should give us roughly 150 ppm precision for
- * the calibration.
+ * How many MSB values do we want to see? We aim for
+ * a maximum error rate of 500ppm (in practice the
+ * real error is much smaller), but refuse to spend
+ * more than 25ms on it.
  */
-#define QUICK_PIT_MS 15
-#define QUICK_PIT_ITERATIONS (QUICK_PIT_MS * PIT_TICK_RATE / 1000 / 256)
+#define MAX_QUICK_PIT_MS 25
+#define MAX_QUICK_PIT_ITERATIONS (MAX_QUICK_PIT_MS * PIT_TICK_RATE / 1000 / 256)
 
 static unsigned long quick_pit_calibrate(void)
 {
+       int i;
+       u64 tsc, delta;
+       unsigned long d1, d2;
+
        /* Set the Gate high, disable speaker */
        outb((inb(0x61) & ~0x02) | 0x01, 0x61);
 
@@ -315,45 +328,52 @@ static unsigned long quick_pit_calibrate(void)
        outb(0xff, 0x42);
        outb(0xff, 0x42);
 
-       if (pit_expect_msb(0xff)) {
-               int i;
-               u64 t1, t2, delta;
-               unsigned char expect = 0xfe;
-
-               t1 = get_cycles();
-               for (i = 0; i < QUICK_PIT_ITERATIONS; i++, expect--) {
-                       if (!pit_expect_msb(expect))
-                               goto failed;
+       /*
+        * The PIT starts counting at the next edge, so we
+        * need to delay for a microsecond. The easiest way
+        * to do that is to just read back the 16-bit counter
+        * once from the PIT.
+        */
+       inb(0x42);
+       inb(0x42);
+
+       if (pit_expect_msb(0xff, &tsc, &d1)) {
+               for (i = 1; i <= MAX_QUICK_PIT_ITERATIONS; i++) {
+                       if (!pit_expect_msb(0xff-i, &delta, &d2))
+                               break;
+
+                       /*
+                        * Iterate until the error is less than 500 ppm
+                        */
+                       delta -= tsc;
+                       if (d1+d2 < delta >> 11)
+                               goto success;
                }
-               t2 = get_cycles();
-
-               /*
-                * Make sure we can rely on the second TSC timestamp:
-                */
-               if (!pit_expect_msb(expect))
-                       goto failed;
-
-               /*
-                * Ok, if we get here, then we've seen the
-                * MSB of the PIT decrement QUICK_PIT_ITERATIONS
-                * times, and each MSB had many hits, so we never
-                * had any sudden jumps.
-                *
-                * As a result, we can depend on there not being
-                * any odd delays anywhere, and the TSC reads are
-                * reliable.
-                *
-                * kHz = ticks / time-in-seconds / 1000;
-                * kHz = (t2 - t1) / (QPI * 256 / PIT_TICK_RATE) / 1000
-                * kHz = ((t2 - t1) * PIT_TICK_RATE) / (QPI * 256 * 1000)
-                */
-               delta = (t2 - t1)*PIT_TICK_RATE;
-               do_div(delta, QUICK_PIT_ITERATIONS*256*1000);
-               printk("Fast TSC calibration using PIT\n");
-               return delta;
        }
-failed:
+       printk("Fast TSC calibration failed\n");
        return 0;
+
+success:
+       /*
+        * Ok, if we get here, then we've seen the
+        * MSB of the PIT decrement 'i' times, and the
+        * error has shrunk to less than 500 ppm.
+        *
+        * As a result, we can depend on there not being
+        * any odd delays anywhere, and the TSC reads are
+        * reliable (within the error). We also adjust the
+        * delta to the middle of the error bars, just
+        * because it looks nicer.
+        *
+        * kHz = ticks / time-in-seconds / 1000;
+        * kHz = (t2 - t1) / (I * 256 / PIT_TICK_RATE) / 1000
+        * kHz = ((t2 - t1) * PIT_TICK_RATE) / (I * 256 * 1000)
+        */
+       delta += (long)(d2 - d1)/2;
+       delta *= PIT_TICK_RATE;
+       do_div(delta, i*256*1000);
+       printk("Fast TSC calibration using PIT\n");
+       return delta;
 }
 
 /**
index 5fbcde5..f3b66fb 100644 (file)
@@ -99,7 +99,7 @@ int show_interrupts(struct seq_file *p, void *v)
                seq_printf(p, "%10u ", kstat_irqs(i));
 #else
                for_each_online_cpu(j)
-                       seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
+                       seq_printf(p, "%10u ", kstat_irqs_cpu(i, j));
 #endif
                seq_printf(p, " %14s", irq_desc[i].chip->typename);
                seq_printf(p, "  %s", action->name);
index 765fd1c..bee64b7 100644 (file)
@@ -758,8 +758,7 @@ static int __init acpi_bus_init(void)
        acpi_status status = AE_OK;
        extern acpi_status acpi_os_initialize1(void);
 
-
-       status = acpi_os_initialize1();
+       acpi_os_initialize1();
 
        status =
            acpi_enable_subsystem(ACPI_NO_HARDWARE_INIT | ACPI_NO_ACPI_ENABLE);
@@ -769,12 +768,6 @@ static int __init acpi_bus_init(void)
                goto error1;
        }
 
-       if (ACPI_FAILURE(status)) {
-               printk(KERN_ERR PREFIX
-                      "Unable to initialize ACPI OS objects\n");
-               goto error1;
-       }
-
        /*
         * ACPI 2.0 requires the EC driver to be loaded and work before
         * the EC device is found in the namespace (i.e. before acpi_initialize_objects()
index c5e292a..3a0d8ef 100644 (file)
@@ -277,7 +277,7 @@ int acpi_get_node(acpi_handle *handle)
        int pxm, node = -1;
 
        pxm = acpi_get_pxm(handle);
-       if (pxm >= 0)
+       if (pxm >= 0 && pxm < MAX_PXM_DOMAINS)
                node = acpi_map_pxm_to_node(pxm);
 
        return node;
index 2b6c590..eb8980d 100644 (file)
@@ -1324,54 +1324,6 @@ acpi_os_validate_interface (char *interface)
        return AE_SUPPORT;
 }
 
-#ifdef CONFIG_X86
-
-struct aml_port_desc {
-       uint    start;
-       uint    end;
-       char*   name;
-       char    warned;
-};
-
-static struct aml_port_desc aml_invalid_port_list[] = {
-       {0x20, 0x21, "PIC0", 0},
-       {0xA0, 0xA1, "PIC1", 0},
-       {0x4D0, 0x4D1, "ELCR", 0}
-};
-
-/*
- * valid_aml_io_address()
- *
- * if valid, return true
- * else invalid, warn once, return false
- */
-static bool valid_aml_io_address(uint address, uint length)
-{
-       int i;
-       int entries = sizeof(aml_invalid_port_list) / sizeof(struct aml_port_desc);
-
-       for (i = 0; i < entries; ++i) {
-               if ((address >= aml_invalid_port_list[i].start &&
-                       address <= aml_invalid_port_list[i].end) ||
-                       (address + length >= aml_invalid_port_list[i].start &&
-                       address  + length <= aml_invalid_port_list[i].end))
-               {
-                       if (!aml_invalid_port_list[i].warned)
-                       {
-                               printk(KERN_ERR "ACPI: Denied BIOS AML access"
-                                       " to invalid port 0x%x+0x%x (%s)\n",
-                                       address, length,
-                                       aml_invalid_port_list[i].name);
-                               aml_invalid_port_list[i].warned = 1;
-                       }
-                       return false;   /* invalid */
-               }
-       }
-       return true;    /* valid */
-}
-#else
-static inline bool valid_aml_io_address(uint address, uint length) { return true; }
-#endif
 /******************************************************************************
  *
  * FUNCTION:    acpi_os_validate_address
@@ -1401,8 +1353,6 @@ acpi_os_validate_address (
 
        switch (space_id) {
        case ACPI_ADR_SPACE_SYSTEM_IO:
-               if (!valid_aml_io_address(address, length))
-                       return AE_AML_ILLEGAL_ADDRESS;
        case ACPI_ADR_SPACE_SYSTEM_MEMORY:
                /* Only interference checks against SystemIO and SytemMemory
                   are needed */
index 5192666..00456fc 100644 (file)
@@ -378,6 +378,22 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
                DMI_MATCH(DMI_PRODUCT_NAME, "Macmini1,1"),
                },
        },
+       {
+       .callback = init_old_suspend_ordering,
+       .ident = "Asus Pundit P1-AH2 (M2N8L motherboard)",
+       .matches = {
+               DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTek Computer INC."),
+               DMI_MATCH(DMI_BOARD_NAME, "M2N8L"),
+               },
+       },
+       {
+       .callback = init_set_sci_en_on_resume,
+       .ident = "Toshiba Satellite L300",
+       .matches = {
+               DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
+               DMI_MATCH(DMI_PRODUCT_NAME, "Satellite L300"),
+               },
+       },
        {},
 };
 #endif /* CONFIG_SUSPEND */
index 54961c0..ef8b30d 100644 (file)
@@ -1289,6 +1289,39 @@ static const int *__devinit piix_init_sata_map(struct pci_dev *pdev,
        return map;
 }
 
+static bool piix_no_sidpr(struct ata_host *host)
+{
+       struct pci_dev *pdev = to_pci_dev(host->dev);
+
+       /*
+        * Samsung DB-P70 only has three ATA ports exposed and
+        * curiously the unconnected first port reports link online
+        * while not responding to SRST protocol causing excessive
+        * detection delay.
+        *
+        * Unfortunately, the system doesn't carry enough DMI
+        * information to identify the machine but does have subsystem
+        * vendor and device set.  As it's unclear whether the
+        * subsystem vendor/device is used only for this specific
+        * board, the port can't be disabled solely with the
+        * information; however, turning off SIDPR access works around
+        * the problem.  Turn it off.
+        *
+        * This problem is reported in bnc#441240.
+        *
+        * https://bugzilla.novell.com/show_bug.cgi?id=441420
+        */
+       if (pdev->vendor == PCI_VENDOR_ID_INTEL && pdev->device == 0x2920 &&
+           pdev->subsystem_vendor == PCI_VENDOR_ID_SAMSUNG &&
+           pdev->subsystem_device == 0xb049) {
+               dev_printk(KERN_WARNING, host->dev,
+                          "Samsung DB-P70 detected, disabling SIDPR\n");
+               return true;
+       }
+
+       return false;
+}
+
 static int __devinit piix_init_sidpr(struct ata_host *host)
 {
        struct pci_dev *pdev = to_pci_dev(host->dev);
@@ -1302,6 +1335,10 @@ static int __devinit piix_init_sidpr(struct ata_host *host)
                if (hpriv->map[i] == IDE)
                        return 0;
 
+       /* is it blacklisted? */
+       if (piix_no_sidpr(host))
+               return 0;
+
        if (!(host->ports[0]->flags & PIIX_FLAG_SIDPR))
                return 0;
 
index 714cb04..f93dc02 100644 (file)
@@ -2066,6 +2066,7 @@ static int ata_bus_softreset(struct ata_port *ap, unsigned int devmask,
        iowrite8(ap->ctl | ATA_SRST, ioaddr->ctl_addr);
        udelay(20);     /* FIXME: flush */
        iowrite8(ap->ctl, ioaddr->ctl_addr);
+       ap->last_ctl = ap->ctl;
 
        /* wait the port to become ready */
        return ata_sff_wait_after_reset(&ap->link, devmask, deadline);
@@ -2190,8 +2191,10 @@ void ata_sff_postreset(struct ata_link *link, unsigned int *classes)
        }
 
        /* set up device control */
-       if (ap->ioaddr.ctl_addr)
+       if (ap->ioaddr.ctl_addr) {
                iowrite8(ap->ctl, ap->ioaddr.ctl_addr);
+               ap->last_ctl = ap->ctl;
+       }
 }
 EXPORT_SYMBOL_GPL(ata_sff_postreset);
 
@@ -2534,6 +2537,7 @@ void ata_bus_reset(struct ata_port *ap)
        if (ap->flags & (ATA_FLAG_SATA_RESET | ATA_FLAG_SRST)) {
                /* set up device control for ATA_FLAG_SATA_RESET */
                iowrite8(ap->ctl, ioaddr->ctl_addr);
+               ap->last_ctl = ap->ctl;
        }
 
        DPRINTK("EXIT\n");
index 7007edd..74b1080 100644 (file)
@@ -2218,12 +2218,13 @@ static irqreturn_t mv_interrupt(int irq, void *dev_instance)
                else
                        handled = mv_host_intr(host, pending_irqs);
        }
-       spin_unlock(&host->lock);
 
        /* for MSI: unmask; interrupt cause bits will retrigger now */
        if (using_msi)
                writel(hpriv->main_irq_mask, hpriv->main_irq_mask_addr);
 
+       spin_unlock(&host->lock);
+
        return IRQ_RETVAL(handled);
 }
 
index 204332b..87e120e 100644 (file)
@@ -9,6 +9,7 @@ obj-$(CONFIG_MAC_FLOPPY)        += swim3.o
 obj-$(CONFIG_BLK_DEV_FD)       += floppy.o
 obj-$(CONFIG_AMIGA_FLOPPY)     += amiflop.o
 obj-$(CONFIG_PS3_DISK)         += ps3disk.o
+obj-$(CONFIG_PS3_VRAM)         += ps3vram.o
 obj-$(CONFIG_ATARI_FLOPPY)     += ataflop.o
 obj-$(CONFIG_AMIGA_Z2RAM)      += z2ram.o
 obj-$(CONFIG_BLK_DEV_RAM)      += brd.o
diff --git a/drivers/block/ps3vram.c b/drivers/block/ps3vram.c
new file mode 100644 (file)
index 0000000..393ed67
--- /dev/null
@@ -0,0 +1,865 @@
+/*
+ * ps3vram - Use extra PS3 video ram as MTD block device.
+ *
+ * Copyright 2009 Sony Corporation
+ *
+ * Based on the MTD ps3vram driver, which is
+ * Copyright (c) 2007-2008 Jim Paris <jim@jtan.com>
+ * Added support RSX DMA Vivien Chappelier <vivien.chappelier@free.fr>
+ */
+
+#include <linux/blkdev.h>
+#include <linux/delay.h>
+#include <linux/proc_fs.h>
+#include <linux/seq_file.h>
+
+#include <asm/firmware.h>
+#include <asm/lv1call.h>
+#include <asm/ps3.h>
+
+
+#define DEVICE_NAME            "ps3vram"
+
+
+#define XDR_BUF_SIZE (2 * 1024 * 1024) /* XDR buffer (must be 1MiB aligned) */
+#define XDR_IOIF 0x0c000000
+
+#define FIFO_BASE XDR_IOIF
+#define FIFO_SIZE (64 * 1024)
+
+#define DMA_PAGE_SIZE (4 * 1024)
+
+#define CACHE_PAGE_SIZE (256 * 1024)
+#define CACHE_PAGE_COUNT ((XDR_BUF_SIZE - FIFO_SIZE) / CACHE_PAGE_SIZE)
+
+#define CACHE_OFFSET CACHE_PAGE_SIZE
+#define FIFO_OFFSET 0
+
+#define CTRL_PUT 0x10
+#define CTRL_GET 0x11
+#define CTRL_TOP 0x15
+
+#define UPLOAD_SUBCH   1
+#define DOWNLOAD_SUBCH 2
+
+#define NV_MEMORY_TO_MEMORY_FORMAT_OFFSET_IN   0x0000030c
+#define NV_MEMORY_TO_MEMORY_FORMAT_NOTIFY      0x00000104
+
+#define L1GPU_CONTEXT_ATTRIBUTE_FB_BLIT 0x601
+
+#define CACHE_PAGE_PRESENT 1
+#define CACHE_PAGE_DIRTY   2
+
+struct ps3vram_tag {
+       unsigned int address;
+       unsigned int flags;
+};
+
+struct ps3vram_cache {
+       unsigned int page_count;
+       unsigned int page_size;
+       struct ps3vram_tag *tags;
+       unsigned int hit;
+       unsigned int miss;
+};
+
+struct ps3vram_priv {
+       struct request_queue *queue;
+       struct gendisk *gendisk;
+
+       u64 size;
+
+       u64 memory_handle;
+       u64 context_handle;
+       u32 *ctrl;
+       u32 *reports;
+       u8 __iomem *ddr_base;
+       u8 *xdr_buf;
+
+       u32 *fifo_base;
+       u32 *fifo_ptr;
+
+       struct ps3vram_cache cache;
+
+       /* Used to serialize cache/DMA operations */
+       struct mutex lock;
+};
+
+
+static int ps3vram_major;
+
+
+static struct block_device_operations ps3vram_fops = {
+       .owner          = THIS_MODULE,
+};
+
+
+#define DMA_NOTIFIER_HANDLE_BASE 0x66604200 /* first DMA notifier handle */
+#define DMA_NOTIFIER_OFFSET_BASE 0x1000     /* first DMA notifier offset */
+#define DMA_NOTIFIER_SIZE        0x40
+#define NOTIFIER 7     /* notifier used for completion report */
+
+static char *size = "256M";
+module_param(size, charp, 0);
+MODULE_PARM_DESC(size, "memory size");
+
+static u32 *ps3vram_get_notifier(u32 *reports, int notifier)
+{
+       return (void *)reports + DMA_NOTIFIER_OFFSET_BASE +
+              DMA_NOTIFIER_SIZE * notifier;
+}
+
+static void ps3vram_notifier_reset(struct ps3_system_bus_device *dev)
+{
+       struct ps3vram_priv *priv = dev->core.driver_data;
+       u32 *notify = ps3vram_get_notifier(priv->reports, NOTIFIER);
+       int i;
+
+       for (i = 0; i < 4; i++)
+               notify[i] = 0xffffffff;
+}
+
+static int ps3vram_notifier_wait(struct ps3_system_bus_device *dev,
+                                unsigned int timeout_ms)
+{
+       struct ps3vram_priv *priv = dev->core.driver_data;
+       u32 *notify = ps3vram_get_notifier(priv->reports, NOTIFIER);
+       unsigned long timeout = jiffies + msecs_to_jiffies(timeout_ms);
+
+       do {
+               if (!notify[3])
+                       return 0;
+               msleep(1);
+       } while (time_before(jiffies, timeout));
+
+       return -ETIMEDOUT;
+}
+
+static void ps3vram_init_ring(struct ps3_system_bus_device *dev)
+{
+       struct ps3vram_priv *priv = dev->core.driver_data;
+
+       priv->ctrl[CTRL_PUT] = FIFO_BASE + FIFO_OFFSET;
+       priv->ctrl[CTRL_GET] = FIFO_BASE + FIFO_OFFSET;
+}
+
+static int ps3vram_wait_ring(struct ps3_system_bus_device *dev,
+                            unsigned int timeout_ms)
+{
+       struct ps3vram_priv *priv = dev->core.driver_data;
+       unsigned long timeout = jiffies + msecs_to_jiffies(timeout_ms);
+
+       do {
+               if (priv->ctrl[CTRL_PUT] == priv->ctrl[CTRL_GET])
+                       return 0;
+               msleep(1);
+       } while (time_before(jiffies, timeout));
+
+       dev_warn(&dev->core, "FIFO timeout (%08x/%08x/%08x)\n",
+                priv->ctrl[CTRL_PUT], priv->ctrl[CTRL_GET],
+                priv->ctrl[CTRL_TOP]);
+
+       return -ETIMEDOUT;
+}
+
+static void ps3vram_out_ring(struct ps3vram_priv *priv, u32 data)
+{
+       *(priv->fifo_ptr)++ = data;
+}
+
+static void ps3vram_begin_ring(struct ps3vram_priv *priv, u32 chan, u32 tag,
+                              u32 size)
+{
+       ps3vram_out_ring(priv, (size << 18) | (chan << 13) | tag);
+}
+
+static void ps3vram_rewind_ring(struct ps3_system_bus_device *dev)
+{
+       struct ps3vram_priv *priv = dev->core.driver_data;
+       int status;
+
+       ps3vram_out_ring(priv, 0x20000000 | (FIFO_BASE + FIFO_OFFSET));
+
+       priv->ctrl[CTRL_PUT] = FIFO_BASE + FIFO_OFFSET;
+
+       /* asking the HV for a blit will kick the FIFO */
+       status = lv1_gpu_context_attribute(priv->context_handle,
+                                          L1GPU_CONTEXT_ATTRIBUTE_FB_BLIT, 0,
+                                          0, 0, 0);
+       if (status)
+               dev_err(&dev->core,
+                       "%s: lv1_gpu_context_attribute failed %d\n", __func__,
+                       status);
+
+       priv->fifo_ptr = priv->fifo_base;
+}
+
+static void ps3vram_fire_ring(struct ps3_system_bus_device *dev)
+{
+       struct ps3vram_priv *priv = dev->core.driver_data;
+       int status;
+
+       mutex_lock(&ps3_gpu_mutex);
+
+       priv->ctrl[CTRL_PUT] = FIFO_BASE + FIFO_OFFSET +
+                              (priv->fifo_ptr - priv->fifo_base) * sizeof(u32);
+
+       /* asking the HV for a blit will kick the FIFO */
+       status = lv1_gpu_context_attribute(priv->context_handle,
+                                          L1GPU_CONTEXT_ATTRIBUTE_FB_BLIT, 0,
+                                          0, 0, 0);
+       if (status)
+               dev_err(&dev->core,
+                       "%s: lv1_gpu_context_attribute failed %d\n", __func__,
+                       status);
+
+       if ((priv->fifo_ptr - priv->fifo_base) * sizeof(u32) >
+           FIFO_SIZE - 1024) {
+               dev_dbg(&dev->core, "FIFO full, rewinding\n");
+               ps3vram_wait_ring(dev, 200);
+               ps3vram_rewind_ring(dev);
+       }
+
+       mutex_unlock(&ps3_gpu_mutex);
+}
+
+static void ps3vram_bind(struct ps3_system_bus_device *dev)
+{
+       struct ps3vram_priv *priv = dev->core.driver_data;
+
+       ps3vram_begin_ring(priv, UPLOAD_SUBCH, 0, 1);
+       ps3vram_out_ring(priv, 0x31337303);
+       ps3vram_begin_ring(priv, UPLOAD_SUBCH, 0x180, 3);
+       ps3vram_out_ring(priv, DMA_NOTIFIER_HANDLE_BASE + NOTIFIER);
+       ps3vram_out_ring(priv, 0xfeed0001);     /* DMA system RAM instance */
+       ps3vram_out_ring(priv, 0xfeed0000);     /* DMA video RAM instance */
+
+       ps3vram_begin_ring(priv, DOWNLOAD_SUBCH, 0, 1);
+       ps3vram_out_ring(priv, 0x3137c0de);
+       ps3vram_begin_ring(priv, DOWNLOAD_SUBCH, 0x180, 3);
+       ps3vram_out_ring(priv, DMA_NOTIFIER_HANDLE_BASE + NOTIFIER);
+       ps3vram_out_ring(priv, 0xfeed0000);     /* DMA video RAM instance */
+       ps3vram_out_ring(priv, 0xfeed0001);     /* DMA system RAM instance */
+
+       ps3vram_fire_ring(dev);
+}
+
+static int ps3vram_upload(struct ps3_system_bus_device *dev,
+                         unsigned int src_offset, unsigned int dst_offset,
+                         int len, int count)
+{
+       struct ps3vram_priv *priv = dev->core.driver_data;
+
+       ps3vram_begin_ring(priv, UPLOAD_SUBCH,
+                          NV_MEMORY_TO_MEMORY_FORMAT_OFFSET_IN, 8);
+       ps3vram_out_ring(priv, XDR_IOIF + src_offset);
+       ps3vram_out_ring(priv, dst_offset);
+       ps3vram_out_ring(priv, len);
+       ps3vram_out_ring(priv, len);
+       ps3vram_out_ring(priv, len);
+       ps3vram_out_ring(priv, count);
+       ps3vram_out_ring(priv, (1 << 8) | 1);
+       ps3vram_out_ring(priv, 0);
+
+       ps3vram_notifier_reset(dev);
+       ps3vram_begin_ring(priv, UPLOAD_SUBCH,
+                          NV_MEMORY_TO_MEMORY_FORMAT_NOTIFY, 1);
+       ps3vram_out_ring(priv, 0);
+       ps3vram_begin_ring(priv, UPLOAD_SUBCH, 0x100, 1);
+       ps3vram_out_ring(priv, 0);
+       ps3vram_fire_ring(dev);
+       if (ps3vram_notifier_wait(dev, 200) < 0) {
+               dev_warn(&dev->core, "%s: Notifier timeout\n", __func__);
+               return -1;
+       }
+
+       return 0;
+}
+
+static int ps3vram_download(struct ps3_system_bus_device *dev,
+                           unsigned int src_offset, unsigned int dst_offset,
+                           int len, int count)
+{
+       struct ps3vram_priv *priv = dev->core.driver_data;
+
+       ps3vram_begin_ring(priv, DOWNLOAD_SUBCH,
+                          NV_MEMORY_TO_MEMORY_FORMAT_OFFSET_IN, 8);
+       ps3vram_out_ring(priv, src_offset);
+       ps3vram_out_ring(priv, XDR_IOIF + dst_offset);
+       ps3vram_out_ring(priv, len);
+       ps3vram_out_ring(priv, len);
+       ps3vram_out_ring(priv, len);
+       ps3vram_out_ring(priv, count);
+       ps3vram_out_ring(priv, (1 << 8) | 1);
+       ps3vram_out_ring(priv, 0);
+
+       ps3vram_notifier_reset(dev);
+       ps3vram_begin_ring(priv, DOWNLOAD_SUBCH,
+                          NV_MEMORY_TO_MEMORY_FORMAT_NOTIFY, 1);
+       ps3vram_out_ring(priv, 0);
+       ps3vram_begin_ring(priv, DOWNLOAD_SUBCH, 0x100, 1);
+       ps3vram_out_ring(priv, 0);
+       ps3vram_fire_ring(dev);
+       if (ps3vram_notifier_wait(dev, 200) < 0) {
+               dev_warn(&dev->core, "%s: Notifier timeout\n", __func__);
+               return -1;
+       }
+
+       return 0;
+}
+
+static void ps3vram_cache_evict(struct ps3_system_bus_device *dev, int entry)
+{
+       struct ps3vram_priv *priv = dev->core.driver_data;
+       struct ps3vram_cache *cache = &priv->cache;
+
+       if (!(cache->tags[entry].flags & CACHE_PAGE_DIRTY))
+               return;
+
+       dev_dbg(&dev->core, "Flushing %d: 0x%08x\n", entry,
+               cache->tags[entry].address);
+       if (ps3vram_upload(dev, CACHE_OFFSET + entry * cache->page_size,
+                          cache->tags[entry].address, DMA_PAGE_SIZE,
+                          cache->page_size / DMA_PAGE_SIZE) < 0) {
+               dev_err(&dev->core,
+                       "Failed to upload from 0x%x to " "0x%x size 0x%x\n",
+                       entry * cache->page_size, cache->tags[entry].address,
+                       cache->page_size);
+       }
+       cache->tags[entry].flags &= ~CACHE_PAGE_DIRTY;
+}
+
+static void ps3vram_cache_load(struct ps3_system_bus_device *dev, int entry,
+                              unsigned int address)
+{
+       struct ps3vram_priv *priv = dev->core.driver_data;
+       struct ps3vram_cache *cache = &priv->cache;
+
+       dev_dbg(&dev->core, "Fetching %d: 0x%08x\n", entry, address);
+       if (ps3vram_download(dev, address,
+                            CACHE_OFFSET + entry * cache->page_size,
+                            DMA_PAGE_SIZE,
+                            cache->page_size / DMA_PAGE_SIZE) < 0) {
+               dev_err(&dev->core,
+                       "Failed to download from 0x%x to 0x%x size 0x%x\n",
+                       address, entry * cache->page_size, cache->page_size);
+       }
+
+       cache->tags[entry].address = address;
+       cache->tags[entry].flags |= CACHE_PAGE_PRESENT;
+}
+
+
+static void ps3vram_cache_flush(struct ps3_system_bus_device *dev)
+{
+       struct ps3vram_priv *priv = dev->core.driver_data;
+       struct ps3vram_cache *cache = &priv->cache;
+       int i;
+
+       dev_dbg(&dev->core, "FLUSH\n");
+       for (i = 0; i < cache->page_count; i++) {
+               ps3vram_cache_evict(dev, i);
+               cache->tags[i].flags = 0;
+       }
+}
+
+static unsigned int ps3vram_cache_match(struct ps3_system_bus_device *dev,
+                                       loff_t address)
+{
+       struct ps3vram_priv *priv = dev->core.driver_data;
+       struct ps3vram_cache *cache = &priv->cache;
+       unsigned int base;
+       unsigned int offset;
+       int i;
+       static int counter;
+
+       offset = (unsigned int) (address & (cache->page_size - 1));
+       base = (unsigned int) (address - offset);
+
+       /* fully associative check */
+       for (i = 0; i < cache->page_count; i++) {
+               if ((cache->tags[i].flags & CACHE_PAGE_PRESENT) &&
+                   cache->tags[i].address == base) {
+                       cache->hit++;
+                       dev_dbg(&dev->core, "Found entry %d: 0x%08x\n", i,
+                               cache->tags[i].address);
+                       return i;
+               }
+       }
+
+       /* choose a random entry */
+       i = (jiffies + (counter++)) % cache->page_count;
+       dev_dbg(&dev->core, "Using entry %d\n", i);
+
+       ps3vram_cache_evict(dev, i);
+       ps3vram_cache_load(dev, i, base);
+
+       cache->miss++;
+       return i;
+}
+
+static int ps3vram_cache_init(struct ps3_system_bus_device *dev)
+{
+       struct ps3vram_priv *priv = dev->core.driver_data;
+
+       priv->cache.page_count = CACHE_PAGE_COUNT;
+       priv->cache.page_size = CACHE_PAGE_SIZE;
+       priv->cache.tags = kzalloc(sizeof(struct ps3vram_tag) *
+                                  CACHE_PAGE_COUNT, GFP_KERNEL);
+       if (priv->cache.tags == NULL) {
+               dev_err(&dev->core, "Could not allocate cache tags\n");
+               return -ENOMEM;
+       }
+
+       dev_info(&dev->core, "Created ram cache: %d entries, %d KiB each\n",
+               CACHE_PAGE_COUNT, CACHE_PAGE_SIZE / 1024);
+
+       return 0;
+}
+
+static void ps3vram_cache_cleanup(struct ps3_system_bus_device *dev)
+{
+       struct ps3vram_priv *priv = dev->core.driver_data;
+
+       ps3vram_cache_flush(dev);
+       kfree(priv->cache.tags);
+}
+
+static int ps3vram_read(struct ps3_system_bus_device *dev, loff_t from,
+                       size_t len, size_t *retlen, u_char *buf)
+{
+       struct ps3vram_priv *priv = dev->core.driver_data;
+       unsigned int cached, count;
+
+       dev_dbg(&dev->core, "%s: from=0x%08x len=0x%zx\n", __func__,
+               (unsigned int)from, len);
+
+       if (from >= priv->size)
+               return -EIO;
+
+       if (len > priv->size - from)
+               len = priv->size - from;
+
+       /* Copy from vram to buf */
+       count = len;
+       while (count) {
+               unsigned int offset, avail;
+               unsigned int entry;
+
+               offset = (unsigned int) (from & (priv->cache.page_size - 1));
+               avail  = priv->cache.page_size - offset;
+
+               mutex_lock(&priv->lock);
+
+               entry = ps3vram_cache_match(dev, from);
+               cached = CACHE_OFFSET + entry * priv->cache.page_size + offset;
+
+               dev_dbg(&dev->core, "%s: from=%08x cached=%08x offset=%08x "
+                       "avail=%08x count=%08x\n", __func__,
+                       (unsigned int)from, cached, offset, avail, count);
+
+               if (avail > count)
+                       avail = count;
+               memcpy(buf, priv->xdr_buf + cached, avail);
+
+               mutex_unlock(&priv->lock);
+
+               buf += avail;
+               count -= avail;
+               from += avail;
+       }
+
+       *retlen = len;
+       return 0;
+}
+
+static int ps3vram_write(struct ps3_system_bus_device *dev, loff_t to,
+                        size_t len, size_t *retlen, const u_char *buf)
+{
+       struct ps3vram_priv *priv = dev->core.driver_data;
+       unsigned int cached, count;
+
+       if (to >= priv->size)
+               return -EIO;
+
+       if (len > priv->size - to)
+               len = priv->size - to;
+
+       /* Copy from buf to vram */
+       count = len;
+       while (count) {
+               unsigned int offset, avail;
+               unsigned int entry;
+
+               offset = (unsigned int) (to & (priv->cache.page_size - 1));
+               avail  = priv->cache.page_size - offset;
+
+               mutex_lock(&priv->lock);
+
+               entry = ps3vram_cache_match(dev, to);
+               cached = CACHE_OFFSET + entry * priv->cache.page_size + offset;
+
+               dev_dbg(&dev->core, "%s: to=%08x cached=%08x offset=%08x "
+                       "avail=%08x count=%08x\n", __func__, (unsigned int)to,
+                       cached, offset, avail, count);
+
+               if (avail > count)
+                       avail = count;
+               memcpy(priv->xdr_buf + cached, buf, avail);
+
+               priv->cache.tags[entry].flags |= CACHE_PAGE_DIRTY;
+
+               mutex_unlock(&priv->lock);
+
+               buf += avail;
+               count -= avail;
+               to += avail;
+       }
+
+       *retlen = len;
+       return 0;
+}
+
+static int ps3vram_proc_show(struct seq_file *m, void *v)
+{
+       struct ps3vram_priv *priv = m->private;
+
+       seq_printf(m, "hit:%u\nmiss:%u\n", priv->cache.hit, priv->cache.miss);
+       return 0;
+}
+
+static int ps3vram_proc_open(struct inode *inode, struct file *file)
+{
+       return single_open(file, ps3vram_proc_show, PDE(inode)->data);
+}
+
+static const struct file_operations ps3vram_proc_fops = {
+       .owner          = THIS_MODULE,
+       .open           = ps3vram_proc_open,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = single_release,
+};
+
+static void __devinit ps3vram_proc_init(struct ps3_system_bus_device *dev)
+{
+       struct ps3vram_priv *priv = dev->core.driver_data;
+       struct proc_dir_entry *pde;
+
+       pde = proc_create(DEVICE_NAME, 0444, NULL, &ps3vram_proc_fops);
+       if (!pde) {
+               dev_warn(&dev->core, "failed to create /proc entry\n");
+               return;
+       }
+
+       pde->owner = THIS_MODULE;
+       pde->data = priv;
+}
+
+static int ps3vram_make_request(struct request_queue *q, struct bio *bio)
+{
+       struct ps3_system_bus_device *dev = q->queuedata;
+       int write = bio_data_dir(bio) == WRITE;
+       const char *op = write ? "write" : "read";
+       loff_t offset = bio->bi_sector << 9;
+       int error = 0;
+       struct bio_vec *bvec;
+       unsigned int i;
+
+       dev_dbg(&dev->core, "%s\n", __func__);
+
+       bio_for_each_segment(bvec, bio, i) {
+               /* PS3 is ppc64, so we don't handle highmem */
+               char *ptr = page_address(bvec->bv_page) + bvec->bv_offset;
+               size_t len = bvec->bv_len, retlen;
+
+               dev_dbg(&dev->core, "    %s %zu bytes at offset %llu\n", op,
+                       len, offset);
+               if (write)
+                       error = ps3vram_write(dev, offset, len, &retlen, ptr);
+               else
+                       error = ps3vram_read(dev, offset, len, &retlen, ptr);
+
+               if (error) {
+                       dev_err(&dev->core, "%s failed\n", op);
+                       goto out;
+               }
+
+               if (retlen != len) {
+                       dev_err(&dev->core, "Short %s\n", op);
+                       goto out;
+               }
+
+               offset += len;
+       }
+
+       dev_dbg(&dev->core, "%s completed\n", op);
+
+out:
+       bio_endio(bio, error);
+       return 0;
+}
+
+static int __devinit ps3vram_probe(struct ps3_system_bus_device *dev)
+{
+       struct ps3vram_priv *priv;
+       int error, status;
+       struct request_queue *queue;
+       struct gendisk *gendisk;
+       u64 ddr_lpar, ctrl_lpar, info_lpar, reports_lpar, ddr_size,
+           reports_size;
+       char *rest;
+
+       priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+       if (!priv) {
+               error = -ENOMEM;
+               goto fail;
+       }
+
+       mutex_init(&priv->lock);
+       dev->core.driver_data = priv;
+
+       priv = dev->core.driver_data;
+
+       /* Allocate XDR buffer (1MiB aligned) */
+       priv->xdr_buf = (void *)__get_free_pages(GFP_KERNEL,
+               get_order(XDR_BUF_SIZE));
+       if (priv->xdr_buf == NULL) {
+               dev_err(&dev->core, "Could not allocate XDR buffer\n");
+               error = -ENOMEM;
+               goto fail_free_priv;
+       }
+
+       /* Put FIFO at begginning of XDR buffer */
+       priv->fifo_base = (u32 *) (priv->xdr_buf + FIFO_OFFSET);
+       priv->fifo_ptr = priv->fifo_base;
+
+       /* XXX: Need to open GPU, in case ps3fb or snd_ps3 aren't loaded */
+       if (ps3_open_hv_device(dev)) {
+               dev_err(&dev->core, "ps3_open_hv_device failed\n");
+               error = -EAGAIN;
+               goto out_close_gpu;
+       }
+
+       /* Request memory */
+       status = -1;
+       ddr_size = ALIGN(memparse(size, &rest), 1024*1024);
+       if (!ddr_size) {
+               dev_err(&dev->core, "Specified size is too small\n");
+               error = -EINVAL;
+               goto out_close_gpu;
+       }
+
+       while (ddr_size > 0) {
+               status = lv1_gpu_memory_allocate(ddr_size, 0, 0, 0, 0,
+                                                &priv->memory_handle,
+                                                &ddr_lpar);
+               if (!status)
+                       break;
+               ddr_size -= 1024*1024;
+       }
+       if (status) {
+               dev_err(&dev->core, "lv1_gpu_memory_allocate failed %d\n",
+                       status);
+               error = -ENOMEM;
+               goto out_free_xdr_buf;
+       }
+
+       /* Request context */
+       status = lv1_gpu_context_allocate(priv->memory_handle, 0,
+                                         &priv->context_handle, &ctrl_lpar,
+                                         &info_lpar, &reports_lpar,
+                                         &reports_size);
+       if (status) {
+               dev_err(&dev->core, "lv1_gpu_context_allocate failed %d\n",
+                       status);
+               error = -ENOMEM;
+               goto out_free_memory;
+       }
+
+       /* Map XDR buffer to RSX */
+       status = lv1_gpu_context_iomap(priv->context_handle, XDR_IOIF,
+                                      ps3_mm_phys_to_lpar(__pa(priv->xdr_buf)),
+                                      XDR_BUF_SIZE, 0);
+       if (status) {
+               dev_err(&dev->core, "lv1_gpu_context_iomap failed %d\n",
+                       status);
+               error = -ENOMEM;
+               goto out_free_context;
+       }
+
+       priv->ddr_base = ioremap_flags(ddr_lpar, ddr_size, _PAGE_NO_CACHE);
+
+       if (!priv->ddr_base) {
+               dev_err(&dev->core, "ioremap DDR failed\n");
+               error = -ENOMEM;
+               goto out_free_context;
+       }
+
+       priv->ctrl = ioremap(ctrl_lpar, 64 * 1024);
+       if (!priv->ctrl) {
+               dev_err(&dev->core, "ioremap CTRL failed\n");
+               error = -ENOMEM;
+               goto out_unmap_vram;
+       }
+
+       priv->reports = ioremap(reports_lpar, reports_size);
+       if (!priv->reports) {
+               dev_err(&dev->core, "ioremap REPORTS failed\n");
+               error = -ENOMEM;
+               goto out_unmap_ctrl;
+       }
+
+       mutex_lock(&ps3_gpu_mutex);
+       ps3vram_init_ring(dev);
+       mutex_unlock(&ps3_gpu_mutex);
+
+       priv->size = ddr_size;
+
+       ps3vram_bind(dev);
+
+       mutex_lock(&ps3_gpu_mutex);
+       error = ps3vram_wait_ring(dev, 100);
+       mutex_unlock(&ps3_gpu_mutex);
+       if (error < 0) {
+               dev_err(&dev->core, "Failed to initialize channels\n");
+               error = -ETIMEDOUT;
+               goto out_unmap_reports;
+       }
+
+       ps3vram_cache_init(dev);
+       ps3vram_proc_init(dev);
+
+       queue = blk_alloc_queue(GFP_KERNEL);
+       if (!queue) {
+               dev_err(&dev->core, "blk_alloc_queue failed\n");
+               error = -ENOMEM;
+               goto out_cache_cleanup;
+       }
+
+       priv->queue = queue;
+       queue->queuedata = dev;
+       blk_queue_make_request(queue, ps3vram_make_request);
+       blk_queue_max_phys_segments(queue, MAX_PHYS_SEGMENTS);
+       blk_queue_max_hw_segments(queue, MAX_HW_SEGMENTS);
+       blk_queue_max_segment_size(queue, MAX_SEGMENT_SIZE);
+       blk_queue_max_sectors(queue, SAFE_MAX_SECTORS);
+
+       gendisk = alloc_disk(1);
+       if (!gendisk) {
+               dev_err(&dev->core, "alloc_disk failed\n");
+               error = -ENOMEM;
+               goto fail_cleanup_queue;
+       }
+
+       priv->gendisk = gendisk;
+       gendisk->major = ps3vram_major;
+       gendisk->first_minor = 0;
+       gendisk->fops = &ps3vram_fops;
+       gendisk->queue = queue;
+       gendisk->private_data = dev;
+       gendisk->driverfs_dev = &dev->core;
+       strlcpy(gendisk->disk_name, DEVICE_NAME, sizeof(gendisk->disk_name));
+       set_capacity(gendisk, priv->size >> 9);
+
+       dev_info(&dev->core, "%s: Using %lu MiB of GPU memory\n",
+                gendisk->disk_name, get_capacity(gendisk) >> 11);
+
+       add_disk(gendisk);
+       return 0;
+
+fail_cleanup_queue:
+       blk_cleanup_queue(queue);
+out_cache_cleanup:
+       remove_proc_entry(DEVICE_NAME, NULL);
+       ps3vram_cache_cleanup(dev);
+out_unmap_reports:
+       iounmap(priv->reports);
+out_unmap_ctrl:
+       iounmap(priv->ctrl);
+out_unmap_vram:
+       iounmap(priv->ddr_base);
+out_free_context:
+       lv1_gpu_context_free(priv->context_handle);
+out_free_memory:
+       lv1_gpu_memory_free(priv->memory_handle);
+out_close_gpu:
+       ps3_close_hv_device(dev);
+out_free_xdr_buf:
+       free_pages((unsigned long) priv->xdr_buf, get_order(XDR_BUF_SIZE));
+fail_free_priv:
+       kfree(priv);
+       dev->core.driver_data = NULL;
+fail:
+       return error;
+}
+
+static int ps3vram_remove(struct ps3_system_bus_device *dev)
+{
+       struct ps3vram_priv *priv = dev->core.driver_data;
+
+       del_gendisk(priv->gendisk);
+       put_disk(priv->gendisk);
+       blk_cleanup_queue(priv->queue);
+       remove_proc_entry(DEVICE_NAME, NULL);
+       ps3vram_cache_cleanup(dev);
+       iounmap(priv->reports);
+       iounmap(priv->ctrl);
+       iounmap(priv->ddr_base);
+       lv1_gpu_context_free(priv->context_handle);
+       lv1_gpu_memory_free(priv->memory_handle);
+       ps3_close_hv_device(dev);
+       free_pages((unsigned long) priv->xdr_buf, get_order(XDR_BUF_SIZE));
+       kfree(priv);
+       dev->core.driver_data = NULL;
+       return 0;
+}
+
+static struct ps3_system_bus_driver ps3vram = {
+       .match_id       = PS3_MATCH_ID_GPU,
+       .match_sub_id   = PS3_MATCH_SUB_ID_GPU_RAMDISK,
+       .core.name      = DEVICE_NAME,
+       .core.owner     = THIS_MODULE,
+       .probe          = ps3vram_probe,
+       .remove         = ps3vram_remove,
+       .shutdown       = ps3vram_remove,
+};
+
+
+static int __init ps3vram_init(void)
+{
+       int error;
+
+       if (!firmware_has_feature(FW_FEATURE_PS3_LV1))
+               return -ENODEV;
+
+       error = register_blkdev(0, DEVICE_NAME);
+       if (error <= 0) {
+               pr_err("%s: register_blkdev failed %d\n", DEVICE_NAME, error);
+               return error;
+       }
+       ps3vram_major = error;
+
+       pr_info("%s: registered block device major %d\n", DEVICE_NAME,
+               ps3vram_major);
+
+       error = ps3_system_bus_driver_register(&ps3vram);
+       if (error)
+               unregister_blkdev(ps3vram_major, DEVICE_NAME);
+
+       return error;
+}
+
+static void __exit ps3vram_exit(void)
+{
+       ps3_system_bus_driver_unregister(&ps3vram);
+       unregister_blkdev(ps3vram_major, DEVICE_NAME);
+}
+
+module_init(ps3vram_init);
+module_exit(ps3vram_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("PS3 Video RAM Storage Driver");
+MODULE_AUTHOR("Sony Corporation");
+MODULE_ALIAS(PS3_MODULE_ALIAS_GPU_RAMDISK);
index 381d686..119be34 100644 (file)
@@ -489,6 +489,28 @@ static void ace_fsm_dostate(struct ace_device *ace)
                ace->fsm_state, ace->id_req_count);
 #endif
 
+       /* Verify that there is actually a CF in the slot. If not, then
+        * bail out back to the idle state and wake up all the waiters */
+       status = ace_in32(ace, ACE_STATUS);
+       if ((status & ACE_STATUS_CFDETECT) == 0) {
+               ace->fsm_state = ACE_FSM_STATE_IDLE;
+               ace->media_change = 1;
+               set_capacity(ace->gd, 0);
+               dev_info(ace->dev, "No CF in slot\n");
+
+               /* Drop all pending requests */
+               while ((req = elv_next_request(ace->queue)) != NULL)
+                       end_request(req, 0);
+
+               /* Drop back to IDLE state and notify waiters */
+               ace->fsm_state = ACE_FSM_STATE_IDLE;
+               ace->id_result = -EIO;
+               while (ace->id_req_count) {
+                       complete(&ace->id_completion);
+                       ace->id_req_count--;
+               }
+       }
+
        switch (ace->fsm_state) {
        case ACE_FSM_STATE_IDLE:
                /* See if there is anything to do */
index db60539..699e342 100644 (file)
@@ -359,9 +359,16 @@ fail:
        return error;
 }
 
-static struct device *next_device(struct klist_iter *i) {
-       struct klist_node * n = klist_next(i);
-       return n ? container_of(n, struct device, knode_parent) : NULL;
+static int
+find_quicksilver(struct device *dev, void *data)
+{
+       struct parisc_device **lba = data;
+       struct parisc_device *padev = to_parisc_device(dev);
+
+       if (IS_QUICKSILVER(padev))
+               *lba = padev;
+
+       return 0;
 }
 
 static int
@@ -372,8 +379,6 @@ parisc_agp_init(void)
        int err = -1;
        struct parisc_device *sba = NULL, *lba = NULL;
        struct lba_device *lbadev = NULL;
-       struct device *dev = NULL;
-       struct klist_iter i;
 
        if (!sba_list)
                goto out;
@@ -386,13 +391,7 @@ parisc_agp_init(void)
        }
 
        /* Now search our Pluto for our precious AGP device... */
-       klist_iter_init(&sba->dev.klist_children, &i);
-       while ((dev = next_device(&i))) {
-               struct parisc_device *padev = to_parisc_device(dev);
-               if (IS_QUICKSILVER(padev))
-                       lba = padev;
-       }
-       klist_iter_exit(&i);
+       device_for_each_child(&sba->dev, &lba, find_quicksilver);
 
        if (!lba) {
                printk(KERN_INFO DRVPFX "No AGP devices found.\n");
index 7c13581..7c43ae7 100644 (file)
 #include <linux/percpu.h>
 #include <linux/cryptohash.h>
 
+#ifdef CONFIG_GENERIC_HARDIRQS
+# include <linux/irq.h>
+#endif
+
 #include <asm/processor.h>
 #include <asm/uaccess.h>
 #include <asm/irq.h>
@@ -558,7 +562,7 @@ struct timer_rand_state {
        unsigned dont_count_entropy:1;
 };
 
-#ifndef CONFIG_SPARSE_IRQ
+#ifndef CONFIG_GENERIC_HARDIRQS
 
 static struct timer_rand_state *irq_timer_state[NR_IRQS];
 
index 4940e4d..1f5b5d4 100644 (file)
@@ -306,7 +306,7 @@ static int hiddev_open(struct inode *inode, struct file *file)
        return 0;
 bail:
        file->private_data = NULL;
-       kfree(list->hiddev);
+       kfree(list);
        return res;
 }
 
@@ -323,7 +323,7 @@ static ssize_t hiddev_write(struct file * file, const char __user * buffer, size
  */
 static ssize_t hiddev_read(struct file * file, char __user * buffer, size_t count, loff_t *ppos)
 {
-       DECLARE_WAITQUEUE(wait, current);
+       DEFINE_WAIT(wait);
        struct hiddev_list *list = file->private_data;
        int event_size;
        int retval;
index e96c012..e9d042d 100644 (file)
@@ -140,6 +140,12 @@ static void ide_queue_pc_head(ide_drive_t *drive, struct gendisk *disk,
        rq->cmd_flags |= REQ_PREEMPT;
        rq->buffer = (char *)pc;
        rq->rq_disk = disk;
+
+       if (pc->req_xfer) {
+               rq->data = pc->buf;
+               rq->data_len = pc->req_xfer;
+       }
+
        memcpy(rq->cmd, pc->c, 12);
        if (drive->media == ide_tape)
                rq->cmd[13] = REQ_IDETAPE_PC1;
@@ -159,6 +165,12 @@ int ide_queue_pc_tail(ide_drive_t *drive, struct gendisk *disk,
        rq = blk_get_request(drive->queue, READ, __GFP_WAIT);
        rq->cmd_type = REQ_TYPE_SPECIAL;
        rq->buffer = (char *)pc;
+
+       if (pc->req_xfer) {
+               rq->data = pc->buf;
+               rq->data_len = pc->req_xfer;
+       }
+
        memcpy(rq->cmd, pc->c, 12);
        if (drive->media == ide_tape)
                rq->cmd[13] = REQ_IDETAPE_PC1;
index 72ebab0..059c90b 100644 (file)
@@ -128,6 +128,7 @@ int ide_build_sglist(ide_drive_t *drive, struct request *rq)
 {
        ide_hwif_t *hwif = drive->hwif;
        struct scatterlist *sg = hwif->sg_table;
+       int i;
 
        ide_map_sg(drive, rq);
 
@@ -136,8 +137,13 @@ int ide_build_sglist(ide_drive_t *drive, struct request *rq)
        else
                hwif->sg_dma_direction = DMA_TO_DEVICE;
 
-       return dma_map_sg(hwif->dev, sg, hwif->sg_nents,
-                         hwif->sg_dma_direction);
+       i = dma_map_sg(hwif->dev, sg, hwif->sg_nents, hwif->sg_dma_direction);
+       if (i) {
+               hwif->orig_sg_nents = hwif->sg_nents;
+               hwif->sg_nents = i;
+       }
+
+       return i;
 }
 EXPORT_SYMBOL_GPL(ide_build_sglist);
 
@@ -156,7 +162,7 @@ void ide_destroy_dmatable(ide_drive_t *drive)
 {
        ide_hwif_t *hwif = drive->hwif;
 
-       dma_unmap_sg(hwif->dev, hwif->sg_table, hwif->sg_nents,
+       dma_unmap_sg(hwif->dev, hwif->sg_table, hwif->orig_sg_nents,
                     hwif->sg_dma_direction);
 }
 EXPORT_SYMBOL_GPL(ide_destroy_dmatable);
index 3eab1c6..317ec62 100644 (file)
@@ -327,8 +327,10 @@ static ide_startstop_t ide_floppy_do_request(ide_drive_t *drive,
                return ide_stopped;
        }
 
-       ide_init_sg_cmd(drive, rq);
-       ide_map_sg(drive, rq);
+       if (blk_fs_request(rq) || pc->req_xfer) {
+               ide_init_sg_cmd(drive, rq);
+               ide_map_sg(drive, rq);
+       }
 
        pc->sg = hwif->sg_table;
        pc->sg_cnt = hwif->sg_nents;
index 35bda49..bfefd07 100644 (file)
@@ -60,6 +60,7 @@ struct dm_crypt_io {
 };
 
 struct dm_crypt_request {
+       struct convert_context *ctx;
        struct scatterlist sg_in;
        struct scatterlist sg_out;
 };
@@ -335,6 +336,18 @@ static void crypt_convert_init(struct crypt_config *cc,
        init_completion(&ctx->restart);
 }
 
+static struct dm_crypt_request *dmreq_of_req(struct crypt_config *cc,
+                                            struct ablkcipher_request *req)
+{
+       return (struct dm_crypt_request *)((char *)req + cc->dmreq_start);
+}
+
+static struct ablkcipher_request *req_of_dmreq(struct crypt_config *cc,
+                                              struct dm_crypt_request *dmreq)
+{
+       return (struct ablkcipher_request *)((char *)dmreq - cc->dmreq_start);
+}
+
 static int crypt_convert_block(struct crypt_config *cc,
                               struct convert_context *ctx,
                               struct ablkcipher_request *req)
@@ -345,10 +358,11 @@ static int crypt_convert_block(struct crypt_config *cc,
        u8 *iv;
        int r = 0;
 
-       dmreq = (struct dm_crypt_request *)((char *)req + cc->dmreq_start);
+       dmreq = dmreq_of_req(cc, req);
        iv = (u8 *)ALIGN((unsigned long)(dmreq + 1),
                         crypto_ablkcipher_alignmask(cc->tfm) + 1);
 
+       dmreq->ctx = ctx;
        sg_init_table(&dmreq->sg_in, 1);
        sg_set_page(&dmreq->sg_in, bv_in->bv_page, 1 << SECTOR_SHIFT,
                    bv_in->bv_offset + ctx->offset_in);
@@ -395,8 +409,9 @@ static void crypt_alloc_req(struct crypt_config *cc,
                cc->req = mempool_alloc(cc->req_pool, GFP_NOIO);
        ablkcipher_request_set_tfm(cc->req, cc->tfm);
        ablkcipher_request_set_callback(cc->req, CRYPTO_TFM_REQ_MAY_BACKLOG |
-                                            CRYPTO_TFM_REQ_MAY_SLEEP,
-                                            kcryptd_async_done, ctx);
+                                       CRYPTO_TFM_REQ_MAY_SLEEP,
+                                       kcryptd_async_done,
+                                       dmreq_of_req(cc, cc->req));
 }
 
 /*
@@ -553,19 +568,22 @@ static void crypt_inc_pending(struct dm_crypt_io *io)
 static void crypt_dec_pending(struct dm_crypt_io *io)
 {
        struct crypt_config *cc = io->target->private;
+       struct bio *base_bio = io->base_bio;
+       struct dm_crypt_io *base_io = io->base_io;
+       int error = io->error;
 
        if (!atomic_dec_and_test(&io->pending))
                return;
 
-       if (likely(!io->base_io))
-               bio_endio(io->base_bio, io->error);
+       mempool_free(io, cc->io_pool);
+
+       if (likely(!base_io))
+               bio_endio(base_bio, error);
        else {
-               if (io->error && !io->base_io->error)
-                       io->base_io->error = io->error;
-               crypt_dec_pending(io->base_io);
+               if (error && !base_io->error)
+                       base_io->error = error;
+               crypt_dec_pending(base_io);
        }
-
-       mempool_free(io, cc->io_pool);
 }
 
 /*
@@ -821,7 +839,8 @@ static void kcryptd_crypt_read_convert(struct dm_crypt_io *io)
 static void kcryptd_async_done(struct crypto_async_request *async_req,
                               int error)
 {
-       struct convert_context *ctx = async_req->data;
+       struct dm_crypt_request *dmreq = async_req->data;
+       struct convert_context *ctx = dmreq->ctx;
        struct dm_crypt_io *io = container_of(ctx, struct dm_crypt_io, ctx);
        struct crypt_config *cc = io->target->private;
 
@@ -830,7 +849,7 @@ static void kcryptd_async_done(struct crypto_async_request *async_req,
                return;
        }
 
-       mempool_free(ablkcipher_request_cast(async_req), cc->req_pool);
+       mempool_free(req_of_dmreq(cc, dmreq), cc->req_pool);
 
        if (!atomic_dec_and_test(&ctx->pending))
                return;
index f14813b..36e2b5e 100644 (file)
@@ -292,6 +292,8 @@ static void do_region(int rw, unsigned region, struct dm_io_region *where,
                                             (PAGE_SIZE >> SECTOR_SHIFT));
                num_bvecs = 1 + min_t(int, bio_get_nr_vecs(where->bdev),
                                      num_bvecs);
+               if (unlikely(num_bvecs > BIO_MAX_PAGES))
+                       num_bvecs = BIO_MAX_PAGES;
                bio = bio_alloc_bioset(GFP_NOIO, num_bvecs, io->client->bios);
                bio->bi_sector = where->sector + (where->count - remaining);
                bio->bi_bdev = where->bdev;
index 54d0588..f010965 100644 (file)
@@ -704,7 +704,8 @@ static int dev_rename(struct dm_ioctl *param, size_t param_size)
        char *new_name = (char *) param + param->data_start;
 
        if (new_name < param->data ||
-           invalid_str(new_name, (void *) param + param_size)) {
+           invalid_str(new_name, (void *) param + param_size) ||
+           strlen(new_name) > DM_NAME_LEN - 1) {
                DMWARN("Invalid new logical volume name supplied.");
                return -EINVAL;
        }
@@ -1063,7 +1064,7 @@ static int table_load(struct dm_ioctl *param, size_t param_size)
 
        r = populate_table(t, param, param_size);
        if (r) {
-               dm_table_put(t);
+               dm_table_destroy(t);
                goto out;
        }
 
@@ -1071,7 +1072,7 @@ static int table_load(struct dm_ioctl *param, size_t param_size)
        hc = dm_get_mdptr(md);
        if (!hc || hc->md != md) {
                DMWARN("device has been removed from the dev hash table.");
-               dm_table_put(t);
+               dm_table_destroy(t);
                up_write(&_hash_lock);
                r = -ENXIO;
                goto out;
index 51ba1db..8d40f27 100644 (file)
@@ -525,9 +525,12 @@ static int __noflush_suspending(struct mapped_device *md)
 static void dec_pending(struct dm_io *io, int error)
 {
        unsigned long flags;
+       int io_error;
+       struct bio *bio;
+       struct mapped_device *md = io->md;
 
        /* Push-back supersedes any I/O errors */
-       if (error && !(io->error > 0 && __noflush_suspending(io->md)))
+       if (error && !(io->error > 0 && __noflush_suspending(md)))
                io->error = error;
 
        if (atomic_dec_and_test(&io->io_count)) {
@@ -537,24 +540,27 @@ static void dec_pending(struct dm_io *io, int error)
                         * This must be handled before the sleeper on
                         * suspend queue merges the pushback list.
                         */
-                       spin_lock_irqsave(&io->md->pushback_lock, flags);
-                       if (__noflush_suspending(io->md))
-                               bio_list_add(&io->md->pushback, io->bio);
+                       spin_lock_irqsave(&md->pushback_lock, flags);
+                       if (__noflush_suspending(md))
+                               bio_list_add(&md->pushback, io->bio);
                        else
                                /* noflush suspend was interrupted. */
                                io->error = -EIO;
-                       spin_unlock_irqrestore(&io->md->pushback_lock, flags);
+                       spin_unlock_irqrestore(&md->pushback_lock, flags);
                }
 
                end_io_acct(io);
 
-               if (io->error != DM_ENDIO_REQUEUE) {
-                       trace_block_bio_complete(io->md->queue, io->bio);
+               io_error = io->error;
+               bio = io->bio;
 
-                       bio_endio(io->bio, io->error);
-               }
+               free_io(md, io);
+
+               if (io_error != DM_ENDIO_REQUEUE) {
+                       trace_block_bio_complete(md->queue, bio);
 
-               free_io(io->md, io);
+                       bio_endio(bio, io_error);
+               }
        }
 }
 
@@ -562,6 +568,7 @@ static void clone_endio(struct bio *bio, int error)
 {
        int r = 0;
        struct dm_target_io *tio = bio->bi_private;
+       struct dm_io *io = tio->io;
        struct mapped_device *md = tio->io->md;
        dm_endio_fn endio = tio->ti->type->end_io;
 
@@ -585,15 +592,14 @@ static void clone_endio(struct bio *bio, int error)
                }
        }
 
-       dec_pending(tio->io, error);
-
        /*
         * Store md for cleanup instead of tio which is about to get freed.
         */
        bio->bi_private = md->bs;
 
-       bio_put(bio);
        free_tio(md, tio);
+       bio_put(bio);
+       dec_pending(io, error);
 }
 
 static sector_t max_io_len(struct mapped_device *md,
index 29e8f15..fec1d77 100644 (file)
@@ -1683,7 +1683,7 @@ static int dst_tune_frontend(struct dvb_frontend* fe,
 
 static int dst_get_tuning_algo(struct dvb_frontend *fe)
 {
-       return dst_algo;
+       return dst_algo ? DVBFE_ALGO_HW : DVBFE_ALGO_SW;
 }
 
 static int dst_get_frontend(struct dvb_frontend *fe, struct dvb_frontend_parameters *p)
index 8434077..8dcb3fb 100644 (file)
@@ -1290,9 +1290,6 @@ static int dtv_property_process_set(struct dvb_frontend *fe,
                dprintk("%s() Finalised property cache\n", __func__);
                dtv_property_cache_submit(fe);
 
-               /* Request the search algorithm to search */
-               fepriv->algo_status |= DVBFE_ALGO_SEARCH_AGAIN;
-
                r |= dvb_frontend_ioctl_legacy(inode, file, FE_SET_FRONTEND,
                        &fepriv->parameters);
                break;
@@ -1717,6 +1714,10 @@ static int dvb_frontend_ioctl_legacy(struct inode *inode, struct file *file,
                        fepriv->min_delay = (dvb_override_tune_delay * HZ) / 1000;
 
                fepriv->state = FESTATE_RETUNE;
+
+               /* Request the search algorithm to search */
+               fepriv->algo_status |= DVBFE_ALGO_SEARCH_AGAIN;
+
                dvb_frontend_wakeup(fe);
                dvb_frontend_add_event(fe, 0);
                fepriv->status = 0;
index a67d177..2da55ec 100644 (file)
@@ -156,7 +156,7 @@ static void stb0899_first_subrange(struct stb0899_state *state)
        }
 
        if (range > 0)
-               internal->sub_range = MIN(internal->srch_range, range);
+               internal->sub_range = min(internal->srch_range, range);
        else
                internal->sub_range = 0;
 
@@ -185,7 +185,7 @@ static enum stb0899_status stb0899_check_tmg(struct stb0899_state *state)
        timing = stb0899_read_reg(state, STB0899_RTF);
 
        if (lock >= 42) {
-               if ((lock > 48) && (ABS(timing) >= 110)) {
+               if ((lock > 48) && (abs(timing) >= 110)) {
                        internal->status = ANALOGCARRIER;
                        dprintk(state->verbose, FE_DEBUG, 1, "-->ANALOG Carrier !");
                } else {
@@ -222,7 +222,7 @@ static enum stb0899_status stb0899_search_tmg(struct stb0899_state *state)
                index++;
                derot_freq += index * internal->direction * derot_step; /* next derot zig zag position  */
 
-               if (ABS(derot_freq) > derot_limit)
+               if (abs(derot_freq) > derot_limit)
                        next_loop--;
 
                if (next_loop) {
@@ -298,7 +298,7 @@ static enum stb0899_status stb0899_search_carrier(struct stb0899_state *state)
                        last_derot_freq = derot_freq;
                        derot_freq += index * internal->direction * internal->derot_step; /* next zig zag derotator position */
 
-                       if(ABS(derot_freq) > derot_limit)
+                       if(abs(derot_freq) > derot_limit)
                                next_loop--;
 
                        if (next_loop) {
@@ -400,7 +400,7 @@ static enum stb0899_status stb0899_search_data(struct stb0899_state *state)
                if ((internal->status != CARRIEROK) || (stb0899_check_data(state) != DATAOK)) {
 
                        derot_freq += index * internal->direction * derot_step; /* next zig zag derotator position */
-                       if (ABS(derot_freq) > derot_limit)
+                       if (abs(derot_freq) > derot_limit)
                                next_loop--;
 
                        if (next_loop) {
@@ -467,7 +467,7 @@ static void next_sub_range(struct stb0899_state *state)
 
        if (internal->sub_dir > 0) {
                old_sub_range = internal->sub_range;
-               internal->sub_range = MIN((internal->srch_range / 2) -
+               internal->sub_range = min((internal->srch_range / 2) -
                                          (internal->tuner_offst + internal->sub_range / 2),
                                           internal->sub_range);
 
@@ -771,7 +771,7 @@ static long Log2Int(int number)
        int i;
 
        i = 0;
-       while ((1 << i) <= ABS(number))
+       while ((1 << i) <= abs(number))
                i++;
 
        if (number == 0)
index 10613ac..a04c782 100644 (file)
@@ -794,7 +794,7 @@ static int stb0899_send_diseqc_burst(struct dvb_frontend *fe, fe_sec_mini_cmd_t
        reg = stb0899_read_reg(state, STB0899_DISCNTRL1);
        old_state = reg;
        /* set to burst mode    */
-       STB0899_SETFIELD_VAL(DISEQCMODE, reg, 0x02);
+       STB0899_SETFIELD_VAL(DISEQCMODE, reg, 0x03);
        STB0899_SETFIELD_VAL(DISPRECHARGE, reg, 0x01);
        stb0899_write_reg(state, STB0899_DISCNTRL1, reg);
        switch (burst) {
index 24619e3..82395b9 100644 (file)
 #define MAKEWORD32(a, b, c, d)                 (((a) << 24) | ((b) << 16) | ((c) << 8) | (d))
 #define MAKEWORD16(a, b)                       (((a) << 8) | (b))
 
-#define MIN(x, y)                              ((x) <= (y) ? (x) : (y))
-#define MAX(x, y)                              ((x) >= (y) ? (x) : (y))
-#define ABS(x)                                 ((x) >= 0 ? (x) : -(x))
-
 #define LSB(x)                                 ((x & 0xff))
 #define MSB(y)                                 ((y >> 8) & 0xff)
 
@@ -168,10 +164,10 @@ struct stb0899_internal {
        u32                     freq;                   /* Demod internal Frequency             */
        u32                     srate;                  /* Demod internal Symbol rate           */
        enum stb0899_fec        fecrate;                /* Demod internal FEC rate              */
-       u32                     srch_range;             /* Demod internal Search Range          */
-       u32                     sub_range;              /* Demod current sub range (Hz)         */
-       u32                     tuner_step;             /* Tuner step (Hz)                      */
-       u32                     tuner_offst;            /* Relative offset to carrier (Hz)      */
+       s32                     srch_range;             /* Demod internal Search Range          */
+       s32                     sub_range;              /* Demod current sub range (Hz)         */
+       s32                     tuner_step;             /* Tuner step (Hz)                      */
+       s32                     tuner_offst;            /* Relative offset to carrier (Hz)      */
        u32                     tuner_bw;               /* Current bandwidth of the tuner (Hz)  */
 
        s32                     mclk;                   /* Masterclock Divider factor (binary)  */
index ff39275..1ed5a7d 100644 (file)
@@ -427,11 +427,11 @@ static int stb6100_init(struct dvb_frontend *fe)
        status->refclock        = 27000000;     /* Hz   */
        status->iqsense         = 1;
        status->bandwidth       = 36000;        /* kHz  */
-       state->bandwidth        = status->bandwidth * 1000;     /* MHz  */
+       state->bandwidth        = status->bandwidth * 1000;     /* Hz   */
        state->reference        = status->refclock / 1000;      /* kHz  */
 
        /* Set default bandwidth.       */
-       return stb6100_set_bandwidth(fe, status->bandwidth);
+       return stb6100_set_bandwidth(fe, state->bandwidth);
 }
 
 static int stb6100_get_state(struct dvb_frontend *fe,
index 170720b..b150ed3 100644 (file)
@@ -590,7 +590,7 @@ static int zl10353_i2c_gate_ctrl(struct dvb_frontend* fe, int enable)
        struct zl10353_state *state = fe->demodulator_priv;
        u8 val = 0x0a;
 
-       if (state->config.no_tuner) {
+       if (state->config.disable_i2c_gate_ctrl) {
                /* No tuner attached to the internal I2C bus */
                /* If set enable I2C bridge, the main I2C bus stopped hardly */
                return 0;
index fdbb88f..2287bac 100644 (file)
@@ -38,6 +38,9 @@ struct zl10353_config
 
        /* set if parallel ts output is required */
        int parallel_ts;
+
+       /* set if i2c_gate_ctrl disable is required */
+       u8 disable_i2c_gate_ctrl:1;
 };
 
 #if defined(CONFIG_DVB_ZL10353) || (defined(CONFIG_DVB_ZL10353_MODULE) && defined(MODULE))
index e564a61..48892b5 100644 (file)
@@ -102,7 +102,11 @@ int s5k4aa_probe(struct sd *sd)
        }
 
        /* Test some registers, but we don't know their exact meaning yet */
-       if (m5602_read_sensor(sd, 0x00, prod_id, sizeof(prod_id)))
+       if (m5602_read_sensor(sd, 0x00, prod_id, 2))
+               return -ENODEV;
+       if (m5602_read_sensor(sd, 0x02, prod_id+2, 2))
+               return -ENODEV;
+       if (m5602_read_sensor(sd, 0x04, prod_id+4, 2))
                return -ENODEV;
 
        if (memcmp(prod_id, expected_prod_id, sizeof(prod_id)))
index 0776ecf..b5370b3 100644 (file)
@@ -860,6 +860,7 @@ static struct zl10353_config behold_h6_config = {
        .demod_address = 0x1e>>1,
        .no_tuner      = 1,
        .parallel_ts   = 1,
+       .disable_i2c_gate_ctrl = 1,
 };
 
 /* ==================================================================
index 5aeccb3..076ed5b 100644 (file)
@@ -54,7 +54,7 @@ MODULE_LICENSE("GPL");
 /* ---------------------------------------------------------------------- */
 /* our structs                                                            */
 
-#define MAXREGS 64
+#define MAXREGS 256
 
 struct CHIPSTATE;
 typedef int  (*getvalue)(int);
index 4ea5fa7..8666e19 100644 (file)
@@ -68,6 +68,7 @@ config VIDEO_ZORAN_AVS6EYES
        tristate "AverMedia 6 Eyes support (EXPERIMENTAL)"
        depends on VIDEO_ZORAN_ZR36060 && EXPERIMENTAL && VIDEO_V4L1
        select VIDEO_BT856 if VIDEO_HELPER_CHIPS_AUTO
+       select VIDEO_BT866 if VIDEO_HELPER_CHIPS_AUTO
        select VIDEO_KS0127 if VIDEO_HELPER_CHIPS_AUTO
        help
          Support for the AverMedia 6 Eyes video surveillance card.
index bc33200..6fde0a2 100644 (file)
@@ -120,13 +120,6 @@ config MTD_PHRAM
          doesn't have access to, memory beyond the mem=xxx limit, nvram,
          memory on the video card, etc...
 
-config MTD_PS3VRAM
-       tristate "PS3 video RAM"
-       depends on FB_PS3
-       help
-         This driver allows you to use excess PS3 video RAM as volatile
-         storage or system swap.
-
 config MTD_LART
        tristate "28F160xx flash driver for LART"
        depends on SA1100_LART
index e51521d..0993d5c 100644 (file)
@@ -16,4 +16,3 @@ obj-$(CONFIG_MTD_LART)                += lart.o
 obj-$(CONFIG_MTD_BLOCK2MTD)    += block2mtd.o
 obj-$(CONFIG_MTD_DATAFLASH)    += mtd_dataflash.o
 obj-$(CONFIG_MTD_M25P80)       += m25p80.o
-obj-$(CONFIG_MTD_PS3VRAM)      += ps3vram.o
diff --git a/drivers/mtd/devices/ps3vram.c b/drivers/mtd/devices/ps3vram.c
deleted file mode 100644 (file)
index d21e9be..0000000
+++ /dev/null
@@ -1,768 +0,0 @@
-/**
- * ps3vram - Use extra PS3 video ram as MTD block device.
- *
- * Copyright (c) 2007-2008 Jim Paris <jim@jtan.com>
- * Added support RSX DMA Vivien Chappelier <vivien.chappelier@free.fr>
- */
-
-#include <linux/io.h>
-#include <linux/mm.h>
-#include <linux/init.h>
-#include <linux/kernel.h>
-#include <linux/list.h>
-#include <linux/module.h>
-#include <linux/moduleparam.h>
-#include <linux/slab.h>
-#include <linux/version.h>
-#include <linux/gfp.h>
-#include <linux/delay.h>
-#include <linux/mtd/mtd.h>
-
-#include <asm/lv1call.h>
-#include <asm/ps3.h>
-
-#define DEVICE_NAME            "ps3vram"
-
-#define XDR_BUF_SIZE (2 * 1024 * 1024) /* XDR buffer (must be 1MiB aligned) */
-#define XDR_IOIF 0x0c000000
-
-#define FIFO_BASE XDR_IOIF
-#define FIFO_SIZE (64 * 1024)
-
-#define DMA_PAGE_SIZE (4 * 1024)
-
-#define CACHE_PAGE_SIZE (256 * 1024)
-#define CACHE_PAGE_COUNT ((XDR_BUF_SIZE - FIFO_SIZE) / CACHE_PAGE_SIZE)
-
-#define CACHE_OFFSET CACHE_PAGE_SIZE
-#define FIFO_OFFSET 0
-
-#define CTRL_PUT 0x10
-#define CTRL_GET 0x11
-#define CTRL_TOP 0x15
-
-#define UPLOAD_SUBCH   1
-#define DOWNLOAD_SUBCH 2
-
-#define NV_MEMORY_TO_MEMORY_FORMAT_OFFSET_IN   0x0000030c
-#define NV_MEMORY_TO_MEMORY_FORMAT_NOTIFY      0x00000104
-
-#define L1GPU_CONTEXT_ATTRIBUTE_FB_BLIT 0x601
-
-struct mtd_info ps3vram_mtd;
-
-#define CACHE_PAGE_PRESENT 1
-#define CACHE_PAGE_DIRTY   2
-
-struct ps3vram_tag {
-       unsigned int address;
-       unsigned int flags;
-};
-
-struct ps3vram_cache {
-       unsigned int page_count;
-       unsigned int page_size;
-       struct ps3vram_tag *tags;
-};
-
-struct ps3vram_priv {
-       u64 memory_handle;
-       u64 context_handle;
-       u32 *ctrl;
-       u32 *reports;
-       u8 __iomem *ddr_base;
-       u8 *xdr_buf;
-
-       u32 *fifo_base;
-       u32 *fifo_ptr;
-
-       struct device *dev;
-       struct ps3vram_cache cache;
-
-       /* Used to serialize cache/DMA operations */
-       struct mutex lock;
-};
-
-#define DMA_NOTIFIER_HANDLE_BASE 0x66604200 /* first DMA notifier handle */
-#define DMA_NOTIFIER_OFFSET_BASE 0x1000     /* first DMA notifier offset */
-#define DMA_NOTIFIER_SIZE        0x40
-#define NOTIFIER 7     /* notifier used for completion report */
-
-/* A trailing '-' means to subtract off ps3fb_videomemory.size */
-char *size = "256M-";
-module_param(size, charp, 0);
-MODULE_PARM_DESC(size, "memory size");
-
-static u32 *ps3vram_get_notifier(u32 *reports, int notifier)
-{
-       return (void *) reports +
-               DMA_NOTIFIER_OFFSET_BASE +
-               DMA_NOTIFIER_SIZE * notifier;
-}
-
-static void ps3vram_notifier_reset(struct mtd_info *mtd)
-{
-       int i;
-
-       struct ps3vram_priv *priv = mtd->priv;
-       u32 *notify = ps3vram_get_notifier(priv->reports, NOTIFIER);
-       for (i = 0; i < 4; i++)
-               notify[i] = 0xffffffff;
-}
-
-static int ps3vram_notifier_wait(struct mtd_info *mtd, unsigned int timeout_ms)
-{
-       struct ps3vram_priv *priv = mtd->priv;
-       u32 *notify = ps3vram_get_notifier(priv->reports, NOTIFIER);
-       unsigned long timeout = jiffies + msecs_to_jiffies(timeout_ms);
-
-       do {
-               if (!notify[3])
-                       return 0;
-               msleep(1);
-       } while (time_before(jiffies, timeout));
-
-       return -ETIMEDOUT;
-}
-
-static void ps3vram_init_ring(struct mtd_info *mtd)
-{
-       struct ps3vram_priv *priv = mtd->priv;
-
-       priv->ctrl[CTRL_PUT] = FIFO_BASE + FIFO_OFFSET;
-       priv->ctrl[CTRL_GET] = FIFO_BASE + FIFO_OFFSET;
-}
-
-static int ps3vram_wait_ring(struct mtd_info *mtd, unsigned int timeout_ms)
-{
-       struct ps3vram_priv *priv = mtd->priv;
-       unsigned long timeout = jiffies + msecs_to_jiffies(timeout_ms);
-
-       do {
-               if (priv->ctrl[CTRL_PUT] == priv->ctrl[CTRL_GET])
-                       return 0;
-               msleep(1);
-       } while (time_before(jiffies, timeout));
-
-       dev_dbg(priv->dev, "%s:%d: FIFO timeout (%08x/%08x/%08x)\n", __func__,
-               __LINE__, priv->ctrl[CTRL_PUT], priv->ctrl[CTRL_GET],
-               priv->ctrl[CTRL_TOP]);
-
-       return -ETIMEDOUT;
-}
-
-static void ps3vram_out_ring(struct ps3vram_priv *priv, u32 data)
-{
-       *(priv->fifo_ptr)++ = data;
-}
-
-static void ps3vram_begin_ring(struct ps3vram_priv *priv, u32 chan,
-                                     u32 tag, u32 size)
-{
-       ps3vram_out_ring(priv, (size << 18) | (chan << 13) | tag);
-}
-
-static void ps3vram_rewind_ring(struct mtd_info *mtd)
-{
-       struct ps3vram_priv *priv = mtd->priv;
-       u64 status;
-
-       ps3vram_out_ring(priv, 0x20000000 | (FIFO_BASE + FIFO_OFFSET));
-
-       priv->ctrl[CTRL_PUT] = FIFO_BASE + FIFO_OFFSET;
-
-       /* asking the HV for a blit will kick the fifo */
-       status = lv1_gpu_context_attribute(priv->context_handle,
-                                          L1GPU_CONTEXT_ATTRIBUTE_FB_BLIT,
-                                          0, 0, 0, 0);
-       if (status)
-               dev_err(priv->dev, "%s:%d: lv1_gpu_context_attribute failed\n",
-                       __func__, __LINE__);
-
-       priv->fifo_ptr = priv->fifo_base;
-}
-
-static void ps3vram_fire_ring(struct mtd_info *mtd)
-{
-       struct ps3vram_priv *priv = mtd->priv;
-       u64 status;
-
-       mutex_lock(&ps3_gpu_mutex);
-
-       priv->ctrl[CTRL_PUT] = FIFO_BASE + FIFO_OFFSET +
-               (priv->fifo_ptr - priv->fifo_base) * sizeof(u32);
-
-       /* asking the HV for a blit will kick the fifo */
-       status = lv1_gpu_context_attribute(priv->context_handle,
-                                          L1GPU_CONTEXT_ATTRIBUTE_FB_BLIT,
-                                          0, 0, 0, 0);
-       if (status)
-               dev_err(priv->dev, "%s:%d: lv1_gpu_context_attribute failed\n",
-                       __func__, __LINE__);
-
-       if ((priv->fifo_ptr - priv->fifo_base) * sizeof(u32) >
-               FIFO_SIZE - 1024) {
-               dev_dbg(priv->dev, "%s:%d: fifo full, rewinding\n", __func__,
-                       __LINE__);
-               ps3vram_wait_ring(mtd, 200);
-               ps3vram_rewind_ring(mtd);
-       }
-
-       mutex_unlock(&ps3_gpu_mutex);
-}
-
-static void ps3vram_bind(struct mtd_info *mtd)
-{
-       struct ps3vram_priv *priv = mtd->priv;
-
-       ps3vram_begin_ring(priv, UPLOAD_SUBCH, 0, 1);
-       ps3vram_out_ring(priv, 0x31337303);
-       ps3vram_begin_ring(priv, UPLOAD_SUBCH, 0x180, 3);
-       ps3vram_out_ring(priv, DMA_NOTIFIER_HANDLE_BASE + NOTIFIER);
-       ps3vram_out_ring(priv, 0xfeed0001);     /* DMA system RAM instance */
-       ps3vram_out_ring(priv, 0xfeed0000);     /* DMA video RAM instance */
-
-       ps3vram_begin_ring(priv, DOWNLOAD_SUBCH, 0, 1);
-       ps3vram_out_ring(priv, 0x3137c0de);
-       ps3vram_begin_ring(priv, DOWNLOAD_SUBCH, 0x180, 3);
-       ps3vram_out_ring(priv, DMA_NOTIFIER_HANDLE_BASE + NOTIFIER);
-       ps3vram_out_ring(priv, 0xfeed0000);     /* DMA video RAM instance */
-       ps3vram_out_ring(priv, 0xfeed0001);     /* DMA system RAM instance */
-
-       ps3vram_fire_ring(mtd);
-}
-
-static int ps3vram_upload(struct mtd_info *mtd, unsigned int src_offset,
-                         unsigned int dst_offset, int len, int count)
-{
-       struct ps3vram_priv *priv = mtd->priv;
-
-       ps3vram_begin_ring(priv, UPLOAD_SUBCH,
-                          NV_MEMORY_TO_MEMORY_FORMAT_OFFSET_IN, 8);
-       ps3vram_out_ring(priv, XDR_IOIF + src_offset);
-       ps3vram_out_ring(priv, dst_offset);
-       ps3vram_out_ring(priv, len);
-       ps3vram_out_ring(priv, len);
-       ps3vram_out_ring(priv, len);
-       ps3vram_out_ring(priv, count);
-       ps3vram_out_ring(priv, (1 << 8) | 1);
-       ps3vram_out_ring(priv, 0);
-
-       ps3vram_notifier_reset(mtd);
-       ps3vram_begin_ring(priv, UPLOAD_SUBCH,
-                          NV_MEMORY_TO_MEMORY_FORMAT_NOTIFY, 1);
-       ps3vram_out_ring(priv, 0);
-       ps3vram_begin_ring(priv, UPLOAD_SUBCH, 0x100, 1);
-       ps3vram_out_ring(priv, 0);
-       ps3vram_fire_ring(mtd);
-       if (ps3vram_notifier_wait(mtd, 200) < 0) {
-               dev_dbg(priv->dev, "%s:%d: notifier timeout\n", __func__,
-                       __LINE__);
-               return -1;
-       }
-
-       return 0;
-}
-
-static int ps3vram_download(struct mtd_info *mtd, unsigned int src_offset,
-                           unsigned int dst_offset, int len, int count)
-{
-       struct ps3vram_priv *priv = mtd->priv;
-
-       ps3vram_begin_ring(priv, DOWNLOAD_SUBCH,
-                          NV_MEMORY_TO_MEMORY_FORMAT_OFFSET_IN, 8);
-       ps3vram_out_ring(priv, src_offset);
-       ps3vram_out_ring(priv, XDR_IOIF + dst_offset);
-       ps3vram_out_ring(priv, len);
-       ps3vram_out_ring(priv, len);
-       ps3vram_out_ring(priv, len);
-       ps3vram_out_ring(priv, count);
-       ps3vram_out_ring(priv, (1 << 8) | 1);
-       ps3vram_out_ring(priv, 0);
-
-       ps3vram_notifier_reset(mtd);
-       ps3vram_begin_ring(priv, DOWNLOAD_SUBCH,
-                          NV_MEMORY_TO_MEMORY_FORMAT_NOTIFY, 1);
-       ps3vram_out_ring(priv, 0);
-       ps3vram_begin_ring(priv, DOWNLOAD_SUBCH, 0x100, 1);
-       ps3vram_out_ring(priv, 0);
-       ps3vram_fire_ring(mtd);
-       if (ps3vram_notifier_wait(mtd, 200) < 0) {
-               dev_dbg(priv->dev, "%s:%d: notifier timeout\n", __func__,
-                       __LINE__);
-               return -1;
-       }
-
-       return 0;
-}
-
-static void ps3vram_cache_evict(struct mtd_info *mtd, int entry)
-{
-       struct ps3vram_priv *priv = mtd->priv;
-       struct ps3vram_cache *cache = &priv->cache;
-
-       if (cache->tags[entry].flags & CACHE_PAGE_DIRTY) {
-               dev_dbg(priv->dev, "%s:%d: flushing %d : 0x%08x\n", __func__,
-                       __LINE__, entry, cache->tags[entry].address);
-               if (ps3vram_upload(mtd,
-                                  CACHE_OFFSET + entry * cache->page_size,
-                                  cache->tags[entry].address,
-                                  DMA_PAGE_SIZE,
-                                  cache->page_size / DMA_PAGE_SIZE) < 0) {
-                       dev_dbg(priv->dev, "%s:%d: failed to upload from "
-                               "0x%x to 0x%x size 0x%x\n", __func__, __LINE__,
-                               entry * cache->page_size,
-                               cache->tags[entry].address, cache->page_size);
-               }
-               cache->tags[entry].flags &= ~CACHE_PAGE_DIRTY;
-       }
-}
-
-static void ps3vram_cache_load(struct mtd_info *mtd, int entry,
-                              unsigned int address)
-{
-       struct ps3vram_priv *priv = mtd->priv;
-       struct ps3vram_cache *cache = &priv->cache;
-
-       dev_dbg(priv->dev, "%s:%d: fetching %d : 0x%08x\n", __func__, __LINE__,
-               entry, address);
-       if (ps3vram_download(mtd,
-                            address,
-                            CACHE_OFFSET + entry * cache->page_size,
-                            DMA_PAGE_SIZE,
-                            cache->page_size / DMA_PAGE_SIZE) < 0) {
-               dev_err(priv->dev, "%s:%d: failed to download from "
-                       "0x%x to 0x%x size 0x%x\n", __func__, __LINE__, address,
-                       entry * cache->page_size, cache->page_size);
-       }
-
-       cache->tags[entry].address = address;
-       cache->tags[entry].flags |= CACHE_PAGE_PRESENT;
-}
-
-
-static void ps3vram_cache_flush(struct mtd_info *mtd)
-{
-       struct ps3vram_priv *priv = mtd->priv;
-       struct ps3vram_cache *cache = &priv->cache;
-       int i;
-
-       dev_dbg(priv->dev, "%s:%d: FLUSH\n", __func__, __LINE__);
-       for (i = 0; i < cache->page_count; i++) {
-               ps3vram_cache_evict(mtd, i);
-               cache->tags[i].flags = 0;
-       }
-}
-
-static unsigned int ps3vram_cache_match(struct mtd_info *mtd, loff_t address)
-{
-       struct ps3vram_priv *priv = mtd->priv;
-       struct ps3vram_cache *cache = &priv->cache;
-       unsigned int base;
-       unsigned int offset;
-       int i;
-       static int counter;
-
-       offset = (unsigned int) (address & (cache->page_size - 1));
-       base = (unsigned int) (address - offset);
-
-       /* fully associative check */
-       for (i = 0; i < cache->page_count; i++) {
-               if ((cache->tags[i].flags & CACHE_PAGE_PRESENT) &&
-                   cache->tags[i].address == base) {
-                       dev_dbg(priv->dev, "%s:%d: found entry %d : 0x%08x\n",
-                               __func__, __LINE__, i, cache->tags[i].address);
-                       return i;
-               }
-       }
-
-       /* choose a random entry */
-       i = (jiffies + (counter++)) % cache->page_count;
-       dev_dbg(priv->dev, "%s:%d: using entry %d\n", __func__, __LINE__, i);
-
-       ps3vram_cache_evict(mtd, i);
-       ps3vram_cache_load(mtd, i, base);
-
-       return i;
-}
-
-static int ps3vram_cache_init(struct mtd_info *mtd)
-{
-       struct ps3vram_priv *priv = mtd->priv;
-
-       priv->cache.page_count = CACHE_PAGE_COUNT;
-       priv->cache.page_size = CACHE_PAGE_SIZE;
-       priv->cache.tags = kzalloc(sizeof(struct ps3vram_tag) *
-                                  CACHE_PAGE_COUNT, GFP_KERNEL);
-       if (priv->cache.tags == NULL) {
-               dev_err(priv->dev, "%s:%d: could not allocate cache tags\n",
-                       __func__, __LINE__);
-               return -ENOMEM;
-       }
-
-       dev_info(priv->dev, "created ram cache: %d entries, %d KiB each\n",
-               CACHE_PAGE_COUNT, CACHE_PAGE_SIZE / 1024);
-
-       return 0;
-}
-
-static void ps3vram_cache_cleanup(struct mtd_info *mtd)
-{
-       struct ps3vram_priv *priv = mtd->priv;
-
-       ps3vram_cache_flush(mtd);
-       kfree(priv->cache.tags);
-}
-
-static int ps3vram_erase(struct mtd_info *mtd, struct erase_info *instr)
-{
-       struct ps3vram_priv *priv = mtd->priv;
-
-       if (instr->addr + instr->len > mtd->size)
-               return -EINVAL;
-
-       mutex_lock(&priv->lock);
-
-       ps3vram_cache_flush(mtd);
-
-       /* Set bytes to 0xFF */
-       memset_io(priv->ddr_base + instr->addr, 0xFF, instr->len);
-
-       mutex_unlock(&priv->lock);
-
-       instr->state = MTD_ERASE_DONE;
-       mtd_erase_callback(instr);
-
-       return 0;
-}
-
-static int ps3vram_read(struct mtd_info *mtd, loff_t from, size_t len,
-                       size_t *retlen, u_char *buf)
-{
-       struct ps3vram_priv *priv = mtd->priv;
-       unsigned int cached, count;
-
-       dev_dbg(priv->dev, "%s:%d: from=0x%08x len=0x%zx\n", __func__, __LINE__,
-               (unsigned int)from, len);
-
-       if (from >= mtd->size)
-               return -EINVAL;
-
-       if (len > mtd->size - from)
-               len = mtd->size - from;
-
-       /* Copy from vram to buf */
-       count = len;
-       while (count) {
-               unsigned int offset, avail;
-               unsigned int entry;
-
-               offset = (unsigned int) (from & (priv->cache.page_size - 1));
-               avail  = priv->cache.page_size - offset;
-
-               mutex_lock(&priv->lock);
-
-               entry = ps3vram_cache_match(mtd, from);
-               cached = CACHE_OFFSET + entry * priv->cache.page_size + offset;
-
-               dev_dbg(priv->dev, "%s:%d: from=%08x cached=%08x offset=%08x "
-                       "avail=%08x count=%08x\n", __func__, __LINE__,
-                       (unsigned int)from, cached, offset, avail, count);
-
-               if (avail > count)
-                       avail = count;
-               memcpy(buf, priv->xdr_buf + cached, avail);
-
-               mutex_unlock(&priv->lock);
-
-               buf += avail;
-               count -= avail;
-               from += avail;
-       }
-
-       *retlen = len;
-       return 0;
-}
-
-static int ps3vram_write(struct mtd_info *mtd, loff_t to, size_t len,
-                        size_t *retlen, const u_char *buf)
-{
-       struct ps3vram_priv *priv = mtd->priv;
-       unsigned int cached, count;
-
-       if (to >= mtd->size)
-               return -EINVAL;
-
-       if (len > mtd->size - to)
-               len = mtd->size - to;
-
-       /* Copy from buf to vram */
-       count = len;
-       while (count) {
-               unsigned int offset, avail;
-               unsigned int entry;
-
-               offset = (unsigned int) (to & (priv->cache.page_size - 1));
-               avail  = priv->cache.page_size - offset;
-
-               mutex_lock(&priv->lock);
-
-               entry = ps3vram_cache_match(mtd, to);
-               cached = CACHE_OFFSET + entry * priv->cache.page_size + offset;
-
-               dev_dbg(priv->dev, "%s:%d: to=%08x cached=%08x offset=%08x "
-                       "avail=%08x count=%08x\n", __func__, __LINE__,
-                       (unsigned int)to, cached, offset, avail, count);
-
-               if (avail > count)
-                       avail = count;
-               memcpy(priv->xdr_buf + cached, buf, avail);
-
-               priv->cache.tags[entry].flags |= CACHE_PAGE_DIRTY;
-
-               mutex_unlock(&priv->lock);
-
-               buf += avail;
-               count -= avail;
-               to += avail;
-       }
-
-       *retlen = len;
-       return 0;
-}
-
-static int __devinit ps3vram_probe(struct ps3_system_bus_device *dev)
-{
-       struct ps3vram_priv *priv;
-       int status;
-       u64 ddr_lpar;
-       u64 ctrl_lpar;
-       u64 info_lpar;
-       u64 reports_lpar;
-       u64 ddr_size;
-       u64 reports_size;
-       int ret = -ENOMEM;
-       char *rest;
-
-       ret = -EIO;
-       ps3vram_mtd.priv = kzalloc(sizeof(struct ps3vram_priv), GFP_KERNEL);
-       if (!ps3vram_mtd.priv)
-               goto out;
-       priv = ps3vram_mtd.priv;
-
-       mutex_init(&priv->lock);
-       priv->dev = &dev->core;
-
-       /* Allocate XDR buffer (1MiB aligned) */
-       priv->xdr_buf = (void *)__get_free_pages(GFP_KERNEL,
-               get_order(XDR_BUF_SIZE));
-       if (priv->xdr_buf == NULL) {
-               dev_dbg(&dev->core, "%s:%d: could not allocate XDR buffer\n",
-                       __func__, __LINE__);
-               ret = -ENOMEM;
-               goto out_free_priv;
-       }
-
-       /* Put FIFO at begginning of XDR buffer */
-       priv->fifo_base = (u32 *) (priv->xdr_buf + FIFO_OFFSET);
-       priv->fifo_ptr = priv->fifo_base;
-
-       /* XXX: Need to open GPU, in case ps3fb or snd_ps3 aren't loaded */
-       if (ps3_open_hv_device(dev)) {
-               dev_err(&dev->core, "%s:%d: ps3_open_hv_device failed\n",
-                       __func__, __LINE__);
-               ret = -EAGAIN;
-               goto out_close_gpu;
-       }
-
-       /* Request memory */
-       status = -1;
-       ddr_size = memparse(size, &rest);
-       if (*rest == '-')
-               ddr_size -= ps3fb_videomemory.size;
-       ddr_size = ALIGN(ddr_size, 1024*1024);
-       if (ddr_size <= 0) {
-               dev_err(&dev->core, "%s:%d: specified size is too small\n",
-                       __func__, __LINE__);
-               ret = -EINVAL;
-               goto out_close_gpu;
-       }
-
-       while (ddr_size > 0) {
-               status = lv1_gpu_memory_allocate(ddr_size, 0, 0, 0, 0,
-                                                &priv->memory_handle,
-                                                &ddr_lpar);
-               if (!status)
-                       break;
-               ddr_size -= 1024*1024;
-       }
-       if (status || ddr_size <= 0) {
-               dev_err(&dev->core, "%s:%d: lv1_gpu_memory_allocate failed\n",
-                       __func__, __LINE__);
-               ret = -ENOMEM;
-               goto out_free_xdr_buf;
-       }
-
-       /* Request context */
-       status = lv1_gpu_context_allocate(priv->memory_handle,
-                                         0,
-                                         &priv->context_handle,
-                                         &ctrl_lpar,
-                                         &info_lpar,
-                                         &reports_lpar,
-                                         &reports_size);
-       if (status) {
-               dev_err(&dev->core, "%s:%d: lv1_gpu_context_allocate failed\n",
-                       __func__, __LINE__);
-               ret = -ENOMEM;
-               goto out_free_memory;
-       }
-
-       /* Map XDR buffer to RSX */
-       status = lv1_gpu_context_iomap(priv->context_handle, XDR_IOIF,
-                                      ps3_mm_phys_to_lpar(__pa(priv->xdr_buf)),
-                                      XDR_BUF_SIZE, 0);
-       if (status) {
-               dev_err(&dev->core, "%s:%d: lv1_gpu_context_iomap failed\n",
-                       __func__, __LINE__);
-               ret = -ENOMEM;
-               goto out_free_context;
-       }
-
-       priv->ddr_base = ioremap_flags(ddr_lpar, ddr_size, _PAGE_NO_CACHE);
-
-       if (!priv->ddr_base) {
-               dev_err(&dev->core, "%s:%d: ioremap failed\n", __func__,
-                       __LINE__);
-               ret = -ENOMEM;
-               goto out_free_context;
-       }
-
-       priv->ctrl = ioremap(ctrl_lpar, 64 * 1024);
-       if (!priv->ctrl) {
-               dev_err(&dev->core, "%s:%d: ioremap failed\n", __func__,
-                       __LINE__);
-               ret = -ENOMEM;
-               goto out_unmap_vram;
-       }
-
-       priv->reports = ioremap(reports_lpar, reports_size);
-       if (!priv->reports) {
-               dev_err(&dev->core, "%s:%d: ioremap failed\n", __func__,
-                       __LINE__);
-               ret = -ENOMEM;
-               goto out_unmap_ctrl;
-       }
-
-       mutex_lock(&ps3_gpu_mutex);
-       ps3vram_init_ring(&ps3vram_mtd);
-       mutex_unlock(&ps3_gpu_mutex);
-
-       ps3vram_mtd.name = "ps3vram";
-       ps3vram_mtd.size = ddr_size;
-       ps3vram_mtd.flags = MTD_CAP_RAM;
-       ps3vram_mtd.erase = ps3vram_erase;
-       ps3vram_mtd.point = NULL;
-       ps3vram_mtd.unpoint = NULL;
-       ps3vram_mtd.read = ps3vram_read;
-       ps3vram_mtd.write = ps3vram_write;
-       ps3vram_mtd.owner = THIS_MODULE;
-       ps3vram_mtd.type = MTD_RAM;
-       ps3vram_mtd.erasesize = CACHE_PAGE_SIZE;
-       ps3vram_mtd.writesize = 1;
-
-       ps3vram_bind(&ps3vram_mtd);
-
-       mutex_lock(&ps3_gpu_mutex);
-       ret = ps3vram_wait_ring(&ps3vram_mtd, 100);
-       mutex_unlock(&ps3_gpu_mutex);
-       if (ret < 0) {
-               dev_err(&dev->core, "%s:%d: failed to initialize channels\n",
-                       __func__, __LINE__);
-               ret = -ETIMEDOUT;
-               goto out_unmap_reports;
-       }
-
-       ps3vram_cache_init(&ps3vram_mtd);
-
-       if (add_mtd_device(&ps3vram_mtd)) {
-               dev_err(&dev->core, "%s:%d: add_mtd_device failed\n",
-                       __func__, __LINE__);
-               ret = -EAGAIN;
-               goto out_cache_cleanup;
-       }
-
-       dev_info(&dev->core, "reserved %u MiB of gpu memory\n",
-               (unsigned int)(ddr_size / 1024 / 1024));
-
-       return 0;
-
-out_cache_cleanup:
-       ps3vram_cache_cleanup(&ps3vram_mtd);
-out_unmap_reports:
-       iounmap(priv->reports);
-out_unmap_ctrl:
-       iounmap(priv->ctrl);
-out_unmap_vram:
-       iounmap(priv->ddr_base);
-out_free_context:
-       lv1_gpu_context_free(priv->context_handle);
-out_free_memory:
-       lv1_gpu_memory_free(priv->memory_handle);
-out_close_gpu:
-       ps3_close_hv_device(dev);
-out_free_xdr_buf:
-       free_pages((unsigned long) priv->xdr_buf, get_order(XDR_BUF_SIZE));
-out_free_priv:
-       kfree(ps3vram_mtd.priv);
-       ps3vram_mtd.priv = NULL;
-out:
-       return ret;
-}
-
-static int ps3vram_shutdown(struct ps3_system_bus_device *dev)
-{
-       struct ps3vram_priv *priv;
-
-       priv = ps3vram_mtd.priv;
-
-       del_mtd_device(&ps3vram_mtd);
-       ps3vram_cache_cleanup(&ps3vram_mtd);
-       iounmap(priv->reports);
-       iounmap(priv->ctrl);
-       iounmap(priv->ddr_base);
-       lv1_gpu_context_free(priv->context_handle);
-       lv1_gpu_memory_free(priv->memory_handle);
-       ps3_close_hv_device(dev);
-       free_pages((unsigned long) priv->xdr_buf, get_order(XDR_BUF_SIZE));
-       kfree(priv);
-       return 0;
-}
-
-static struct ps3_system_bus_driver ps3vram_driver = {
-       .match_id       = PS3_MATCH_ID_GPU,
-       .match_sub_id   = PS3_MATCH_SUB_ID_GPU_RAMDISK,
-       .core.name      = DEVICE_NAME,
-       .core.owner     = THIS_MODULE,
-       .probe          = ps3vram_probe,
-       .remove         = ps3vram_shutdown,
-       .shutdown       = ps3vram_shutdown,
-};
-
-static int __init ps3vram_init(void)
-{
-       return ps3_system_bus_driver_register(&ps3vram_driver);
-}
-
-static void __exit ps3vram_exit(void)
-{
-       ps3_system_bus_driver_unregister(&ps3vram_driver);
-}
-
-module_init(ps3vram_init);
-module_exit(ps3vram_exit);
-
-MODULE_LICENSE("GPL");
-MODULE_AUTHOR("Jim Paris <jim@jtan.com>");
-MODULE_DESCRIPTION("MTD driver for PS3 video RAM");
-MODULE_ALIAS(PS3_MODULE_ALIAS_GPU_RAMDISK);
index a2f185f..435e2e3 100644 (file)
@@ -1040,6 +1040,17 @@ config NI65
          To compile this driver as a module, choose M here. The module
          will be called ni65.
 
+config DNET
+       tristate "Dave ethernet support (DNET)"
+       depends on NET_ETHERNET
+       select PHYLIB
+       help
+         The Dave ethernet interface (DNET) is found on Qong Board FPGA.
+         Say Y to include support for the DNET chip.
+
+         To compile this driver as a module, choose M here: the module
+         will be called dnet.
+
 source "drivers/net/tulip/Kconfig"
 
 config AT1700
@@ -2619,6 +2630,8 @@ config QLGE
 
 source "drivers/net/sfc/Kconfig"
 
+source "drivers/net/benet/Kconfig"
+
 endif # NETDEV_10000
 
 source "drivers/net/tokenring/Kconfig"
index aca8492..471baaf 100644 (file)
@@ -22,6 +22,7 @@ obj-$(CONFIG_GIANFAR) += gianfar_driver.o
 obj-$(CONFIG_TEHUTI) += tehuti.o
 obj-$(CONFIG_ENIC) += enic/
 obj-$(CONFIG_JME) += jme.o
+obj-$(CONFIG_BE2NET) += benet/
 
 gianfar_driver-objs := gianfar.o \
                gianfar_ethtool.o \
@@ -231,6 +232,7 @@ obj-$(CONFIG_ENC28J60) += enc28j60.o
 
 obj-$(CONFIG_XTENSA_XT2000_SONIC) += xtsonic.o
 
+obj-$(CONFIG_DNET) += dnet.o
 obj-$(CONFIG_MACB) += macb.o
 
 obj-$(CONFIG_ARM) += arm/
diff --git a/drivers/net/benet/Kconfig b/drivers/net/benet/Kconfig
new file mode 100644 (file)
index 0000000..c6934f1
--- /dev/null
@@ -0,0 +1,7 @@
+config BE2NET
+       tristate "ServerEngines' 10Gbps NIC - BladeEngine 2"
+       depends on PCI && INET
+       select INET_LRO
+       help
+       This driver implements the NIC functionality for ServerEngines'
+       10Gbps network adapter - BladeEngine 2.
diff --git a/drivers/net/benet/Makefile b/drivers/net/benet/Makefile
new file mode 100644 (file)
index 0000000..a60cd80
--- /dev/null
@@ -0,0 +1,7 @@
+#
+# Makefile to build the network driver for ServerEngine's BladeEngine.
+#
+
+obj-$(CONFIG_BE2NET) += be2net.o
+
+be2net-y :=  be_main.o be_cmds.o be_ethtool.o
diff --git a/drivers/net/benet/be.h b/drivers/net/benet/be.h
new file mode 100644 (file)
index 0000000..63d593d
--- /dev/null
@@ -0,0 +1,327 @@
+/*
+ * Copyright (C) 2005 - 2009 ServerEngines
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.  The full GNU General
+ * Public License is included in this distribution in the file called COPYING.
+ *
+ * Contact Information:
+ * linux-drivers@serverengines.com
+ *
+ * ServerEngines
+ * 209 N. Fair Oaks Ave
+ * Sunnyvale, CA 94085
+ */
+
+#ifndef BE_H
+#define BE_H
+
+#include <linux/pci.h>
+#include <linux/etherdevice.h>
+#include <linux/version.h>
+#include <linux/delay.h>
+#include <net/tcp.h>
+#include <net/ip.h>
+#include <net/ipv6.h>
+#include <linux/if_vlan.h>
+#include <linux/workqueue.h>
+#include <linux/interrupt.h>
+#include <linux/inet_lro.h>
+
+#include "be_hw.h"
+
+#define DRV_VER                        "2.0.348"
+#define DRV_NAME               "be2net"
+#define BE_NAME                        "ServerEngines BladeEngine2 10Gbps NIC"
+#define DRV_DESC               BE_NAME "Driver"
+
+/* Number of bytes of an RX frame that are copied to skb->data */
+#define BE_HDR_LEN             64
+#define BE_MAX_JUMBO_FRAME_SIZE        9018
+#define BE_MIN_MTU             256
+
+#define BE_NUM_VLANS_SUPPORTED 64
+#define BE_MAX_EQD             96
+#define        BE_MAX_TX_FRAG_COUNT    30
+
+#define EVNT_Q_LEN             1024
+#define TX_Q_LEN               2048
+#define TX_CQ_LEN              1024
+#define RX_Q_LEN               1024    /* Does not support any other value */
+#define RX_CQ_LEN              1024
+#define MCC_Q_LEN              64      /* total size not to exceed 8 pages */
+#define MCC_CQ_LEN             256
+
+#define BE_NAPI_WEIGHT         64
+#define MAX_RX_POST            BE_NAPI_WEIGHT /* Frags posted at a time */
+#define RX_FRAGS_REFILL_WM     (RX_Q_LEN - MAX_RX_POST)
+
+#define BE_MAX_LRO_DESCRIPTORS  16
+#define BE_MAX_FRAGS_PER_FRAME  16
+
+struct be_dma_mem {
+       void *va;
+       dma_addr_t dma;
+       u32 size;
+};
+
+struct be_queue_info {
+       struct be_dma_mem dma_mem;
+       u16 len;
+       u16 entry_size; /* Size of an element in the queue */
+       u16 id;
+       u16 tail, head;
+       bool created;
+       atomic_t used;  /* Number of valid elements in the queue */
+};
+
+struct be_ctrl_info {
+       u8 __iomem *csr;
+       u8 __iomem *db;         /* Door Bell */
+       u8 __iomem *pcicfg;     /* PCI config space */
+       int pci_func;
+
+       /* Mbox used for cmd request/response */
+       spinlock_t cmd_lock;    /* For serializing cmds to BE card */
+       struct be_dma_mem mbox_mem;
+       /* Mbox mem is adjusted to align to 16 bytes. The allocated addr
+        * is stored for freeing purpose */
+       struct be_dma_mem mbox_mem_alloced;
+};
+
+#include "be_cmds.h"
+
+struct be_drvr_stats {
+       u32 be_tx_reqs;         /* number of TX requests initiated */
+       u32 be_tx_stops;        /* number of times TX Q was stopped */
+       u32 be_fwd_reqs;        /* number of send reqs through forwarding i/f */
+       u32 be_tx_wrbs;         /* number of tx WRBs used */
+       u32 be_tx_events;       /* number of tx completion events  */
+       u32 be_tx_compl;        /* number of tx completion entries processed */
+       u64 be_tx_jiffies;
+       ulong be_tx_bytes;
+       ulong be_tx_bytes_prev;
+       u32 be_tx_rate;
+
+       u32 cache_barrier[16];
+
+       u32 be_ethrx_post_fail;/* number of ethrx buffer alloc failures */
+       u32 be_polls;           /* number of times NAPI called poll function */
+       u32 be_rx_events;       /* number of ucast rx completion events  */
+       u32 be_rx_compl;        /* number of rx completion entries processed */
+       u32 be_lro_hgram_data[8];       /* histogram of LRO data packets */
+       u32 be_lro_hgram_ack[8];        /* histogram of LRO ACKs */
+       u64 be_rx_jiffies;
+       ulong be_rx_bytes;
+       ulong be_rx_bytes_prev;
+       u32 be_rx_rate;
+       /* number of non ether type II frames dropped where
+        * frame len > length field of Mac Hdr */
+       u32 be_802_3_dropped_frames;
+       /* number of non ether type II frames malformed where
+        * in frame len < length field of Mac Hdr */
+       u32 be_802_3_malformed_frames;
+       u32 be_rxcp_err;        /* Num rx completion entries w/ err set. */
+       ulong rx_fps_jiffies;   /* jiffies at last FPS calc */
+       u32 be_rx_frags;
+       u32 be_prev_rx_frags;
+       u32 be_rx_fps;          /* Rx frags per second */
+};
+
+struct be_stats_obj {
+       struct be_drvr_stats drvr_stats;
+       struct net_device_stats net_stats;
+       struct be_dma_mem cmd;
+};
+
+struct be_eq_obj {
+       struct be_queue_info q;
+       char desc[32];
+
+       /* Adaptive interrupt coalescing (AIC) info */
+       bool enable_aic;
+       u16 min_eqd;            /* in usecs */
+       u16 max_eqd;            /* in usecs */
+       u16 cur_eqd;            /* in usecs */
+
+       struct napi_struct napi;
+};
+
+struct be_tx_obj {
+       struct be_queue_info q;
+       struct be_queue_info cq;
+       /* Remember the skbs that were transmitted */
+       struct sk_buff *sent_skb_list[TX_Q_LEN];
+};
+
+/* Struct to remember the pages posted for rx frags */
+struct be_rx_page_info {
+       struct page *page;
+       dma_addr_t bus;
+       u16 page_offset;
+       bool last_page_user;
+};
+
+struct be_rx_obj {
+       struct be_queue_info q;
+       struct be_queue_info cq;
+       struct be_rx_page_info page_info_tbl[RX_Q_LEN];
+       struct net_lro_mgr lro_mgr;
+       struct net_lro_desc lro_desc[BE_MAX_LRO_DESCRIPTORS];
+};
+
+#define BE_NUM_MSIX_VECTORS            2       /* 1 each for Tx and Rx */
+struct be_adapter {
+       struct pci_dev *pdev;
+       struct net_device *netdev;
+
+       /* Mbox, pci config, csr address information */
+       struct be_ctrl_info ctrl;
+
+       struct msix_entry msix_entries[BE_NUM_MSIX_VECTORS];
+       bool msix_enabled;
+       bool isr_registered;
+
+       /* TX Rings */
+       struct be_eq_obj tx_eq;
+       struct be_tx_obj tx_obj;
+
+       u32 cache_line_break[8];
+
+       /* Rx rings */
+       struct be_eq_obj rx_eq;
+       struct be_rx_obj rx_obj;
+       u32 big_page_size;      /* Compounded page size shared by rx wrbs */
+
+       struct vlan_group *vlan_grp;
+       u16 num_vlans;
+       u8 vlan_tag[VLAN_GROUP_ARRAY_LEN];
+
+       struct be_stats_obj stats;
+       /* Work queue used to perform periodic tasks like getting statistics */
+       struct delayed_work work;
+
+       /* Ethtool knobs and info */
+       bool rx_csum;           /* BE card must perform rx-checksumming */
+       u32 max_rx_coal;
+       char fw_ver[FW_VER_LEN];
+       u32 if_handle;          /* Used to configure filtering */
+       u32 pmac_id;            /* MAC addr handle used by BE card */
+
+       struct be_link_info link;
+       u32 port_num;
+};
+
+extern struct ethtool_ops be_ethtool_ops;
+
+#define drvr_stats(adapter)            (&adapter->stats.drvr_stats)
+
+#define BE_SET_NETDEV_OPS(netdev, ops) (netdev->netdev_ops = ops)
+
+static inline u32 MODULO(u16 val, u16 limit)
+{
+       BUG_ON(limit & (limit - 1));
+       return val & (limit - 1);
+}
+
+static inline void index_adv(u16 *index, u16 val, u16 limit)
+{
+       *index = MODULO((*index + val), limit);
+}
+
+static inline void index_inc(u16 *index, u16 limit)
+{
+       *index = MODULO((*index + 1), limit);
+}
+
+#define PAGE_SHIFT_4K          12
+#define PAGE_SIZE_4K           (1 << PAGE_SHIFT_4K)
+
+/* Returns number of pages spanned by the data starting at the given addr */
+#define PAGES_4K_SPANNED(_address, size)                               \
+               ((u32)((((size_t)(_address) & (PAGE_SIZE_4K - 1)) +     \
+                       (size) + (PAGE_SIZE_4K - 1)) >> PAGE_SHIFT_4K))
+
+/* Byte offset into the page corresponding to given address */
+#define OFFSET_IN_PAGE(addr)                                           \
+                ((size_t)(addr) & (PAGE_SIZE_4K-1))
+
+/* Returns bit offset within a DWORD of a bitfield */
+#define AMAP_BIT_OFFSET(_struct, field)                                \
+               (((size_t)&(((_struct *)0)->field))%32)
+
+/* Returns the bit mask of the field that is NOT shifted into location. */
+static inline u32 amap_mask(u32 bitsize)
+{
+       return (bitsize == 32 ? 0xFFFFFFFF : (1 << bitsize) - 1);
+}
+
+static inline void
+amap_set(void *ptr, u32 dw_offset, u32 mask, u32 offset, u32 value)
+{
+       u32 *dw = (u32 *) ptr + dw_offset;
+       *dw &= ~(mask << offset);
+       *dw |= (mask & value) << offset;
+}
+
+#define AMAP_SET_BITS(_struct, field, ptr, val)                                \
+               amap_set(ptr,                                           \
+                       offsetof(_struct, field)/32,                    \
+                       amap_mask(sizeof(((_struct *)0)->field)),       \
+                       AMAP_BIT_OFFSET(_struct, field),                \
+                       val)
+
+static inline u32 amap_get(void *ptr, u32 dw_offset, u32 mask, u32 offset)
+{
+       u32 *dw = (u32 *) ptr;
+       return mask & (*(dw + dw_offset) >> offset);
+}
+
+#define AMAP_GET_BITS(_struct, field, ptr)                             \
+               amap_get(ptr,                                           \
+                       offsetof(_struct, field)/32,                    \
+                       amap_mask(sizeof(((_struct *)0)->field)),       \
+                       AMAP_BIT_OFFSET(_struct, field))
+
+#define be_dws_cpu_to_le(wrb, len)     swap_dws(wrb, len)
+#define be_dws_le_to_cpu(wrb, len)     swap_dws(wrb, len)
+static inline void swap_dws(void *wrb, int len)
+{
+#ifdef __BIG_ENDIAN
+       u32 *dw = wrb;
+       BUG_ON(len % 4);
+       do {
+               *dw = cpu_to_le32(*dw);
+               dw++;
+               len -= 4;
+       } while (len);
+#endif                         /* __BIG_ENDIAN */
+}
+
+static inline u8 is_tcp_pkt(struct sk_buff *skb)
+{
+       u8 val = 0;
+
+       if (ip_hdr(skb)->version == 4)
+               val = (ip_hdr(skb)->protocol == IPPROTO_TCP);
+       else if (ip_hdr(skb)->version == 6)
+               val = (ipv6_hdr(skb)->nexthdr == NEXTHDR_TCP);
+
+       return val;
+}
+
+static inline u8 is_udp_pkt(struct sk_buff *skb)
+{
+       u8 val = 0;
+
+       if (ip_hdr(skb)->version == 4)
+               val = (ip_hdr(skb)->protocol == IPPROTO_UDP);
+       else if (ip_hdr(skb)->version == 6)
+               val = (ipv6_hdr(skb)->nexthdr == NEXTHDR_UDP);
+
+       return val;
+}
+
+#endif                         /* BE_H */
diff --git a/drivers/net/benet/be_cmds.c b/drivers/net/benet/be_cmds.c
new file mode 100644 (file)
index 0000000..d444aed
--- /dev/null
@@ -0,0 +1,861 @@
+/*
+ * Copyright (C) 2005 - 2009 ServerEngines
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.  The full GNU General
+ * Public License is included in this distribution in the file called COPYING.
+ *
+ * Contact Information:
+ * linux-drivers@serverengines.com
+ *
+ * ServerEngines
+ * 209 N. Fair Oaks Ave
+ * Sunnyvale, CA 94085
+ */
+
+#include "be.h"
+
+static int be_mbox_db_ready_wait(void __iomem *db)
+{
+       int cnt = 0, wait = 5;
+       u32 ready;
+
+       do {
+               ready = ioread32(db) & MPU_MAILBOX_DB_RDY_MASK;
+               if (ready)
+                       break;
+
+               if (cnt > 200000) {
+                       printk(KERN_WARNING DRV_NAME
+                               ": mbox_db poll timed out\n");
+                       return -1;
+               }
+
+               if (cnt > 50)
+                       wait = 200;
+               cnt += wait;
+               udelay(wait);
+       } while (true);
+
+       return 0;
+}
+
+/*
+ * Insert the mailbox address into the doorbell in two steps
+ */
+static int be_mbox_db_ring(struct be_ctrl_info *ctrl)
+{
+       int status;
+       u16 compl_status, extd_status;
+       u32 val = 0;
+       void __iomem *db = ctrl->db + MPU_MAILBOX_DB_OFFSET;
+       struct be_dma_mem *mbox_mem = &ctrl->mbox_mem;
+       struct be_mcc_mailbox *mbox = mbox_mem->va;
+       struct be_mcc_cq_entry *cqe = &mbox->cqe;
+
+       memset(cqe, 0, sizeof(*cqe));
+
+       val &= ~MPU_MAILBOX_DB_RDY_MASK;
+       val |= MPU_MAILBOX_DB_HI_MASK;
+       /* at bits 2 - 31 place mbox dma addr msb bits 34 - 63 */
+       val |= (upper_32_bits(mbox_mem->dma) >> 2) << 2;
+       iowrite32(val, db);
+
+       /* wait for ready to be set */
+       status = be_mbox_db_ready_wait(db);
+       if (status != 0)
+               return status;
+
+       val = 0;
+       val &= ~MPU_MAILBOX_DB_RDY_MASK;
+       val &= ~MPU_MAILBOX_DB_HI_MASK;
+       /* at bits 2 - 31 place mbox dma addr lsb bits 4 - 33 */
+       val |= (u32)(mbox_mem->dma >> 4) << 2;
+       iowrite32(val, db);
+
+       status = be_mbox_db_ready_wait(db);
+       if (status != 0)
+               return status;
+
+       /* compl entry has been made now */
+       be_dws_le_to_cpu(cqe, sizeof(*cqe));
+       if (!(cqe->flags & CQE_FLAGS_VALID_MASK)) {
+               printk(KERN_WARNING DRV_NAME ": ERROR invalid mbox compl\n");
+               return -1;
+       }
+
+       compl_status = (cqe->status >> CQE_STATUS_COMPL_SHIFT) &
+                               CQE_STATUS_COMPL_MASK;
+       if (compl_status != MCC_STATUS_SUCCESS) {
+               extd_status = (cqe->status >> CQE_STATUS_EXTD_SHIFT) &
+                               CQE_STATUS_EXTD_MASK;
+               printk(KERN_WARNING DRV_NAME
+                       ": ERROR in cmd compl. status(compl/extd)=%d/%d\n",
+                       compl_status, extd_status);
+       }
+
+       return compl_status;
+}
+
+static int be_POST_stage_get(struct be_ctrl_info *ctrl, u16 *stage)
+{
+       u32 sem = ioread32(ctrl->csr + MPU_EP_SEMAPHORE_OFFSET);
+
+       *stage = sem & EP_SEMAPHORE_POST_STAGE_MASK;
+       if ((sem >> EP_SEMAPHORE_POST_ERR_SHIFT) & EP_SEMAPHORE_POST_ERR_MASK)
+               return -1;
+       else
+               return 0;
+}
+
+static int be_POST_stage_poll(struct be_ctrl_info *ctrl, u16 poll_stage)
+{
+       u16 stage, cnt, error;
+       for (cnt = 0; cnt < 5000; cnt++) {
+               error = be_POST_stage_get(ctrl, &stage);
+               if (error)
+                       return -1;
+
+               if (stage == poll_stage)
+                       break;
+               udelay(1000);
+       }
+       if (stage != poll_stage)
+               return -1;
+       return 0;
+}
+
+
+int be_cmd_POST(struct be_ctrl_info *ctrl)
+{
+       u16 stage, error;
+
+       error = be_POST_stage_get(ctrl, &stage);
+       if (error)
+               goto err;
+
+       if (stage == POST_STAGE_ARMFW_RDY)
+               return 0;
+
+       if (stage != POST_STAGE_AWAITING_HOST_RDY)
+               goto err;
+
+       /* On awaiting host rdy, reset and again poll on awaiting host rdy */
+       iowrite32(POST_STAGE_BE_RESET, ctrl->csr + MPU_EP_SEMAPHORE_OFFSET);
+       error = be_POST_stage_poll(ctrl, POST_STAGE_AWAITING_HOST_RDY);
+       if (error)
+               goto err;
+
+       /* Now kickoff POST and poll on armfw ready */
+       iowrite32(POST_STAGE_HOST_RDY, ctrl->csr + MPU_EP_SEMAPHORE_OFFSET);
+       error = be_POST_stage_poll(ctrl, POST_STAGE_ARMFW_RDY);
+       if (error)
+               goto err;
+
+       return 0;
+err:
+       printk(KERN_WARNING DRV_NAME ": ERROR, stage=%d\n", stage);
+       return -1;
+}
+
+static inline void *embedded_payload(struct be_mcc_wrb *wrb)
+{
+       return wrb->payload.embedded_payload;
+}
+
+static inline struct be_sge *nonembedded_sgl(struct be_mcc_wrb *wrb)
+{
+       return &wrb->payload.sgl[0];
+}
+
+/* Don't touch the hdr after it's prepared */
+static void be_wrb_hdr_prepare(struct be_mcc_wrb *wrb, int payload_len,
+                               bool embedded, u8 sge_cnt)
+{
+       if (embedded)
+               wrb->embedded |= MCC_WRB_EMBEDDED_MASK;
+       else
+               wrb->embedded |= (sge_cnt & MCC_WRB_SGE_CNT_MASK) <<
+                               MCC_WRB_SGE_CNT_SHIFT;
+       wrb->payload_length = payload_len;
+       be_dws_cpu_to_le(wrb, 20);
+}
+
+/* Don't touch the hdr after it's prepared */
+static void be_cmd_hdr_prepare(struct be_cmd_req_hdr *req_hdr,
+                               u8 subsystem, u8 opcode, int cmd_len)
+{
+       req_hdr->opcode = opcode;
+       req_hdr->subsystem = subsystem;
+       req_hdr->request_length = cpu_to_le32(cmd_len - sizeof(*req_hdr));
+}
+
+static void be_cmd_page_addrs_prepare(struct phys_addr *pages, u32 max_pages,
+                       struct be_dma_mem *mem)
+{
+       int i, buf_pages = min(PAGES_4K_SPANNED(mem->va, mem->size), max_pages);
+       u64 dma = (u64)mem->dma;
+
+       for (i = 0; i < buf_pages; i++) {
+               pages[i].lo = cpu_to_le32(dma & 0xFFFFFFFF);
+               pages[i].hi = cpu_to_le32(upper_32_bits(dma));
+               dma += PAGE_SIZE_4K;
+       }
+}
+
+/* Converts interrupt delay in microseconds to multiplier value */
+static u32 eq_delay_to_mult(u32 usec_delay)
+{
+#define MAX_INTR_RATE                  651042
+       const u32 round = 10;
+       u32 multiplier;
+
+       if (usec_delay == 0)
+               multiplier = 0;
+       else {
+               u32 interrupt_rate = 1000000 / usec_delay;
+               /* Max delay, corresponding to the lowest interrupt rate */
+               if (interrupt_rate == 0)
+                       multiplier = 1023;
+               else {
+                       multiplier = (MAX_INTR_RATE - interrupt_rate) * round;
+                       multiplier /= interrupt_rate;
+                       /* Round the multiplier to the closest value.*/
+                       multiplier = (multiplier + round/2) / round;
+                       multiplier = min(multiplier, (u32)1023);
+               }
+       }
+       return multiplier;
+}
+
+static inline struct be_mcc_wrb *wrb_from_mbox(struct be_dma_mem *mbox_mem)
+{
+       return &((struct be_mcc_mailbox *)(mbox_mem->va))->wrb;
+}
+
+int be_cmd_eq_create(struct be_ctrl_info *ctrl,
+               struct be_queue_info *eq, int eq_delay)
+{
+       struct be_mcc_wrb *wrb = wrb_from_mbox(&ctrl->mbox_mem);
+       struct be_cmd_req_eq_create *req = embedded_payload(wrb);
+       struct be_cmd_resp_eq_create *resp = embedded_payload(wrb);
+       struct be_dma_mem *q_mem = &eq->dma_mem;
+       int status;
+
+       spin_lock(&ctrl->cmd_lock);
+       memset(wrb, 0, sizeof(*wrb));
+
+       be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
+
+       be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
+               OPCODE_COMMON_EQ_CREATE, sizeof(*req));
+
+       req->num_pages =  cpu_to_le16(PAGES_4K_SPANNED(q_mem->va, q_mem->size));
+
+       AMAP_SET_BITS(struct amap_eq_context, func, req->context,
+                       ctrl->pci_func);
+       AMAP_SET_BITS(struct amap_eq_context, valid, req->context, 1);
+       /* 4byte eqe*/
+       AMAP_SET_BITS(struct amap_eq_context, size, req->context, 0);
+       AMAP_SET_BITS(struct amap_eq_context, count, req->context,
+                       __ilog2_u32(eq->len/256));
+       AMAP_SET_BITS(struct amap_eq_context, delaymult, req->context,
+                       eq_delay_to_mult(eq_delay));
+       be_dws_cpu_to_le(req->context, sizeof(req->context));
+
+       be_cmd_page_addrs_prepare(req->pages, ARRAY_SIZE(req->pages), q_mem);
+
+       status = be_mbox_db_ring(ctrl);
+       if (!status) {
+               eq->id = le16_to_cpu(resp->eq_id);
+               eq->created = true;
+       }
+       spin_unlock(&ctrl->cmd_lock);
+       return status;
+}
+
+int be_cmd_mac_addr_query(struct be_ctrl_info *ctrl, u8 *mac_addr,
+                       u8 type, bool permanent, u32 if_handle)
+{
+       struct be_mcc_wrb *wrb = wrb_from_mbox(&ctrl->mbox_mem);
+       struct be_cmd_req_mac_query *req = embedded_payload(wrb);
+       struct be_cmd_resp_mac_query *resp = embedded_payload(wrb);
+       int status;
+
+       spin_lock(&ctrl->cmd_lock);
+       memset(wrb, 0, sizeof(*wrb));
+
+       be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
+
+       be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
+               OPCODE_COMMON_NTWK_MAC_QUERY, sizeof(*req));
+
+       req->type = type;
+       if (permanent) {
+               req->permanent = 1;
+       } else {
+               req->if_id = cpu_to_le16((u16)if_handle);
+               req->permanent = 0;
+       }
+
+       status = be_mbox_db_ring(ctrl);
+       if (!status)
+               memcpy(mac_addr, resp->mac.addr, ETH_ALEN);
+
+       spin_unlock(&ctrl->cmd_lock);
+       return status;
+}
+
+int be_cmd_pmac_add(struct be_ctrl_info *ctrl, u8 *mac_addr,
+               u32 if_id, u32 *pmac_id)
+{
+       struct be_mcc_wrb *wrb = wrb_from_mbox(&ctrl->mbox_mem);
+       struct be_cmd_req_pmac_add *req = embedded_payload(wrb);
+       int status;
+
+       spin_lock(&ctrl->cmd_lock);
+       memset(wrb, 0, sizeof(*wrb));
+
+       be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
+
+       be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
+               OPCODE_COMMON_NTWK_PMAC_ADD, sizeof(*req));
+
+       req->if_id = cpu_to_le32(if_id);
+       memcpy(req->mac_address, mac_addr, ETH_ALEN);
+
+       status = be_mbox_db_ring(ctrl);
+       if (!status) {
+               struct be_cmd_resp_pmac_add *resp = embedded_payload(wrb);
+               *pmac_id = le32_to_cpu(resp->pmac_id);
+       }
+
+       spin_unlock(&ctrl->cmd_lock);
+       return status;
+}
+
+int be_cmd_pmac_del(struct be_ctrl_info *ctrl, u32 if_id, u32 pmac_id)
+{
+       struct be_mcc_wrb *wrb = wrb_from_mbox(&ctrl->mbox_mem);
+       struct be_cmd_req_pmac_del *req = embedded_payload(wrb);
+       int status;
+
+       spin_lock(&ctrl->cmd_lock);
+       memset(wrb, 0, sizeof(*wrb));
+
+       be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
+
+       be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
+               OPCODE_COMMON_NTWK_PMAC_DEL, sizeof(*req));
+
+       req->if_id = cpu_to_le32(if_id);
+       req->pmac_id = cpu_to_le32(pmac_id);
+
+       status = be_mbox_db_ring(ctrl);
+       spin_unlock(&ctrl->cmd_lock);
+
+       return status;
+}
+
+int be_cmd_cq_create(struct be_ctrl_info *ctrl,
+               struct be_queue_info *cq, struct be_queue_info *eq,
+               bool sol_evts, bool no_delay, int coalesce_wm)
+{
+       struct be_mcc_wrb *wrb = wrb_from_mbox(&ctrl->mbox_mem);
+       struct be_cmd_req_cq_create *req = embedded_payload(wrb);
+       struct be_cmd_resp_cq_create *resp = embedded_payload(wrb);
+       struct be_dma_mem *q_mem = &cq->dma_mem;
+       void *ctxt = &req->context;
+       int status;
+
+       spin_lock(&ctrl->cmd_lock);
+       memset(wrb, 0, sizeof(*wrb));
+
+       be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
+
+       be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
+               OPCODE_COMMON_CQ_CREATE, sizeof(*req));
+
+       req->num_pages =  cpu_to_le16(PAGES_4K_SPANNED(q_mem->va, q_mem->size));
+
+       AMAP_SET_BITS(struct amap_cq_context, coalescwm, ctxt, coalesce_wm);
+       AMAP_SET_BITS(struct amap_cq_context, nodelay, ctxt, no_delay);
+       AMAP_SET_BITS(struct amap_cq_context, count, ctxt,
+                       __ilog2_u32(cq->len/256));
+       AMAP_SET_BITS(struct amap_cq_context, valid, ctxt, 1);
+       AMAP_SET_BITS(struct amap_cq_context, solevent, ctxt, sol_evts);
+       AMAP_SET_BITS(struct amap_cq_context, eventable, ctxt, 1);
+       AMAP_SET_BITS(struct amap_cq_context, eqid, ctxt, eq->id);
+       AMAP_SET_BITS(struct amap_cq_context, armed, ctxt, 0);
+       AMAP_SET_BITS(struct amap_cq_context, func, ctxt, ctrl->pci_func);
+       be_dws_cpu_to_le(ctxt, sizeof(req->context));
+
+       be_cmd_page_addrs_prepare(req->pages, ARRAY_SIZE(req->pages), q_mem);
+
+       status = be_mbox_db_ring(ctrl);
+       if (!status) {
+               cq->id = le16_to_cpu(resp->cq_id);
+               cq->created = true;
+       }
+       spin_unlock(&ctrl->cmd_lock);
+
+       return status;
+}
+
+int be_cmd_txq_create(struct be_ctrl_info *ctrl,
+                       struct be_queue_info *txq,
+                       struct be_queue_info *cq)
+{
+       struct be_mcc_wrb *wrb = wrb_from_mbox(&ctrl->mbox_mem);
+       struct be_cmd_req_eth_tx_create *req = embedded_payload(wrb);
+       struct be_dma_mem *q_mem = &txq->dma_mem;
+       void *ctxt = &req->context;
+       int status;
+       u32 len_encoded;
+
+       spin_lock(&ctrl->cmd_lock);
+       memset(wrb, 0, sizeof(*wrb));
+
+       be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
+
+       be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_ETH, OPCODE_ETH_TX_CREATE,
+               sizeof(*req));
+
+       req->num_pages = PAGES_4K_SPANNED(q_mem->va, q_mem->size);
+       req->ulp_num = BE_ULP1_NUM;
+       req->type = BE_ETH_TX_RING_TYPE_STANDARD;
+
+       len_encoded = fls(txq->len); /* log2(len) + 1 */
+       if (len_encoded == 16)
+               len_encoded = 0;
+       AMAP_SET_BITS(struct amap_tx_context, tx_ring_size, ctxt, len_encoded);
+       AMAP_SET_BITS(struct amap_tx_context, pci_func_id, ctxt,
+                       ctrl->pci_func);
+       AMAP_SET_BITS(struct amap_tx_context, ctx_valid, ctxt, 1);
+       AMAP_SET_BITS(struct amap_tx_context, cq_id_send, ctxt, cq->id);
+
+       be_dws_cpu_to_le(ctxt, sizeof(req->context));
+
+       be_cmd_page_addrs_prepare(req->pages, ARRAY_SIZE(req->pages), q_mem);
+
+       status = be_mbox_db_ring(ctrl);
+       if (!status) {
+               struct be_cmd_resp_eth_tx_create *resp = embedded_payload(wrb);
+               txq->id = le16_to_cpu(resp->cid);
+               txq->created = true;
+       }
+       spin_unlock(&ctrl->cmd_lock);
+
+       return status;
+}
+
+int be_cmd_rxq_create(struct be_ctrl_info *ctrl,
+               struct be_queue_info *rxq, u16 cq_id, u16 frag_size,
+               u16 max_frame_size, u32 if_id, u32 rss)
+{
+       struct be_mcc_wrb *wrb = wrb_from_mbox(&ctrl->mbox_mem);
+       struct be_cmd_req_eth_rx_create *req = embedded_payload(wrb);
+       struct be_dma_mem *q_mem = &rxq->dma_mem;
+       int status;
+
+       spin_lock(&ctrl->cmd_lock);
+       memset(wrb, 0, sizeof(*wrb));
+
+       be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
+
+       be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_ETH, OPCODE_ETH_RX_CREATE,
+               sizeof(*req));
+
+       req->cq_id = cpu_to_le16(cq_id);
+       req->frag_size = fls(frag_size) - 1;
+       req->num_pages = 2;
+       be_cmd_page_addrs_prepare(req->pages, ARRAY_SIZE(req->pages), q_mem);
+       req->interface_id = cpu_to_le32(if_id);
+       req->max_frame_size = cpu_to_le16(max_frame_size);
+       req->rss_queue = cpu_to_le32(rss);
+
+       status = be_mbox_db_ring(ctrl);
+       if (!status) {
+               struct be_cmd_resp_eth_rx_create *resp = embedded_payload(wrb);
+               rxq->id = le16_to_cpu(resp->id);
+               rxq->created = true;
+       }
+       spin_unlock(&ctrl->cmd_lock);
+
+       return status;
+}
+
+/* Generic destroyer function for all types of queues */
+int be_cmd_q_destroy(struct be_ctrl_info *ctrl, struct be_queue_info *q,
+               int queue_type)
+{
+       struct be_mcc_wrb *wrb = wrb_from_mbox(&ctrl->mbox_mem);
+       struct be_cmd_req_q_destroy *req = embedded_payload(wrb);
+       u8 subsys = 0, opcode = 0;
+       int status;
+
+       spin_lock(&ctrl->cmd_lock);
+
+       memset(wrb, 0, sizeof(*wrb));
+       be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
+
+       switch (queue_type) {
+       case QTYPE_EQ:
+               subsys = CMD_SUBSYSTEM_COMMON;
+               opcode = OPCODE_COMMON_EQ_DESTROY;
+               break;
+       case QTYPE_CQ:
+               subsys = CMD_SUBSYSTEM_COMMON;
+               opcode = OPCODE_COMMON_CQ_DESTROY;
+               break;
+       case QTYPE_TXQ:
+               subsys = CMD_SUBSYSTEM_ETH;
+               opcode = OPCODE_ETH_TX_DESTROY;
+               break;
+       case QTYPE_RXQ:
+               subsys = CMD_SUBSYSTEM_ETH;
+               opcode = OPCODE_ETH_RX_DESTROY;
+               break;
+       default:
+               printk(KERN_WARNING DRV_NAME ":bad Q type in Q destroy cmd\n");
+               status = -1;
+               goto err;
+       }
+       be_cmd_hdr_prepare(&req->hdr, subsys, opcode, sizeof(*req));
+       req->id = cpu_to_le16(q->id);
+
+       status = be_mbox_db_ring(ctrl);
+err:
+       spin_unlock(&ctrl->cmd_lock);
+
+       return status;
+}
+
+/* Create an rx filtering policy configuration on an i/f */
+int be_cmd_if_create(struct be_ctrl_info *ctrl, u32 flags, u8 *mac,
+               bool pmac_invalid, u32 *if_handle, u32 *pmac_id)
+{
+       struct be_mcc_wrb *wrb = wrb_from_mbox(&ctrl->mbox_mem);
+       struct be_cmd_req_if_create *req = embedded_payload(wrb);
+       int status;
+
+       spin_lock(&ctrl->cmd_lock);
+       memset(wrb, 0, sizeof(*wrb));
+
+       be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
+
+       be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
+               OPCODE_COMMON_NTWK_INTERFACE_CREATE, sizeof(*req));
+
+       req->capability_flags = cpu_to_le32(flags);
+       req->enable_flags = cpu_to_le32(flags);
+       if (!pmac_invalid)
+               memcpy(req->mac_addr, mac, ETH_ALEN);
+
+       status = be_mbox_db_ring(ctrl);
+       if (!status) {
+               struct be_cmd_resp_if_create *resp = embedded_payload(wrb);
+               *if_handle = le32_to_cpu(resp->interface_id);
+               if (!pmac_invalid)
+                       *pmac_id = le32_to_cpu(resp->pmac_id);
+       }
+
+       spin_unlock(&ctrl->cmd_lock);
+       return status;
+}
+
+int be_cmd_if_destroy(struct be_ctrl_info *ctrl, u32 interface_id)
+{
+       struct be_mcc_wrb *wrb = wrb_from_mbox(&ctrl->mbox_mem);
+       struct be_cmd_req_if_destroy *req = embedded_payload(wrb);
+       int status;
+
+       spin_lock(&ctrl->cmd_lock);
+       memset(wrb, 0, sizeof(*wrb));
+
+       be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
+
+       be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
+               OPCODE_COMMON_NTWK_INTERFACE_DESTROY, sizeof(*req));
+
+       req->interface_id = cpu_to_le32(interface_id);
+       status = be_mbox_db_ring(ctrl);
+
+       spin_unlock(&ctrl->cmd_lock);
+
+       return status;
+}
+
+/* Get stats is a non embedded command: the request is not embedded inside
+ * WRB but is a separate dma memory block
+ */
+int be_cmd_get_stats(struct be_ctrl_info *ctrl, struct be_dma_mem *nonemb_cmd)
+{
+       struct be_mcc_wrb *wrb = wrb_from_mbox(&ctrl->mbox_mem);
+       struct be_cmd_req_get_stats *req = nonemb_cmd->va;
+       struct be_sge *sge = nonembedded_sgl(wrb);
+       int status;
+
+       spin_lock(&ctrl->cmd_lock);
+       memset(wrb, 0, sizeof(*wrb));
+
+       memset(req, 0, sizeof(*req));
+
+       be_wrb_hdr_prepare(wrb, sizeof(*req), false, 1);
+
+       be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_ETH,
+               OPCODE_ETH_GET_STATISTICS, sizeof(*req));
+       sge->pa_hi = cpu_to_le32(upper_32_bits(nonemb_cmd->dma));
+       sge->pa_lo = cpu_to_le32(nonemb_cmd->dma & 0xFFFFFFFF);
+       sge->len = cpu_to_le32(nonemb_cmd->size);
+
+       status = be_mbox_db_ring(ctrl);
+       if (!status) {
+               struct be_cmd_resp_get_stats *resp = nonemb_cmd->va;
+               be_dws_le_to_cpu(&resp->hw_stats, sizeof(resp->hw_stats));
+       }
+
+       spin_unlock(&ctrl->cmd_lock);
+       return status;
+}
+
+int be_cmd_link_status_query(struct be_ctrl_info *ctrl,
+                       struct be_link_info *link)
+{
+       struct be_mcc_wrb *wrb = wrb_from_mbox(&ctrl->mbox_mem);
+       struct be_cmd_req_link_status *req = embedded_payload(wrb);
+       int status;
+
+       spin_lock(&ctrl->cmd_lock);
+       memset(wrb, 0, sizeof(*wrb));
+
+       be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
+
+       be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
+               OPCODE_COMMON_NTWK_LINK_STATUS_QUERY, sizeof(*req));
+
+       status = be_mbox_db_ring(ctrl);
+       if (!status) {
+               struct be_cmd_resp_link_status *resp = embedded_payload(wrb);
+               link->speed = resp->mac_speed;
+               link->duplex = resp->mac_duplex;
+               link->fault = resp->mac_fault;
+       } else {
+               link->speed = PHY_LINK_SPEED_ZERO;
+       }
+
+       spin_unlock(&ctrl->cmd_lock);
+       return status;
+}
+
+int be_cmd_get_fw_ver(struct be_ctrl_info *ctrl, char *fw_ver)
+{
+       struct be_mcc_wrb *wrb = wrb_from_mbox(&ctrl->mbox_mem);
+       struct be_cmd_req_get_fw_version *req = embedded_payload(wrb);
+       int status;
+
+       spin_lock(&ctrl->cmd_lock);
+       memset(wrb, 0, sizeof(*wrb));
+
+       be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
+
+       be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
+               OPCODE_COMMON_GET_FW_VERSION, sizeof(*req));
+
+       status = be_mbox_db_ring(ctrl);
+       if (!status) {
+               struct be_cmd_resp_get_fw_version *resp = embedded_payload(wrb);
+               strncpy(fw_ver, resp->firmware_version_string, FW_VER_LEN);
+       }
+
+       spin_unlock(&ctrl->cmd_lock);
+       return status;
+}
+
+/* set the EQ delay interval of an EQ to specified value */
+int be_cmd_modify_eqd(struct be_ctrl_info *ctrl, u32 eq_id, u32 eqd)
+{
+       struct be_mcc_wrb *wrb = wrb_from_mbox(&ctrl->mbox_mem);
+       struct be_cmd_req_modify_eq_delay *req = embedded_payload(wrb);
+       int status;
+
+       spin_lock(&ctrl->cmd_lock);
+       memset(wrb, 0, sizeof(*wrb));
+
+       be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
+
+       be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
+               OPCODE_COMMON_MODIFY_EQ_DELAY, sizeof(*req));
+
+       req->num_eq = cpu_to_le32(1);
+       req->delay[0].eq_id = cpu_to_le32(eq_id);
+       req->delay[0].phase = 0;
+       req->delay[0].delay_multiplier = cpu_to_le32(eqd);
+
+       status = be_mbox_db_ring(ctrl);
+
+       spin_unlock(&ctrl->cmd_lock);
+       return status;
+}
+
+int be_cmd_vlan_config(struct be_ctrl_info *ctrl, u32 if_id, u16 *vtag_array,
+                       u32 num, bool untagged, bool promiscuous)
+{
+       struct be_mcc_wrb *wrb = wrb_from_mbox(&ctrl->mbox_mem);
+       struct be_cmd_req_vlan_config *req = embedded_payload(wrb);
+       int status;
+
+       spin_lock(&ctrl->cmd_lock);
+       memset(wrb, 0, sizeof(*wrb));
+
+       be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
+
+       be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
+               OPCODE_COMMON_NTWK_VLAN_CONFIG, sizeof(*req));
+
+       req->interface_id = if_id;
+       req->promiscuous = promiscuous;
+       req->untagged = untagged;
+       req->num_vlan = num;
+       if (!promiscuous) {
+               memcpy(req->normal_vlan, vtag_array,
+                       req->num_vlan * sizeof(vtag_array[0]));
+       }
+
+       status = be_mbox_db_ring(ctrl);
+
+       spin_unlock(&ctrl->cmd_lock);
+       return status;
+}
+
+int be_cmd_promiscuous_config(struct be_ctrl_info *ctrl, u8 port_num, bool en)
+{
+       struct be_mcc_wrb *wrb = wrb_from_mbox(&ctrl->mbox_mem);
+       struct be_cmd_req_promiscuous_config *req = embedded_payload(wrb);
+       int status;
+
+       spin_lock(&ctrl->cmd_lock);
+       memset(wrb, 0, sizeof(*wrb));
+
+       be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
+
+       be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_ETH,
+               OPCODE_ETH_PROMISCUOUS, sizeof(*req));
+
+       if (port_num)
+               req->port1_promiscuous = en;
+       else
+               req->port0_promiscuous = en;
+
+       status = be_mbox_db_ring(ctrl);
+
+       spin_unlock(&ctrl->cmd_lock);
+       return status;
+}
+
+int be_cmd_mcast_mac_set(struct be_ctrl_info *ctrl, u32 if_id, u8 *mac_table,
+                       u32 num, bool promiscuous)
+{
+       struct be_mcc_wrb *wrb = wrb_from_mbox(&ctrl->mbox_mem);
+       struct be_cmd_req_mcast_mac_config *req = embedded_payload(wrb);
+       int status;
+
+       spin_lock(&ctrl->cmd_lock);
+       memset(wrb, 0, sizeof(*wrb));
+
+       be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
+
+       be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
+               OPCODE_COMMON_NTWK_MULTICAST_SET, sizeof(*req));
+
+       req->interface_id = if_id;
+       req->promiscuous = promiscuous;
+       if (!promiscuous) {
+               req->num_mac = cpu_to_le16(num);
+               if (num)
+                       memcpy(req->mac, mac_table, ETH_ALEN * num);
+       }
+
+       status = be_mbox_db_ring(ctrl);
+
+       spin_unlock(&ctrl->cmd_lock);
+       return status;
+}
+
+int be_cmd_set_flow_control(struct be_ctrl_info *ctrl, u32 tx_fc, u32 rx_fc)
+{
+       struct be_mcc_wrb *wrb = wrb_from_mbox(&ctrl->mbox_mem);
+       struct be_cmd_req_set_flow_control *req = embedded_payload(wrb);
+       int status;
+
+       spin_lock(&ctrl->cmd_lock);
+
+       memset(wrb, 0, sizeof(*wrb));
+
+       be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
+
+       be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
+               OPCODE_COMMON_SET_FLOW_CONTROL, sizeof(*req));
+
+       req->tx_flow_control = cpu_to_le16((u16)tx_fc);
+       req->rx_flow_control = cpu_to_le16((u16)rx_fc);
+
+       status = be_mbox_db_ring(ctrl);
+
+       spin_unlock(&ctrl->cmd_lock);
+       return status;
+}
+
+int be_cmd_get_flow_control(struct be_ctrl_info *ctrl, u32 *tx_fc, u32 *rx_fc)
+{
+       struct be_mcc_wrb *wrb = wrb_from_mbox(&ctrl->mbox_mem);
+       struct be_cmd_req_get_flow_control *req = embedded_payload(wrb);
+       int status;
+
+       spin_lock(&ctrl->cmd_lock);
+
+       memset(wrb, 0, sizeof(*wrb));
+
+       be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
+
+       be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
+               OPCODE_COMMON_GET_FLOW_CONTROL, sizeof(*req));
+
+       status = be_mbox_db_ring(ctrl);
+       if (!status) {
+               struct be_cmd_resp_get_flow_control *resp =
+                                               embedded_payload(wrb);
+               *tx_fc = le16_to_cpu(resp->tx_flow_control);
+               *rx_fc = le16_to_cpu(resp->rx_flow_control);
+       }
+
+       spin_unlock(&ctrl->cmd_lock);
+       return status;
+}
+
+int be_cmd_query_fw_cfg(struct be_ctrl_info *ctrl, u32 *port_num)
+{
+       struct be_mcc_wrb *wrb = wrb_from_mbox(&ctrl->mbox_mem);
+       struct be_cmd_req_query_fw_cfg *req = embedded_payload(wrb);
+       int status;
+
+       spin_lock(&ctrl->cmd_lock);
+
+       memset(wrb, 0, sizeof(*wrb));
+
+       be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
+
+       be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
+               OPCODE_COMMON_QUERY_FIRMWARE_CONFIG, sizeof(*req));
+
+       status = be_mbox_db_ring(ctrl);
+       if (!status) {
+               struct be_cmd_resp_query_fw_cfg *resp = embedded_payload(wrb);
+               *port_num = le32_to_cpu(resp->phys_port);
+       }
+
+       spin_unlock(&ctrl->cmd_lock);
+       return status;
+}
diff --git a/drivers/net/benet/be_cmds.h b/drivers/net/benet/be_cmds.h
new file mode 100644 (file)
index 0000000..e499e2d
--- /dev/null
@@ -0,0 +1,688 @@
+/*
+ * Copyright (C) 2005 - 2009 ServerEngines
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.  The full GNU General
+ * Public License is included in this distribution in the file called COPYING.
+ *
+ * Contact Information:
+ * linux-drivers@serverengines.com
+ *
+ * ServerEngines
+ * 209 N. Fair Oaks Ave
+ * Sunnyvale, CA 94085
+ */
+
+/*
+ * The driver sends configuration and managements command requests to the
+ * firmware in the BE. These requests are communicated to the processor
+ * using Work Request Blocks (WRBs) submitted to the MCC-WRB ring or via one
+ * WRB inside a MAILBOX.
+ * The commands are serviced by the ARM processor in the BladeEngine's MPU.
+ */
+
+struct be_sge {
+       u32 pa_lo;
+       u32 pa_hi;
+       u32 len;
+};
+
+#define MCC_WRB_EMBEDDED_MASK  1       /* bit 0 of dword 0*/
+#define MCC_WRB_SGE_CNT_SHIFT  3       /* bits 3 - 7 of dword 0 */
+#define MCC_WRB_SGE_CNT_MASK   0x1F    /* bits 3 - 7 of dword 0 */
+struct be_mcc_wrb {
+       u32 embedded;           /* dword 0 */
+       u32 payload_length;     /* dword 1 */
+       u32 tag0;               /* dword 2 */
+       u32 tag1;               /* dword 3 */
+       u32 rsvd;               /* dword 4 */
+       union {
+               u8 embedded_payload[236]; /* used by embedded cmds */
+               struct be_sge sgl[19];    /* used by non-embedded cmds */
+       } payload;
+};
+
+#define CQE_FLAGS_VALID_MASK           (1 << 31)
+#define CQE_FLAGS_ASYNC_MASK           (1 << 30)
+#define CQE_FLAGS_COMPLETED_MASK       (1 << 28)
+#define CQE_FLAGS_CONSUMED_MASK        (1 << 27)
+
+/* Completion Status */
+enum {
+       MCC_STATUS_SUCCESS = 0x0,
+/* The client does not have sufficient privileges to execute the command */
+       MCC_STATUS_INSUFFICIENT_PRIVILEGES = 0x1,
+/* A parameter in the command was invalid. */
+       MCC_STATUS_INVALID_PARAMETER = 0x2,
+/* There are insufficient chip resources to execute the command */
+       MCC_STATUS_INSUFFICIENT_RESOURCES = 0x3,
+/* The command is completing because the queue was getting flushed */
+       MCC_STATUS_QUEUE_FLUSHING = 0x4,
+/* The command is completing with a DMA error */
+       MCC_STATUS_DMA_FAILED = 0x5
+};
+
+#define CQE_STATUS_COMPL_MASK          0xFFFF
+#define CQE_STATUS_COMPL_SHIFT         0       /* bits 0 - 15 */
+#define CQE_STATUS_EXTD_MASK           0xFFFF
+#define CQE_STATUS_EXTD_SHIFT          0       /* bits 0 - 15 */
+
+struct be_mcc_cq_entry {
+       u32 status;             /* dword 0 */
+       u32 tag0;               /* dword 1 */
+       u32 tag1;               /* dword 2 */
+       u32 flags;              /* dword 3 */
+};
+
+struct be_mcc_mailbox {
+       struct be_mcc_wrb wrb;
+       struct be_mcc_cq_entry cqe;
+};
+
+#define CMD_SUBSYSTEM_COMMON   0x1
+#define CMD_SUBSYSTEM_ETH      0x3
+
+#define OPCODE_COMMON_NTWK_MAC_QUERY                   1
+#define OPCODE_COMMON_NTWK_MAC_SET                     2
+#define OPCODE_COMMON_NTWK_MULTICAST_SET               3
+#define OPCODE_COMMON_NTWK_VLAN_CONFIG                 4
+#define OPCODE_COMMON_NTWK_LINK_STATUS_QUERY           5
+#define OPCODE_COMMON_CQ_CREATE                                12
+#define OPCODE_COMMON_EQ_CREATE                                13
+#define OPCODE_COMMON_MCC_CREATE                       21
+#define OPCODE_COMMON_NTWK_RX_FILTER                   34
+#define OPCODE_COMMON_GET_FW_VERSION                   35
+#define OPCODE_COMMON_SET_FLOW_CONTROL                 36
+#define OPCODE_COMMON_GET_FLOW_CONTROL                 37
+#define OPCODE_COMMON_SET_FRAME_SIZE                   39
+#define OPCODE_COMMON_MODIFY_EQ_DELAY                  41
+#define OPCODE_COMMON_FIRMWARE_CONFIG                  42
+#define OPCODE_COMMON_NTWK_INTERFACE_CREATE            50
+#define OPCODE_COMMON_NTWK_INTERFACE_DESTROY           51
+#define OPCODE_COMMON_CQ_DESTROY                       54
+#define OPCODE_COMMON_EQ_DESTROY                       55
+#define OPCODE_COMMON_QUERY_FIRMWARE_CONFIG            58
+#define OPCODE_COMMON_NTWK_PMAC_ADD                    59
+#define OPCODE_COMMON_NTWK_PMAC_DEL                    60
+
+#define OPCODE_ETH_ACPI_CONFIG                         2
+#define OPCODE_ETH_PROMISCUOUS                         3
+#define OPCODE_ETH_GET_STATISTICS                      4
+#define OPCODE_ETH_TX_CREATE                           7
+#define OPCODE_ETH_RX_CREATE                           8
+#define OPCODE_ETH_TX_DESTROY                          9
+#define OPCODE_ETH_RX_DESTROY                          10
+
+struct be_cmd_req_hdr {
+       u8 opcode;              /* dword 0 */
+       u8 subsystem;           /* dword 0 */
+       u8 port_number;         /* dword 0 */
+       u8 domain;              /* dword 0 */
+       u32 timeout;            /* dword 1 */
+       u32 request_length;     /* dword 2 */
+       u32 rsvd;               /* dword 3 */
+};
+
+#define RESP_HDR_INFO_OPCODE_SHIFT     0       /* bits 0 - 7 */
+#define RESP_HDR_INFO_SUBSYS_SHIFT     8       /* bits 8 - 15 */
+struct be_cmd_resp_hdr {
+       u32 info;               /* dword 0 */
+       u32 status;             /* dword 1 */
+       u32 response_length;    /* dword 2 */
+       u32 actual_resp_len;    /* dword 3 */
+};
+
+struct phys_addr {
+       u32 lo;
+       u32 hi;
+};
+
+/**************************
+ * BE Command definitions *
+ **************************/
+
+/* Pseudo amap definition in which each bit of the actual structure is defined
+ * as a byte: used to calculate offset/shift/mask of each field */
+struct amap_eq_context {
+       u8 cidx[13];            /* dword 0*/
+       u8 rsvd0[3];            /* dword 0*/
+       u8 epidx[13];           /* dword 0*/
+       u8 valid;               /* dword 0*/
+       u8 rsvd1;               /* dword 0*/
+       u8 size;                /* dword 0*/
+       u8 pidx[13];            /* dword 1*/
+       u8 rsvd2[3];            /* dword 1*/
+       u8 pd[10];              /* dword 1*/
+       u8 count[3];            /* dword 1*/
+       u8 solevent;            /* dword 1*/
+       u8 stalled;             /* dword 1*/
+       u8 armed;               /* dword 1*/
+       u8 rsvd3[4];            /* dword 2*/
+       u8 func[8];             /* dword 2*/
+       u8 rsvd4;               /* dword 2*/
+       u8 delaymult[10];       /* dword 2*/
+       u8 rsvd5[2];            /* dword 2*/
+       u8 phase[2];            /* dword 2*/
+       u8 nodelay;             /* dword 2*/
+       u8 rsvd6[4];            /* dword 2*/
+       u8 rsvd7[32];           /* dword 3*/
+} __packed;
+
+struct be_cmd_req_eq_create {
+       struct be_cmd_req_hdr hdr;
+       u16 num_pages;          /* sword */
+       u16 rsvd0;              /* sword */
+       u8 context[sizeof(struct amap_eq_context) / 8];
+       struct phys_addr pages[8];
+} __packed;
+
+struct be_cmd_resp_eq_create {
+       struct be_cmd_resp_hdr resp_hdr;
+       u16 eq_id;              /* sword */
+       u16 rsvd0;              /* sword */
+} __packed;
+
+/******************** Mac query ***************************/
+enum {
+       MAC_ADDRESS_TYPE_STORAGE = 0x0,
+       MAC_ADDRESS_TYPE_NETWORK = 0x1,
+       MAC_ADDRESS_TYPE_PD = 0x2,
+       MAC_ADDRESS_TYPE_MANAGEMENT = 0x3
+};
+
+struct mac_addr {
+       u16 size_of_struct;
+       u8 addr[ETH_ALEN];
+} __packed;
+
+struct be_cmd_req_mac_query {
+       struct be_cmd_req_hdr hdr;
+       u8 type;
+       u8 permanent;
+       u16 if_id;
+} __packed;
+
+struct be_cmd_resp_mac_query {
+       struct be_cmd_resp_hdr hdr;
+       struct mac_addr mac;
+};
+
+/******************** PMac Add ***************************/
+struct be_cmd_req_pmac_add {
+       struct be_cmd_req_hdr hdr;
+       u32 if_id;
+       u8 mac_address[ETH_ALEN];
+       u8 rsvd0[2];
+} __packed;
+
+struct be_cmd_resp_pmac_add {
+       struct be_cmd_resp_hdr hdr;
+       u32 pmac_id;
+};
+
+/******************** PMac Del ***************************/
+struct be_cmd_req_pmac_del {
+       struct be_cmd_req_hdr hdr;
+       u32 if_id;
+       u32 pmac_id;
+};
+
+/******************** Create CQ ***************************/
+/* Pseudo amap definition in which each bit of the actual structure is defined
+ * as a byte: used to calculate offset/shift/mask of each field */
+struct amap_cq_context {
+       u8 cidx[11];            /* dword 0*/
+       u8 rsvd0;               /* dword 0*/
+       u8 coalescwm[2];        /* dword 0*/
+       u8 nodelay;             /* dword 0*/
+       u8 epidx[11];           /* dword 0*/
+       u8 rsvd1;               /* dword 0*/
+       u8 count[2];            /* dword 0*/
+       u8 valid;               /* dword 0*/
+       u8 solevent;            /* dword 0*/
+       u8 eventable;           /* dword 0*/
+       u8 pidx[11];            /* dword 1*/
+       u8 rsvd2;               /* dword 1*/
+       u8 pd[10];              /* dword 1*/
+       u8 eqid[8];             /* dword 1*/
+       u8 stalled;             /* dword 1*/
+       u8 armed;               /* dword 1*/
+       u8 rsvd3[4];            /* dword 2*/
+       u8 func[8];             /* dword 2*/
+       u8 rsvd4[20];           /* dword 2*/
+       u8 rsvd5[32];           /* dword 3*/
+} __packed;
+
+struct be_cmd_req_cq_create {
+       struct be_cmd_req_hdr hdr;
+       u16 num_pages;
+       u16 rsvd0;
+       u8 context[sizeof(struct amap_cq_context) / 8];
+       struct phys_addr pages[8];
+} __packed;
+
+struct be_cmd_resp_cq_create {
+       struct be_cmd_resp_hdr hdr;
+       u16 cq_id;
+       u16 rsvd0;
+} __packed;
+
+/******************** Create TxQ ***************************/
+#define BE_ETH_TX_RING_TYPE_STANDARD           2
+#define BE_ULP1_NUM                            1
+
+/* Pseudo amap definition in which each bit of the actual structure is defined
+ * as a byte: used to calculate offset/shift/mask of each field */
+struct amap_tx_context {
+       u8 rsvd0[16];           /* dword 0 */
+       u8 tx_ring_size[4];     /* dword 0 */
+       u8 rsvd1[26];           /* dword 0 */
+       u8 pci_func_id[8];      /* dword 1 */
+       u8 rsvd2[9];            /* dword 1 */
+       u8 ctx_valid;           /* dword 1 */
+       u8 cq_id_send[16];      /* dword 2 */
+       u8 rsvd3[16];           /* dword 2 */
+       u8 rsvd4[32];           /* dword 3 */
+       u8 rsvd5[32];           /* dword 4 */
+       u8 rsvd6[32];           /* dword 5 */
+       u8 rsvd7[32];           /* dword 6 */
+       u8 rsvd8[32];           /* dword 7 */
+       u8 rsvd9[32];           /* dword 8 */
+       u8 rsvd10[32];          /* dword 9 */
+       u8 rsvd11[32];          /* dword 10 */
+       u8 rsvd12[32];          /* dword 11 */
+       u8 rsvd13[32];          /* dword 12 */
+       u8 rsvd14[32];          /* dword 13 */
+       u8 rsvd15[32];          /* dword 14 */
+       u8 rsvd16[32];          /* dword 15 */
+} __packed;
+
+struct be_cmd_req_eth_tx_create {
+       struct be_cmd_req_hdr hdr;
+       u8 num_pages;
+       u8 ulp_num;
+       u8 type;
+       u8 bound_port;
+       u8 context[sizeof(struct amap_tx_context) / 8];
+       struct phys_addr pages[8];
+} __packed;
+
+struct be_cmd_resp_eth_tx_create {
+       struct be_cmd_resp_hdr hdr;
+       u16 cid;
+       u16 rsvd0;
+} __packed;
+
+/******************** Create RxQ ***************************/
+struct be_cmd_req_eth_rx_create {
+       struct be_cmd_req_hdr hdr;
+       u16 cq_id;
+       u8 frag_size;
+       u8 num_pages;
+       struct phys_addr pages[2];
+       u32 interface_id;
+       u16 max_frame_size;
+       u16 rsvd0;
+       u32 rss_queue;
+} __packed;
+
+struct be_cmd_resp_eth_rx_create {
+       struct be_cmd_resp_hdr hdr;
+       u16 id;
+       u8 cpu_id;
+       u8 rsvd0;
+} __packed;
+
+/******************** Q Destroy  ***************************/
+/* Type of Queue to be destroyed */
+enum {
+       QTYPE_EQ = 1,
+       QTYPE_CQ,
+       QTYPE_TXQ,
+       QTYPE_RXQ
+};
+
+struct be_cmd_req_q_destroy {
+       struct be_cmd_req_hdr hdr;
+       u16 id;
+       u16 bypass_flush;       /* valid only for rx q destroy */
+} __packed;
+
+/************ I/f Create (it's actually I/f Config Create)**********/
+
+/* Capability flags for the i/f */
+enum be_if_flags {
+       BE_IF_FLAGS_RSS = 0x4,
+       BE_IF_FLAGS_PROMISCUOUS = 0x8,
+       BE_IF_FLAGS_BROADCAST = 0x10,
+       BE_IF_FLAGS_UNTAGGED = 0x20,
+       BE_IF_FLAGS_ULP = 0x40,
+       BE_IF_FLAGS_VLAN_PROMISCUOUS = 0x80,
+       BE_IF_FLAGS_VLAN = 0x100,
+       BE_IF_FLAGS_MCAST_PROMISCUOUS = 0x200,
+       BE_IF_FLAGS_PASS_L2_ERRORS = 0x400,
+       BE_IF_FLAGS_PASS_L3L4_ERRORS = 0x800
+};
+
+/* An RX interface is an object with one or more MAC addresses and
+ * filtering capabilities. */
+struct be_cmd_req_if_create {
+       struct be_cmd_req_hdr hdr;
+       u32 version;            /* ignore currntly */
+       u32 capability_flags;
+       u32 enable_flags;
+       u8 mac_addr[ETH_ALEN];
+       u8 rsvd0;
+       u8 pmac_invalid; /* if set, don't attach the mac addr to the i/f */
+       u32 vlan_tag;    /* not used currently */
+} __packed;
+
+struct be_cmd_resp_if_create {
+       struct be_cmd_resp_hdr hdr;
+       u32 interface_id;
+       u32 pmac_id;
+};
+
+/****** I/f Destroy(it's actually I/f Config Destroy )**********/
+struct be_cmd_req_if_destroy {
+       struct be_cmd_req_hdr hdr;
+       u32 interface_id;
+};
+
+/*************** HW Stats Get **********************************/
+struct be_port_rxf_stats {
+       u32 rx_bytes_lsd;       /* dword 0*/
+       u32 rx_bytes_msd;       /* dword 1*/
+       u32 rx_total_frames;    /* dword 2*/
+       u32 rx_unicast_frames;  /* dword 3*/
+       u32 rx_multicast_frames;        /* dword 4*/
+       u32 rx_broadcast_frames;        /* dword 5*/
+       u32 rx_crc_errors;      /* dword 6*/
+       u32 rx_alignment_symbol_errors; /* dword 7*/
+       u32 rx_pause_frames;    /* dword 8*/
+       u32 rx_control_frames;  /* dword 9*/
+       u32 rx_in_range_errors; /* dword 10*/
+       u32 rx_out_range_errors;        /* dword 11*/
+       u32 rx_frame_too_long;  /* dword 12*/
+       u32 rx_address_match_errors;    /* dword 13*/
+       u32 rx_vlan_mismatch;   /* dword 14*/
+       u32 rx_dropped_too_small;       /* dword 15*/
+       u32 rx_dropped_too_short;       /* dword 16*/
+       u32 rx_dropped_header_too_small;        /* dword 17*/
+       u32 rx_dropped_tcp_length;      /* dword 18*/
+       u32 rx_dropped_runt;    /* dword 19*/
+       u32 rx_64_byte_packets; /* dword 20*/
+       u32 rx_65_127_byte_packets;     /* dword 21*/
+       u32 rx_128_256_byte_packets;    /* dword 22*/
+       u32 rx_256_511_byte_packets;    /* dword 23*/
+       u32 rx_512_1023_byte_packets;   /* dword 24*/
+       u32 rx_1024_1518_byte_packets;  /* dword 25*/
+       u32 rx_1519_2047_byte_packets;  /* dword 26*/
+       u32 rx_2048_4095_byte_packets;  /* dword 27*/
+       u32 rx_4096_8191_byte_packets;  /* dword 28*/
+       u32 rx_8192_9216_byte_packets;  /* dword 29*/
+       u32 rx_ip_checksum_errs;        /* dword 30*/
+       u32 rx_tcp_checksum_errs;       /* dword 31*/
+       u32 rx_udp_checksum_errs;       /* dword 32*/
+       u32 rx_non_rss_packets; /* dword 33*/
+       u32 rx_ipv4_packets;    /* dword 34*/
+       u32 rx_ipv6_packets;    /* dword 35*/
+       u32 rx_ipv4_bytes_lsd;  /* dword 36*/
+       u32 rx_ipv4_bytes_msd;  /* dword 37*/
+       u32 rx_ipv6_bytes_lsd;  /* dword 38*/
+       u32 rx_ipv6_bytes_msd;  /* dword 39*/
+       u32 rx_chute1_packets;  /* dword 40*/
+       u32 rx_chute2_packets;  /* dword 41*/
+       u32 rx_chute3_packets;  /* dword 42*/
+       u32 rx_management_packets;      /* dword 43*/
+       u32 rx_switched_unicast_packets;        /* dword 44*/
+       u32 rx_switched_multicast_packets;      /* dword 45*/
+       u32 rx_switched_broadcast_packets;      /* dword 46*/
+       u32 tx_bytes_lsd;       /* dword 47*/
+       u32 tx_bytes_msd;       /* dword 48*/
+       u32 tx_unicastframes;   /* dword 49*/
+       u32 tx_multicastframes; /* dword 50*/
+       u32 tx_broadcastframes; /* dword 51*/
+       u32 tx_pauseframes;     /* dword 52*/
+       u32 tx_controlframes;   /* dword 53*/
+       u32 tx_64_byte_packets; /* dword 54*/
+       u32 tx_65_127_byte_packets;     /* dword 55*/
+       u32 tx_128_256_byte_packets;    /* dword 56*/
+       u32 tx_256_511_byte_packets;    /* dword 57*/
+       u32 tx_512_1023_byte_packets;   /* dword 58*/
+       u32 tx_1024_1518_byte_packets;  /* dword 59*/
+       u32 tx_1519_2047_byte_packets;  /* dword 60*/
+       u32 tx_2048_4095_byte_packets;  /* dword 61*/
+       u32 tx_4096_8191_byte_packets;  /* dword 62*/
+       u32 tx_8192_9216_byte_packets;  /* dword 63*/
+       u32 rx_fifo_overflow;   /* dword 64*/
+       u32 rx_input_fifo_overflow;     /* dword 65*/
+};
+
+struct be_rxf_stats {
+       struct be_port_rxf_stats port[2];
+       u32 rx_drops_no_pbuf;   /* dword 132*/
+       u32 rx_drops_no_txpb;   /* dword 133*/
+       u32 rx_drops_no_erx_descr;      /* dword 134*/
+       u32 rx_drops_no_tpre_descr;     /* dword 135*/
+       u32 management_rx_port_packets; /* dword 136*/
+       u32 management_rx_port_bytes;   /* dword 137*/
+       u32 management_rx_port_pause_frames;    /* dword 138*/
+       u32 management_rx_port_errors;  /* dword 139*/
+       u32 management_tx_port_packets; /* dword 140*/
+       u32 management_tx_port_bytes;   /* dword 141*/
+       u32 management_tx_port_pause;   /* dword 142*/
+       u32 management_rx_port_rxfifo_overflow; /* dword 143*/
+       u32 rx_drops_too_many_frags;    /* dword 144*/
+       u32 rx_drops_invalid_ring;      /* dword 145*/
+       u32 forwarded_packets;  /* dword 146*/
+       u32 rx_drops_mtu;       /* dword 147*/
+       u32 rsvd0[15];
+};
+
+struct be_erx_stats {
+       u32 rx_drops_no_fragments[44];     /* dwordS 0 to 43*/
+       u32 debug_wdma_sent_hold;          /* dword 44*/
+       u32 debug_wdma_pbfree_sent_hold;   /* dword 45*/
+       u32 debug_wdma_zerobyte_pbfree_sent_hold; /* dword 46*/
+       u32 debug_pmem_pbuf_dealloc;       /* dword 47*/
+};
+
+struct be_hw_stats {
+       struct be_rxf_stats rxf;
+       u32 rsvd[48];
+       struct be_erx_stats erx;
+};
+
+struct be_cmd_req_get_stats {
+       struct be_cmd_req_hdr hdr;
+       u8 rsvd[sizeof(struct be_hw_stats)];
+};
+
+struct be_cmd_resp_get_stats {
+       struct be_cmd_resp_hdr hdr;
+       struct be_hw_stats hw_stats;
+};
+
+struct be_cmd_req_vlan_config {
+       struct be_cmd_req_hdr hdr;
+       u8 interface_id;
+       u8 promiscuous;
+       u8 untagged;
+       u8 num_vlan;
+       u16 normal_vlan[64];
+} __packed;
+
+struct be_cmd_req_promiscuous_config {
+       struct be_cmd_req_hdr hdr;
+       u8 port0_promiscuous;
+       u8 port1_promiscuous;
+       u16 rsvd0;
+} __packed;
+
+struct macaddr {
+       u8 byte[ETH_ALEN];
+};
+
+struct be_cmd_req_mcast_mac_config {
+       struct be_cmd_req_hdr hdr;
+       u16 num_mac;
+       u8 promiscuous;
+       u8 interface_id;
+       struct macaddr mac[32];
+} __packed;
+
+static inline struct be_hw_stats *
+hw_stats_from_cmd(struct be_cmd_resp_get_stats *cmd)
+{
+       return &cmd->hw_stats;
+}
+
+/******************** Link Status Query *******************/
+struct be_cmd_req_link_status {
+       struct be_cmd_req_hdr hdr;
+       u32 rsvd;
+};
+
+struct be_link_info {
+       u8 duplex;
+       u8 speed;
+       u8 fault;
+};
+
+enum {
+       PHY_LINK_DUPLEX_NONE = 0x0,
+       PHY_LINK_DUPLEX_HALF = 0x1,
+       PHY_LINK_DUPLEX_FULL = 0x2
+};
+
+enum {
+       PHY_LINK_SPEED_ZERO = 0x0,      /* => No link */
+       PHY_LINK_SPEED_10MBPS = 0x1,
+       PHY_LINK_SPEED_100MBPS = 0x2,
+       PHY_LINK_SPEED_1GBPS = 0x3,
+       PHY_LINK_SPEED_10GBPS = 0x4
+};
+
+struct be_cmd_resp_link_status {
+       struct be_cmd_resp_hdr hdr;
+       u8 physical_port;
+       u8 mac_duplex;
+       u8 mac_speed;
+       u8 mac_fault;
+       u8 mgmt_mac_duplex;
+       u8 mgmt_mac_speed;
+       u16 rsvd0;
+} __packed;
+
+/******************** Get FW Version *******************/
+#define FW_VER_LEN                     32
+struct be_cmd_req_get_fw_version {
+       struct be_cmd_req_hdr hdr;
+       u8 rsvd0[FW_VER_LEN];
+       u8 rsvd1[FW_VER_LEN];
+} __packed;
+
+struct be_cmd_resp_get_fw_version {
+       struct be_cmd_resp_hdr hdr;
+       u8 firmware_version_string[FW_VER_LEN];
+       u8 fw_on_flash_version_string[FW_VER_LEN];
+} __packed;
+
+/******************** Set Flow Contrl *******************/
+struct be_cmd_req_set_flow_control {
+       struct be_cmd_req_hdr hdr;
+       u16 tx_flow_control;
+       u16 rx_flow_control;
+} __packed;
+
+/******************** Get Flow Contrl *******************/
+struct be_cmd_req_get_flow_control {
+       struct be_cmd_req_hdr hdr;
+       u32 rsvd;
+};
+
+struct be_cmd_resp_get_flow_control {
+       struct be_cmd_resp_hdr hdr;
+       u16 tx_flow_control;
+       u16 rx_flow_control;
+} __packed;
+
+/******************** Modify EQ Delay *******************/
+struct be_cmd_req_modify_eq_delay {
+       struct be_cmd_req_hdr hdr;
+       u32 num_eq;
+       struct {
+               u32 eq_id;
+               u32 phase;
+               u32 delay_multiplier;
+       } delay[8];
+} __packed;
+
+struct be_cmd_resp_modify_eq_delay {
+       struct be_cmd_resp_hdr hdr;
+       u32 rsvd0;
+} __packed;
+
+/******************** Get FW Config *******************/
+struct be_cmd_req_query_fw_cfg {
+       struct be_cmd_req_hdr hdr;
+       u32 rsvd[30];
+};
+
+struct be_cmd_resp_query_fw_cfg {
+       struct be_cmd_resp_hdr hdr;
+       u32 be_config_number;
+       u32 asic_revision;
+       u32 phys_port;
+       u32 function_mode;
+       u32 rsvd[26];
+};
+
+extern int be_pci_fnum_get(struct be_ctrl_info *ctrl);
+extern int be_cmd_POST(struct be_ctrl_info *ctrl);
+extern int be_cmd_mac_addr_query(struct be_ctrl_info *ctrl, u8 *mac_addr,
+                       u8 type, bool permanent, u32 if_handle);
+extern int be_cmd_pmac_add(struct be_ctrl_info *ctrl, u8 *mac_addr,
+                       u32 if_id, u32 *pmac_id);
+extern int be_cmd_pmac_del(struct be_ctrl_info *ctrl, u32 if_id, u32 pmac_id);
+extern int be_cmd_if_create(struct be_ctrl_info *ctrl, u32 if_flags, u8 *mac,
+                       bool pmac_invalid, u32 *if_handle, u32 *pmac_id);
+extern int be_cmd_if_destroy(struct be_ctrl_info *ctrl, u32 if_handle);
+extern int be_cmd_eq_create(struct be_ctrl_info *ctrl,
+                       struct be_queue_info *eq, int eq_delay);
+extern int be_cmd_cq_create(struct be_ctrl_info *ctrl,
+                       struct be_queue_info *cq, struct be_queue_info *eq,
+                       bool sol_evts, bool no_delay,
+                       int num_cqe_dma_coalesce);
+extern int be_cmd_txq_create(struct be_ctrl_info *ctrl,
+                       struct be_queue_info *txq,
+                       struct be_queue_info *cq);
+extern int be_cmd_rxq_create(struct be_ctrl_info *ctrl,
+                       struct be_queue_info *rxq, u16 cq_id,
+                       u16 frag_size, u16 max_frame_size, u32 if_id,
+                       u32 rss);
+extern int be_cmd_q_destroy(struct be_ctrl_info *ctrl, struct be_queue_info *q,
+                       int type);
+extern int be_cmd_link_status_query(struct be_ctrl_info *ctrl,
+                       struct be_link_info *link);
+extern int be_cmd_reset(struct be_ctrl_info *ctrl);
+extern int be_cmd_get_stats(struct be_ctrl_info *ctrl,
+                       struct be_dma_mem *nonemb_cmd);
+extern int be_cmd_get_fw_ver(struct be_ctrl_info *ctrl, char *fw_ver);
+
+extern int be_cmd_modify_eqd(struct be_ctrl_info *ctrl, u32 eq_id, u32 eqd);
+extern int be_cmd_vlan_config(struct be_ctrl_info *ctrl, u32 if_id,
+                       u16 *vtag_array, u32 num, bool untagged,
+                       bool promiscuous);
+extern int be_cmd_promiscuous_config(struct be_ctrl_info *ctrl,
+                       u8 port_num, bool en);
+extern int be_cmd_mcast_mac_set(struct be_ctrl_info *ctrl, u32 if_id,
+                       u8 *mac_table, u32 num, bool promiscuous);
+extern int be_cmd_set_flow_control(struct be_ctrl_info *ctrl,
+                       u32 tx_fc, u32 rx_fc);
+extern int be_cmd_get_flow_control(struct be_ctrl_info *ctrl,
+                       u32 *tx_fc, u32 *rx_fc);
+extern int be_cmd_query_fw_cfg(struct be_ctrl_info *ctrl, u32 *port_num);
diff --git a/drivers/net/benet/be_ethtool.c b/drivers/net/benet/be_ethtool.c
new file mode 100644 (file)
index 0000000..04f4b73
--- /dev/null
@@ -0,0 +1,362 @@
+/*
+ * Copyright (C) 2005 - 2009 ServerEngines
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.  The full GNU General
+ * Public License is included in this distribution in the file called COPYING.
+ *
+ * Contact Information:
+ * linux-drivers@serverengines.com
+ *
+ * ServerEngines
+ * 209 N. Fair Oaks Ave
+ * Sunnyvale, CA 94085
+ */
+
+#include "be.h"
+#include <linux/ethtool.h>
+
+struct be_ethtool_stat {
+       char desc[ETH_GSTRING_LEN];
+       int type;
+       int size;
+       int offset;
+};
+
+enum {NETSTAT, PORTSTAT, MISCSTAT, DRVSTAT, ERXSTAT};
+#define FIELDINFO(_struct, field) FIELD_SIZEOF(_struct, field), \
+                                       offsetof(_struct, field)
+#define NETSTAT_INFO(field)    #field, NETSTAT,\
+                                       FIELDINFO(struct net_device_stats,\
+                                               field)
+#define DRVSTAT_INFO(field)    #field, DRVSTAT,\
+                                       FIELDINFO(struct be_drvr_stats, field)
+#define MISCSTAT_INFO(field)   #field, MISCSTAT,\
+                                       FIELDINFO(struct be_rxf_stats, field)
+#define PORTSTAT_INFO(field)   #field, PORTSTAT,\
+                                       FIELDINFO(struct be_port_rxf_stats, \
+                                               field)
+#define ERXSTAT_INFO(field)    #field, ERXSTAT,\
+                                       FIELDINFO(struct be_erx_stats, field)
+
+static const struct be_ethtool_stat et_stats[] = {
+       {NETSTAT_INFO(rx_packets)},
+       {NETSTAT_INFO(tx_packets)},
+       {NETSTAT_INFO(rx_bytes)},
+       {NETSTAT_INFO(tx_bytes)},
+       {NETSTAT_INFO(rx_errors)},
+       {NETSTAT_INFO(tx_errors)},
+       {NETSTAT_INFO(rx_dropped)},
+       {NETSTAT_INFO(tx_dropped)},
+       {DRVSTAT_INFO(be_tx_reqs)},
+       {DRVSTAT_INFO(be_tx_stops)},
+       {DRVSTAT_INFO(be_fwd_reqs)},
+       {DRVSTAT_INFO(be_tx_wrbs)},
+       {DRVSTAT_INFO(be_polls)},
+       {DRVSTAT_INFO(be_tx_events)},
+       {DRVSTAT_INFO(be_rx_events)},
+       {DRVSTAT_INFO(be_tx_compl)},
+       {DRVSTAT_INFO(be_rx_compl)},
+       {DRVSTAT_INFO(be_ethrx_post_fail)},
+       {DRVSTAT_INFO(be_802_3_dropped_frames)},
+       {DRVSTAT_INFO(be_802_3_malformed_frames)},
+       {DRVSTAT_INFO(be_tx_rate)},
+       {DRVSTAT_INFO(be_rx_rate)},
+       {PORTSTAT_INFO(rx_unicast_frames)},
+       {PORTSTAT_INFO(rx_multicast_frames)},
+       {PORTSTAT_INFO(rx_broadcast_frames)},
+       {PORTSTAT_INFO(rx_crc_errors)},
+       {PORTSTAT_INFO(rx_alignment_symbol_errors)},
+       {PORTSTAT_INFO(rx_pause_frames)},
+       {PORTSTAT_INFO(rx_control_frames)},
+       {PORTSTAT_INFO(rx_in_range_errors)},
+       {PORTSTAT_INFO(rx_out_range_errors)},
+       {PORTSTAT_INFO(rx_frame_too_long)},
+       {PORTSTAT_INFO(rx_address_match_errors)},
+       {PORTSTAT_INFO(rx_vlan_mismatch)},
+       {PORTSTAT_INFO(rx_dropped_too_small)},
+       {PORTSTAT_INFO(rx_dropped_too_short)},
+       {PORTSTAT_INFO(rx_dropped_header_too_small)},
+       {PORTSTAT_INFO(rx_dropped_tcp_length)},
+       {PORTSTAT_INFO(rx_dropped_runt)},
+       {PORTSTAT_INFO(rx_fifo_overflow)},
+       {PORTSTAT_INFO(rx_input_fifo_overflow)},
+       {PORTSTAT_INFO(rx_ip_checksum_errs)},
+       {PORTSTAT_INFO(rx_tcp_checksum_errs)},
+       {PORTSTAT_INFO(rx_udp_checksum_errs)},
+       {PORTSTAT_INFO(rx_non_rss_packets)},
+       {PORTSTAT_INFO(rx_ipv4_packets)},
+       {PORTSTAT_INFO(rx_ipv6_packets)},
+       {PORTSTAT_INFO(tx_unicastframes)},
+       {PORTSTAT_INFO(tx_multicastframes)},
+       {PORTSTAT_INFO(tx_broadcastframes)},
+       {PORTSTAT_INFO(tx_pauseframes)},
+       {PORTSTAT_INFO(tx_controlframes)},
+       {MISCSTAT_INFO(rx_drops_no_pbuf)},
+       {MISCSTAT_INFO(rx_drops_no_txpb)},
+       {MISCSTAT_INFO(rx_drops_no_erx_descr)},
+       {MISCSTAT_INFO(rx_drops_no_tpre_descr)},
+       {MISCSTAT_INFO(rx_drops_too_many_frags)},
+       {MISCSTAT_INFO(rx_drops_invalid_ring)},
+       {MISCSTAT_INFO(forwarded_packets)},
+       {MISCSTAT_INFO(rx_drops_mtu)},
+       {ERXSTAT_INFO(rx_drops_no_fragments)},
+};
+#define ETHTOOL_STATS_NUM ARRAY_SIZE(et_stats)
+
+static void
+be_get_drvinfo(struct net_device *netdev, struct ethtool_drvinfo *drvinfo)
+{
+       struct be_adapter *adapter = netdev_priv(netdev);
+
+       strcpy(drvinfo->driver, DRV_NAME);
+       strcpy(drvinfo->version, DRV_VER);
+       strncpy(drvinfo->fw_version, adapter->fw_ver, FW_VER_LEN);
+       strcpy(drvinfo->bus_info, pci_name(adapter->pdev));
+       drvinfo->testinfo_len = 0;
+       drvinfo->regdump_len = 0;
+       drvinfo->eedump_len = 0;
+}
+
+static int
+be_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *coalesce)
+{
+       struct be_adapter *adapter = netdev_priv(netdev);
+       struct be_eq_obj *rx_eq = &adapter->rx_eq;
+       struct be_eq_obj *tx_eq = &adapter->tx_eq;
+
+       coalesce->rx_max_coalesced_frames = adapter->max_rx_coal;
+
+       coalesce->rx_coalesce_usecs = rx_eq->cur_eqd;
+       coalesce->rx_coalesce_usecs_high = rx_eq->max_eqd;
+       coalesce->rx_coalesce_usecs_low = rx_eq->min_eqd;
+
+       coalesce->tx_coalesce_usecs = tx_eq->cur_eqd;
+       coalesce->tx_coalesce_usecs_high = tx_eq->max_eqd;
+       coalesce->tx_coalesce_usecs_low = tx_eq->min_eqd;
+
+       coalesce->use_adaptive_rx_coalesce = rx_eq->enable_aic;
+       coalesce->use_adaptive_tx_coalesce = tx_eq->enable_aic;
+
+       return 0;
+}
+
+/*
+ * This routine is used to set interrup coalescing delay *as well as*
+ * the number of pkts to coalesce for LRO.
+ */
+static int
+be_set_coalesce(struct net_device *netdev, struct ethtool_coalesce *coalesce)
+{
+       struct be_adapter *adapter = netdev_priv(netdev);
+       struct be_ctrl_info *ctrl = &adapter->ctrl;
+       struct be_eq_obj *rx_eq = &adapter->rx_eq;
+       struct be_eq_obj *tx_eq = &adapter->tx_eq;
+       u32 tx_max, tx_min, tx_cur;
+       u32 rx_max, rx_min, rx_cur;
+       int status = 0;
+
+       if (coalesce->use_adaptive_tx_coalesce == 1)
+               return -EINVAL;
+
+       adapter->max_rx_coal = coalesce->rx_max_coalesced_frames;
+       if (adapter->max_rx_coal > MAX_SKB_FRAGS)
+               adapter->max_rx_coal = MAX_SKB_FRAGS - 1;
+
+       /* if AIC is being turned on now, start with an EQD of 0 */
+       if (rx_eq->enable_aic == 0 &&
+               coalesce->use_adaptive_rx_coalesce == 1) {
+               rx_eq->cur_eqd = 0;
+       }
+       rx_eq->enable_aic = coalesce->use_adaptive_rx_coalesce;
+
+       rx_max = coalesce->rx_coalesce_usecs_high;
+       rx_min = coalesce->rx_coalesce_usecs_low;
+       rx_cur = coalesce->rx_coalesce_usecs;
+
+       tx_max = coalesce->tx_coalesce_usecs_high;
+       tx_min = coalesce->tx_coalesce_usecs_low;
+       tx_cur = coalesce->tx_coalesce_usecs;
+
+       if (tx_cur > BE_MAX_EQD)
+               tx_cur = BE_MAX_EQD;
+       if (tx_eq->cur_eqd != tx_cur) {
+               status = be_cmd_modify_eqd(ctrl, tx_eq->q.id, tx_cur);
+               if (!status)
+                       tx_eq->cur_eqd = tx_cur;
+       }
+
+       if (rx_eq->enable_aic) {
+               if (rx_max > BE_MAX_EQD)
+                       rx_max = BE_MAX_EQD;
+               if (rx_min > rx_max)
+                       rx_min = rx_max;
+               rx_eq->max_eqd = rx_max;
+               rx_eq->min_eqd = rx_min;
+               if (rx_eq->cur_eqd > rx_max)
+                       rx_eq->cur_eqd = rx_max;
+               if (rx_eq->cur_eqd < rx_min)
+                       rx_eq->cur_eqd = rx_min;
+       } else {
+               if (rx_cur > BE_MAX_EQD)
+                       rx_cur = BE_MAX_EQD;
+               if (rx_eq->cur_eqd != rx_cur) {
+                       status = be_cmd_modify_eqd(ctrl, rx_eq->q.id, rx_cur);
+                       if (!status)
+                               rx_eq->cur_eqd = rx_cur;
+               }
+       }
+       return 0;
+}
+
+static u32 be_get_rx_csum(struct net_device *netdev)
+{
+       struct be_adapter *adapter = netdev_priv(netdev);
+
+       return adapter->rx_csum;
+}
+
+static int be_set_rx_csum(struct net_device *netdev, uint32_t data)
+{
+       struct be_adapter *adapter = netdev_priv(netdev);
+
+       if (data)
+               adapter->rx_csum = true;
+       else
+               adapter->rx_csum = false;
+
+       return 0;
+}
+
+static void
+be_get_ethtool_stats(struct net_device *netdev,
+               struct ethtool_stats *stats, uint64_t *data)
+{
+       struct be_adapter *adapter = netdev_priv(netdev);
+       struct be_drvr_stats *drvr_stats = &adapter->stats.drvr_stats;
+       struct be_hw_stats *hw_stats = hw_stats_from_cmd(adapter->stats.cmd.va);
+       struct be_rxf_stats *rxf_stats = &hw_stats->rxf;
+       struct be_port_rxf_stats *port_stats =
+                       &rxf_stats->port[adapter->port_num];
+       struct net_device_stats *net_stats = &adapter->stats.net_stats;
+       struct be_erx_stats *erx_stats = &hw_stats->erx;
+       void *p = NULL;
+       int i;
+
+       for (i = 0; i < ETHTOOL_STATS_NUM; i++) {
+               switch (et_stats[i].type) {
+               case NETSTAT:
+                       p = net_stats;
+                       break;
+               case DRVSTAT:
+                       p = drvr_stats;
+                       break;
+               case PORTSTAT:
+                       p = port_stats;
+                       break;
+               case MISCSTAT:
+                       p = rxf_stats;
+                       break;
+               case ERXSTAT: /* Currently only one ERX stat is provided */
+                       p = (u32 *)erx_stats + adapter->rx_obj.q.id;
+                       break;
+               }
+
+               p = (u8 *)p + et_stats[i].offset;
+               data[i] = (et_stats[i].size == sizeof(u64)) ?
+                               *(u64 *)p: *(u32 *)p;
+       }
+
+       return;
+}
+
+static void
+be_get_stat_strings(struct net_device *netdev, uint32_t stringset,
+               uint8_t *data)
+{
+       int i;
+       switch (stringset) {
+       case ETH_SS_STATS:
+               for (i = 0; i < ETHTOOL_STATS_NUM; i++) {
+                       memcpy(data, et_stats[i].desc, ETH_GSTRING_LEN);
+                       data += ETH_GSTRING_LEN;
+               }
+               break;
+       }
+}
+
+static int be_get_stats_count(struct net_device *netdev)
+{
+       return ETHTOOL_STATS_NUM;
+}
+
+static int be_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
+{
+       ecmd->speed = SPEED_10000;
+       ecmd->duplex = DUPLEX_FULL;
+       ecmd->autoneg = AUTONEG_DISABLE;
+       return 0;
+}
+
+static void
+be_get_ringparam(struct net_device *netdev, struct ethtool_ringparam *ring)
+{
+       struct be_adapter *adapter = netdev_priv(netdev);
+
+       ring->rx_max_pending = adapter->rx_obj.q.len;
+       ring->tx_max_pending = adapter->tx_obj.q.len;
+
+       ring->rx_pending = atomic_read(&adapter->rx_obj.q.used);
+       ring->tx_pending = atomic_read(&adapter->tx_obj.q.used);
+}
+
+static void
+be_get_pauseparam(struct net_device *netdev, struct ethtool_pauseparam *ecmd)
+{
+       struct be_adapter *adapter = netdev_priv(netdev);
+
+       be_cmd_get_flow_control(&adapter->ctrl, &ecmd->tx_pause,
+               &ecmd->rx_pause);
+       ecmd->autoneg = AUTONEG_ENABLE;
+}
+
+static int
+be_set_pauseparam(struct net_device *netdev, struct ethtool_pauseparam *ecmd)
+{
+       struct be_adapter *adapter = netdev_priv(netdev);
+       int status;
+
+       if (ecmd->autoneg != AUTONEG_ENABLE)
+               return -EINVAL;
+
+       status = be_cmd_set_flow_control(&adapter->ctrl, ecmd->tx_pause,
+                       ecmd->rx_pause);
+       if (!status)
+               dev_warn(&adapter->pdev->dev, "Pause param set failed.\n");
+
+       return status;
+}
+
+struct ethtool_ops be_ethtool_ops = {
+       .get_settings = be_get_settings,
+       .get_drvinfo = be_get_drvinfo,
+       .get_link = ethtool_op_get_link,
+       .get_coalesce = be_get_coalesce,
+       .set_coalesce = be_set_coalesce,
+       .get_ringparam = be_get_ringparam,
+       .get_pauseparam = be_get_pauseparam,
+       .set_pauseparam = be_set_pauseparam,
+       .get_rx_csum = be_get_rx_csum,
+       .set_rx_csum = be_set_rx_csum,
+       .get_tx_csum = ethtool_op_get_tx_csum,
+       .set_tx_csum = ethtool_op_set_tx_csum,
+       .get_sg = ethtool_op_get_sg,
+       .set_sg = ethtool_op_set_sg,
+       .get_tso = ethtool_op_get_tso,
+       .set_tso = ethtool_op_set_tso,
+       .get_strings = be_get_stat_strings,
+       .get_stats_count = be_get_stats_count,
+       .get_ethtool_stats = be_get_ethtool_stats,
+};
diff --git a/drivers/net/benet/be_hw.h b/drivers/net/benet/be_hw.h
new file mode 100644 (file)
index 0000000..b132aa4
--- /dev/null
@@ -0,0 +1,211 @@
+/*
+ * Copyright (C) 2005 - 2009 ServerEngines
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.  The full GNU General
+ * Public License is included in this distribution in the file called COPYING.
+ *
+ * Contact Information:
+ * linux-drivers@serverengines.com
+ *
+ * ServerEngines
+ * 209 N. Fair Oaks Ave
+ * Sunnyvale, CA 94085
+ */
+
+/********* Mailbox door bell *************/
+/* Used for driver communication with the FW.
+ * The software must write this register twice to post any command. First,
+ * it writes the register with hi=1 and the upper bits of the physical address
+ * for the MAILBOX structure. Software must poll the ready bit until this
+ * is acknowledged. Then, sotware writes the register with hi=0 with the lower
+ * bits in the address. It must poll the ready bit until the command is
+ * complete. Upon completion, the MAILBOX will contain a valid completion
+ * queue entry.
+ */
+#define MPU_MAILBOX_DB_OFFSET  0x160
+#define MPU_MAILBOX_DB_RDY_MASK        0x1     /* bit 0 */
+#define MPU_MAILBOX_DB_HI_MASK 0x2     /* bit 1 */
+
+#define MPU_EP_CONTROL                 0
+
+/********** MPU semphore ******************/
+#define MPU_EP_SEMAPHORE_OFFSET        0xac
+#define EP_SEMAPHORE_POST_STAGE_MASK   0x0000FFFF
+#define EP_SEMAPHORE_POST_ERR_MASK     0x1
+#define EP_SEMAPHORE_POST_ERR_SHIFT    31
+/* MPU semphore POST stage values */
+#define POST_STAGE_AWAITING_HOST_RDY   0x1 /* FW awaiting goahead from host */
+#define POST_STAGE_HOST_RDY            0x2 /* Host has given go-ahed to FW */
+#define POST_STAGE_BE_RESET            0x3 /* Host wants to reset chip */
+#define POST_STAGE_ARMFW_RDY           0xc000  /* FW is done with POST */
+
+/********* Memory BAR register ************/
+#define PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET     0xfc
+/* Host Interrupt Enable, if set interrupts are enabled although "PCI Interrupt
+ * Disable" may still globally block interrupts in addition to individual
+ * interrupt masks; a mechanism for the device driver to block all interrupts
+ * atomically without having to arbitrate for the PCI Interrupt Disable bit
+ * with the OS.
+ */
+#define MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK     (1 << 29) /* bit 29 */
+/* PCI physical function number */
+#define MEMBAR_CTRL_INT_CTRL_PFUNC_MASK        0x7     /* bits 26 - 28 */
+#define MEMBAR_CTRL_INT_CTRL_PFUNC_SHIFT       26
+
+/********* Event Q door bell *************/
+#define DB_EQ_OFFSET                   DB_CQ_OFFSET
+#define DB_EQ_RING_ID_MASK             0x1FF   /* bits 0 - 8 */
+/* Clear the interrupt for this eq */
+#define DB_EQ_CLR_SHIFT                        (9)     /* bit 9 */
+/* Must be 1 */
+#define DB_EQ_EVNT_SHIFT                       (10)    /* bit 10 */
+/* Number of event entries processed */
+#define DB_EQ_NUM_POPPED_SHIFT         (16)    /* bits 16 - 28 */
+/* Rearm bit */
+#define DB_EQ_REARM_SHIFT              (29)    /* bit 29 */
+
+/********* Compl Q door bell *************/
+#define DB_CQ_OFFSET                   0x120
+#define DB_CQ_RING_ID_MASK             0x3FF   /* bits 0 - 9 */
+/* Number of event entries processed */
+#define DB_CQ_NUM_POPPED_SHIFT         (16)    /* bits 16 - 28 */
+/* Rearm bit */
+#define DB_CQ_REARM_SHIFT              (29)    /* bit 29 */
+
+/********** TX ULP door bell *************/
+#define DB_TXULP1_OFFSET               0x60
+#define DB_TXULP_RING_ID_MASK          0x7FF   /* bits 0 - 10 */
+/* Number of tx entries posted */
+#define DB_TXULP_NUM_POSTED_SHIFT      (16)    /* bits 16 - 29 */
+#define DB_TXULP_NUM_POSTED_MASK       0x3FFF  /* bits 16 - 29 */
+
+/********** RQ(erx) door bell ************/
+#define DB_RQ_OFFSET                   0x100
+#define DB_RQ_RING_ID_MASK             0x3FF   /* bits 0 - 9 */
+/* Number of rx frags posted */
+#define DB_RQ_NUM_POSTED_SHIFT         (24)    /* bits 24 - 31 */
+
+/*
+ * BE descriptors: host memory data structures whose formats
+ * are hardwired in BE silicon.
+ */
+/* Event Queue Descriptor */
+#define EQ_ENTRY_VALID_MASK            0x1     /* bit 0 */
+#define EQ_ENTRY_RES_ID_MASK           0xFFFF  /* bits 16 - 31 */
+#define EQ_ENTRY_RES_ID_SHIFT          16
+struct be_eq_entry {
+       u32 evt;
+};
+
+/* TX Queue Descriptor */
+#define ETH_WRB_FRAG_LEN_MASK          0xFFFF
+struct be_eth_wrb {
+       u32 frag_pa_hi;         /* dword 0 */
+       u32 frag_pa_lo;         /* dword 1 */
+       u32 rsvd0;              /* dword 2 */
+       u32 frag_len;           /* dword 3: bits 0 - 15 */
+} __packed;
+
+/* Pseudo amap definition for eth_hdr_wrb in which each bit of the
+ * actual structure is defined as a byte : used to calculate
+ * offset/shift/mask of each field */
+struct amap_eth_hdr_wrb {
+       u8 rsvd0[32];           /* dword 0 */
+       u8 rsvd1[32];           /* dword 1 */
+       u8 complete;            /* dword 2 */
+       u8 event;
+       u8 crc;
+       u8 forward;
+       u8 ipsec;
+       u8 mgmt;
+       u8 ipcs;
+       u8 udpcs;
+       u8 tcpcs;
+       u8 lso;
+       u8 vlan;
+       u8 gso[2];
+       u8 num_wrb[5];
+       u8 lso_mss[14];
+       u8 len[16];             /* dword 3 */
+       u8 vlan_tag[16];
+} __packed;
+
+struct be_eth_hdr_wrb {
+       u32 dw[4];
+};
+
+/* TX Compl Queue Descriptor */
+
+/* Pseudo amap definition for eth_tx_compl in which each bit of the
+ * actual structure is defined as a byte: used to calculate
+ * offset/shift/mask of each field */
+struct amap_eth_tx_compl {
+       u8 wrb_index[16];       /* dword 0 */
+       u8 ct[2];               /* dword 0 */
+       u8 port[2];             /* dword 0 */
+       u8 rsvd0[8];            /* dword 0 */
+       u8 status[4];           /* dword 0 */
+       u8 user_bytes[16];      /* dword 1 */
+       u8 nwh_bytes[8];        /* dword 1 */
+       u8 lso;                 /* dword 1 */
+       u8 cast_enc[2];         /* dword 1 */
+       u8 rsvd1[5];            /* dword 1 */
+       u8 rsvd2[32];           /* dword 2 */
+       u8 pkts[16];            /* dword 3 */
+       u8 ringid[11];          /* dword 3 */
+       u8 hash_val[4];         /* dword 3 */
+       u8 valid;               /* dword 3 */
+} __packed;
+
+struct be_eth_tx_compl {
+       u32 dw[4];
+};
+
+/* RX Queue Descriptor */
+struct be_eth_rx_d {
+       u32 fragpa_hi;
+       u32 fragpa_lo;
+};
+
+/* RX Compl Queue Descriptor */
+
+/* Pseudo amap definition for eth_rx_compl in which each bit of the
+ * actual structure is defined as a byte: used to calculate
+ * offset/shift/mask of each field */
+struct amap_eth_rx_compl {
+       u8 vlan_tag[16];        /* dword 0 */
+       u8 pktsize[14];         /* dword 0 */
+       u8 port;                /* dword 0 */
+       u8 ip_opt;              /* dword 0 */
+       u8 err;                 /* dword 1 */
+       u8 rsshp;               /* dword 1 */
+       u8 ipf;                 /* dword 1 */
+       u8 tcpf;                /* dword 1 */
+       u8 udpf;                /* dword 1 */
+       u8 ipcksm;              /* dword 1 */
+       u8 l4_cksm;             /* dword 1 */
+       u8 ip_version;          /* dword 1 */
+       u8 macdst[6];           /* dword 1 */
+       u8 vtp;                 /* dword 1 */
+       u8 rsvd0;               /* dword 1 */
+       u8 fragndx[10];         /* dword 1 */
+       u8 ct[2];               /* dword 1 */
+       u8 sw;                  /* dword 1 */
+       u8 numfrags[3];         /* dword 1 */
+       u8 rss_flush;           /* dword 2 */
+       u8 cast_enc[2];         /* dword 2 */
+       u8 qnq;                 /* dword 2 */
+       u8 rss_bank;            /* dword 2 */
+       u8 rsvd1[23];           /* dword 2 */
+       u8 lro_pkt;             /* dword 2 */
+       u8 rsvd2[2];            /* dword 2 */
+       u8 valid;               /* dword 2 */
+       u8 rsshash[32];         /* dword 3 */
+} __packed;
+
+struct be_eth_rx_compl {
+       u32 dw[4];
+};
diff --git a/drivers/net/benet/be_main.c b/drivers/net/benet/be_main.c
new file mode 100644 (file)
index 0000000..897a63d
--- /dev/null
@@ -0,0 +1,1903 @@
+/*
+ * Copyright (C) 2005 - 2009 ServerEngines
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.  The full GNU General
+ * Public License is included in this distribution in the file called COPYING.
+ *
+ * Contact Information:
+ * linux-drivers@serverengines.com
+ *
+ * ServerEngines
+ * 209 N. Fair Oaks Ave
+ * Sunnyvale, CA 94085
+ */
+
+#include "be.h"
+
+MODULE_VERSION(DRV_VER);
+MODULE_DEVICE_TABLE(pci, be_dev_ids);
+MODULE_DESCRIPTION(DRV_DESC " " DRV_VER);
+MODULE_AUTHOR("ServerEngines Corporation");
+MODULE_LICENSE("GPL");
+
+static unsigned int rx_frag_size = 2048;
+module_param(rx_frag_size, uint, S_IRUGO);
+MODULE_PARM_DESC(rx_frag_size, "Size of a fragment that holds rcvd data.");
+
+#define BE_VENDOR_ID           0x19a2
+#define BE2_DEVICE_ID_1        0x0211
+static DEFINE_PCI_DEVICE_TABLE(be_dev_ids) = {
+       { PCI_DEVICE(BE_VENDOR_ID, BE2_DEVICE_ID_1) },
+       { 0 }
+};
+MODULE_DEVICE_TABLE(pci, be_dev_ids);
+
+static void be_queue_free(struct be_adapter *adapter, struct be_queue_info *q)
+{
+       struct be_dma_mem *mem = &q->dma_mem;
+       if (mem->va)
+               pci_free_consistent(adapter->pdev, mem->size,
+                       mem->va, mem->dma);
+}
+
+static int be_queue_alloc(struct be_adapter *adapter, struct be_queue_info *q,
+               u16 len, u16 entry_size)
+{
+       struct be_dma_mem *mem = &q->dma_mem;
+
+       memset(q, 0, sizeof(*q));
+       q->len = len;
+       q->entry_size = entry_size;
+       mem->size = len * entry_size;
+       mem->va = pci_alloc_consistent(adapter->pdev, mem->size, &mem->dma);
+       if (!mem->va)
+               return -1;
+       memset(mem->va, 0, mem->size);
+       return 0;
+}
+
+static inline void *queue_head_node(struct be_queue_info *q)
+{
+       return q->dma_mem.va + q->head * q->entry_size;
+}
+
+static inline void *queue_tail_node(struct be_queue_info *q)
+{
+       return q->dma_mem.va + q->tail * q->entry_size;
+}
+
+static inline void queue_head_inc(struct be_queue_info *q)
+{
+       index_inc(&q->head, q->len);
+}
+
+static inline void queue_tail_inc(struct be_queue_info *q)
+{
+       index_inc(&q->tail, q->len);
+}
+
+static void be_intr_set(struct be_ctrl_info *ctrl, bool enable)
+{
+       u8 __iomem *addr = ctrl->pcicfg + PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET;
+       u32 reg = ioread32(addr);
+       u32 enabled = reg & MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK;
+       if (!enabled && enable) {
+               reg |= MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK;
+       } else if (enabled && !enable) {
+               reg &= ~MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK;
+       } else {
+               printk(KERN_WARNING DRV_NAME
+                       ": bad value in membar_int_ctrl reg=0x%x\n", reg);
+               return;
+       }
+       iowrite32(reg, addr);
+}
+
+static void be_rxq_notify(struct be_ctrl_info *ctrl, u16 qid, u16 posted)
+{
+       u32 val = 0;
+       val |= qid & DB_RQ_RING_ID_MASK;
+       val |= posted << DB_RQ_NUM_POSTED_SHIFT;
+       iowrite32(val, ctrl->db + DB_RQ_OFFSET);
+}
+
+static void be_txq_notify(struct be_ctrl_info *ctrl, u16 qid, u16 posted)
+{
+       u32 val = 0;
+       val |= qid & DB_TXULP_RING_ID_MASK;
+       val |= (posted & DB_TXULP_NUM_POSTED_MASK) << DB_TXULP_NUM_POSTED_SHIFT;
+       iowrite32(val, ctrl->db + DB_TXULP1_OFFSET);
+}
+
+static void be_eq_notify(struct be_ctrl_info *ctrl, u16 qid,
+               bool arm, bool clear_int, u16 num_popped)
+{
+       u32 val = 0;
+       val |= qid & DB_EQ_RING_ID_MASK;
+       if (arm)
+               val |= 1 << DB_EQ_REARM_SHIFT;
+       if (clear_int)
+               val |= 1 << DB_EQ_CLR_SHIFT;
+       val |= 1 << DB_EQ_EVNT_SHIFT;
+       val |= num_popped << DB_EQ_NUM_POPPED_SHIFT;
+       iowrite32(val, ctrl->db + DB_EQ_OFFSET);
+}
+
+static void be_cq_notify(struct be_ctrl_info *ctrl, u16 qid,
+               bool arm, u16 num_popped)
+{
+       u32 val = 0;
+       val |= qid & DB_CQ_RING_ID_MASK;
+       if (arm)
+               val |= 1 << DB_CQ_REARM_SHIFT;
+       val |= num_popped << DB_CQ_NUM_POPPED_SHIFT;
+       iowrite32(val, ctrl->db + DB_CQ_OFFSET);
+}
+
+
+static int be_mac_addr_set(struct net_device *netdev, void *p)
+{
+       struct be_adapter *adapter = netdev_priv(netdev);
+       struct sockaddr *addr = p;
+       int status = 0;
+
+       if (netif_running(netdev)) {
+               status = be_cmd_pmac_del(&adapter->ctrl, adapter->if_handle,
+                               adapter->pmac_id);
+               if (status)
+                       return status;
+
+               status = be_cmd_pmac_add(&adapter->ctrl, (u8 *)addr->sa_data,
+                               adapter->if_handle, &adapter->pmac_id);
+       }
+
+       if (!status)
+               memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
+
+       return status;
+}
+
+static void netdev_stats_update(struct be_adapter *adapter)
+{
+       struct be_hw_stats *hw_stats = hw_stats_from_cmd(adapter->stats.cmd.va);
+       struct be_rxf_stats *rxf_stats = &hw_stats->rxf;
+       struct be_port_rxf_stats *port_stats =
+                       &rxf_stats->port[adapter->port_num];
+       struct net_device_stats *dev_stats = &adapter->stats.net_stats;
+
+       dev_stats->rx_packets = port_stats->rx_total_frames;
+       dev_stats->tx_packets = port_stats->tx_unicastframes +
+               port_stats->tx_multicastframes + port_stats->tx_broadcastframes;
+       dev_stats->rx_bytes = (u64) port_stats->rx_bytes_msd << 32 |
+                               (u64) port_stats->rx_bytes_lsd;
+       dev_stats->tx_bytes = (u64) port_stats->tx_bytes_msd << 32 |
+                               (u64) port_stats->tx_bytes_lsd;
+
+       /* bad pkts received */
+       dev_stats->rx_errors = port_stats->rx_crc_errors +
+               port_stats->rx_alignment_symbol_errors +
+               port_stats->rx_in_range_errors +
+               port_stats->rx_out_range_errors + port_stats->rx_frame_too_long;
+
+       /*  packet transmit problems */
+       dev_stats->tx_errors = 0;
+
+       /*  no space in linux buffers */
+       dev_stats->rx_dropped = 0;
+
+       /* no space available in linux */
+       dev_stats->tx_dropped = 0;
+
+       dev_stats->multicast = port_stats->tx_multicastframes;
+       dev_stats->collisions = 0;
+
+       /* detailed rx errors */
+       dev_stats->rx_length_errors = port_stats->rx_in_range_errors +
+               port_stats->rx_out_range_errors + port_stats->rx_frame_too_long;
+       /* receive ring buffer overflow */
+       dev_stats->rx_over_errors = 0;
+       dev_stats->rx_crc_errors = port_stats->rx_crc_errors;
+
+       /* frame alignment errors */
+       dev_stats->rx_frame_errors = port_stats->rx_alignment_symbol_errors;
+       /* receiver fifo overrun */
+       /* drops_no_pbuf is no per i/f, it's per BE card */
+       dev_stats->rx_fifo_errors = port_stats->rx_fifo_overflow +
+                                       port_stats->rx_input_fifo_overflow +
+                                       rxf_stats->rx_drops_no_pbuf;
+       /* receiver missed packetd */
+       dev_stats->rx_missed_errors = 0;
+       /* detailed tx_errors */
+       dev_stats->tx_aborted_errors = 0;
+       dev_stats->tx_carrier_errors = 0;
+       dev_stats->tx_fifo_errors = 0;
+       dev_stats->tx_heartbeat_errors = 0;
+       dev_stats->tx_window_errors = 0;
+}
+
+static void be_link_status_update(struct be_adapter *adapter)
+{
+       struct be_link_info *prev = &adapter->link;
+       struct be_link_info now = { 0 };
+       struct net_device *netdev = adapter->netdev;
+
+       be_cmd_link_status_query(&adapter->ctrl, &now);
+
+       /* If link came up or went down */
+       if (now.speed != prev->speed && (now.speed == PHY_LINK_SPEED_ZERO ||
+                       prev->speed == PHY_LINK_SPEED_ZERO)) {
+               if (now.speed == PHY_LINK_SPEED_ZERO) {
+                       netif_stop_queue(netdev);
+                       netif_carrier_off(netdev);
+                       printk(KERN_INFO "%s: Link down\n", netdev->name);
+               } else {
+                       netif_start_queue(netdev);
+                       netif_carrier_on(netdev);
+                       printk(KERN_INFO "%s: Link up\n", netdev->name);
+               }
+       }
+       *prev = now;
+}
+
+/* Update the EQ delay n BE based on the RX frags consumed / sec */
+static void be_rx_eqd_update(struct be_adapter *adapter)
+{
+       u32 eqd;
+       struct be_ctrl_info *ctrl = &adapter->ctrl;
+       struct be_eq_obj *rx_eq = &adapter->rx_eq;
+       struct be_drvr_stats *stats = &adapter->stats.drvr_stats;
+
+       /* Update once a second */
+       if (((jiffies - stats->rx_fps_jiffies) < HZ) || rx_eq->enable_aic == 0)
+               return;
+
+       stats->be_rx_fps = (stats->be_rx_frags - stats->be_prev_rx_frags) /
+                       ((jiffies - stats->rx_fps_jiffies) / HZ);
+
+       stats->rx_fps_jiffies = jiffies;
+       stats->be_prev_rx_frags = stats->be_rx_frags;
+       eqd = stats->be_rx_fps / 110000;
+       eqd = eqd << 3;
+       if (eqd > rx_eq->max_eqd)
+               eqd = rx_eq->max_eqd;
+       if (eqd < rx_eq->min_eqd)
+               eqd = rx_eq->min_eqd;
+       if (eqd < 10)
+               eqd = 0;
+       if (eqd != rx_eq->cur_eqd)
+               be_cmd_modify_eqd(ctrl, rx_eq->q.id, eqd);
+
+       rx_eq->cur_eqd = eqd;
+}
+
+static void be_worker(struct work_struct *work)
+{
+       struct be_adapter *adapter =
+               container_of(work, struct be_adapter, work.work);
+       int status;
+
+       /* Check link */
+       be_link_status_update(adapter);
+
+       /* Get Stats */
+       status = be_cmd_get_stats(&adapter->ctrl, &adapter->stats.cmd);
+       if (!status)
+               netdev_stats_update(adapter);
+
+       /* Set EQ delay */
+       be_rx_eqd_update(adapter);
+
+       schedule_delayed_work(&adapter->work, msecs_to_jiffies(1000));
+}
+
+static struct net_device_stats *be_get_stats(struct net_device *dev)
+{
+       struct be_adapter *adapter = netdev_priv(dev);
+
+       return &adapter->stats.net_stats;
+}
+
+static void be_tx_stats_update(struct be_adapter *adapter,
+                       u32 wrb_cnt, u32 copied, bool stopped)
+{
+       struct be_drvr_stats *stats = &adapter->stats.drvr_stats;
+       stats->be_tx_reqs++;
+       stats->be_tx_wrbs += wrb_cnt;
+       stats->be_tx_bytes += copied;
+       if (stopped)
+               stats->be_tx_stops++;
+
+       /* Update tx rate once in two seconds */
+       if ((jiffies - stats->be_tx_jiffies) > 2 * HZ) {
+               u32 r;
+               r = (stats->be_tx_bytes - stats->be_tx_bytes_prev) /
+                       ((u32) (jiffies - stats->be_tx_jiffies) / HZ);
+               r = (r / 1000000);                      /* M bytes/s */
+               stats->be_tx_rate = (r * 8);    /* M bits/s */
+               stats->be_tx_jiffies = jiffies;
+               stats->be_tx_bytes_prev = stats->be_tx_bytes;
+       }
+}
+
+/* Determine number of WRB entries needed to xmit data in an skb */
+static u32 wrb_cnt_for_skb(struct sk_buff *skb, bool *dummy)
+{
+       int cnt = 0;
+       while (skb) {
+               if (skb->len > skb->data_len)
+                       cnt++;
+               cnt += skb_shinfo(skb)->nr_frags;
+               skb = skb_shinfo(skb)->frag_list;
+       }
+       /* to account for hdr wrb */
+       cnt++;
+       if (cnt & 1) {
+               /* add a dummy to make it an even num */
+               cnt++;
+               *dummy = true;
+       } else
+               *dummy = false;
+       BUG_ON(cnt > BE_MAX_TX_FRAG_COUNT);
+       return cnt;
+}
+
+static inline void wrb_fill(struct be_eth_wrb *wrb, u64 addr, int len)
+{
+       wrb->frag_pa_hi = upper_32_bits(addr);
+       wrb->frag_pa_lo = addr & 0xFFFFFFFF;
+       wrb->frag_len = len & ETH_WRB_FRAG_LEN_MASK;
+}
+
+static void wrb_fill_hdr(struct be_eth_hdr_wrb *hdr, struct sk_buff *skb,
+               bool vlan, u32 wrb_cnt, u32 len)
+{
+       memset(hdr, 0, sizeof(*hdr));
+
+       AMAP_SET_BITS(struct amap_eth_hdr_wrb, crc, hdr, 1);
+
+       if (skb_shinfo(skb)->gso_segs > 1 && skb_shinfo(skb)->gso_size) {
+               AMAP_SET_BITS(struct amap_eth_hdr_wrb, lso, hdr, 1);
+               AMAP_SET_BITS(struct amap_eth_hdr_wrb, lso_mss,
+                       hdr, skb_shinfo(skb)->gso_size);
+       } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
+               if (is_tcp_pkt(skb))
+                       AMAP_SET_BITS(struct amap_eth_hdr_wrb, tcpcs, hdr, 1);
+               else if (is_udp_pkt(skb))
+                       AMAP_SET_BITS(struct amap_eth_hdr_wrb, udpcs, hdr, 1);
+       }
+
+       if (vlan && vlan_tx_tag_present(skb)) {
+               AMAP_SET_BITS(struct amap_eth_hdr_wrb, vlan, hdr, 1);
+               AMAP_SET_BITS(struct amap_eth_hdr_wrb, vlan_tag,
+                       hdr, vlan_tx_tag_get(skb));
+       }
+
+       AMAP_SET_BITS(struct amap_eth_hdr_wrb, event, hdr, 1);
+       AMAP_SET_BITS(struct amap_eth_hdr_wrb, complete, hdr, 1);
+       AMAP_SET_BITS(struct amap_eth_hdr_wrb, num_wrb, hdr, wrb_cnt);
+       AMAP_SET_BITS(struct amap_eth_hdr_wrb, len, hdr, len);
+}
+
+
+static int make_tx_wrbs(struct be_adapter *adapter,
+               struct sk_buff *skb, u32 wrb_cnt, bool dummy_wrb)
+{
+       u64 busaddr;
+       u32 i, copied = 0;
+       struct pci_dev *pdev = adapter->pdev;
+       struct sk_buff *first_skb = skb;
+       struct be_queue_info *txq = &adapter->tx_obj.q;
+       struct be_eth_wrb *wrb;
+       struct be_eth_hdr_wrb *hdr;
+
+       atomic_add(wrb_cnt, &txq->used);
+       hdr = queue_head_node(txq);
+       queue_head_inc(txq);
+
+       while (skb) {
+               if (skb->len > skb->data_len) {
+                       int len = skb->len - skb->data_len;
+                       busaddr = pci_map_single(pdev, skb->data, len,
+                                       PCI_DMA_TODEVICE);
+                       wrb = queue_head_node(txq);
+                       wrb_fill(wrb, busaddr, len);
+                       be_dws_cpu_to_le(wrb, sizeof(*wrb));
+                       queue_head_inc(txq);
+                       copied += len;
+               }
+
+               for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
+                       struct skb_frag_struct *frag =
+                               &skb_shinfo(skb)->frags[i];
+                       busaddr = pci_map_page(pdev, frag->page,
+                                       frag->page_offset,
+                                       frag->size, PCI_DMA_TODEVICE);
+                       wrb = queue_head_node(txq);
+                       wrb_fill(wrb, busaddr, frag->size);
+                       be_dws_cpu_to_le(wrb, sizeof(*wrb));
+                       queue_head_inc(txq);
+                       copied += frag->size;
+               }
+               skb = skb_shinfo(skb)->frag_list;
+       }
+
+       if (dummy_wrb) {
+               wrb = queue_head_node(txq);
+               wrb_fill(wrb, 0, 0);
+               be_dws_cpu_to_le(wrb, sizeof(*wrb));
+               queue_head_inc(txq);
+       }
+
+       wrb_fill_hdr(hdr, first_skb, adapter->vlan_grp ? true : false,
+               wrb_cnt, copied);
+       be_dws_cpu_to_le(hdr, sizeof(*hdr));
+
+       return copied;
+}
+
+static int be_xmit(struct sk_buff *skb, struct net_device *netdev)
+{
+       struct be_adapter *adapter = netdev_priv(netdev);
+       struct be_tx_obj *tx_obj = &adapter->tx_obj;
+       struct be_queue_info *txq = &tx_obj->q;
+       u32 wrb_cnt = 0, copied = 0;
+       u32 start = txq->head;
+       bool dummy_wrb, stopped = false;
+
+       wrb_cnt = wrb_cnt_for_skb(skb, &dummy_wrb);
+
+       copied = make_tx_wrbs(adapter, skb, wrb_cnt, dummy_wrb);
+
+       /* record the sent skb in the sent_skb table */
+       BUG_ON(tx_obj->sent_skb_list[start]);
+       tx_obj->sent_skb_list[start] = skb;
+
+       /* Ensure that txq has space for the next skb; Else stop the queue
+        * *BEFORE* ringing the tx doorbell, so that we serialze the
+        * tx compls of the current transmit which'll wake up the queue
+        */
+       if ((BE_MAX_TX_FRAG_COUNT + atomic_read(&txq->used)) >= txq->len) {
+               netif_stop_queue(netdev);
+               stopped = true;
+       }
+
+       be_txq_notify(&adapter->ctrl, txq->id, wrb_cnt);
+
+       netdev->trans_start = jiffies;
+
+       be_tx_stats_update(adapter, wrb_cnt, copied, stopped);
+       return NETDEV_TX_OK;
+}
+
+static int be_change_mtu(struct net_device *netdev, int new_mtu)
+{
+       struct be_adapter *adapter = netdev_priv(netdev);
+       if (new_mtu < BE_MIN_MTU ||
+                       new_mtu > BE_MAX_JUMBO_FRAME_SIZE) {
+               dev_info(&adapter->pdev->dev,
+                       "MTU must be between %d and %d bytes\n",
+                       BE_MIN_MTU, BE_MAX_JUMBO_FRAME_SIZE);
+               return -EINVAL;
+       }
+       dev_info(&adapter->pdev->dev, "MTU changed from %d to %d bytes\n",
+                       netdev->mtu, new_mtu);
+       netdev->mtu = new_mtu;
+       return 0;
+}
+
+/*
+ * if there are BE_NUM_VLANS_SUPPORTED or lesser number of VLANS configured,
+ * program them in BE.  If more than BE_NUM_VLANS_SUPPORTED are configured,
+ * set the BE in promiscuous VLAN mode.
+ */
+static void be_vids_config(struct net_device *netdev)
+{
+       struct be_adapter *adapter = netdev_priv(netdev);
+       u16 vtag[BE_NUM_VLANS_SUPPORTED];
+       u16 ntags = 0, i;
+
+       if (adapter->num_vlans <= BE_NUM_VLANS_SUPPORTED)  {
+               /* Construct VLAN Table to give to HW */
+               for (i = 0; i < VLAN_GROUP_ARRAY_LEN; i++) {
+                       if (adapter->vlan_tag[i]) {
+                               vtag[ntags] = cpu_to_le16(i);
+                               ntags++;
+                       }
+               }
+               be_cmd_vlan_config(&adapter->ctrl, adapter->if_handle,
+                       vtag, ntags, 1, 0);
+       } else {
+               be_cmd_vlan_config(&adapter->ctrl, adapter->if_handle,
+                       NULL, 0, 1, 1);
+       }
+}
+
+static void be_vlan_register(struct net_device *netdev, struct vlan_group *grp)
+{
+       struct be_adapter *adapter = netdev_priv(netdev);
+       struct be_eq_obj *rx_eq = &adapter->rx_eq;
+       struct be_eq_obj *tx_eq = &adapter->tx_eq;
+       struct be_ctrl_info *ctrl = &adapter->ctrl;
+
+       be_eq_notify(ctrl, rx_eq->q.id, false, false, 0);
+       be_eq_notify(ctrl, tx_eq->q.id, false, false, 0);
+       adapter->vlan_grp = grp;
+       be_eq_notify(ctrl, rx_eq->q.id, true, false, 0);
+       be_eq_notify(ctrl, tx_eq->q.id, true, false, 0);
+}
+
+static void be_vlan_add_vid(struct net_device *netdev, u16 vid)
+{
+       struct be_adapter *adapter = netdev_priv(netdev);
+
+       adapter->num_vlans++;
+       adapter->vlan_tag[vid] = 1;
+
+       be_vids_config(netdev);
+}
+
+static void be_vlan_rem_vid(struct net_device *netdev, u16 vid)
+{
+       struct be_adapter *adapter = netdev_priv(netdev);
+
+       adapter->num_vlans--;
+       adapter->vlan_tag[vid] = 0;
+
+       vlan_group_set_device(adapter->vlan_grp, vid, NULL);
+       be_vids_config(netdev);
+}
+
+static void be_set_multicast_filter(struct net_device *netdev)
+{
+       struct be_adapter *adapter = netdev_priv(netdev);
+       struct dev_mc_list *mc_ptr;
+       u8 mac_addr[32][ETH_ALEN];
+       int i = 0;
+
+       if (netdev->flags & IFF_ALLMULTI) {
+               /* set BE in Multicast promiscuous */
+               be_cmd_mcast_mac_set(&adapter->ctrl,
+                                       adapter->if_handle, NULL, 0, true);
+               return;
+       }
+
+       for (mc_ptr = netdev->mc_list; mc_ptr; mc_ptr = mc_ptr->next) {
+               memcpy(&mac_addr[i][0], mc_ptr->dmi_addr, ETH_ALEN);
+               if (++i >= 32) {
+                       be_cmd_mcast_mac_set(&adapter->ctrl,
+                               adapter->if_handle, &mac_addr[0][0], i, false);
+                       i = 0;
+               }
+
+       }
+
+       if (i) {
+               /* reset the promiscuous mode also. */
+               be_cmd_mcast_mac_set(&adapter->ctrl,
+                       adapter->if_handle, &mac_addr[0][0], i, false);
+       }
+}
+
+static void be_set_multicast_list(struct net_device *netdev)
+{
+       struct be_adapter *adapter = netdev_priv(netdev);
+
+       if (netdev->flags & IFF_PROMISC) {
+               be_cmd_promiscuous_config(&adapter->ctrl, adapter->port_num, 1);
+       } else {
+               be_cmd_promiscuous_config(&adapter->ctrl, adapter->port_num, 0);
+               be_set_multicast_filter(netdev);
+       }
+}
+
+static void be_rx_rate_update(struct be_adapter *adapter, u32 pktsize,
+                       u16 numfrags)
+{
+       struct be_drvr_stats *stats = &adapter->stats.drvr_stats;
+       u32 rate;
+
+       stats->be_rx_compl++;
+       stats->be_rx_frags += numfrags;
+       stats->be_rx_bytes += pktsize;
+
+       /* Update the rate once in two seconds */
+       if ((jiffies - stats->be_rx_jiffies) < 2 * HZ)
+               return;
+
+       rate = (stats->be_rx_bytes - stats->be_rx_bytes_prev) /
+               ((u32) (jiffies - stats->be_rx_jiffies) / HZ);
+       rate = (rate / 1000000);        /* MB/Sec */
+       stats->be_rx_rate = (rate * 8);         /* Mega Bits/Sec */
+       stats->be_rx_jiffies = jiffies;
+       stats->be_rx_bytes_prev = stats->be_rx_bytes;
+}
+
+static struct be_rx_page_info *
+get_rx_page_info(struct be_adapter *adapter, u16 frag_idx)
+{
+       struct be_rx_page_info *rx_page_info;
+       struct be_queue_info *rxq = &adapter->rx_obj.q;
+
+       rx_page_info = &adapter->rx_obj.page_info_tbl[frag_idx];
+       BUG_ON(!rx_page_info->page);
+
+       if (rx_page_info->last_page_user)
+               pci_unmap_page(adapter->pdev, pci_unmap_addr(rx_page_info, bus),
+                       adapter->big_page_size, PCI_DMA_FROMDEVICE);
+
+       atomic_dec(&rxq->used);
+       return rx_page_info;
+}
+
+/* Throwaway the data in the Rx completion */
+static void be_rx_compl_discard(struct be_adapter *adapter,
+                       struct be_eth_rx_compl *rxcp)
+{
+       struct be_queue_info *rxq = &adapter->rx_obj.q;
+       struct be_rx_page_info *page_info;
+       u16 rxq_idx, i, num_rcvd;
+
+       rxq_idx = AMAP_GET_BITS(struct amap_eth_rx_compl, fragndx, rxcp);
+       num_rcvd = AMAP_GET_BITS(struct amap_eth_rx_compl, numfrags, rxcp);
+
+       for (i = 0; i < num_rcvd; i++) {
+               page_info = get_rx_page_info(adapter, rxq_idx);
+               put_page(page_info->page);
+               memset(page_info, 0, sizeof(*page_info));
+               index_inc(&rxq_idx, rxq->len);
+       }
+}
+
+/*
+ * skb_fill_rx_data forms a complete skb for an ether frame
+ * indicated by rxcp.
+ */
+static void skb_fill_rx_data(struct be_adapter *adapter,
+                       struct sk_buff *skb, struct be_eth_rx_compl *rxcp)
+{
+       struct be_queue_info *rxq = &adapter->rx_obj.q;
+       struct be_rx_page_info *page_info;
+       u16 rxq_idx, i, num_rcvd;
+       u32 pktsize, hdr_len, curr_frag_len;
+       u8 *start;
+
+       rxq_idx = AMAP_GET_BITS(struct amap_eth_rx_compl, fragndx, rxcp);
+       pktsize = AMAP_GET_BITS(struct amap_eth_rx_compl, pktsize, rxcp);
+       num_rcvd = AMAP_GET_BITS(struct amap_eth_rx_compl, numfrags, rxcp);
+
+       page_info = get_rx_page_info(adapter, rxq_idx);
+
+       start = page_address(page_info->page) + page_info->page_offset;
+       prefetch(start);
+
+       /* Copy data in the first descriptor of this completion */
+       curr_frag_len = min(pktsize, rx_frag_size);
+
+       /* Copy the header portion into skb_data */
+       hdr_len = min((u32)BE_HDR_LEN, curr_frag_len);
+       memcpy(skb->data, start, hdr_len);
+       skb->len = curr_frag_len;
+       if (curr_frag_len <= BE_HDR_LEN) { /* tiny packet */
+               /* Complete packet has now been moved to data */
+               put_page(page_info->page);
+               skb->data_len = 0;
+               skb->tail += curr_frag_len;
+       } else {
+               skb_shinfo(skb)->nr_frags = 1;
+               skb_shinfo(skb)->frags[0].page = page_info->page;
+               skb_shinfo(skb)->frags[0].page_offset =
+                                       page_info->page_offset + hdr_len;
+               skb_shinfo(skb)->frags[0].size = curr_frag_len - hdr_len;
+               skb->data_len = curr_frag_len - hdr_len;
+               skb->tail += hdr_len;
+       }
+       memset(page_info, 0, sizeof(*page_info));
+
+       if (pktsize <= rx_frag_size) {
+               BUG_ON(num_rcvd != 1);
+               return;
+       }
+
+       /* More frags present for this completion */
+       pktsize -= curr_frag_len; /* account for above copied frag */
+       for (i = 1; i < num_rcvd; i++) {
+               index_inc(&rxq_idx, rxq->len);
+               page_info = get_rx_page_info(adapter, rxq_idx);
+
+               curr_frag_len = min(pktsize, rx_frag_size);
+
+               skb_shinfo(skb)->frags[i].page = page_info->page;
+               skb_shinfo(skb)->frags[i].page_offset = page_info->page_offset;
+               skb_shinfo(skb)->frags[i].size = curr_frag_len;
+               skb->len += curr_frag_len;
+               skb->data_len += curr_frag_len;
+               skb_shinfo(skb)->nr_frags++;
+               pktsize -= curr_frag_len;
+
+               memset(page_info, 0, sizeof(*page_info));
+       }
+
+       be_rx_rate_update(adapter, pktsize, num_rcvd);
+       return;
+}
+
+/* Process the RX completion indicated by rxcp when LRO is disabled */
+static void be_rx_compl_process(struct be_adapter *adapter,
+                       struct be_eth_rx_compl *rxcp)
+{
+       struct sk_buff *skb;
+       u32 vtp, vid;
+       int l4_cksm;
+
+       l4_cksm = AMAP_GET_BITS(struct amap_eth_rx_compl, l4_cksm, rxcp);
+       vtp = AMAP_GET_BITS(struct amap_eth_rx_compl, vtp, rxcp);
+
+       skb = netdev_alloc_skb(adapter->netdev, BE_HDR_LEN + NET_IP_ALIGN);
+       if (!skb) {
+               if (net_ratelimit())
+                       dev_warn(&adapter->pdev->dev, "skb alloc failed\n");
+               be_rx_compl_discard(adapter, rxcp);
+               return;
+       }
+
+       skb_reserve(skb, NET_IP_ALIGN);
+
+       skb_fill_rx_data(adapter, skb, rxcp);
+
+       if (l4_cksm && adapter->rx_csum)
+               skb->ip_summed = CHECKSUM_UNNECESSARY;
+       else
+               skb->ip_summed = CHECKSUM_NONE;
+
+       skb->truesize = skb->len + sizeof(struct sk_buff);
+       skb->protocol = eth_type_trans(skb, adapter->netdev);
+       skb->dev = adapter->netdev;
+
+       if (vtp) {
+               if (!adapter->vlan_grp || adapter->num_vlans == 0) {
+                       kfree_skb(skb);
+                       return;
+               }
+               vid = AMAP_GET_BITS(struct amap_eth_rx_compl, vlan_tag, rxcp);
+               vid = be16_to_cpu(vid);
+               vlan_hwaccel_receive_skb(skb, adapter->vlan_grp, vid);
+       } else {
+               netif_receive_skb(skb);
+       }
+
+       adapter->netdev->last_rx = jiffies;
+
+       return;
+}
+
+/* Process the RX completion indicated by rxcp when LRO is enabled */
+static void be_rx_compl_process_lro(struct be_adapter *adapter,
+                       struct be_eth_rx_compl *rxcp)
+{
+       struct be_rx_page_info *page_info;
+       struct skb_frag_struct rx_frags[BE_MAX_FRAGS_PER_FRAME];
+       struct be_queue_info *rxq = &adapter->rx_obj.q;
+       u32 num_rcvd, pkt_size, remaining, vlanf, curr_frag_len;
+       u16 i, rxq_idx = 0, vid;
+
+       num_rcvd = AMAP_GET_BITS(struct amap_eth_rx_compl, numfrags, rxcp);
+       pkt_size = AMAP_GET_BITS(struct amap_eth_rx_compl, pktsize, rxcp);
+       vlanf = AMAP_GET_BITS(struct amap_eth_rx_compl, vtp, rxcp);
+       rxq_idx = AMAP_GET_BITS(struct amap_eth_rx_compl, fragndx, rxcp);
+
+       remaining = pkt_size;
+       for (i = 0; i < num_rcvd; i++) {
+               page_info = get_rx_page_info(adapter, rxq_idx);
+
+               curr_frag_len = min(remaining, rx_frag_size);
+
+               rx_frags[i].page = page_info->page;
+               rx_frags[i].page_offset = page_info->page_offset;
+               rx_frags[i].size = curr_frag_len;
+               remaining -= curr_frag_len;
+
+               index_inc(&rxq_idx, rxq->len);
+
+               memset(page_info, 0, sizeof(*page_info));
+       }
+
+       if (likely(!vlanf)) {
+               lro_receive_frags(&adapter->rx_obj.lro_mgr, rx_frags, pkt_size,
+                               pkt_size, NULL, 0);
+       } else {
+               vid = AMAP_GET_BITS(struct amap_eth_rx_compl, vlan_tag, rxcp);
+               vid = be16_to_cpu(vid);
+
+               if (!adapter->vlan_grp || adapter->num_vlans == 0)
+                       return;
+
+               lro_vlan_hwaccel_receive_frags(&adapter->rx_obj.lro_mgr,
+                       rx_frags, pkt_size, pkt_size, adapter->vlan_grp,
+                       vid, NULL, 0);
+       }
+
+       be_rx_rate_update(adapter, pkt_size, num_rcvd);
+       return;
+}
+
+static struct be_eth_rx_compl *be_rx_compl_get(struct be_adapter *adapter)
+{
+       struct be_eth_rx_compl *rxcp = queue_tail_node(&adapter->rx_obj.cq);
+
+       if (rxcp->dw[offsetof(struct amap_eth_rx_compl, valid) / 32] == 0)
+               return NULL;
+
+       be_dws_le_to_cpu(rxcp, sizeof(*rxcp));
+
+       rxcp->dw[offsetof(struct amap_eth_rx_compl, valid) / 32] = 0;
+
+       queue_tail_inc(&adapter->rx_obj.cq);
+       return rxcp;
+}
+
+static inline struct page *be_alloc_pages(u32 size)
+{
+       gfp_t alloc_flags = GFP_ATOMIC;
+       u32 order = get_order(size);
+       if (order > 0)
+               alloc_flags |= __GFP_COMP;
+       return  alloc_pages(alloc_flags, order);
+}
+
+/*
+ * Allocate a page, split it to fragments of size rx_frag_size and post as
+ * receive buffers to BE
+ */
+static void be_post_rx_frags(struct be_adapter *adapter)
+{
+       struct be_rx_page_info *page_info_tbl = adapter->rx_obj.page_info_tbl;
+       struct be_rx_page_info *page_info = NULL;
+       struct be_queue_info *rxq = &adapter->rx_obj.q;
+       struct page *pagep = NULL;
+       struct be_eth_rx_d *rxd;
+       u64 page_dmaaddr = 0, frag_dmaaddr;
+       u32 posted, page_offset = 0;
+
+
+       page_info = &page_info_tbl[rxq->head];
+       for (posted = 0; posted < MAX_RX_POST && !page_info->page; posted++) {
+               if (!pagep) {
+                       pagep = be_alloc_pages(adapter->big_page_size);
+                       if (unlikely(!pagep)) {
+                               drvr_stats(adapter)->be_ethrx_post_fail++;
+                               break;
+                       }
+                       page_dmaaddr = pci_map_page(adapter->pdev, pagep, 0,
+                                               adapter->big_page_size,
+                                               PCI_DMA_FROMDEVICE);
+                       page_info->page_offset = 0;
+               } else {
+                       get_page(pagep);
+                       page_info->page_offset = page_offset + rx_frag_size;
+               }
+               page_offset = page_info->page_offset;
+               page_info->page = pagep;
+               pci_unmap_addr_set(page_info, bus, page_dmaaddr);
+               frag_dmaaddr = page_dmaaddr + page_info->page_offset;
+
+               rxd = queue_head_node(rxq);
+               rxd->fragpa_lo = cpu_to_le32(frag_dmaaddr & 0xFFFFFFFF);
+               rxd->fragpa_hi = cpu_to_le32(upper_32_bits(frag_dmaaddr));
+               queue_head_inc(rxq);
+
+               /* Any space left in the current big page for another frag? */
+               if ((page_offset + rx_frag_size + rx_frag_size) >
+                                       adapter->big_page_size) {
+                       pagep = NULL;
+                       page_info->last_page_user = true;
+               }
+               page_info = &page_info_tbl[rxq->head];
+       }
+       if (pagep)
+               page_info->last_page_user = true;
+
+       if (posted) {
+               be_rxq_notify(&adapter->ctrl, rxq->id, posted);
+               atomic_add(posted, &rxq->used);
+       }
+
+       return;
+}
+
+static struct be_eth_tx_compl *
+be_tx_compl_get(struct be_adapter *adapter)
+{
+       struct be_queue_info *tx_cq = &adapter->tx_obj.cq;
+       struct be_eth_tx_compl *txcp = queue_tail_node(tx_cq);
+
+       if (txcp->dw[offsetof(struct amap_eth_tx_compl, valid) / 32] == 0)
+               return NULL;
+
+       be_dws_le_to_cpu(txcp, sizeof(*txcp));
+
+       txcp->dw[offsetof(struct amap_eth_tx_compl, valid) / 32] = 0;
+
+       queue_tail_inc(tx_cq);
+       return txcp;
+}
+
+static void be_tx_compl_process(struct be_adapter *adapter, u16 last_index)
+{
+       struct be_queue_info *txq = &adapter->tx_obj.q;
+       struct be_eth_wrb *wrb;
+       struct sk_buff **sent_skbs = adapter->tx_obj.sent_skb_list;
+       struct sk_buff *sent_skb;
+       u64 busaddr;
+       u16 cur_index, num_wrbs = 0;
+
+       cur_index = txq->tail;
+       sent_skb = sent_skbs[cur_index];
+       BUG_ON(!sent_skb);
+       sent_skbs[cur_index] = NULL;
+
+       do {
+               cur_index = txq->tail;
+               wrb = queue_tail_node(txq);
+               be_dws_le_to_cpu(wrb, sizeof(*wrb));
+               busaddr = ((u64)wrb->frag_pa_hi << 32) | (u64)wrb->frag_pa_lo;
+               if (busaddr != 0) {
+                       pci_unmap_single(adapter->pdev, busaddr,
+                               wrb->frag_len, PCI_DMA_TODEVICE);
+               }
+               num_wrbs++;
+               queue_tail_inc(txq);
+       } while (cur_index != last_index);
+
+       atomic_sub(num_wrbs, &txq->used);
+
+       kfree_skb(sent_skb);
+}
+
+static void be_rx_q_clean(struct be_adapter *adapter)
+{
+       struct be_rx_page_info *page_info;
+       struct be_queue_info *rxq = &adapter->rx_obj.q;
+       struct be_queue_info *rx_cq = &adapter->rx_obj.cq;
+       struct be_eth_rx_compl *rxcp;
+       u16 tail;
+
+       /* First cleanup pending rx completions */
+       while ((rxcp = be_rx_compl_get(adapter)) != NULL) {
+               be_rx_compl_discard(adapter, rxcp);
+               be_cq_notify(&adapter->ctrl, rx_cq->id, true, 1);
+       }
+
+       /* Then free posted rx buffer that were not used */
+       tail = (rxq->head + rxq->len - atomic_read(&rxq->used)) % rxq->len;
+       for (; tail != rxq->head; index_inc(&tail, rxq->len)) {
+               page_info = get_rx_page_info(adapter, tail);
+               put_page(page_info->page);
+               memset(page_info, 0, sizeof(*page_info));
+       }
+       BUG_ON(atomic_read(&rxq->used));
+}
+
+static void be_tx_q_clean(struct be_adapter *adapter)
+{
+       struct sk_buff **sent_skbs = adapter->tx_obj.sent_skb_list;
+       struct sk_buff *sent_skb;
+       struct be_queue_info *txq = &adapter->tx_obj.q;
+       u16 last_index;
+       bool dummy_wrb;
+
+       while (atomic_read(&txq->used)) {
+               sent_skb = sent_skbs[txq->tail];
+               last_index = txq->tail;
+               index_adv(&last_index,
+                       wrb_cnt_for_skb(sent_skb, &dummy_wrb) - 1, txq->len);
+               be_tx_compl_process(adapter, last_index);
+       }
+}
+
+static void be_tx_queues_destroy(struct be_adapter *adapter)
+{
+       struct be_queue_info *q;
+
+       q = &adapter->tx_obj.q;
+       if (q->created)
+               be_cmd_q_destroy(&adapter->ctrl, q, QTYPE_TXQ);
+       be_queue_free(adapter, q);
+
+       q = &adapter->tx_obj.cq;
+       if (q->created)
+               be_cmd_q_destroy(&adapter->ctrl, q, QTYPE_CQ);
+       be_queue_free(adapter, q);
+
+       /* No more tx completions can be rcvd now; clean up if there are
+        * any pending completions or pending tx requests */
+       be_tx_q_clean(adapter);
+
+       q = &adapter->tx_eq.q;
+       if (q->created)
+               be_cmd_q_destroy(&adapter->ctrl, q, QTYPE_EQ);
+       be_queue_free(adapter, q);
+}
+
+static int be_tx_queues_create(struct be_adapter *adapter)
+{
+       struct be_queue_info *eq, *q, *cq;
+
+       adapter->tx_eq.max_eqd = 0;
+       adapter->tx_eq.min_eqd = 0;
+       adapter->tx_eq.cur_eqd = 96;
+       adapter->tx_eq.enable_aic = false;
+       /* Alloc Tx Event queue */
+       eq = &adapter->tx_eq.q;
+       if (be_queue_alloc(adapter, eq, EVNT_Q_LEN, sizeof(struct be_eq_entry)))
+               return -1;
+
+       /* Ask BE to create Tx Event queue */
+       if (be_cmd_eq_create(&adapter->ctrl, eq, adapter->tx_eq.cur_eqd))
+               goto tx_eq_free;
+       /* Alloc TX eth compl queue */
+       cq = &adapter->tx_obj.cq;
+       if (be_queue_alloc(adapter, cq, TX_CQ_LEN,
+                       sizeof(struct be_eth_tx_compl)))
+               goto tx_eq_destroy;
+
+       /* Ask BE to create Tx eth compl queue */
+       if (be_cmd_cq_create(&adapter->ctrl, cq, eq, false, false, 3))
+               goto tx_cq_free;
+
+       /* Alloc TX eth queue */
+       q = &adapter->tx_obj.q;
+       if (be_queue_alloc(adapter, q, TX_Q_LEN, sizeof(struct be_eth_wrb)))
+               goto tx_cq_destroy;
+
+       /* Ask BE to create Tx eth queue */
+       if (be_cmd_txq_create(&adapter->ctrl, q, cq))
+               goto tx_q_free;
+       return 0;
+
+tx_q_free:
+       be_queue_free(adapter, q);
+tx_cq_destroy:
+       be_cmd_q_destroy(&adapter->ctrl, cq, QTYPE_CQ);
+tx_cq_free:
+       be_queue_free(adapter, cq);
+tx_eq_destroy:
+       be_cmd_q_destroy(&adapter->ctrl, eq, QTYPE_EQ);
+tx_eq_free:
+       be_queue_free(adapter, eq);
+       return -1;
+}
+
+static void be_rx_queues_destroy(struct be_adapter *adapter)
+{
+       struct be_queue_info *q;
+
+       q = &adapter->rx_obj.q;
+       if (q->created) {
+               be_cmd_q_destroy(&adapter->ctrl, q, QTYPE_RXQ);
+               be_rx_q_clean(adapter);
+       }
+       be_queue_free(adapter, q);
+
+       q = &adapter->rx_obj.cq;
+       if (q->created)
+               be_cmd_q_destroy(&adapter->ctrl, q, QTYPE_CQ);
+       be_queue_free(adapter, q);
+
+       q = &adapter->rx_eq.q;
+       if (q->created)
+               be_cmd_q_destroy(&adapter->ctrl, q, QTYPE_EQ);
+       be_queue_free(adapter, q);
+}
+
+static int be_rx_queues_create(struct be_adapter *adapter)
+{
+       struct be_queue_info *eq, *q, *cq;
+       int rc;
+
+       adapter->max_rx_coal = BE_MAX_FRAGS_PER_FRAME;
+       adapter->big_page_size = (1 << get_order(rx_frag_size)) * PAGE_SIZE;
+       adapter->rx_eq.max_eqd = BE_MAX_EQD;
+       adapter->rx_eq.min_eqd = 0;
+       adapter->rx_eq.cur_eqd = 0;
+       adapter->rx_eq.enable_aic = true;
+
+       /* Alloc Rx Event queue */
+       eq = &adapter->rx_eq.q;
+       rc = be_queue_alloc(adapter, eq, EVNT_Q_LEN,
+                               sizeof(struct be_eq_entry));
+       if (rc)
+               return rc;
+
+       /* Ask BE to create Rx Event queue */
+       rc = be_cmd_eq_create(&adapter->ctrl, eq, adapter->rx_eq.cur_eqd);
+       if (rc)
+               goto rx_eq_free;
+
+       /* Alloc RX eth compl queue */
+       cq = &adapter->rx_obj.cq;
+       rc = be_queue_alloc(adapter, cq, RX_CQ_LEN,
+                       sizeof(struct be_eth_rx_compl));
+       if (rc)
+               goto rx_eq_destroy;
+
+       /* Ask BE to create Rx eth compl queue */
+       rc = be_cmd_cq_create(&adapter->ctrl, cq, eq, false, false, 3);
+       if (rc)
+               goto rx_cq_free;
+
+       /* Alloc RX eth queue */
+       q = &adapter->rx_obj.q;
+       rc = be_queue_alloc(adapter, q, RX_Q_LEN, sizeof(struct be_eth_rx_d));
+       if (rc)
+               goto rx_cq_destroy;
+
+       /* Ask BE to create Rx eth queue */
+       rc = be_cmd_rxq_create(&adapter->ctrl, q, cq->id, rx_frag_size,
+               BE_MAX_JUMBO_FRAME_SIZE, adapter->if_handle, false);
+       if (rc)
+               goto rx_q_free;
+
+       return 0;
+rx_q_free:
+       be_queue_free(adapter, q);
+rx_cq_destroy:
+       be_cmd_q_destroy(&adapter->ctrl, cq, QTYPE_CQ);
+rx_cq_free:
+       be_queue_free(adapter, cq);
+rx_eq_destroy:
+       be_cmd_q_destroy(&adapter->ctrl, eq, QTYPE_EQ);
+rx_eq_free:
+       be_queue_free(adapter, eq);
+       return rc;
+}
+static bool event_get(struct be_eq_obj *eq_obj, u16 *rid)
+{
+       struct be_eq_entry *entry = queue_tail_node(&eq_obj->q);
+       u32 evt = entry->evt;
+
+       if (!evt)
+               return false;
+
+       evt = le32_to_cpu(evt);
+       *rid = (evt >> EQ_ENTRY_RES_ID_SHIFT) & EQ_ENTRY_RES_ID_MASK;
+       entry->evt = 0;
+       queue_tail_inc(&eq_obj->q);
+       return true;
+}
+
+static int event_handle(struct be_ctrl_info *ctrl,
+                       struct be_eq_obj *eq_obj)
+{
+       u16 rid = 0, num = 0;
+
+       while (event_get(eq_obj, &rid))
+               num++;
+
+       /* We can see an interrupt and no event */
+       be_eq_notify(ctrl, eq_obj->q.id, true, true, num);
+       if (num)
+               napi_schedule(&eq_obj->napi);
+
+       return num;
+}
+
+static irqreturn_t be_intx(int irq, void *dev)
+{
+       struct be_adapter *adapter = dev;
+       struct be_ctrl_info *ctrl = &adapter->ctrl;
+       int rx, tx;
+
+       tx = event_handle(ctrl, &adapter->tx_eq);
+       rx = event_handle(ctrl, &adapter->rx_eq);
+
+       if (rx || tx)
+               return IRQ_HANDLED;
+       else
+               return IRQ_NONE;
+}
+
+static irqreturn_t be_msix_rx(int irq, void *dev)
+{
+       struct be_adapter *adapter = dev;
+
+       event_handle(&adapter->ctrl, &adapter->rx_eq);
+
+       return IRQ_HANDLED;
+}
+
+static irqreturn_t be_msix_tx(int irq, void *dev)
+{
+       struct be_adapter *adapter = dev;
+
+       event_handle(&adapter->ctrl, &adapter->tx_eq);
+
+       return IRQ_HANDLED;
+}
+
+static inline bool do_lro(struct be_adapter *adapter,
+                       struct be_eth_rx_compl *rxcp)
+{
+       int err = AMAP_GET_BITS(struct amap_eth_rx_compl, err, rxcp);
+       int tcp_frame = AMAP_GET_BITS(struct amap_eth_rx_compl, tcpf, rxcp);
+
+       if (err)
+               drvr_stats(adapter)->be_rxcp_err++;
+
+       return (!tcp_frame || err || (adapter->max_rx_coal <= 1)) ?
+               false : true;
+}
+
+int be_poll_rx(struct napi_struct *napi, int budget)
+{
+       struct be_eq_obj *rx_eq = container_of(napi, struct be_eq_obj, napi);
+       struct be_adapter *adapter =
+               container_of(rx_eq, struct be_adapter, rx_eq);
+       struct be_queue_info *rx_cq = &adapter->rx_obj.cq;
+       struct be_eth_rx_compl *rxcp;
+       u32 work_done;
+
+       for (work_done = 0; work_done < budget; work_done++) {
+               rxcp = be_rx_compl_get(adapter);
+               if (!rxcp)
+                       break;
+
+               if (do_lro(adapter, rxcp))
+                       be_rx_compl_process_lro(adapter, rxcp);
+               else
+                       be_rx_compl_process(adapter, rxcp);
+       }
+
+       lro_flush_all(&adapter->rx_obj.lro_mgr);
+
+       /* Refill the queue */
+       if (atomic_read(&adapter->rx_obj.q.used) < RX_FRAGS_REFILL_WM)
+               be_post_rx_frags(adapter);
+
+       /* All consumed */
+       if (work_done < budget) {
+               napi_complete(napi);
+               be_cq_notify(&adapter->ctrl, rx_cq->id, true, work_done);
+       } else {
+               /* More to be consumed; continue with interrupts disabled */
+               be_cq_notify(&adapter->ctrl, rx_cq->id, false, work_done);
+       }
+       return work_done;
+}
+
+/* For TX we don't honour budget; consume everything */
+int be_poll_tx(struct napi_struct *napi, int budget)
+{
+       struct be_eq_obj *tx_eq = container_of(napi, struct be_eq_obj, napi);
+       struct be_adapter *adapter =
+               container_of(tx_eq, struct be_adapter, tx_eq);
+       struct be_tx_obj *tx_obj = &adapter->tx_obj;
+       struct be_queue_info *tx_cq = &tx_obj->cq;
+       struct be_queue_info *txq = &tx_obj->q;
+       struct be_eth_tx_compl *txcp;
+       u32 num_cmpl = 0;
+       u16 end_idx;
+
+       while ((txcp = be_tx_compl_get(adapter))) {
+               end_idx = AMAP_GET_BITS(struct amap_eth_tx_compl,
+                                       wrb_index, txcp);
+               be_tx_compl_process(adapter, end_idx);
+               num_cmpl++;
+       }
+
+       /* As Tx wrbs have been freed up, wake up netdev queue if
+        * it was stopped due to lack of tx wrbs.
+        */
+       if (netif_queue_stopped(adapter->netdev) &&
+                       atomic_read(&txq->used) < txq->len / 2) {
+               netif_wake_queue(adapter->netdev);
+       }
+
+       napi_complete(napi);
+
+       be_cq_notify(&adapter->ctrl, tx_cq->id, true, num_cmpl);
+
+       drvr_stats(adapter)->be_tx_events++;
+       drvr_stats(adapter)->be_tx_compl += num_cmpl;
+
+       return 1;
+}
+
+static void be_msix_enable(struct be_adapter *adapter)
+{
+       int i, status;
+
+       for (i = 0; i < BE_NUM_MSIX_VECTORS; i++)
+               adapter->msix_entries[i].entry = i;
+
+       status = pci_enable_msix(adapter->pdev, adapter->msix_entries,
+               BE_NUM_MSIX_VECTORS);
+       if (status == 0)
+               adapter->msix_enabled = true;
+       return;
+}
+
+static inline int be_msix_vec_get(struct be_adapter *adapter, u32 eq_id)
+{
+       return adapter->msix_entries[eq_id -
+                       8 * adapter->ctrl.pci_func].vector;
+}
+
+static int be_msix_register(struct be_adapter *adapter)
+{
+       struct net_device *netdev = adapter->netdev;
+       struct be_eq_obj *tx_eq = &adapter->tx_eq;
+       struct be_eq_obj *rx_eq = &adapter->rx_eq;
+       int status, vec;
+
+       sprintf(tx_eq->desc, "%s-tx", netdev->name);
+       vec = be_msix_vec_get(adapter, tx_eq->q.id);
+       status = request_irq(vec, be_msix_tx, 0, tx_eq->desc, adapter);
+       if (status)
+               goto err;
+
+       sprintf(rx_eq->desc, "%s-rx", netdev->name);
+       vec = be_msix_vec_get(adapter, rx_eq->q.id);
+       status = request_irq(vec, be_msix_rx, 0, rx_eq->desc, adapter);
+       if (status) { /* Free TX IRQ */
+               vec = be_msix_vec_get(adapter, tx_eq->q.id);
+               free_irq(vec, adapter);
+               goto err;
+       }
+       return 0;
+err:
+       dev_warn(&adapter->pdev->dev,
+               "MSIX Request IRQ failed - err %d\n", status);
+       pci_disable_msix(adapter->pdev);
+       adapter->msix_enabled = false;
+       return status;
+}
+
+static int be_irq_register(struct be_adapter *adapter)
+{
+       struct net_device *netdev = adapter->netdev;
+       int status;
+
+       if (adapter->msix_enabled) {
+               status = be_msix_register(adapter);
+               if (status == 0)
+                       goto done;
+       }
+
+       /* INTx */
+       netdev->irq = adapter->pdev->irq;
+       status = request_irq(netdev->irq, be_intx, IRQF_SHARED, netdev->name,
+                       adapter);
+       if (status) {
+               dev_err(&adapter->pdev->dev,
+                       "INTx request IRQ failed - err %d\n", status);
+               return status;
+       }
+done:
+       adapter->isr_registered = true;
+       return 0;
+}
+
+static void be_irq_unregister(struct be_adapter *adapter)
+{
+       struct net_device *netdev = adapter->netdev;
+       int vec;
+
+       if (!adapter->isr_registered)
+               return;
+
+       /* INTx */
+       if (!adapter->msix_enabled) {
+               free_irq(netdev->irq, adapter);
+               goto done;
+       }
+
+       /* MSIx */
+       vec = be_msix_vec_get(adapter, adapter->tx_eq.q.id);
+       free_irq(vec, adapter);
+       vec = be_msix_vec_get(adapter, adapter->rx_eq.q.id);
+       free_irq(vec, adapter);
+done:
+       adapter->isr_registered = false;
+       return;
+}
+
+static int be_open(struct net_device *netdev)
+{
+       struct be_adapter *adapter = netdev_priv(netdev);
+       struct be_ctrl_info *ctrl = &adapter->ctrl;
+       struct be_eq_obj *rx_eq = &adapter->rx_eq;
+       struct be_eq_obj *tx_eq = &adapter->tx_eq;
+       u32 if_flags;
+       int status;
+
+       if_flags = BE_IF_FLAGS_BROADCAST | BE_IF_FLAGS_PROMISCUOUS |
+               BE_IF_FLAGS_MCAST_PROMISCUOUS | BE_IF_FLAGS_UNTAGGED |
+               BE_IF_FLAGS_PASS_L3L4_ERRORS;
+       status = be_cmd_if_create(ctrl, if_flags, netdev->dev_addr,
+                       false/* pmac_invalid */, &adapter->if_handle,
+                       &adapter->pmac_id);
+       if (status != 0)
+               goto do_none;
+
+       status = be_cmd_set_flow_control(ctrl, true, true);
+       if (status != 0)
+               goto if_destroy;
+
+       status = be_tx_queues_create(adapter);
+       if (status != 0)
+               goto if_destroy;
+
+       status = be_rx_queues_create(adapter);
+       if (status != 0)
+               goto tx_qs_destroy;
+
+       /* First time posting */
+       be_post_rx_frags(adapter);
+
+       napi_enable(&rx_eq->napi);
+       napi_enable(&tx_eq->napi);
+
+       be_irq_register(adapter);
+
+       be_intr_set(ctrl, true);
+
+       /* The evt queues are created in the unarmed state; arm them */
+       be_eq_notify(ctrl, rx_eq->q.id, true, false, 0);
+       be_eq_notify(ctrl, tx_eq->q.id, true, false, 0);
+
+       /* The compl queues are created in the unarmed state; arm them */
+       be_cq_notify(ctrl, adapter->rx_obj.cq.id, true, 0);
+       be_cq_notify(ctrl, adapter->tx_obj.cq.id, true, 0);
+
+       be_link_status_update(adapter);
+
+       schedule_delayed_work(&adapter->work, msecs_to_jiffies(100));
+       return 0;
+
+tx_qs_destroy:
+       be_tx_queues_destroy(adapter);
+if_destroy:
+       be_cmd_if_destroy(ctrl, adapter->if_handle);
+do_none:
+       return status;
+}
+
+static int be_close(struct net_device *netdev)
+{
+       struct be_adapter *adapter = netdev_priv(netdev);
+       struct be_ctrl_info *ctrl = &adapter->ctrl;
+       struct be_eq_obj *rx_eq = &adapter->rx_eq;
+       struct be_eq_obj *tx_eq = &adapter->tx_eq;
+       int vec;
+
+       cancel_delayed_work(&adapter->work);
+
+       netif_stop_queue(netdev);
+       netif_carrier_off(netdev);
+       adapter->link.speed = PHY_LINK_SPEED_ZERO;
+
+       be_intr_set(ctrl, false);
+
+       if (adapter->msix_enabled) {
+               vec = be_msix_vec_get(adapter, tx_eq->q.id);
+               synchronize_irq(vec);
+               vec = be_msix_vec_get(adapter, rx_eq->q.id);
+               synchronize_irq(vec);
+       } else {
+               synchronize_irq(netdev->irq);
+       }
+       be_irq_unregister(adapter);
+
+       napi_disable(&rx_eq->napi);
+       napi_disable(&tx_eq->napi);
+
+       be_rx_queues_destroy(adapter);
+       be_tx_queues_destroy(adapter);
+
+       be_cmd_if_destroy(ctrl, adapter->if_handle);
+       return 0;
+}
+
+static int be_get_frag_header(struct skb_frag_struct *frag, void **mac_hdr,
+                               void **ip_hdr, void **tcpudp_hdr,
+                               u64 *hdr_flags, void *priv)
+{
+       struct ethhdr *eh;
+       struct vlan_ethhdr *veh;
+       struct iphdr *iph;
+       u8 *va = page_address(frag->page) + frag->page_offset;
+       unsigned long ll_hlen;
+
+       prefetch(va);
+       eh = (struct ethhdr *)va;
+       *mac_hdr = eh;
+       ll_hlen = ETH_HLEN;
+       if (eh->h_proto != htons(ETH_P_IP)) {
+               if (eh->h_proto == htons(ETH_P_8021Q)) {
+                       veh = (struct vlan_ethhdr *)va;
+                       if (veh->h_vlan_encapsulated_proto != htons(ETH_P_IP))
+                               return -1;
+
+                       ll_hlen += VLAN_HLEN;
+               } else {
+                       return -1;
+               }
+       }
+       *hdr_flags = LRO_IPV4;
+       iph = (struct iphdr *)(va + ll_hlen);
+       *ip_hdr = iph;
+       if (iph->protocol != IPPROTO_TCP)
+               return -1;
+       *hdr_flags |= LRO_TCP;
+       *tcpudp_hdr = (u8 *) (*ip_hdr) + (iph->ihl << 2);
+
+       return 0;
+}
+
+static void be_lro_init(struct be_adapter *adapter, struct net_device *netdev)
+{
+       struct net_lro_mgr *lro_mgr;
+
+       lro_mgr = &adapter->rx_obj.lro_mgr;
+       lro_mgr->dev = netdev;
+       lro_mgr->features = LRO_F_NAPI;
+       lro_mgr->ip_summed = CHECKSUM_UNNECESSARY;
+       lro_mgr->ip_summed_aggr = CHECKSUM_UNNECESSARY;
+       lro_mgr->max_desc = BE_MAX_LRO_DESCRIPTORS;
+       lro_mgr->lro_arr = adapter->rx_obj.lro_desc;
+       lro_mgr->get_frag_header = be_get_frag_header;
+       lro_mgr->max_aggr = BE_MAX_FRAGS_PER_FRAME;
+}
+
+static struct net_device_ops be_netdev_ops = {
+       .ndo_open               = be_open,
+       .ndo_stop               = be_close,
+       .ndo_start_xmit         = be_xmit,
+       .ndo_get_stats          = be_get_stats,
+       .ndo_set_rx_mode        = be_set_multicast_list,
+       .ndo_set_mac_address    = be_mac_addr_set,
+       .ndo_change_mtu         = be_change_mtu,
+       .ndo_validate_addr      = eth_validate_addr,
+       .ndo_vlan_rx_register   = be_vlan_register,
+       .ndo_vlan_rx_add_vid    = be_vlan_add_vid,
+       .ndo_vlan_rx_kill_vid   = be_vlan_rem_vid,
+};
+
+static void be_netdev_init(struct net_device *netdev)
+{
+       struct be_adapter *adapter = netdev_priv(netdev);
+
+       netdev->features |= NETIF_F_SG | NETIF_F_HW_VLAN_RX | NETIF_F_TSO |
+               NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_FILTER | NETIF_F_IP_CSUM |
+               NETIF_F_IPV6_CSUM | NETIF_F_TSO6;
+
+       netdev->flags |= IFF_MULTICAST;
+
+       BE_SET_NETDEV_OPS(netdev, &be_netdev_ops);
+
+       SET_ETHTOOL_OPS(netdev, &be_ethtool_ops);
+
+       be_lro_init(adapter, netdev);
+
+       netif_napi_add(netdev, &adapter->rx_eq.napi, be_poll_rx,
+               BE_NAPI_WEIGHT);
+       netif_napi_add(netdev, &adapter->tx_eq.napi, be_poll_tx,
+               BE_NAPI_WEIGHT);
+
+       netif_carrier_off(netdev);
+       netif_stop_queue(netdev);
+}
+
+static void be_unmap_pci_bars(struct be_adapter *adapter)
+{
+       struct be_ctrl_info *ctrl = &adapter->ctrl;
+       if (ctrl->csr)
+               iounmap(ctrl->csr);
+       if (ctrl->db)
+               iounmap(ctrl->db);
+       if (ctrl->pcicfg)
+               iounmap(ctrl->pcicfg);
+}
+
+static int be_map_pci_bars(struct be_adapter *adapter)
+{
+       u8 __iomem *addr;
+
+       addr = ioremap_nocache(pci_resource_start(adapter->pdev, 2),
+                       pci_resource_len(adapter->pdev, 2));
+       if (addr == NULL)
+               return -ENOMEM;
+       adapter->ctrl.csr = addr;
+
+       addr = ioremap_nocache(pci_resource_start(adapter->pdev, 4),
+                       128 * 1024);
+       if (addr == NULL)
+               goto pci_map_err;
+       adapter->ctrl.db = addr;
+
+       addr = ioremap_nocache(pci_resource_start(adapter->pdev, 1),
+                       pci_resource_len(adapter->pdev, 1));
+       if (addr == NULL)
+               goto pci_map_err;
+       adapter->ctrl.pcicfg = addr;
+
+       return 0;
+pci_map_err:
+       be_unmap_pci_bars(adapter);
+       return -ENOMEM;
+}
+
+
+static void be_ctrl_cleanup(struct be_adapter *adapter)
+{
+       struct be_dma_mem *mem = &adapter->ctrl.mbox_mem_alloced;
+
+       be_unmap_pci_bars(adapter);
+
+       if (mem->va)
+               pci_free_consistent(adapter->pdev, mem->size,
+                       mem->va, mem->dma);
+}
+
+/* Initialize the mbox required to send cmds to BE */
+static int be_ctrl_init(struct be_adapter *adapter)
+{
+       struct be_ctrl_info *ctrl = &adapter->ctrl;
+       struct be_dma_mem *mbox_mem_alloc = &ctrl->mbox_mem_alloced;
+       struct be_dma_mem *mbox_mem_align = &ctrl->mbox_mem;
+       int status;
+       u32 val;
+
+       status = be_map_pci_bars(adapter);
+       if (status)
+               return status;
+
+       mbox_mem_alloc->size = sizeof(struct be_mcc_mailbox) + 16;
+       mbox_mem_alloc->va = pci_alloc_consistent(adapter->pdev,
+                               mbox_mem_alloc->size, &mbox_mem_alloc->dma);
+       if (!mbox_mem_alloc->va) {
+               be_unmap_pci_bars(adapter);
+               return -1;
+       }
+       mbox_mem_align->size = sizeof(struct be_mcc_mailbox);
+       mbox_mem_align->va = PTR_ALIGN(mbox_mem_alloc->va, 16);
+       mbox_mem_align->dma = PTR_ALIGN(mbox_mem_alloc->dma, 16);
+       memset(mbox_mem_align->va, 0, sizeof(struct be_mcc_mailbox));
+       spin_lock_init(&ctrl->cmd_lock);
+
+       val = ioread32(ctrl->pcicfg + PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET);
+       ctrl->pci_func = (val >> MEMBAR_CTRL_INT_CTRL_PFUNC_SHIFT) &
+                                       MEMBAR_CTRL_INT_CTRL_PFUNC_MASK;
+       return 0;
+}
+
+static void be_stats_cleanup(struct be_adapter *adapter)
+{
+       struct be_stats_obj *stats = &adapter->stats;
+       struct be_dma_mem *cmd = &stats->cmd;
+
+       if (cmd->va)
+               pci_free_consistent(adapter->pdev, cmd->size,
+                       cmd->va, cmd->dma);
+}
+
+static int be_stats_init(struct be_adapter *adapter)
+{
+       struct be_stats_obj *stats = &adapter->stats;
+       struct be_dma_mem *cmd = &stats->cmd;
+
+       cmd->size = sizeof(struct be_cmd_req_get_stats);
+       cmd->va = pci_alloc_consistent(adapter->pdev, cmd->size, &cmd->dma);
+       if (cmd->va == NULL)
+               return -1;
+       return 0;
+}
+
+static void __devexit be_remove(struct pci_dev *pdev)
+{
+       struct be_adapter *adapter = pci_get_drvdata(pdev);
+       if (!adapter)
+               return;
+
+       unregister_netdev(adapter->netdev);
+
+       be_stats_cleanup(adapter);
+
+       be_ctrl_cleanup(adapter);
+
+       if (adapter->msix_enabled) {
+               pci_disable_msix(adapter->pdev);
+               adapter->msix_enabled = false;
+       }
+
+       pci_set_drvdata(pdev, NULL);
+       pci_release_regions(pdev);
+       pci_disable_device(pdev);
+
+       free_netdev(adapter->netdev);
+}
+
+static int be_hw_up(struct be_adapter *adapter)
+{
+       struct be_ctrl_info *ctrl = &adapter->ctrl;
+       int status;
+
+       status = be_cmd_POST(ctrl);
+       if (status)
+               return status;
+
+       status = be_cmd_get_fw_ver(ctrl, adapter->fw_ver);
+       if (status)
+               return status;
+
+       status = be_cmd_query_fw_cfg(ctrl, &adapter->port_num);
+       return status;
+}
+
+static int __devinit be_probe(struct pci_dev *pdev,
+                       const struct pci_device_id *pdev_id)
+{
+       int status = 0;
+       struct be_adapter *adapter;
+       struct net_device *netdev;
+       struct be_ctrl_info *ctrl;
+       u8 mac[ETH_ALEN];
+
+       status = pci_enable_device(pdev);
+       if (status)
+               goto do_none;
+
+       status = pci_request_regions(pdev, DRV_NAME);
+       if (status)
+               goto disable_dev;
+       pci_set_master(pdev);
+
+       netdev = alloc_etherdev(sizeof(struct be_adapter));
+       if (netdev == NULL) {
+               status = -ENOMEM;
+               goto rel_reg;
+       }
+       adapter = netdev_priv(netdev);
+       adapter->pdev = pdev;
+       pci_set_drvdata(pdev, adapter);
+       adapter->netdev = netdev;
+
+       be_msix_enable(adapter);
+
+       status = pci_set_dma_mask(pdev, DMA_64BIT_MASK);
+       if (!status) {
+               netdev->features |= NETIF_F_HIGHDMA;
+       } else {
+               status = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
+               if (status) {
+                       dev_err(&pdev->dev, "Could not set PCI DMA Mask\n");
+                       goto free_netdev;
+               }
+       }
+
+       ctrl = &adapter->ctrl;
+       status = be_ctrl_init(adapter);
+       if (status)
+               goto free_netdev;
+
+       status = be_stats_init(adapter);
+       if (status)
+               goto ctrl_clean;
+
+       status = be_hw_up(adapter);
+       if (status)
+               goto stats_clean;
+
+       status = be_cmd_mac_addr_query(ctrl, mac, MAC_ADDRESS_TYPE_NETWORK,
+                       true /* permanent */, 0);
+       if (status)
+               goto stats_clean;
+       memcpy(netdev->dev_addr, mac, ETH_ALEN);
+
+       INIT_DELAYED_WORK(&adapter->work, be_worker);
+       be_netdev_init(netdev);
+       SET_NETDEV_DEV(netdev, &adapter->pdev->dev);
+
+       status = register_netdev(netdev);
+       if (status != 0)
+               goto stats_clean;
+
+       dev_info(&pdev->dev, BE_NAME " port %d\n", adapter->port_num);
+       return 0;
+
+stats_clean:
+       be_stats_cleanup(adapter);
+ctrl_clean:
+       be_ctrl_cleanup(adapter);
+free_netdev:
+       free_netdev(adapter->netdev);
+rel_reg:
+       pci_release_regions(pdev);
+disable_dev:
+       pci_disable_device(pdev);
+do_none:
+       dev_warn(&pdev->dev, BE_NAME " initialization failed\n");
+       return status;
+}
+
+static int be_suspend(struct pci_dev *pdev, pm_message_t state)
+{
+       struct be_adapter *adapter = pci_get_drvdata(pdev);
+       struct net_device *netdev =  adapter->netdev;
+
+       netif_device_detach(netdev);
+       if (netif_running(netdev)) {
+               rtnl_lock();
+               be_close(netdev);
+               rtnl_unlock();
+       }
+
+       pci_save_state(pdev);
+       pci_disable_device(pdev);
+       pci_set_power_state(pdev, pci_choose_state(pdev, state));
+       return 0;
+}
+
+static int be_resume(struct pci_dev *pdev)
+{
+       int status = 0;
+       struct be_adapter *adapter = pci_get_drvdata(pdev);
+       struct net_device *netdev =  adapter->netdev;
+
+       netif_device_detach(netdev);
+
+       status = pci_enable_device(pdev);
+       if (status)
+               return status;
+
+       pci_set_power_state(pdev, 0);
+       pci_restore_state(pdev);
+
+       be_vids_config(netdev);
+
+       if (netif_running(netdev)) {
+               rtnl_lock();
+               be_open(netdev);
+               rtnl_unlock();
+       }
+       netif_device_attach(netdev);
+       return 0;
+}
+
+static struct pci_driver be_driver = {
+       .name = DRV_NAME,
+       .id_table = be_dev_ids,
+       .probe = be_probe,
+       .remove = be_remove,
+       .suspend = be_suspend,
+       .resume = be_resume
+};
+
+static int __init be_init_module(void)
+{
+       if (rx_frag_size != 8192 && rx_frag_size != 4096
+               && rx_frag_size != 2048) {
+               printk(KERN_WARNING DRV_NAME
+                       " : Module param rx_frag_size must be 2048/4096/8192."
+                       " Using 2048\n");
+               rx_frag_size = 2048;
+       }
+       /* Ensure rx_frag_size is aligned to chache line */
+       if (SKB_DATA_ALIGN(rx_frag_size) != rx_frag_size) {
+               printk(KERN_WARNING DRV_NAME
+                       " : Bad module param rx_frag_size. Using 2048\n");
+               rx_frag_size = 2048;
+       }
+
+       return pci_register_driver(&be_driver);
+}
+module_init(be_init_module);
+
+static void __exit be_exit_module(void)
+{
+       pci_unregister_driver(&be_driver);
+}
+module_exit(be_exit_module);
index 15a5cf0..3cf2b92 100644 (file)
@@ -152,7 +152,7 @@ struct sw_rx_page {
 #define PAGES_PER_SGE                  (1 << PAGES_PER_SGE_SHIFT)
 #define SGE_PAGE_SIZE                  PAGE_SIZE
 #define SGE_PAGE_SHIFT                 PAGE_SHIFT
-#define SGE_PAGE_ALIGN(addr)           PAGE_ALIGN(addr)
+#define SGE_PAGE_ALIGN(addr)           PAGE_ALIGN((typeof(PAGE_SIZE))addr)
 
 #define BCM_RX_ETH_PAYLOAD_ALIGN       64
 
index a6c0b3a..3b0c249 100644 (file)
@@ -150,7 +150,6 @@ static void bnx2x_init_ind_wr(struct bnx2x *bp, u32 addr, const u32 *data,
 
 static void bnx2x_write_big_buf(struct bnx2x *bp, u32 addr, u32 len)
 {
-#ifdef USE_DMAE
        int offset = 0;
 
        if (bp->dmae_ready) {
@@ -164,9 +163,6 @@ static void bnx2x_write_big_buf(struct bnx2x *bp, u32 addr, u32 len)
                                 addr + offset, len);
        } else
                bnx2x_init_str_wr(bp, addr, bp->gunzip_buf, len);
-#else
-       bnx2x_init_str_wr(bp, addr, bp->gunzip_buf, len);
-#endif
 }
 
 static void bnx2x_init_fill(struct bnx2x *bp, u32 addr, int fill, u32 len)
index d3e7775..2e346a5 100644 (file)
@@ -57,7 +57,7 @@
 #include "bnx2x.h"
 #include "bnx2x_init.h"
 
-#define DRV_MODULE_VERSION     "1.45.26"
+#define DRV_MODULE_VERSION     "1.45.27"
 #define DRV_MODULE_RELDATE     "2009/01/26"
 #define BNX2X_BC_VER           0x040200
 
@@ -4035,10 +4035,10 @@ static void bnx2x_zero_sb(struct bnx2x *bp, int sb_id)
 {
        int port = BP_PORT(bp);
 
-       bnx2x_init_fill(bp, BAR_USTRORM_INTMEM +
+       bnx2x_init_fill(bp, USTORM_INTMEM_ADDR +
                        USTORM_SB_HOST_STATUS_BLOCK_OFFSET(port, sb_id), 0,
                        sizeof(struct ustorm_status_block)/4);
-       bnx2x_init_fill(bp, BAR_CSTRORM_INTMEM +
+       bnx2x_init_fill(bp, CSTORM_INTMEM_ADDR +
                        CSTORM_SB_HOST_STATUS_BLOCK_OFFSET(port, sb_id), 0,
                        sizeof(struct cstorm_status_block)/4);
 }
@@ -4092,18 +4092,18 @@ static void bnx2x_zero_def_sb(struct bnx2x *bp)
 {
        int func = BP_FUNC(bp);
 
-       bnx2x_init_fill(bp, BAR_USTRORM_INTMEM +
+       bnx2x_init_fill(bp, TSTORM_INTMEM_ADDR +
+                       TSTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(func), 0,
+                       sizeof(struct tstorm_def_status_block)/4);
+       bnx2x_init_fill(bp, USTORM_INTMEM_ADDR +
                        USTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(func), 0,
                        sizeof(struct ustorm_def_status_block)/4);
-       bnx2x_init_fill(bp, BAR_CSTRORM_INTMEM +
+       bnx2x_init_fill(bp, CSTORM_INTMEM_ADDR +
                        CSTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(func), 0,
                        sizeof(struct cstorm_def_status_block)/4);
-       bnx2x_init_fill(bp, BAR_XSTRORM_INTMEM +
+       bnx2x_init_fill(bp, XSTORM_INTMEM_ADDR +
                        XSTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(func), 0,
                        sizeof(struct xstorm_def_status_block)/4);
-       bnx2x_init_fill(bp, BAR_TSTRORM_INTMEM +
-                       TSTORM_DEF_SB_HOST_STATUS_BLOCK_OFFSET(func), 0,
-                       sizeof(struct tstorm_def_status_block)/4);
 }
 
 static void bnx2x_init_def_sb(struct bnx2x *bp,
@@ -4518,7 +4518,8 @@ static void bnx2x_init_context(struct bnx2x *bp)
                                (USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_TPA |
                                 USTORM_ETH_ST_CONTEXT_CONFIG_ENABLE_SGE_RING);
                        context->ustorm_st_context.common.sge_buff_size =
-                                       (u16)(BCM_PAGE_SIZE*PAGES_PER_SGE);
+                               (u16)min((u32)SGE_PAGE_SIZE*PAGES_PER_SGE,
+                                        (u32)0xffff);
                        context->ustorm_st_context.common.sge_page_base_hi =
                                                U64_HI(fp->rx_sge_mapping);
                        context->ustorm_st_context.common.sge_page_base_lo =
diff --git a/drivers/net/dnet.c b/drivers/net/dnet.c
new file mode 100644 (file)
index 0000000..5c347f7
--- /dev/null
@@ -0,0 +1,994 @@
+/*
+ * Dave DNET Ethernet Controller driver
+ *
+ * Copyright (C) 2008 Dave S.r.l. <www.dave.eu>
+ * Copyright (C) 2009 Ilya Yanok, Emcraft Systems Ltd, <yanok@emcraft.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#include <linux/version.h>
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <linux/slab.h>
+#include <linux/delay.h>
+#include <linux/init.h>
+#include <linux/netdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/dma-mapping.h>
+#include <linux/platform_device.h>
+#include <linux/phy.h>
+#include <linux/platform_device.h>
+
+#include "dnet.h"
+
+#undef DEBUG
+
+/* function for reading internal MAC register */
+u16 dnet_readw_mac(struct dnet *bp, u16 reg)
+{
+       u16 data_read;
+
+       /* issue a read */
+       dnet_writel(bp, reg, MACREG_ADDR);
+
+       /* since a read/write op to the MAC is very slow,
+        * we must wait before reading the data */
+       ndelay(500);
+
+       /* read data read from the MAC register */
+       data_read = dnet_readl(bp, MACREG_DATA);
+
+       /* all done */
+       return data_read;
+}
+
+/* function for writing internal MAC register */
+void dnet_writew_mac(struct dnet *bp, u16 reg, u16 val)
+{
+       /* load data to write */
+       dnet_writel(bp, val, MACREG_DATA);
+
+       /* issue a write */
+       dnet_writel(bp, reg | DNET_INTERNAL_WRITE, MACREG_ADDR);
+
+       /* since a read/write op to the MAC is very slow,
+        * we must wait before exiting */
+       ndelay(500);
+}
+
+static void __dnet_set_hwaddr(struct dnet *bp)
+{
+       u16 tmp;
+
+       tmp = cpu_to_be16(*((u16 *) bp->dev->dev_addr));
+       dnet_writew_mac(bp, DNET_INTERNAL_MAC_ADDR_0_REG, tmp);
+       tmp = cpu_to_be16(*((u16 *) (bp->dev->dev_addr + 2)));
+       dnet_writew_mac(bp, DNET_INTERNAL_MAC_ADDR_1_REG, tmp);
+       tmp = cpu_to_be16(*((u16 *) (bp->dev->dev_addr + 4)));
+       dnet_writew_mac(bp, DNET_INTERNAL_MAC_ADDR_2_REG, tmp);
+}
+
+static void __devinit dnet_get_hwaddr(struct dnet *bp)
+{
+       u16 tmp;
+       u8 addr[6];
+
+       /*
+        * from MAC docs:
+        * "Note that the MAC address is stored in the registers in Hexadecimal
+        * form. For example, to set the MAC Address to: AC-DE-48-00-00-80
+        * would require writing 0xAC (octet 0) to address 0x0B (high byte of
+        * Mac_addr[15:0]), 0xDE (octet 1) to address 0x0A (Low byte of
+        * Mac_addr[15:0]), 0x48 (octet 2) to address 0x0D (high byte of
+        * Mac_addr[15:0]), 0x00 (octet 3) to address 0x0C (Low byte of
+        * Mac_addr[15:0]), 0x00 (octet 4) to address 0x0F (high byte of
+        * Mac_addr[15:0]), and 0x80 (octet 5) to address * 0x0E (Low byte of
+        * Mac_addr[15:0]).
+        */
+       tmp = dnet_readw_mac(bp, DNET_INTERNAL_MAC_ADDR_0_REG);
+       *((u16 *) addr) = be16_to_cpu(tmp);
+       tmp = dnet_readw_mac(bp, DNET_INTERNAL_MAC_ADDR_1_REG);
+       *((u16 *) (addr + 2)) = be16_to_cpu(tmp);
+       tmp = dnet_readw_mac(bp, DNET_INTERNAL_MAC_ADDR_2_REG);
+       *((u16 *) (addr + 4)) = be16_to_cpu(tmp);
+
+       if (is_valid_ether_addr(addr))
+               memcpy(bp->dev->dev_addr, addr, sizeof(addr));
+}
+
+static int dnet_mdio_read(struct mii_bus *bus, int mii_id, int regnum)
+{
+       struct dnet *bp = bus->priv;
+       u16 value;
+
+       while (!(dnet_readw_mac(bp, DNET_INTERNAL_GMII_MNG_CTL_REG)
+                               & DNET_INTERNAL_GMII_MNG_CMD_FIN))
+               cpu_relax();
+
+       /* only 5 bits allowed for phy-addr and reg_offset */
+       mii_id &= 0x1f;
+       regnum &= 0x1f;
+
+       /* prepare reg_value for a read */
+       value = (mii_id << 8);
+       value |= regnum;
+
+       /* write control word */
+       dnet_writew_mac(bp, DNET_INTERNAL_GMII_MNG_CTL_REG, value);
+
+       /* wait for end of transfer */
+       while (!(dnet_readw_mac(bp, DNET_INTERNAL_GMII_MNG_CTL_REG)
+                               & DNET_INTERNAL_GMII_MNG_CMD_FIN))
+               cpu_relax();
+
+       value = dnet_readw_mac(bp, DNET_INTERNAL_GMII_MNG_DAT_REG);
+
+       pr_debug("mdio_read %02x:%02x <- %04x\n", mii_id, regnum, value);
+
+       return value;
+}
+
+static int dnet_mdio_write(struct mii_bus *bus, int mii_id, int regnum,
+                          u16 value)
+{
+       struct dnet *bp = bus->priv;
+       u16 tmp;
+
+       pr_debug("mdio_write %02x:%02x <- %04x\n", mii_id, regnum, value);
+
+       while (!(dnet_readw_mac(bp, DNET_INTERNAL_GMII_MNG_CTL_REG)
+                               & DNET_INTERNAL_GMII_MNG_CMD_FIN))
+               cpu_relax();
+
+       /* prepare for a write operation */
+       tmp = (1 << 13);
+
+       /* only 5 bits allowed for phy-addr and reg_offset */
+       mii_id &= 0x1f;
+       regnum &= 0x1f;
+
+       /* only 16 bits on data */
+       value &= 0xffff;
+
+       /* prepare reg_value for a write */
+       tmp |= (mii_id << 8);
+       tmp |= regnum;
+
+       /* write data to write first */
+       dnet_writew_mac(bp, DNET_INTERNAL_GMII_MNG_DAT_REG, value);
+
+       /* write control word */
+       dnet_writew_mac(bp, DNET_INTERNAL_GMII_MNG_CTL_REG, tmp);
+
+       while (!(dnet_readw_mac(bp, DNET_INTERNAL_GMII_MNG_CTL_REG)
+                               & DNET_INTERNAL_GMII_MNG_CMD_FIN))
+               cpu_relax();
+
+       return 0;
+}
+
+static int dnet_mdio_reset(struct mii_bus *bus)
+{
+       return 0;
+}
+
+static void dnet_handle_link_change(struct net_device *dev)
+{
+       struct dnet *bp = netdev_priv(dev);
+       struct phy_device *phydev = bp->phy_dev;
+       unsigned long flags;
+       u32 mode_reg, ctl_reg;
+
+       int status_change = 0;
+
+       spin_lock_irqsave(&bp->lock, flags);
+
+       mode_reg = dnet_readw_mac(bp, DNET_INTERNAL_MODE_REG);
+       ctl_reg = dnet_readw_mac(bp, DNET_INTERNAL_RXTX_CONTROL_REG);
+
+       if (phydev->link) {
+               if (bp->duplex != phydev->duplex) {
+                       if (phydev->duplex)
+                               ctl_reg &=
+                                   ~(DNET_INTERNAL_RXTX_CONTROL_ENABLEHALFDUP);
+                       else
+                               ctl_reg |=
+                                   DNET_INTERNAL_RXTX_CONTROL_ENABLEHALFDUP;
+
+                       bp->duplex = phydev->duplex;
+                       status_change = 1;
+               }
+
+               if (bp->speed != phydev->speed) {
+                       status_change = 1;
+                       switch (phydev->speed) {
+                       case 1000:
+                               mode_reg |= DNET_INTERNAL_MODE_GBITEN;
+                               break;
+                       case 100:
+                       case 10:
+                               mode_reg &= ~DNET_INTERNAL_MODE_GBITEN;
+                               break;
+                       default:
+                               printk(KERN_WARNING
+                                      "%s: Ack!  Speed (%d) is not "
+                                      "10/100/1000!\n", dev->name,
+                                      phydev->speed);
+                               break;
+                       }
+                       bp->speed = phydev->speed;
+               }
+       }
+
+       if (phydev->link != bp->link) {
+               if (phydev->link) {
+                       mode_reg |=
+                           (DNET_INTERNAL_MODE_RXEN | DNET_INTERNAL_MODE_TXEN);
+               } else {
+                       mode_reg &=
+                           ~(DNET_INTERNAL_MODE_RXEN |
+                             DNET_INTERNAL_MODE_TXEN);
+                       bp->speed = 0;
+                       bp->duplex = -1;
+               }
+               bp->link = phydev->link;
+
+               status_change = 1;
+       }
+
+       if (status_change) {
+               dnet_writew_mac(bp, DNET_INTERNAL_RXTX_CONTROL_REG, ctl_reg);
+               dnet_writew_mac(bp, DNET_INTERNAL_MODE_REG, mode_reg);
+       }
+
+       spin_unlock_irqrestore(&bp->lock, flags);
+
+       if (status_change) {
+               if (phydev->link)
+                       printk(KERN_INFO "%s: link up (%d/%s)\n",
+                              dev->name, phydev->speed,
+                              DUPLEX_FULL == phydev->duplex ? "Full" : "Half");
+               else
+                       printk(KERN_INFO "%s: link down\n", dev->name);
+       }
+}
+
+static int dnet_mii_probe(struct net_device *dev)
+{
+       struct dnet *bp = netdev_priv(dev);
+       struct phy_device *phydev = NULL;
+       int phy_addr;
+
+       /* find the first phy */
+       for (phy_addr = 0; phy_addr < PHY_MAX_ADDR; phy_addr++) {
+               if (bp->mii_bus->phy_map[phy_addr]) {
+                       phydev = bp->mii_bus->phy_map[phy_addr];
+                       break;
+               }
+       }
+
+       if (!phydev) {
+               printk(KERN_ERR "%s: no PHY found\n", dev->name);
+               return -ENODEV;
+       }
+
+       /* TODO : add pin_irq */
+
+       /* attach the mac to the phy */
+       if (bp->capabilities & DNET_HAS_RMII) {
+               phydev = phy_connect(dev, phydev->dev.bus_id,
+                                    &dnet_handle_link_change, 0,
+                                    PHY_INTERFACE_MODE_RMII);
+       } else {
+               phydev = phy_connect(dev, phydev->dev.bus_id,
+                                    &dnet_handle_link_change, 0,
+                                    PHY_INTERFACE_MODE_MII);
+       }
+
+       if (IS_ERR(phydev)) {
+               printk(KERN_ERR "%s: Could not attach to PHY\n", dev->name);
+               return PTR_ERR(phydev);
+       }
+
+       /* mask with MAC supported features */
+       if (bp->capabilities & DNET_HAS_GIGABIT)
+               phydev->supported &= PHY_GBIT_FEATURES;
+       else
+               phydev->supported &= PHY_BASIC_FEATURES;
+
+       phydev->supported |= SUPPORTED_Asym_Pause | SUPPORTED_Pause;
+
+       phydev->advertising = phydev->supported;
+
+       bp->link = 0;
+       bp->speed = 0;
+       bp->duplex = -1;
+       bp->phy_dev = phydev;
+
+       return 0;
+}
+
+static int dnet_mii_init(struct dnet *bp)
+{
+       int err, i;
+
+       bp->mii_bus = mdiobus_alloc();
+       if (bp->mii_bus == NULL)
+               return -ENOMEM;
+
+       bp->mii_bus->name = "dnet_mii_bus";
+       bp->mii_bus->read = &dnet_mdio_read;
+       bp->mii_bus->write = &dnet_mdio_write;
+       bp->mii_bus->reset = &dnet_mdio_reset;
+
+       snprintf(bp->mii_bus->id, MII_BUS_ID_SIZE, "%x", 0);
+
+       bp->mii_bus->priv = bp;
+
+       bp->mii_bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
+       if (!bp->mii_bus->irq) {
+               err = -ENOMEM;
+               goto err_out;
+       }
+
+       for (i = 0; i < PHY_MAX_ADDR; i++)
+               bp->mii_bus->irq[i] = PHY_POLL;
+
+       platform_set_drvdata(bp->dev, bp->mii_bus);
+
+       if (mdiobus_register(bp->mii_bus)) {
+               err = -ENXIO;
+               goto err_out_free_mdio_irq;
+       }
+
+       if (dnet_mii_probe(bp->dev) != 0) {
+               err = -ENXIO;
+               goto err_out_unregister_bus;
+       }
+
+       return 0;
+
+err_out_unregister_bus:
+       mdiobus_unregister(bp->mii_bus);
+err_out_free_mdio_irq:
+       kfree(bp->mii_bus->irq);
+err_out:
+       mdiobus_free(bp->mii_bus);
+       return err;
+}
+
+/* For Neptune board: LINK1000 as Link LED and TX as activity LED */
+int dnet_phy_marvell_fixup(struct phy_device *phydev)
+{
+       return phy_write(phydev, 0x18, 0x4148);
+}
+
+static void dnet_update_stats(struct dnet *bp)
+{
+       u32 __iomem *reg = bp->regs + DNET_RX_PKT_IGNR_CNT;
+       u32 *p = &bp->hw_stats.rx_pkt_ignr;
+       u32 *end = &bp->hw_stats.rx_byte + 1;
+
+       WARN_ON((unsigned long)(end - p - 1) !=
+               (DNET_RX_BYTE_CNT - DNET_RX_PKT_IGNR_CNT) / 4);
+
+       for (; p < end; p++, reg++)
+               *p += readl(reg);
+
+       reg = bp->regs + DNET_TX_UNICAST_CNT;
+       p = &bp->hw_stats.tx_unicast;
+       end = &bp->hw_stats.tx_byte + 1;
+
+       WARN_ON((unsigned long)(end - p - 1) !=
+               (DNET_TX_BYTE_CNT - DNET_TX_UNICAST_CNT) / 4);
+
+       for (; p < end; p++, reg++)
+               *p += readl(reg);
+}
+
+static int dnet_poll(struct napi_struct *napi, int budget)
+{
+       struct dnet *bp = container_of(napi, struct dnet, napi);
+       struct net_device *dev = bp->dev;
+       int npackets = 0;
+       unsigned int pkt_len;
+       struct sk_buff *skb;
+       unsigned int *data_ptr;
+       u32 int_enable;
+       u32 cmd_word;
+       int i;
+
+       while (npackets < budget) {
+               /*
+                * break out of while loop if there are no more
+                * packets waiting
+                */
+               if (!(dnet_readl(bp, RX_FIFO_WCNT) >> 16)) {
+                       napi_complete(napi);
+                       int_enable = dnet_readl(bp, INTR_ENB);
+                       int_enable |= DNET_INTR_SRC_RX_CMDFIFOAF;
+                       dnet_writel(bp, int_enable, INTR_ENB);
+                       return 0;
+               }
+
+               cmd_word = dnet_readl(bp, RX_LEN_FIFO);
+               pkt_len = cmd_word & 0xFFFF;
+
+               if (cmd_word & 0xDF180000)
+                       printk(KERN_ERR "%s packet receive error %x\n",
+                              __func__, cmd_word);
+
+               skb = dev_alloc_skb(pkt_len + 5);
+               if (skb != NULL) {
+                       /* Align IP on 16 byte boundaries */
+                       skb_reserve(skb, 2);
+                       /*
+                        * 'skb_put()' points to the start of sk_buff
+                        * data area.
+                        */
+                       data_ptr = (unsigned int *)skb_put(skb, pkt_len);
+                       for (i = 0; i < (pkt_len + 3) >> 2; i++)
+                               *data_ptr++ = dnet_readl(bp, RX_DATA_FIFO);
+                       skb->protocol = eth_type_trans(skb, dev);
+                       netif_receive_skb(skb);
+                       npackets++;
+               } else
+                       printk(KERN_NOTICE
+                              "%s: No memory to allocate a sk_buff of "
+                              "size %u.\n", dev->name, pkt_len);
+       }
+
+       budget -= npackets;
+
+       if (npackets < budget) {
+               /* We processed all packets available.  Tell NAPI it can
+                * stop polling then re-enable rx interrupts */
+               napi_complete(napi);
+               int_enable = dnet_readl(bp, INTR_ENB);
+               int_enable |= DNET_INTR_SRC_RX_CMDFIFOAF;
+               dnet_writel(bp, int_enable, INTR_ENB);
+               return 0;
+       }
+
+       /* There are still packets waiting */
+       return 1;
+}
+
+static irqreturn_t dnet_interrupt(int irq, void *dev_id)
+{
+       struct net_device *dev = dev_id;
+       struct dnet *bp = netdev_priv(dev);
+       u32 int_src, int_enable, int_current;
+       unsigned long flags;
+       unsigned int handled = 0;
+
+       spin_lock_irqsave(&bp->lock, flags);
+
+       /* read and clear the DNET irq (clear on read) */
+       int_src = dnet_readl(bp, INTR_SRC);
+       int_enable = dnet_readl(bp, INTR_ENB);
+       int_current = int_src & int_enable;
+
+       /* restart the queue if we had stopped it for TX fifo almost full */
+       if (int_current & DNET_INTR_SRC_TX_FIFOAE) {
+               int_enable = dnet_readl(bp, INTR_ENB);
+               int_enable &= ~DNET_INTR_ENB_TX_FIFOAE;
+               dnet_writel(bp, int_enable, INTR_ENB);
+               netif_wake_queue(dev);
+               handled = 1;
+       }
+
+       /* RX FIFO error checking */
+       if (int_current &
+           (DNET_INTR_SRC_RX_CMDFIFOFF | DNET_INTR_SRC_RX_DATAFIFOFF)) {
+               printk(KERN_ERR "%s: RX fifo error %x, irq %x\n", __func__,
+                      dnet_readl(bp, RX_STATUS), int_current);
+               /* we can only flush the RX FIFOs */
+               dnet_writel(bp, DNET_SYS_CTL_RXFIFOFLUSH, SYS_CTL);
+               ndelay(500);
+               dnet_writel(bp, 0, SYS_CTL);
+               handled = 1;
+       }
+
+       /* TX FIFO error checking */
+       if (int_current &
+           (DNET_INTR_SRC_TX_FIFOFULL | DNET_INTR_SRC_TX_DISCFRM)) {
+               printk(KERN_ERR "%s: TX fifo error %x, irq %x\n", __func__,
+                      dnet_readl(bp, TX_STATUS), int_current);
+               /* we can only flush the TX FIFOs */
+               dnet_writel(bp, DNET_SYS_CTL_TXFIFOFLUSH, SYS_CTL);
+               ndelay(500);
+               dnet_writel(bp, 0, SYS_CTL);
+               handled = 1;
+       }
+
+       if (int_current & DNET_INTR_SRC_RX_CMDFIFOAF) {
+               if (napi_schedule_prep(&bp->napi)) {
+                       /*
+                        * There's no point taking any more interrupts
+                        * until we have processed the buffers
+                        */
+                       /* Disable Rx interrupts and schedule NAPI poll */
+                       int_enable = dnet_readl(bp, INTR_ENB);
+                       int_enable &= ~DNET_INTR_SRC_RX_CMDFIFOAF;
+                       dnet_writel(bp, int_enable, INTR_ENB);
+                       __napi_schedule(&bp->napi);
+               }
+               handled = 1;
+       }
+
+       if (!handled)
+               pr_debug("%s: irq %x remains\n", __func__, int_current);
+
+       spin_unlock_irqrestore(&bp->lock, flags);
+
+       return IRQ_RETVAL(handled);
+}
+
+#ifdef DEBUG
+static inline void dnet_print_skb(struct sk_buff *skb)
+{
+       int k;
+       printk(KERN_DEBUG PFX "data:");
+       for (k = 0; k < skb->len; k++)
+               printk(" %02x", (unsigned int)skb->data[k]);
+       printk("\n");
+}
+#else
+#define dnet_print_skb(skb)    do {} while (0)
+#endif
+
+static int dnet_start_xmit(struct sk_buff *skb, struct net_device *dev)
+{
+
+       struct dnet *bp = netdev_priv(dev);
+       u32 tx_status, irq_enable;
+       unsigned int len, i, tx_cmd, wrsz;
+       unsigned long flags;
+       unsigned int *bufp;
+
+       tx_status = dnet_readl(bp, TX_STATUS);
+
+       pr_debug("start_xmit: len %u head %p data %p\n",
+              skb->len, skb->head, skb->data);
+       dnet_print_skb(skb);
+
+       /* frame size (words) */
+       len = (skb->len + 3) >> 2;
+
+       spin_lock_irqsave(&bp->lock, flags);
+
+       tx_status = dnet_readl(bp, TX_STATUS);
+
+       bufp = (unsigned int *)(((unsigned long) skb->data) & ~0x3UL);
+       wrsz = (u32) skb->len + 3;
+       wrsz += ((unsigned long) skb->data) & 0x3;
+       wrsz >>= 2;
+       tx_cmd = ((((unsigned long)(skb->data)) & 0x03) << 16) | (u32) skb->len;
+
+       /* check if there is enough room for the current frame */
+       if (wrsz < (DNET_FIFO_SIZE - dnet_readl(bp, TX_FIFO_WCNT))) {
+               for (i = 0; i < wrsz; i++)
+                       dnet_writel(bp, *bufp++, TX_DATA_FIFO);
+
+               /*
+                * inform MAC that a packet's written and ready to be
+                * shipped out
+                */
+               dnet_writel(bp, tx_cmd, TX_LEN_FIFO);
+       }
+
+       if (dnet_readl(bp, TX_FIFO_WCNT) > DNET_FIFO_TX_DATA_AF_TH) {
+               netif_stop_queue(dev);
+               tx_status = dnet_readl(bp, INTR_SRC);
+               irq_enable = dnet_readl(bp, INTR_ENB);
+               irq_enable |= DNET_INTR_ENB_TX_FIFOAE;
+               dnet_writel(bp, irq_enable, INTR_ENB);
+       }
+
+       /* free the buffer */
+       dev_kfree_skb(skb);
+
+       spin_unlock_irqrestore(&bp->lock, flags);
+
+       dev->trans_start = jiffies;
+
+       return 0;
+}
+
+static void dnet_reset_hw(struct dnet *bp)
+{
+       /* put ts_mac in IDLE state i.e. disable rx/tx */
+       dnet_writew_mac(bp, DNET_INTERNAL_MODE_REG, DNET_INTERNAL_MODE_FCEN);
+
+       /*
+        * RX FIFO almost full threshold: only cmd FIFO almost full is
+        * implemented for RX side
+        */
+       dnet_writel(bp, DNET_FIFO_RX_CMD_AF_TH, RX_FIFO_TH);
+       /*
+        * TX FIFO almost empty threshold: only data FIFO almost empty
+        * is implemented for TX side
+        */
+       dnet_writel(bp, DNET_FIFO_TX_DATA_AE_TH, TX_FIFO_TH);
+
+       /* flush rx/tx fifos */
+       dnet_writel(bp, DNET_SYS_CTL_RXFIFOFLUSH | DNET_SYS_CTL_TXFIFOFLUSH,
+                       SYS_CTL);
+       msleep(1);
+       dnet_writel(bp, 0, SYS_CTL);
+}
+
+static void dnet_init_hw(struct dnet *bp)
+{
+       u32 config;
+
+       dnet_reset_hw(bp);
+       __dnet_set_hwaddr(bp);
+
+       config = dnet_readw_mac(bp, DNET_INTERNAL_RXTX_CONTROL_REG);
+
+       if (bp->dev->flags & IFF_PROMISC)
+               /* Copy All Frames */
+               config |= DNET_INTERNAL_RXTX_CONTROL_ENPROMISC;
+       if (!(bp->dev->flags & IFF_BROADCAST))
+               /* No BroadCast */
+               config |= DNET_INTERNAL_RXTX_CONTROL_RXMULTICAST;
+
+       config |= DNET_INTERNAL_RXTX_CONTROL_RXPAUSE |
+           DNET_INTERNAL_RXTX_CONTROL_RXBROADCAST |
+           DNET_INTERNAL_RXTX_CONTROL_DROPCONTROL |
+           DNET_INTERNAL_RXTX_CONTROL_DISCFXFCS;
+
+       dnet_writew_mac(bp, DNET_INTERNAL_RXTX_CONTROL_REG, config);
+
+       /* clear irq before enabling them */
+       config = dnet_readl(bp, INTR_SRC);
+
+       /* enable RX/TX interrupt, recv packet ready interrupt */
+       dnet_writel(bp, DNET_INTR_ENB_GLOBAL_ENABLE | DNET_INTR_ENB_RX_SUMMARY |
+                       DNET_INTR_ENB_TX_SUMMARY | DNET_INTR_ENB_RX_FIFOERR |
+                       DNET_INTR_ENB_RX_ERROR | DNET_INTR_ENB_RX_FIFOFULL |
+                       DNET_INTR_ENB_TX_FIFOFULL | DNET_INTR_ENB_TX_DISCFRM |
+                       DNET_INTR_ENB_RX_PKTRDY, INTR_ENB);
+}
+
+static int dnet_open(struct net_device *dev)
+{
+       struct dnet *bp = netdev_priv(dev);
+
+       /* if the phy is not yet register, retry later */
+       if (!bp->phy_dev)
+               return -EAGAIN;
+
+       if (!is_valid_ether_addr(dev->dev_addr))
+               return -EADDRNOTAVAIL;
+
+       napi_enable(&bp->napi);
+       dnet_init_hw(bp);
+
+       phy_start_aneg(bp->phy_dev);
+
+       /* schedule a link state check */
+       phy_start(bp->phy_dev);
+
+       netif_start_queue(dev);
+
+       return 0;
+}
+
+static int dnet_close(struct net_device *dev)
+{
+       struct dnet *bp = netdev_priv(dev);
+
+       netif_stop_queue(dev);
+       napi_disable(&bp->napi);
+
+       if (bp->phy_dev)
+               phy_stop(bp->phy_dev);
+
+       dnet_reset_hw(bp);
+       netif_carrier_off(dev);
+
+       return 0;
+}
+
+static inline void dnet_print_pretty_hwstats(struct dnet_stats *hwstat)
+{
+       pr_debug("%s\n", __func__);
+       pr_debug("----------------------------- RX statistics "
+                "-------------------------------\n");
+       pr_debug("RX_PKT_IGNR_CNT %-8x\n", hwstat->rx_pkt_ignr);
+       pr_debug("RX_LEN_CHK_ERR_CNT %-8x\n", hwstat->rx_len_chk_err);
+       pr_debug("RX_LNG_FRM_CNT %-8x\n", hwstat->rx_lng_frm);
+       pr_debug("RX_SHRT_FRM_CNT %-8x\n", hwstat->rx_shrt_frm);
+       pr_debug("RX_IPG_VIOL_CNT %-8x\n", hwstat->rx_ipg_viol);
+       pr_debug("RX_CRC_ERR_CNT %-8x\n", hwstat->rx_crc_err);
+       pr_debug("RX_OK_PKT_CNT %-8x\n", hwstat->rx_ok_pkt);
+       pr_debug("RX_CTL_FRM_CNT %-8x\n", hwstat->rx_ctl_frm);
+       pr_debug("RX_PAUSE_FRM_CNT %-8x\n", hwstat->rx_pause_frm);
+       pr_debug("RX_MULTICAST_CNT %-8x\n", hwstat->rx_multicast);
+       pr_debug("RX_BROADCAST_CNT %-8x\n", hwstat->rx_broadcast);
+       pr_debug("RX_VLAN_TAG_CNT %-8x\n", hwstat->rx_vlan_tag);
+       pr_debug("RX_PRE_SHRINK_CNT %-8x\n", hwstat->rx_pre_shrink);
+       pr_debug("RX_DRIB_NIB_CNT %-8x\n", hwstat->rx_drib_nib);
+       pr_debug("RX_UNSUP_OPCD_CNT %-8x\n", hwstat->rx_unsup_opcd);
+       pr_debug("RX_BYTE_CNT %-8x\n", hwstat->rx_byte);
+       pr_debug("----------------------------- TX statistics "
+                "-------------------------------\n");
+       pr_debug("TX_UNICAST_CNT %-8x\n", hwstat->tx_unicast);
+       pr_debug("TX_PAUSE_FRM_CNT %-8x\n", hwstat->tx_pause_frm);
+       pr_debug("TX_MULTICAST_CNT %-8x\n", hwstat->tx_multicast);
+       pr_debug("TX_BRDCAST_CNT %-8x\n", hwstat->tx_brdcast);
+       pr_debug("TX_VLAN_TAG_CNT %-8x\n", hwstat->tx_vlan_tag);
+       pr_debug("TX_BAD_FCS_CNT %-8x\n", hwstat->tx_bad_fcs);
+       pr_debug("TX_JUMBO_CNT %-8x\n", hwstat->tx_jumbo);
+       pr_debug("TX_BYTE_CNT %-8x\n", hwstat->tx_byte);
+}
+
+static struct net_device_stats *dnet_get_stats(struct net_device *dev)
+{
+
+       struct dnet *bp = netdev_priv(dev);
+       struct net_device_stats *nstat = &dev->stats;
+       struct dnet_stats *hwstat = &bp->hw_stats;
+
+       /* read stats from hardware */
+       dnet_update_stats(bp);
+
+       /* Convert HW stats into netdevice stats */
+       nstat->rx_errors = (hwstat->rx_len_chk_err +
+                           hwstat->rx_lng_frm + hwstat->rx_shrt_frm +
+                           /* ignore IGP violation error
+                           hwstat->rx_ipg_viol + */
+                           hwstat->rx_crc_err +
+                           hwstat->rx_pre_shrink +
+                           hwstat->rx_drib_nib + hwstat->rx_unsup_opcd);
+       nstat->tx_errors = hwstat->tx_bad_fcs;
+       nstat->rx_length_errors = (hwstat->rx_len_chk_err +
+                                  hwstat->rx_lng_frm +
+                                  hwstat->rx_shrt_frm + hwstat->rx_pre_shrink);
+       nstat->rx_crc_errors = hwstat->rx_crc_err;
+       nstat->rx_frame_errors = hwstat->rx_pre_shrink + hwstat->rx_drib_nib;
+       nstat->rx_packets = hwstat->rx_ok_pkt;
+       nstat->tx_packets = (hwstat->tx_unicast +
+                            hwstat->tx_multicast + hwstat->tx_brdcast);
+       nstat->rx_bytes = hwstat->rx_byte;
+       nstat->tx_bytes = hwstat->tx_byte;
+       nstat->multicast = hwstat->rx_multicast;
+       nstat->rx_missed_errors = hwstat->rx_pkt_ignr;
+
+       dnet_print_pretty_hwstats(hwstat);
+
+       return nstat;
+}
+
+static int dnet_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
+{
+       struct dnet *bp = netdev_priv(dev);
+       struct phy_device *phydev = bp->phy_dev;
+
+       if (!phydev)
+               return -ENODEV;
+
+       return phy_ethtool_gset(phydev, cmd);
+}
+
+static int dnet_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
+{
+       struct dnet *bp = netdev_priv(dev);
+       struct phy_device *phydev = bp->phy_dev;
+
+       if (!phydev)
+               return -ENODEV;
+
+       return phy_ethtool_sset(phydev, cmd);
+}
+
+static int dnet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
+{
+       struct dnet *bp = netdev_priv(dev);
+       struct phy_device *phydev = bp->phy_dev;
+
+       if (!netif_running(dev))
+               return -EINVAL;
+
+       if (!phydev)
+               return -ENODEV;
+
+       return phy_mii_ioctl(phydev, if_mii(rq), cmd);
+}
+
+static void dnet_get_drvinfo(struct net_device *dev,
+                            struct ethtool_drvinfo *info)
+{
+       strcpy(info->driver, DRV_NAME);
+       strcpy(info->version, DRV_VERSION);
+       strcpy(info->bus_info, "0");
+}
+
+static const struct ethtool_ops dnet_ethtool_ops = {
+       .get_settings           = dnet_get_settings,
+       .set_settings           = dnet_set_settings,
+       .get_drvinfo            = dnet_get_drvinfo,
+       .get_link               = ethtool_op_get_link,
+};
+
+static const struct net_device_ops dnet_netdev_ops = {
+       .ndo_open               = dnet_open,
+       .ndo_stop               = dnet_close,
+       .ndo_get_stats          = dnet_get_stats,
+       .ndo_start_xmit         = dnet_start_xmit,
+       .ndo_do_ioctl           = dnet_ioctl,
+       .ndo_set_mac_address    = eth_mac_addr,
+       .ndo_validate_addr      = eth_validate_addr,
+       .ndo_change_mtu         = eth_change_mtu,
+};
+
+static int __devinit dnet_probe(struct platform_device *pdev)
+{
+       struct resource *res;
+       struct net_device *dev;
+       struct dnet *bp;
+       struct phy_device *phydev;
+       int err = -ENXIO;
+       unsigned int mem_base, mem_size, irq;
+
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       if (!res) {
+               dev_err(&pdev->dev, "no mmio resource defined\n");
+               goto err_out;
+       }
+       mem_base = res->start;
+       mem_size = resource_size(res);
+       irq = platform_get_irq(pdev, 0);
+
+       if (!request_mem_region(mem_base, mem_size, DRV_NAME)) {
+               dev_err(&pdev->dev, "no memory region available\n");
+               err = -EBUSY;
+               goto err_out;
+       }
+
+       err = -ENOMEM;
+       dev = alloc_etherdev(sizeof(*bp));
+       if (!dev) {
+               dev_err(&pdev->dev, "etherdev alloc failed, aborting.\n");
+               goto err_out;
+       }
+
+       /* TODO: Actually, we have some interesting features... */
+       dev->features |= 0;
+
+       bp = netdev_priv(dev);
+       bp->dev = dev;
+
+       SET_NETDEV_DEV(dev, &pdev->dev);
+
+       spin_lock_init(&bp->lock);
+
+       bp->regs = ioremap(mem_base, mem_size);
+       if (!bp->regs) {
+               dev_err(&pdev->dev, "failed to map registers, aborting.\n");
+               err = -ENOMEM;
+               goto err_out_free_dev;
+       }
+
+       dev->irq = irq;
+       err = request_irq(dev->irq, dnet_interrupt, 0, DRV_NAME, dev);
+       if (err) {
+               dev_err(&pdev->dev, "Unable to request IRQ %d (error %d)\n",
+                      irq, err);
+               goto err_out_iounmap;
+       }
+
+       dev->netdev_ops = &dnet_netdev_ops;
+       netif_napi_add(dev, &bp->napi, dnet_poll, 64);
+       dev->ethtool_ops = &dnet_ethtool_ops;
+
+       dev->base_addr = (unsigned long)bp->regs;
+
+       bp->capabilities = dnet_readl(bp, VERCAPS) & DNET_CAPS_MASK;
+
+       dnet_get_hwaddr(bp);
+
+       if (!is_valid_ether_addr(dev->dev_addr)) {
+               /* choose a random ethernet address */
+               random_ether_addr(dev->dev_addr);
+               __dnet_set_hwaddr(bp);
+       }
+
+       err = register_netdev(dev);
+       if (err) {
+               dev_err(&pdev->dev, "Cannot register net device, aborting.\n");
+               goto err_out_free_irq;
+       }
+
+       /* register the PHY board fixup (for Marvell 88E1111) */
+       err = phy_register_fixup_for_uid(0x01410cc0, 0xfffffff0,
+                                        dnet_phy_marvell_fixup);
+       /* we can live without it, so just issue a warning */
+       if (err)
+               dev_warn(&pdev->dev, "Cannot register PHY board fixup.\n");
+
+       if (dnet_mii_init(bp) != 0)
+               goto err_out_unregister_netdev;
+
+       dev_info(&pdev->dev, "Dave DNET at 0x%p (0x%08x) irq %d %pM\n",
+              bp->regs, mem_base, dev->irq, dev->dev_addr);
+       dev_info(&pdev->dev, "has %smdio, %sirq, %sgigabit, %sdma \n",
+              (bp->capabilities & DNET_HAS_MDIO) ? "" : "no ",
+              (bp->capabilities & DNET_HAS_IRQ) ? "" : "no ",
+              (bp->capabilities & DNET_HAS_GIGABIT) ? "" : "no ",
+              (bp->capabilities & DNET_HAS_DMA) ? "" : "no ");
+       phydev = bp->phy_dev;
+       dev_info(&pdev->dev, "attached PHY driver [%s] "
+              "(mii_bus:phy_addr=%s, irq=%d)\n",
+              phydev->drv->name, phydev->dev.bus_id, phydev->irq);
+
+       return 0;
+
+err_out_unregister_netdev:
+       unregister_netdev(dev);
+err_out_free_irq:
+       free_irq(dev->irq, dev);
+err_out_iounmap:
+       iounmap(bp->regs);
+err_out_free_dev:
+       free_netdev(dev);
+err_out:
+       return err;
+}
+
+static int __devexit dnet_remove(struct platform_device *pdev)
+{
+
+       struct net_device *dev;
+       struct dnet *bp;
+
+       dev = platform_get_drvdata(pdev);
+
+       if (dev) {
+               bp = netdev_priv(dev);
+               if (bp->phy_dev)
+                       phy_disconnect(bp->phy_dev);
+               mdiobus_unregister(bp->mii_bus);
+               kfree(bp->mii_bus->irq);
+               mdiobus_free(bp->mii_bus);
+               unregister_netdev(dev);
+               free_irq(dev->irq, dev);
+               iounmap(bp->regs);
+               free_netdev(dev);
+       }
+
+       return 0;
+}
+
+static struct platform_driver dnet_driver = {
+       .probe          = dnet_probe,
+       .remove         = __devexit_p(dnet_remove),
+       .driver         = {
+               .name           = "dnet",
+       },
+};
+
+static int __init dnet_init(void)
+{
+       return platform_driver_register(&dnet_driver);
+}
+
+static void __exit dnet_exit(void)
+{
+       platform_driver_unregister(&dnet_driver);
+}
+
+module_init(dnet_init);
+module_exit(dnet_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("Dave DNET Ethernet driver");
+MODULE_AUTHOR("Ilya Yanok <yanok@emcraft.com>, "
+             "Matteo Vit <matteo.vit@dave.eu>");
diff --git a/drivers/net/dnet.h b/drivers/net/dnet.h
new file mode 100644 (file)
index 0000000..37f5b30
--- /dev/null
@@ -0,0 +1,225 @@
+/*
+ * Dave DNET Ethernet Controller driver
+ *
+ * Copyright (C) 2008 Dave S.r.l. <www.dave.eu>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#ifndef _DNET_H
+#define _DNET_H
+
+#define DRV_NAME               "dnet"
+#define DRV_VERSION            "0.9.1"
+#define PFX                            DRV_NAME ": "
+
+/* Register access macros */
+#define dnet_writel(port, value, reg)  \
+       writel((value), (port)->regs + DNET_##reg)
+#define dnet_readl(port, reg)  readl((port)->regs + DNET_##reg)
+
+/* ALL DNET FIFO REGISTERS */
+#define DNET_RX_LEN_FIFO               0x000   /* RX_LEN_FIFO */
+#define DNET_RX_DATA_FIFO              0x004   /* RX_DATA_FIFO */
+#define DNET_TX_LEN_FIFO               0x008   /* TX_LEN_FIFO */
+#define DNET_TX_DATA_FIFO              0x00C   /* TX_DATA_FIFO */
+
+/* ALL DNET CONTROL/STATUS REGISTERS OFFSETS */
+#define DNET_VERCAPS                   0x100   /* VERCAPS */
+#define DNET_INTR_SRC                  0x104   /* INTR_SRC */
+#define DNET_INTR_ENB                  0x108   /* INTR_ENB */
+#define DNET_RX_STATUS                 0x10C   /* RX_STATUS */
+#define DNET_TX_STATUS                 0x110   /* TX_STATUS */
+#define DNET_RX_FRAMES_CNT             0x114   /* RX_FRAMES_CNT */
+#define DNET_TX_FRAMES_CNT             0x118   /* TX_FRAMES_CNT */
+#define DNET_RX_FIFO_TH                        0x11C   /* RX_FIFO_TH */
+#define DNET_TX_FIFO_TH                        0x120   /* TX_FIFO_TH */
+#define DNET_SYS_CTL                   0x124   /* SYS_CTL */
+#define DNET_PAUSE_TMR                 0x128   /* PAUSE_TMR */
+#define DNET_RX_FIFO_WCNT              0x12C   /* RX_FIFO_WCNT */
+#define DNET_TX_FIFO_WCNT              0x130   /* TX_FIFO_WCNT */
+
+/* ALL DNET MAC REGISTERS */
+#define DNET_MACREG_DATA               0x200   /* Mac-Reg Data */
+#define DNET_MACREG_ADDR               0x204   /* Mac-Reg Addr  */
+
+/* ALL DNET RX STATISTICS COUNTERS  */
+#define DNET_RX_PKT_IGNR_CNT           0x300
+#define DNET_RX_LEN_CHK_ERR_CNT                0x304
+#define DNET_RX_LNG_FRM_CNT            0x308
+#define DNET_RX_SHRT_FRM_CNT           0x30C
+#define DNET_RX_IPG_VIOL_CNT           0x310
+#define DNET_RX_CRC_ERR_CNT            0x314
+#define DNET_RX_OK_PKT_CNT             0x318
+#define DNET_RX_CTL_FRM_CNT            0x31C
+#define DNET_RX_PAUSE_FRM_CNT          0x320
+#define DNET_RX_MULTICAST_CNT          0x324
+#define DNET_RX_BROADCAST_CNT          0x328
+#define DNET_RX_VLAN_TAG_CNT           0x32C
+#define DNET_RX_PRE_SHRINK_CNT         0x330
+#define DNET_RX_DRIB_NIB_CNT           0x334
+#define DNET_RX_UNSUP_OPCD_CNT         0x338
+#define DNET_RX_BYTE_CNT               0x33C
+
+/* DNET TX STATISTICS COUNTERS */
+#define DNET_TX_UNICAST_CNT            0x400
+#define DNET_TX_PAUSE_FRM_CNT          0x404
+#define DNET_TX_MULTICAST_CNT          0x408
+#define DNET_TX_BRDCAST_CNT            0x40C
+#define DNET_TX_VLAN_TAG_CNT           0x410
+#define DNET_TX_BAD_FCS_CNT            0x414
+#define DNET_TX_JUMBO_CNT              0x418
+#define DNET_TX_BYTE_CNT               0x41C
+
+/* SOME INTERNAL MAC-CORE REGISTER */
+#define DNET_INTERNAL_MODE_REG         0x0
+#define DNET_INTERNAL_RXTX_CONTROL_REG 0x2
+#define DNET_INTERNAL_MAX_PKT_SIZE_REG 0x4
+#define DNET_INTERNAL_IGP_REG          0x8
+#define DNET_INTERNAL_MAC_ADDR_0_REG   0xa
+#define DNET_INTERNAL_MAC_ADDR_1_REG   0xc
+#define DNET_INTERNAL_MAC_ADDR_2_REG   0xe
+#define DNET_INTERNAL_TX_RX_STS_REG    0x12
+#define DNET_INTERNAL_GMII_MNG_CTL_REG 0x14
+#define DNET_INTERNAL_GMII_MNG_DAT_REG 0x16
+
+#define DNET_INTERNAL_GMII_MNG_CMD_FIN (1 << 14)
+
+#define DNET_INTERNAL_WRITE            (1 << 31)
+
+/* MAC-CORE REGISTER FIELDS */
+
+/* MAC-CORE MODE REGISTER FIELDS */
+#define DNET_INTERNAL_MODE_GBITEN                      (1 << 0)
+#define DNET_INTERNAL_MODE_FCEN                                (1 << 1)
+#define DNET_INTERNAL_MODE_RXEN                                (1 << 2)
+#define DNET_INTERNAL_MODE_TXEN                                (1 << 3)
+
+/* MAC-CORE RXTX CONTROL REGISTER FIELDS */
+#define DNET_INTERNAL_RXTX_CONTROL_RXSHORTFRAME                (1 << 8)
+#define DNET_INTERNAL_RXTX_CONTROL_RXBROADCAST         (1 << 7)
+#define DNET_INTERNAL_RXTX_CONTROL_RXMULTICAST         (1 << 4)
+#define DNET_INTERNAL_RXTX_CONTROL_RXPAUSE             (1 << 3)
+#define DNET_INTERNAL_RXTX_CONTROL_DISTXFCS            (1 << 2)
+#define DNET_INTERNAL_RXTX_CONTROL_DISCFXFCS           (1 << 1)
+#define DNET_INTERNAL_RXTX_CONTROL_ENPROMISC           (1 << 0)
+#define DNET_INTERNAL_RXTX_CONTROL_DROPCONTROL         (1 << 6)
+#define DNET_INTERNAL_RXTX_CONTROL_ENABLEHALFDUP       (1 << 5)
+
+/* SYSTEM CONTROL REGISTER FIELDS */
+#define DNET_SYS_CTL_IGNORENEXTPKT                     (1 << 0)
+#define DNET_SYS_CTL_SENDPAUSE                         (1 << 2)
+#define DNET_SYS_CTL_RXFIFOFLUSH                       (1 << 3)
+#define DNET_SYS_CTL_TXFIFOFLUSH                       (1 << 4)
+
+/* TX STATUS REGISTER FIELDS */
+#define DNET_TX_STATUS_FIFO_ALMOST_EMPTY               (1 << 2)
+#define DNET_TX_STATUS_FIFO_ALMOST_FULL                        (1 << 1)
+
+/* INTERRUPT SOURCE REGISTER FIELDS */
+#define DNET_INTR_SRC_TX_PKTSENT                       (1 << 0)
+#define DNET_INTR_SRC_TX_FIFOAF                                (1 << 1)
+#define DNET_INTR_SRC_TX_FIFOAE                                (1 << 2)
+#define DNET_INTR_SRC_TX_DISCFRM                       (1 << 3)
+#define DNET_INTR_SRC_TX_FIFOFULL                      (1 << 4)
+#define DNET_INTR_SRC_RX_CMDFIFOAF                     (1 << 8)
+#define DNET_INTR_SRC_RX_CMDFIFOFF                     (1 << 9)
+#define DNET_INTR_SRC_RX_DATAFIFOFF                    (1 << 10)
+#define DNET_INTR_SRC_TX_SUMMARY                       (1 << 16)
+#define DNET_INTR_SRC_RX_SUMMARY                       (1 << 17)
+#define DNET_INTR_SRC_PHY                              (1 << 19)
+
+/* INTERRUPT ENABLE REGISTER FIELDS */
+#define DNET_INTR_ENB_TX_PKTSENT                       (1 << 0)
+#define DNET_INTR_ENB_TX_FIFOAF                                (1 << 1)
+#define DNET_INTR_ENB_TX_FIFOAE                                (1 << 2)
+#define DNET_INTR_ENB_TX_DISCFRM                       (1 << 3)
+#define DNET_INTR_ENB_TX_FIFOFULL                      (1 << 4)
+#define DNET_INTR_ENB_RX_PKTRDY                                (1 << 8)
+#define DNET_INTR_ENB_RX_FIFOAF                                (1 << 9)
+#define DNET_INTR_ENB_RX_FIFOERR                       (1 << 10)
+#define DNET_INTR_ENB_RX_ERROR                         (1 << 11)
+#define DNET_INTR_ENB_RX_FIFOFULL                      (1 << 12)
+#define DNET_INTR_ENB_RX_FIFOAE                                (1 << 13)
+#define DNET_INTR_ENB_TX_SUMMARY                       (1 << 16)
+#define DNET_INTR_ENB_RX_SUMMARY                       (1 << 17)
+#define DNET_INTR_ENB_GLOBAL_ENABLE                    (1 << 18)
+
+/* default values:
+ * almost empty = less than one full sized ethernet frame (no jumbo) inside
+ * the fifo almost full = can write less than one full sized ethernet frame
+ * (no jumbo) inside the fifo
+ */
+#define DNET_CFG_TX_FIFO_FULL_THRES    25
+#define DNET_CFG_RX_FIFO_FULL_THRES    20
+
+/*
+ * Capabilities. Used by the driver to know the capabilities that the ethernet
+ * controller inside the FPGA have.
+ */
+
+#define DNET_HAS_MDIO          (1 << 0)
+#define DNET_HAS_IRQ           (1 << 1)
+#define DNET_HAS_GIGABIT       (1 << 2)
+#define DNET_HAS_DMA           (1 << 3)
+
+#define DNET_HAS_MII           (1 << 4) /* or GMII */
+#define DNET_HAS_RMII          (1 << 5) /* or RGMII */
+
+#define DNET_CAPS_MASK         0xFFFF
+
+#define DNET_FIFO_SIZE         1024 /* 1K x 32 bit */
+#define DNET_FIFO_TX_DATA_AF_TH        (DNET_FIFO_SIZE - 384) /* 384 = 1536 / 4 */
+#define DNET_FIFO_TX_DATA_AE_TH        384
+
+#define DNET_FIFO_RX_CMD_AF_TH (1 << 16) /* just one frame inside the FIFO */
+
+/*
+ * Hardware-collected statistics.
+ */
+struct dnet_stats {
+       u32 rx_pkt_ignr;
+       u32 rx_len_chk_err;
+       u32 rx_lng_frm;
+       u32 rx_shrt_frm;
+       u32 rx_ipg_viol;
+       u32 rx_crc_err;
+       u32 rx_ok_pkt;
+       u32 rx_ctl_frm;
+       u32 rx_pause_frm;
+       u32 rx_multicast;
+       u32 rx_broadcast;
+       u32 rx_vlan_tag;
+       u32 rx_pre_shrink;
+       u32 rx_drib_nib;
+       u32 rx_unsup_opcd;
+       u32 rx_byte;
+       u32 tx_unicast;
+       u32 tx_pause_frm;
+       u32 tx_multicast;
+       u32 tx_brdcast;
+       u32 tx_vlan_tag;
+       u32 tx_bad_fcs;
+       u32 tx_jumbo;
+       u32 tx_byte;
+};
+
+struct dnet {
+       void __iomem                    *regs;
+       spinlock_t                      lock;
+       struct platform_device          *pdev;
+       struct net_device               *dev;
+       struct dnet_stats               hw_stats;
+       unsigned int                    capabilities; /* read from FPGA */
+       struct napi_struct              napi;
+
+       /* PHY stuff */
+       struct mii_bus                  *mii_bus;
+       struct phy_device               *phy_dev;
+       unsigned int                    link;
+       unsigned int                    speed;
+       unsigned int                    duplex;
+};
+
+#endif /* _DNET_H */
index 87a7066..6fd7aa6 100644 (file)
@@ -2594,6 +2594,9 @@ static int __devinit emac_init_config(struct emac_instance *dev)
                if (of_device_is_compatible(np, "ibm,emac-460ex") ||
                    of_device_is_compatible(np, "ibm,emac-460gt"))
                        dev->features |= EMAC_FTR_460EX_PHY_CLK_FIX;
+               if (of_device_is_compatible(np, "ibm,emac-405ex") ||
+                   of_device_is_compatible(np, "ibm,emac-405exr"))
+                       dev->features |= EMAC_FTR_440EP_PHY_CLK_FIX;
        } else if (of_device_is_compatible(np, "ibm,emac4")) {
                dev->features |= EMAC_FTR_EMAC4;
                if (of_device_is_compatible(np, "ibm,emac-440gx"))
index a50db53..9dd13ad 100644 (file)
@@ -1023,11 +1023,10 @@ static int __devinit igb_probe(struct pci_dev *pdev,
        struct net_device *netdev;
        struct igb_adapter *adapter;
        struct e1000_hw *hw;
-       struct pci_dev *us_dev;
        const struct e1000_info *ei = igb_info_tbl[ent->driver_data];
        unsigned long mmio_start, mmio_len;
-       int i, err, pci_using_dac, pos;
-       u16 eeprom_data = 0, state = 0;
+       int i, err, pci_using_dac;
+       u16 eeprom_data = 0;
        u16 eeprom_apme_mask = IGB_EEPROM_APME;
        u32 part_num;
        int bars, need_ioport;
@@ -1062,27 +1061,6 @@ static int __devinit igb_probe(struct pci_dev *pdev,
                }
        }
 
-       /* 82575 requires that the pci-e link partner disable the L0s state */
-       switch (pdev->device) {
-       case E1000_DEV_ID_82575EB_COPPER:
-       case E1000_DEV_ID_82575EB_FIBER_SERDES:
-       case E1000_DEV_ID_82575GB_QUAD_COPPER:
-               us_dev = pdev->bus->self;
-               pos = pci_find_capability(us_dev, PCI_CAP_ID_EXP);
-               if (pos) {
-                       pci_read_config_word(us_dev, pos + PCI_EXP_LNKCTL,
-                                            &state);
-                       state &= ~PCIE_LINK_STATE_L0S;
-                       pci_write_config_word(us_dev, pos + PCI_EXP_LNKCTL,
-                                             state);
-                       dev_info(&pdev->dev,
-                                "Disabling ASPM L0s upstream switch port %s\n",
-                                pci_name(us_dev));
-               }
-       default:
-               break;
-       }
-
        err = pci_request_selected_regions(pdev, bars, igb_driver_name);
        if (err)
                goto err_pci_reg;
index d2f4d5f..5d364a9 100644 (file)
@@ -3973,6 +3973,7 @@ static const struct net_device_ops ixgbe_netdev_ops = {
        .ndo_stop               = ixgbe_close,
        .ndo_start_xmit         = ixgbe_xmit_frame,
        .ndo_get_stats          = ixgbe_get_stats,
+       .ndo_set_rx_mode        = ixgbe_set_rx_mode,
        .ndo_set_multicast_list = ixgbe_set_rx_mode,
        .ndo_validate_addr      = eth_validate_addr,
        .ndo_set_mac_address    = ixgbe_set_mac,
index 13f11f4..b0bc3bc 100644 (file)
@@ -2030,11 +2030,6 @@ static void port_start(struct mv643xx_eth_private *mp)
        }
 
        /*
-        * Add configured unicast address to address filter table.
-        */
-       mv643xx_eth_program_unicast_filter(mp->dev);
-
-       /*
         * Receive all unmatched unicast, TCP, UDP, BPDU and broadcast
         * frames to RX queue #0, and include the pseudo-header when
         * calculating receive checksums.
@@ -2047,6 +2042,11 @@ static void port_start(struct mv643xx_eth_private *mp)
        wrlp(mp, PORT_CONFIG_EXT, 0x00000000);
 
        /*
+        * Add configured unicast addresses to address filter table.
+        */
+       mv643xx_eth_program_unicast_filter(mp->dev);
+
+       /*
         * Enable the receive queues.
         */
        for (i = 0; i < mp->rxq_count; i++) {
index f4dd9ac..1ff066b 100644 (file)
@@ -1595,7 +1595,6 @@ dma_watchdog_wakeup(struct netxen_adapter *adapter)
 }
 
 
-int netxen_is_flash_supported(struct netxen_adapter *adapter);
 int netxen_get_flash_mac_addr(struct netxen_adapter *adapter, __le64 *mac);
 int netxen_p3_get_mac_addr(struct netxen_adapter *adapter, __le64 *mac);
 extern void netxen_change_ringparam(struct netxen_adapter *adapter);
index 821cff6..7fea770 100644 (file)
@@ -706,28 +706,6 @@ int netxen_nic_change_mtu(struct net_device *netdev, int mtu)
        return rc;
 }
 
-int netxen_is_flash_supported(struct netxen_adapter *adapter)
-{
-       const int locs[] = { 0, 0x4, 0x100, 0x4000, 0x4128 };
-       int addr, val01, val02, i, j;
-
-       /* if the flash size less than 4Mb, make huge war cry and die */
-       for (j = 1; j < 4; j++) {
-               addr = j * NETXEN_NIC_WINDOW_MARGIN;
-               for (i = 0; i < ARRAY_SIZE(locs); i++) {
-                       if (netxen_rom_fast_read(adapter, locs[i], &val01) == 0
-                           && netxen_rom_fast_read(adapter, (addr + locs[i]),
-                                                   &val02) == 0) {
-                               if (val01 == val02)
-                                       return -1;
-                       } else
-                               return -1;
-               }
-       }
-
-       return 0;
-}
-
 static int netxen_get_flash_block(struct netxen_adapter *adapter, int base,
                                  int size, __le32 * buf)
 {
index 1308778..c172b6e 100644 (file)
@@ -405,9 +405,6 @@ netxen_read_mac_addr(struct netxen_adapter *adapter)
        struct net_device *netdev = adapter->netdev;
        struct pci_dev *pdev = adapter->pdev;
 
-       if (netxen_is_flash_supported(adapter) != 0)
-               return -EIO;
-
        if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) {
                if (netxen_p3_get_mac_addr(adapter, &mac_addr) != 0)
                        return -EIO;
index e6fdce9..aff9c5f 100644 (file)
@@ -927,6 +927,7 @@ struct ib_mac_iocb_rsp {
        u8 flags1;
 #define IB_MAC_IOCB_RSP_OI     0x01    /* Overide intr delay */
 #define IB_MAC_IOCB_RSP_I      0x02    /* Disble Intr Generation */
+#define IB_MAC_CSUM_ERR_MASK 0x1c      /* A mask to use for csum errs */
 #define IB_MAC_IOCB_RSP_TE     0x04    /* Checksum error */
 #define IB_MAC_IOCB_RSP_NU     0x08    /* No checksum rcvd */
 #define IB_MAC_IOCB_RSP_IE     0x10    /* IPv4 checksum error */
index 8ea72dc..91191f7 100644 (file)
@@ -1436,18 +1436,32 @@ static void ql_process_mac_rx_intr(struct ql_adapter *qdev,
        if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_P) {
                QPRINTK(qdev, RX_STATUS, DEBUG, "Promiscuous Packet.\n");
        }
-       if (ib_mac_rsp->flags1 & (IB_MAC_IOCB_RSP_IE | IB_MAC_IOCB_RSP_TE)) {
-               QPRINTK(qdev, RX_STATUS, ERR,
-                       "Bad checksum for this %s packet.\n",
-                       ((ib_mac_rsp->
-                         flags2 & IB_MAC_IOCB_RSP_T) ? "TCP" : "UDP"));
-               skb->ip_summed = CHECKSUM_NONE;
-       } else if (qdev->rx_csum &&
-                  ((ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_T) ||
-                   ((ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_U) &&
-                    !(ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_NU)))) {
-               QPRINTK(qdev, RX_STATUS, DEBUG, "RX checksum done!\n");
-               skb->ip_summed = CHECKSUM_UNNECESSARY;
+
+       skb->protocol = eth_type_trans(skb, ndev);
+       skb->ip_summed = CHECKSUM_NONE;
+
+       /* If rx checksum is on, and there are no
+        * csum or frame errors.
+        */
+       if (qdev->rx_csum &&
+               !(ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) &&
+               !(ib_mac_rsp->flags1 & IB_MAC_CSUM_ERR_MASK)) {
+               /* TCP frame. */
+               if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_T) {
+                       QPRINTK(qdev, RX_STATUS, DEBUG,
+                                       "TCP checksum done!\n");
+                       skb->ip_summed = CHECKSUM_UNNECESSARY;
+               } else if ((ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_U) &&
+                               (ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_V4)) {
+               /* Unfragmented ipv4 UDP frame. */
+                       struct iphdr *iph = (struct iphdr *) skb->data;
+                       if (!(iph->frag_off &
+                               cpu_to_be16(IP_MF|IP_OFFSET))) {
+                               skb->ip_summed = CHECKSUM_UNNECESSARY;
+                               QPRINTK(qdev, RX_STATUS, DEBUG,
+                                               "TCP checksum done!\n");
+                       }
+               }
        }
        qdev->stats.rx_packets++;
        qdev->stats.rx_bytes += skb->len;
@@ -1927,6 +1941,9 @@ static int qlge_send(struct sk_buff *skb, struct net_device *ndev)
 
        tx_ring = &qdev->tx_ring[tx_ring_idx];
 
+       if (skb_padto(skb, ETH_ZLEN))
+               return NETDEV_TX_OK;
+
        if (unlikely(atomic_read(&tx_ring->tx_count) < 2)) {
                QPRINTK(qdev, TX_QUEUED, INFO,
                        "%s: shutting down tx queue %d du to lack of resources.\n",
@@ -2970,9 +2987,9 @@ static int ql_adapter_initialize(struct ql_adapter *qdev)
        mask = value << 16;
        ql_write32(qdev, SYS, mask | value);
 
-       /* Set the default queue. */
-       value = NIC_RCV_CFG_DFQ;
-       mask = NIC_RCV_CFG_DFQ_MASK;
+       /* Set the default queue, and VLAN behavior. */
+       value = NIC_RCV_CFG_DFQ | NIC_RCV_CFG_RV;
+       mask = NIC_RCV_CFG_DFQ_MASK | (NIC_RCV_CFG_RV << 16);
        ql_write32(qdev, NIC_RCV_CFG, (mask | value));
 
        /* Set the MPI interrupt to enabled. */
@@ -3149,6 +3166,11 @@ static int ql_adapter_down(struct ql_adapter *qdev)
 
        ql_tx_ring_clean(qdev);
 
+       /* Call netif_napi_del() from common point.
+        */
+       for (i = qdev->rss_ring_first_cq_id; i < qdev->rx_ring_count; i++)
+               netif_napi_del(&qdev->rx_ring[i].napi);
+
        spin_lock(&qdev->hw_lock);
        status = ql_adapter_reset(qdev);
        if (status)
@@ -3853,7 +3875,7 @@ static int qlge_suspend(struct pci_dev *pdev, pm_message_t state)
 {
        struct net_device *ndev = pci_get_drvdata(pdev);
        struct ql_adapter *qdev = netdev_priv(ndev);
-       int err, i;
+       int err;
 
        netif_device_detach(ndev);
 
@@ -3863,9 +3885,6 @@ static int qlge_suspend(struct pci_dev *pdev, pm_message_t state)
                        return err;
        }
 
-       for (i = qdev->rss_ring_first_cq_id; i < qdev->rx_ring_count; i++)
-               netif_napi_del(&qdev->rx_ring[i].napi);
-
        err = pci_save_state(pdev);
        if (err)
                return err;
index b347340..43fedb9 100644 (file)
@@ -81,9 +81,9 @@ static const int multicast_filter_limit = 32;
 #define RTL8169_TX_TIMEOUT     (6*HZ)
 #define RTL8169_PHY_TIMEOUT    (10*HZ)
 
-#define RTL_EEPROM_SIG         0x8129
+#define RTL_EEPROM_SIG         cpu_to_le32(0x8129)
+#define RTL_EEPROM_SIG_MASK    cpu_to_le32(0xffff)
 #define RTL_EEPROM_SIG_ADDR    0x0000
-#define RTL_EEPROM_MAC_ADDR    0x0007
 
 /* write/read MMIO register */
 #define RTL_W8(reg, val8)      writeb ((val8), ioaddr + (reg))
@@ -293,11 +293,6 @@ enum rtl_register_content {
        /* Cfg9346Bits */
        Cfg9346_Lock    = 0x00,
        Cfg9346_Unlock  = 0xc0,
-       Cfg9346_Program = 0x80,         /* Programming mode */
-       Cfg9346_EECS    = 0x08,         /* Chip select */
-       Cfg9346_EESK    = 0x04,         /* Serial data clock */
-       Cfg9346_EEDI    = 0x02,         /* Data input */
-       Cfg9346_EEDO    = 0x01,         /* Data output */
 
        /* rx_mode_bits */
        AcceptErr       = 0x20,
@@ -310,7 +305,6 @@ enum rtl_register_content {
        /* RxConfigBits */
        RxCfgFIFOShift  = 13,
        RxCfgDMAShift   =  8,
-       RxCfg9356SEL    =  6,           /* EEPROM type: 0 = 9346, 1 = 9356 */
 
        /* TxConfigBits */
        TxInterFrameGapShift = 24,
@@ -1969,108 +1963,6 @@ static const struct net_device_ops rtl8169_netdev_ops = {
 
 };
 
-/* Delay between EEPROM clock transitions. Force out buffered PCI writes. */
-#define RTL_EEPROM_DELAY()     RTL_R8(Cfg9346)
-#define RTL_EEPROM_READ_CMD    6
-
-/* read 16bit word stored in EEPROM. EEPROM is addressed by words. */
-static u16 rtl_eeprom_read(void __iomem *ioaddr, int addr)
-{
-       u16 result = 0;
-       int cmd, cmd_len, i;
-
-       /* check for EEPROM address size (in bits) */
-       if (RTL_R32(RxConfig) & (1 << RxCfg9356SEL)) {
-               /* EEPROM is 93C56 */
-               cmd_len = 3 + 8; /* 3 bits for command id and 8 for address */
-               cmd = (RTL_EEPROM_READ_CMD << 8) | (addr & 0xff);
-       } else {
-               /* EEPROM is 93C46 */
-               cmd_len = 3 + 6; /* 3 bits for command id and 6 for address */
-               cmd = (RTL_EEPROM_READ_CMD << 6) | (addr & 0x3f);
-       }
-
-       /* enter programming mode */
-       RTL_W8(Cfg9346, Cfg9346_Program | Cfg9346_EECS);
-       RTL_EEPROM_DELAY();
-
-       /* write command and requested address */
-       while (cmd_len--) {
-               u8 x = Cfg9346_Program | Cfg9346_EECS;
-
-               x |= (cmd & (1 << cmd_len)) ? Cfg9346_EEDI : 0;
-
-               /* write a bit */
-               RTL_W8(Cfg9346, x);
-               RTL_EEPROM_DELAY();
-
-               /* raise clock */
-               RTL_W8(Cfg9346, x | Cfg9346_EESK);
-               RTL_EEPROM_DELAY();
-       }
-
-       /* lower clock */
-       RTL_W8(Cfg9346, Cfg9346_Program | Cfg9346_EECS);
-       RTL_EEPROM_DELAY();
-
-       /* read back 16bit value */
-       for (i = 16; i > 0; i--) {
-               /* raise clock */
-               RTL_W8(Cfg9346, Cfg9346_Program | Cfg9346_EECS | Cfg9346_EESK);
-               RTL_EEPROM_DELAY();
-
-               result <<= 1;
-               result |= (RTL_R8(Cfg9346) & Cfg9346_EEDO) ? 1 : 0;
-
-               /* lower clock */
-               RTL_W8(Cfg9346, Cfg9346_Program | Cfg9346_EECS);
-               RTL_EEPROM_DELAY();
-       }
-
-       RTL_W8(Cfg9346, Cfg9346_Program);
-       /* leave programming mode */
-       RTL_W8(Cfg9346, Cfg9346_Lock);
-
-       return result;
-}
-
-static void rtl_init_mac_address(struct rtl8169_private *tp,
-                                void __iomem *ioaddr)
-{
-       struct pci_dev *pdev = tp->pci_dev;
-       u16 x;
-       u8 mac[8];
-
-       /* read EEPROM signature */
-       x = rtl_eeprom_read(ioaddr, RTL_EEPROM_SIG_ADDR);
-
-       if (x != RTL_EEPROM_SIG) {
-               dev_info(&pdev->dev, "Missing EEPROM signature: %04x\n", x);
-               return;
-       }
-
-       /* read MAC address */
-       x = rtl_eeprom_read(ioaddr, RTL_EEPROM_MAC_ADDR);
-       mac[0] = x & 0xff;
-       mac[1] = x >> 8;
-       x = rtl_eeprom_read(ioaddr, RTL_EEPROM_MAC_ADDR + 1);
-       mac[2] = x & 0xff;
-       mac[3] = x >> 8;
-       x = rtl_eeprom_read(ioaddr, RTL_EEPROM_MAC_ADDR + 2);
-       mac[4] = x & 0xff;
-       mac[5] = x >> 8;
-
-       if (netif_msg_probe(tp)) {
-               DECLARE_MAC_BUF(buf);
-
-               dev_info(&pdev->dev, "MAC address found in EEPROM: %s\n",
-                        print_mac(buf, mac));
-       }
-
-       if (is_valid_ether_addr(mac))
-               rtl_rar_set(tp, mac);
-}
-
 static int __devinit
 rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
@@ -2249,8 +2141,6 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 
        tp->mmio_addr = ioaddr;
 
-       rtl_init_mac_address(tp, ioaddr);
-
        /* Get MAC address */
        for (i = 0; i < MAC_ADDR_LEN; i++)
                dev->dev_addr[i] = RTL_R8(MAC0 + i);
@@ -3363,13 +3253,6 @@ static int rtl8169_start_xmit(struct sk_buff *skb, struct net_device *dev)
                opts1 |= FirstFrag;
        } else {
                len = skb->len;
-
-               if (unlikely(len < ETH_ZLEN)) {
-                       if (skb_padto(skb, ETH_ZLEN))
-                               goto err_update_stats;
-                       len = ETH_ZLEN;
-               }
-
                opts1 |= FirstFrag | LastFrag;
                tp->tx_skb[entry].skb = skb;
        }
@@ -3407,7 +3290,6 @@ out:
 err_stop:
        netif_stop_queue(dev);
        ret = NETDEV_TX_BUSY;
-err_update_stats:
        dev->stats.tx_dropped++;
        goto out;
 }
index c5691fd..fb53ef8 100644 (file)
@@ -1838,17 +1838,19 @@ static void velocity_free_tx_buf(struct velocity_info *vptr, struct velocity_td_
 {
        struct sk_buff *skb = tdinfo->skb;
        int i;
+       int pktlen;
 
        /*
         *      Don't unmap the pre-allocated tx_bufs
         */
        if (tdinfo->skb_dma) {
 
+               pktlen = (skb->len > ETH_ZLEN ? : ETH_ZLEN);
                for (i = 0; i < tdinfo->nskb_dma; i++) {
 #ifdef VELOCITY_ZERO_COPY_SUPPORT
                        pci_unmap_single(vptr->pdev, tdinfo->skb_dma[i], le16_to_cpu(td->tdesc1.len), PCI_DMA_TODEVICE);
 #else
-                       pci_unmap_single(vptr->pdev, tdinfo->skb_dma[i], skb->len, PCI_DMA_TODEVICE);
+                       pci_unmap_single(vptr->pdev, tdinfo->skb_dma[i], pktlen, PCI_DMA_TODEVICE);
 #endif
                        tdinfo->skb_dma[i] = 0;
                }
@@ -2080,17 +2082,14 @@ static int velocity_xmit(struct sk_buff *skb, struct net_device *dev)
        struct tx_desc *td_ptr;
        struct velocity_td_info *tdinfo;
        unsigned long flags;
-       int pktlen = skb->len;
+       int pktlen;
        __le16 len;
        int index;
 
 
-
-       if (skb->len < ETH_ZLEN) {
-               if (skb_padto(skb, ETH_ZLEN))
-                       goto out;
-               pktlen = ETH_ZLEN;
-       }
+       if (skb_padto(skb, ETH_ZLEN))
+               goto out;
+       pktlen = max_t(unsigned int, skb->len, ETH_ZLEN);
 
        len = cpu_to_le16(pktlen);
 
index d539d9d..bb5a1c9 100644 (file)
@@ -479,7 +479,7 @@ dino_card_setup(struct pci_bus *bus, void __iomem *base_addr)
        res = &dino_dev->hba.lmmio_space;
        res->flags = IORESOURCE_MEM;
        size = scnprintf(name, sizeof(name), "Dino LMMIO (%s)", 
-                        bus->bridge->bus_id);
+                        dev_name(bus->bridge));
        res->name = kmalloc(size+1, GFP_KERNEL);
        if(res->name)
                strcpy((char *)res->name, name);
@@ -493,7 +493,7 @@ dino_card_setup(struct pci_bus *bus, void __iomem *base_addr)
                struct list_head *ln, *tmp_ln;
 
                printk(KERN_ERR "Dino: cannot attach bus %s\n",
-                      bus->bridge->bus_id);
+                      dev_name(bus->bridge));
                /* kill the bus, we can't do anything with it */
                list_for_each_safe(ln, tmp_ln, &bus->devices) {
                        struct pci_dev *dev = pci_dev_b(ln);
@@ -587,7 +587,7 @@ dino_fixup_bus(struct pci_bus *bus)
                        bus->resource[i+1] = &res[i];
                }
 
-       } else if(bus->self) {
+       } else if (bus->parent) {
                int i;
 
                pci_read_bridge_bases(bus);
@@ -611,12 +611,12 @@ dino_fixup_bus(struct pci_bus *bus)
                        }
                                        
                        DBG("DEBUG %s assigning %d [0x%lx,0x%lx]\n",
-                           bus->self->dev.bus_id, i,
+                           dev_name(&bus->self->dev), i,
                            bus->self->resource[i].start,
                            bus->self->resource[i].end);
                        pci_assign_resource(bus->self, i);
                        DBG("DEBUG %s after assign %d [0x%lx,0x%lx]\n",
-                           bus->self->dev.bus_id, i,
+                           dev_name(&bus->self->dev), i,
                            bus->self->resource[i].start,
                            bus->self->resource[i].end);
                }
@@ -1026,7 +1026,8 @@ static int __init dino_probe(struct parisc_device *dev)
                dino_current_bus = bus->subordinate + 1;
                pci_bus_assign_resources(bus);
        } else {
-               printk(KERN_ERR "ERROR: failed to scan PCI bus on %s (probably duplicate bus number %d)\n", dev->dev.bus_id, dino_current_bus);
+               printk(KERN_ERR "ERROR: failed to scan PCI bus on %s (probably duplicate bus number %d)\n",
+                      dev_name(&dev->dev), dino_current_bus);
                /* increment the bus number in case of duplicates */
                dino_current_bus++;
        }
index e76db9e..d336329 100644 (file)
@@ -186,29 +186,34 @@ void gsc_asic_assign_irq(struct gsc_asic *asic, int local_irq, int *irqp)
        *irqp = irq;
 }
 
-static struct device *next_device(struct klist_iter *i)
+struct gsc_fixup_struct {
+       void (*choose_irq)(struct parisc_device *, void *);
+       void *ctrl;
+};
+
+static int gsc_fixup_irqs_callback(struct device *dev, void *data)
 {
-       struct klist_node * n = klist_next(i);
-       return n ? container_of(n, struct device, knode_parent) : NULL;
+       struct parisc_device *padev = to_parisc_device(dev);
+       struct gsc_fixup_struct *gf = data;
+
+       /* work-around for 715/64 and others which have parent
+          at path [5] and children at path [5/0/x] */
+       if (padev->id.hw_type == HPHW_FAULTY)
+               gsc_fixup_irqs(padev, gf->ctrl, gf->choose_irq);
+       gf->choose_irq(padev, gf->ctrl);
+
+       return 0;
 }
 
 void gsc_fixup_irqs(struct parisc_device *parent, void *ctrl,
                        void (*choose_irq)(struct parisc_device *, void *))
 {
-       struct device *dev;
-       struct klist_iter i;
-
-       klist_iter_init(&parent->dev.klist_children, &i);
-       while ((dev = next_device(&i))) {
-               struct parisc_device *padev = to_parisc_device(dev);
-
-               /* work-around for 715/64 and others which have parent 
-                  at path [5] and children at path [5/0/x] */
-               if (padev->id.hw_type == HPHW_FAULTY)
-                       return gsc_fixup_irqs(padev, ctrl, choose_irq);
-               choose_irq(padev, ctrl);
-       }
-       klist_iter_exit(&i);
+       struct gsc_fixup_struct data = {
+               .choose_irq     = choose_irq,
+               .ctrl           = ctrl,
+       };
+
+       device_for_each_child(&parent->dev, &data, gsc_fixup_irqs_callback);
 }
 
 int gsc_common_setup(struct parisc_device *parent, struct gsc_asic *gsc_asic)
index 0797659..501aaf1 100644 (file)
@@ -487,7 +487,7 @@ iosapic_xlate_pin(struct iosapic_info *isi, struct pci_dev *pcidev)
        }
 
        /* Check if pcidev behind a PPB */
-       if (NULL != pcidev->bus->self) {
+       if (pcidev->bus->parent) {
                /* Convert pcidev INTR_PIN into something we
                ** can lookup in the IRT.
                */
@@ -523,10 +523,9 @@ iosapic_xlate_pin(struct iosapic_info *isi, struct pci_dev *pcidev)
 #endif /* PCI_BRIDGE_FUNCS */
 
                /*
-               ** Locate the host slot the PPB nearest the Host bus
-               ** adapter.
-               */
-               while (NULL != p->parent->self)
+                * Locate the host slot of the PPB.
+                */
+               while (p->parent->parent)
                        p = p->parent;
 
                intr_slot = PCI_SLOT(p->self->devfn);
@@ -709,11 +708,14 @@ static void iosapic_set_affinity_irq(unsigned int irq,
        struct vector_info *vi = iosapic_get_vector(irq);
        u32 d0, d1, dummy_d0;
        unsigned long flags;
+       int dest_cpu;
 
-       if (cpu_check_affinity(irq, dest))
+       dest_cpu = cpu_check_affinity(irq, dest);
+       if (dest_cpu < 0)
                return;
 
-       vi->txn_addr = txn_affinity_addr(irq, cpumask_first(dest));
+       irq_desc[irq].affinity = cpumask_of_cpu(dest_cpu);
+       vi->txn_addr = txn_affinity_addr(irq, dest_cpu);
 
        spin_lock_irqsave(&iosapic_lock, flags);
        /* d1 contains the destination CPU, so only want to set that
index d8233de..59fbbf1 100644 (file)
@@ -644,7 +644,7 @@ lba_fixup_bus(struct pci_bus *bus)
        ** Properly Setup MMIO resources for this bus.
        ** pci_alloc_primary_bus() mangles this.
        */
-       if (bus->self) {
+       if (bus->parent) {
                int i;
                /* PCI-PCI Bridge */
                pci_read_bridge_bases(bus);
@@ -802,7 +802,7 @@ lba_fixup_bus(struct pci_bus *bus)
 ** Can't fixup here anyway....garr...
 */
        if (fbb_enable) {
-               if (bus->self) {
+               if (bus->parent) {
                        u8 control;
                        /* enable on PPB */
                        (void) pci_read_config_byte(bus->self, PCI_BRIDGE_CONTROL, &control);
index a70cf16..e5999c4 100644 (file)
@@ -1206,30 +1206,48 @@ sba_alloc_pdir(unsigned int pdir_size)
        return (void *) pdir_base;
 }
 
-static struct device *next_device(struct klist_iter *i)
+struct ibase_data_struct {
+       struct ioc *ioc;
+       int ioc_num;
+};
+
+static int setup_ibase_imask_callback(struct device *dev, void *data)
 {
-        struct klist_node * n = klist_next(i);
-        return n ? container_of(n, struct device, knode_parent) : NULL;
+       /* lba_set_iregs() is in drivers/parisc/lba_pci.c */
+        extern void lba_set_iregs(struct parisc_device *, u32, u32);
+       struct parisc_device *lba = to_parisc_device(dev);
+       struct ibase_data_struct *ibd = data;
+       int rope_num = (lba->hpa.start >> 13) & 0xf;
+       if (rope_num >> 3 == ibd->ioc_num)
+               lba_set_iregs(lba, ibd->ioc->ibase, ibd->ioc->imask);
+       return 0;
 }
 
 /* setup Mercury or Elroy IBASE/IMASK registers. */
 static void 
 setup_ibase_imask(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
 {
-       /* lba_set_iregs() is in drivers/parisc/lba_pci.c */
-        extern void lba_set_iregs(struct parisc_device *, u32, u32);
-       struct device *dev;
-       struct klist_iter i;
-
-       klist_iter_init(&sba->dev.klist_children, &i);
-       while ((dev = next_device(&i))) {
-               struct parisc_device *lba = to_parisc_device(dev);
-               int rope_num = (lba->hpa.start >> 13) & 0xf;
-               if (rope_num >> 3 == ioc_num)
-                       lba_set_iregs(lba, ioc->ibase, ioc->imask);
-       }
-       klist_iter_exit(&i);
+       struct ibase_data_struct ibase_data = {
+               .ioc            = ioc,
+               .ioc_num        = ioc_num,
+       };
+
+       device_for_each_child(&sba->dev, &ibase_data,
+                             setup_ibase_imask_callback);
+}
+
+#ifdef SBA_AGP_SUPPORT
+static int
+sba_ioc_find_quicksilver(struct device *dev, void *data)
+{
+       int *agp_found = data;
+       struct parisc_device *lba = to_parisc_device(dev);
+
+       if (IS_QUICKSILVER(lba))
+               *agp_found = 1;
+       return 0;
 }
+#endif
 
 static void
 sba_ioc_init_pluto(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
@@ -1332,9 +1350,6 @@ sba_ioc_init_pluto(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
        WRITE_REG(ioc->ibase | 31, ioc->ioc_hpa + IOC_PCOM);
 
 #ifdef SBA_AGP_SUPPORT
-{
-       struct klist_iter i;
-       struct device *dev = NULL;
 
        /*
        ** If an AGP device is present, only use half of the IOV space
@@ -1344,13 +1359,7 @@ sba_ioc_init_pluto(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
        ** We program the next pdir index after we stop w/ a key for
        ** the GART code to handshake on.
        */
-       klist_iter_init(&sba->dev.klist_children, &i);
-       while ((dev = next_device(&i))) {
-               struct parisc_device *lba = to_parisc_device(dev);
-               if (IS_QUICKSILVER(lba))
-                       agp_found = 1;
-       }
-       klist_iter_exit(&i);
+       device_for_each_child(&sba->dev, &agp_found, sba_ioc_find_quicksilver);
 
        if (agp_found && sba_reserve_agpgart) {
                printk(KERN_INFO "%s: reserving %dMb of IOVA space for agpgart\n",
@@ -1358,9 +1367,7 @@ sba_ioc_init_pluto(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
                ioc->pdir_size /= 2;
                ioc->pdir_base[PDIR_INDEX(iova_space_size/2)] = SBA_AGPGART_COOKIE;
        }
-}
 #endif /*SBA_AGP_SUPPORT*/
-
 }
 
 static void
index 8e44db0..9d07a05 100644 (file)
@@ -21,7 +21,7 @@ struct irq_2_iommu {
        u8  irte_mask;
 };
 
-#ifdef CONFIG_SPARSE_IRQ
+#ifdef CONFIG_GENERIC_HARDIRQS
 static struct irq_2_iommu *get_one_free_irq_2_iommu(int cpu)
 {
        struct irq_2_iommu *iommu;
index b3866ad..3608081 100644 (file)
@@ -15,8 +15,7 @@ menuconfig X86_PLATFORM_DEVICES
 if X86_PLATFORM_DEVICES
 
 config ACER_WMI
-       tristate "Acer WMI Laptop Extras (EXPERIMENTAL)"
-       depends on EXPERIMENTAL
+       tristate "Acer WMI Laptop Extras"
        depends on ACPI
        depends on LEDS_CLASS
        depends on NEW_LEDS
@@ -39,9 +38,9 @@ config ASUS_LAPTOP
        tristate "Asus Laptop Extras (EXPERIMENTAL)"
        depends on ACPI
        depends on EXPERIMENTAL && !ACPI_ASUS
-       depends on LEDS_CLASS
-       depends on NEW_LEDS
-       depends on BACKLIGHT_CLASS_DEVICE
+       select LEDS_CLASS
+       select NEW_LEDS
+       select BACKLIGHT_CLASS_DEVICE
        depends on INPUT
        ---help---
          This is the new Linux driver for Asus laptops. It may also support some
@@ -185,11 +184,11 @@ config SONYPI_COMPAT
 config THINKPAD_ACPI
        tristate "ThinkPad ACPI Laptop Extras"
        depends on ACPI
+       depends on INPUT
        select BACKLIGHT_LCD_SUPPORT
        select BACKLIGHT_CLASS_DEVICE
        select HWMON
        select NVRAM
-       select INPUT
        select NEW_LEDS
        select LEDS_CLASS
        select NET
@@ -315,9 +314,8 @@ config EEEPC_LAPTOP
 
 
 config ACPI_WMI
-       tristate "WMI (EXPERIMENTAL)"
+       tristate "WMI"
        depends on ACPI
-       depends on EXPERIMENTAL
        help
          This driver adds support for the ACPI-WMI (Windows Management
          Instrumentation) mapper device (PNP0C14) found on some systems.
index 6bcca61..a6a42e8 100644 (file)
@@ -1026,7 +1026,7 @@ static void acer_rfkill_exit(void)
        kfree(wireless_rfkill->data);
        rfkill_unregister(wireless_rfkill);
        if (has_cap(ACER_CAP_BLUETOOTH)) {
-               kfree(wireless_rfkill->data);
+               kfree(bluetooth_rfkill->data);
                rfkill_unregister(bluetooth_rfkill);
        }
        return;
index 56af6cf..eeafc6c 100644 (file)
@@ -815,6 +815,7 @@ static int asus_setkeycode(struct input_dev *dev, int scancode, int keycode)
 static void asus_hotk_notify(acpi_handle handle, u32 event, void *data)
 {
        static struct key_entry *key;
+       u16 count;
 
        /* TODO Find a better way to handle events count. */
        if (!hotk)
@@ -832,9 +833,11 @@ static void asus_hotk_notify(acpi_handle handle, u32 event, void *data)
                lcd_blank(FB_BLANK_POWERDOWN);
        }
 
+       count = hotk->event_count[event % 128]++;
+       acpi_bus_generate_proc_event(hotk->device, event, count);
        acpi_bus_generate_netlink_event(hotk->device->pnp.device_class,
                                        dev_name(&hotk->device->dev), event,
-                                       hotk->event_count[event % 128]++);
+                                       count);
 
        if (hotk->inputdev) {
                key = asus_get_entry_by_scancode(event);
index 786ed86..6f54fd1 100644 (file)
@@ -557,13 +557,17 @@ static void eeepc_rfkill_notify(acpi_handle handle, u32 event, void *data)
 static void eeepc_hotk_notify(acpi_handle handle, u32 event, void *data)
 {
        static struct key_entry *key;
+       u16 count;
+
        if (!ehotk)
                return;
        if (event >= NOTIFY_BRN_MIN && event <= NOTIFY_BRN_MAX)
                notify_brn();
+       count = ehotk->event_count[event % 128]++;
+       acpi_bus_generate_proc_event(ehotk->device, event, count);
        acpi_bus_generate_netlink_event(ehotk->device->pnp.device_class,
                                        dev_name(&ehotk->device->dev), event,
-                                       ehotk->event_count[event % 128]++);
+                                       count);
        if (ehotk->inputdev) {
                key = eepc_get_entry_by_scancode(event);
                if (key) {
index bcbc051..d243320 100644 (file)
@@ -7532,7 +7532,7 @@ MODULE_ALIAS(TPACPI_DRVR_SHORTNAME);
  * if it is not there yet.
  */
 #define IBM_BIOS_MODULE_ALIAS(__type) \
-       MODULE_ALIAS("dmi:bvnIBM:bvr" __type "ET??WW")
+       MODULE_ALIAS("dmi:bvnIBM:bvr" __type "ET??WW*")
 
 /* Non-ancient thinkpads */
 MODULE_ALIAS("dmi:bvnIBM:*:svnIBM:*:pvrThinkPad*:rvnIBM:*");
@@ -7541,9 +7541,9 @@ MODULE_ALIAS("dmi:bvnLENOVO:*:svnLENOVO:*:pvrThinkPad*:rvnLENOVO:*");
 /* Ancient thinkpad BIOSes have to be identified by
  * BIOS type or model number, and there are far less
  * BIOS types than model numbers... */
-IBM_BIOS_MODULE_ALIAS("I[B,D,H,I,M,N,O,T,W,V,Y,Z]");
-IBM_BIOS_MODULE_ALIAS("1[0,3,6,8,A-G,I,K,M-P,S,T]");
-IBM_BIOS_MODULE_ALIAS("K[U,X-Z]");
+IBM_BIOS_MODULE_ALIAS("I[BDHIMNOTWVYZ]");
+IBM_BIOS_MODULE_ALIAS("1[0368A-GIKM-PST]");
+IBM_BIOS_MODULE_ALIAS("K[UX-Z]");
 
 MODULE_AUTHOR("Borislav Deianov, Henrique de Moraes Holschuh");
 MODULE_DESCRIPTION(TPACPI_DESC);
index 8a8b377..2f269e1 100644 (file)
@@ -708,7 +708,7 @@ static int __init acpi_wmi_add(struct acpi_device *device)
 
 static int __init acpi_wmi_init(void)
 {
-       acpi_status result;
+       int result;
 
        INIT_LIST_HEAD(&wmi_blocks.list);
 
index bf7fe6f..8862758 100644 (file)
@@ -33,19 +33,19 @@ static LIST_HEAD(fcoe_transports);
 static DEFINE_MUTEX(fcoe_transports_lock);
 
 /**
- * fcoe_transport_default - returns ptr to the default transport fcoe_sw
- **/
+ * fcoe_transport_default() - Returns ptr to the default transport fcoe_sw
+ */
 struct fcoe_transport *fcoe_transport_default(void)
 {
        return &fcoe_sw_transport;
 }
 
 /**
- * fcoe_transport_to_pcidev - get the pci dev from a netdev
+ * fcoe_transport_to_pcidev() - get the pci dev from a netdev
  * @netdev: the netdev that pci dev will be retrived from
  *
  * Returns: NULL or the corrsponding pci_dev
- **/
+ */
 struct pci_dev *fcoe_transport_pcidev(const struct net_device *netdev)
 {
        if (!netdev->dev.parent)
@@ -54,18 +54,17 @@ struct pci_dev *fcoe_transport_pcidev(const struct net_device *netdev)
 }
 
 /**
- * fcoe_transport_device_lookup - find out netdev is managed by the
- * transport
- * assign a transport to a device
+ * fcoe_transport_device_lookup() - Lookup a transport
  * @netdev: the netdev the transport to be attached to
  *
  * This will look for existing offload driver, if not found, it falls back to
  * the default sw hba (fcoe_sw) as its fcoe transport.
  *
  * Returns: 0 for success
- **/
-static struct fcoe_transport_internal *fcoe_transport_device_lookup(
-       struct fcoe_transport *t, struct net_device *netdev)
+ */
+static struct fcoe_transport_internal *
+fcoe_transport_device_lookup(struct fcoe_transport *t,
+                            struct net_device *netdev)
 {
        struct fcoe_transport_internal *ti;
 
@@ -81,14 +80,14 @@ static struct fcoe_transport_internal *fcoe_transport_device_lookup(
        return NULL;
 }
 /**
- * fcoe_transport_device_add - assign a transport to a device
+ * fcoe_transport_device_add() - Assign a transport to a device
  * @netdev: the netdev the transport to be attached to
  *
  * This will look for existing offload driver, if not found, it falls back to
  * the default sw hba (fcoe_sw) as its fcoe transport.
  *
  * Returns: 0 for success
- **/
+ */
 static int fcoe_transport_device_add(struct fcoe_transport *t,
                                     struct net_device *netdev)
 {
@@ -123,14 +122,14 @@ static int fcoe_transport_device_add(struct fcoe_transport *t,
 }
 
 /**
- * fcoe_transport_device_remove - remove a device from its transport
+ * fcoe_transport_device_remove() - Remove a device from its transport
  * @netdev: the netdev the transport to be attached to
  *
- * this removes the device from the transport so the given transport will
+ * This removes the device from the transport so the given transport will
  * not manage this device any more
  *
  * Returns: 0 for success
- **/
+ */
 static int fcoe_transport_device_remove(struct fcoe_transport *t,
                                        struct net_device *netdev)
 {
@@ -155,13 +154,13 @@ static int fcoe_transport_device_remove(struct fcoe_transport *t,
 }
 
 /**
- * fcoe_transport_device_remove_all - remove all from transport devlist
+ * fcoe_transport_device_remove_all() - Remove all from transport devlist
  *
- * this removes the device from the transport so the given transport will
+ * This removes the device from the transport so the given transport will
  * not manage this device any more
  *
  * Returns: 0 for success
- **/
+ */
 static void fcoe_transport_device_remove_all(struct fcoe_transport *t)
 {
        struct fcoe_transport_internal *ti, *tmp;
@@ -175,18 +174,18 @@ static void fcoe_transport_device_remove_all(struct fcoe_transport *t)
 }
 
 /**
- * fcoe_transport_match - use the bus device match function to match the hw
- * @t: the fcoe transport
- * @netdev:
+ * fcoe_transport_match() - Use the bus device match function to match the hw
+ * @t: The fcoe transport to check
+ * @netdev: The netdev to match against
  *
- * This function is used to check if the givne transport wants to manage the
+ * This function is used to check if the given transport wants to manage the
  * input netdev. if the transports implements the match function, it will be
  * called, o.w. we just compare the pci vendor and device id.
  *
  * Returns: true for match up
- **/
+ */
 static bool fcoe_transport_match(struct fcoe_transport *t,
-                               struct net_device *netdev)
+                                struct net_device *netdev)
 {
        /* match transport by vendor and device id */
        struct pci_dev *pci;
@@ -210,17 +209,17 @@ static bool fcoe_transport_match(struct fcoe_transport *t,
 }
 
 /**
- * fcoe_transport_lookup - check if the transport is already registered
+ * fcoe_transport_lookup() - Check if the transport is already registered
  * @t: the transport to be looked up
  *
  * This compares the parent device (pci) vendor and device id
  *
  * Returns: NULL if not found
  *
- * TODO - return default sw transport if no other transport is found
- **/
-static struct fcoe_transport *fcoe_transport_lookup(
-       struct net_device *netdev)
+ * TODO: return default sw transport if no other transport is found
+ */
+static struct fcoe_transport *
+fcoe_transport_lookup(struct net_device *netdev)
 {
        struct fcoe_transport *t;
 
@@ -239,11 +238,11 @@ static struct fcoe_transport *fcoe_transport_lookup(
 }
 
 /**
- * fcoe_transport_register - adds a fcoe transport to the fcoe transports list
+ * fcoe_transport_register() - Adds a fcoe transport to the fcoe transports list
  * @t: ptr to the fcoe transport to be added
  *
  * Returns: 0 for success
- **/
+ */
 int fcoe_transport_register(struct fcoe_transport *t)
 {
        struct fcoe_transport *tt;
@@ -259,9 +258,6 @@ int fcoe_transport_register(struct fcoe_transport *t)
        list_add_tail(&t->list, &fcoe_transports);
        mutex_unlock(&fcoe_transports_lock);
 
-       mutex_init(&t->devlock);
-       INIT_LIST_HEAD(&t->devlist);
-
        printk(KERN_DEBUG "fcoe_transport_register:%s\n", t->name);
 
        return 0;
@@ -269,11 +265,11 @@ int fcoe_transport_register(struct fcoe_transport *t)
 EXPORT_SYMBOL_GPL(fcoe_transport_register);
 
 /**
- * fcoe_transport_unregister - remove the tranport fro the fcoe transports list
+ * fcoe_transport_unregister() - Remove the tranport fro the fcoe transports list
  * @t: ptr to the fcoe transport to be removed
  *
  * Returns: 0 for success
- **/
+ */
 int fcoe_transport_unregister(struct fcoe_transport *t)
 {
        struct fcoe_transport *tt, *tmp;
@@ -294,8 +290,8 @@ int fcoe_transport_unregister(struct fcoe_transport *t)
 }
 EXPORT_SYMBOL_GPL(fcoe_transport_unregister);
 
-/*
- * fcoe_load_transport_driver - load an offload driver by alias name
+/**
+ * fcoe_load_transport_driver() - Load an offload driver by alias name
  * @netdev: the target net device
  *
  * Requests for an offload driver module as the fcoe transport, if fails, it
@@ -307,7 +303,7 @@ EXPORT_SYMBOL_GPL(fcoe_transport_unregister);
  *     3. pure hw fcoe hba may not have netdev
  *
  * Returns: 0 for success
- **/
+ */
 int fcoe_load_transport_driver(struct net_device *netdev)
 {
        struct pci_dev *pci;
@@ -335,14 +331,14 @@ int fcoe_load_transport_driver(struct net_device *netdev)
 EXPORT_SYMBOL_GPL(fcoe_load_transport_driver);
 
 /**
- * fcoe_transport_attach - load transport to fcoe
+ * fcoe_transport_attach() - Load transport to fcoe
  * @netdev: the netdev the transport to be attached to
  *
  * This will look for existing offload driver, if not found, it falls back to
  * the default sw hba (fcoe_sw) as its fcoe transport.
  *
  * Returns: 0 for success
- **/
+ */
 int fcoe_transport_attach(struct net_device *netdev)
 {
        struct fcoe_transport *t;
@@ -373,11 +369,11 @@ int fcoe_transport_attach(struct net_device *netdev)
 EXPORT_SYMBOL_GPL(fcoe_transport_attach);
 
 /**
- * fcoe_transport_release - unload transport from fcoe
+ * fcoe_transport_release() - Unload transport from fcoe
  * @netdev: the net device on which fcoe is to be released
  *
  * Returns: 0 for success
- **/
+ */
 int fcoe_transport_release(struct net_device *netdev)
 {
        struct fcoe_transport *t;
@@ -410,12 +406,12 @@ int fcoe_transport_release(struct net_device *netdev)
 EXPORT_SYMBOL_GPL(fcoe_transport_release);
 
 /**
- * fcoe_transport_init - initializes fcoe transport layer
+ * fcoe_transport_init() - Initializes fcoe transport layer
  *
  * This prepares for the fcoe transport layer
  *
  * Returns: none
- **/
+ */
 int __init fcoe_transport_init(void)
 {
        INIT_LIST_HEAD(&fcoe_transports);
@@ -424,12 +420,13 @@ int __init fcoe_transport_init(void)
 }
 
 /**
- * fcoe_transport_exit - cleans up the fcoe transport layer
+ * fcoe_transport_exit() - Cleans up the fcoe transport layer
+ *
  * This cleans up the fcoe transport layer. removing any transport on the list,
  * note that the transport destroy func is not called here.
  *
  * Returns: none
- **/
+ */
 int __exit fcoe_transport_exit(void)
 {
        struct fcoe_transport *t, *tmp;
index dc4cd5e..da210eb 100644 (file)
@@ -104,19 +104,19 @@ static struct scsi_host_template fcoe_sw_shost_template = {
        .max_sectors = 0xffff,
 };
 
-/*
- * fcoe_sw_lport_config - sets up the fc_lport
+/**
+ * fcoe_sw_lport_config() - sets up the fc_lport
  * @lp: ptr to the fc_lport
  * @shost: ptr to the parent scsi host
  *
  * Returns: 0 for success
- *
  */
 static int fcoe_sw_lport_config(struct fc_lport *lp)
 {
        int i = 0;
 
-       lp->link_status = 0;
+       lp->link_up = 0;
+       lp->qfull = 0;
        lp->max_retry_count = 3;
        lp->e_d_tov = 2 * 1000; /* FC-FS default */
        lp->r_a_tov = 2 * 2 * 1000;
@@ -136,16 +136,14 @@ static int fcoe_sw_lport_config(struct fc_lport *lp)
        return 0;
 }
 
-/*
- * fcoe_sw_netdev_config - sets up fcoe_softc for lport and network
- * related properties
+/**
+ * fcoe_sw_netdev_config() - Set up netdev for SW FCoE
  * @lp : ptr to the fc_lport
  * @netdev : ptr to the associated netdevice struct
  *
  * Must be called after fcoe_sw_lport_config() as it will use lport mutex
  *
  * Returns : 0 for success
- *
  */
 static int fcoe_sw_netdev_config(struct fc_lport *lp, struct net_device *netdev)
 {
@@ -181,9 +179,8 @@ static int fcoe_sw_netdev_config(struct fc_lport *lp, struct net_device *netdev)
        if (fc_set_mfs(lp, mfs))
                return -EINVAL;
 
-       lp->link_status = ~FC_PAUSE & ~FC_LINK_UP;
        if (!fcoe_link_ok(lp))
-               lp->link_status |= FC_LINK_UP;
+               lp->link_up = 1;
 
        /* offload features support */
        if (fc->real_dev->features & NETIF_F_SG)
@@ -191,6 +188,7 @@ static int fcoe_sw_netdev_config(struct fc_lport *lp, struct net_device *netdev)
 
 
        skb_queue_head_init(&fc->fcoe_pending_queue);
+       fc->fcoe_pending_queue_active = 0;
 
        /* setup Source Mac Address */
        memcpy(fc->ctl_src_addr, fc->real_dev->dev_addr,
@@ -224,16 +222,15 @@ static int fcoe_sw_netdev_config(struct fc_lport *lp, struct net_device *netdev)
        return 0;
 }
 
-/*
- * fcoe_sw_shost_config - sets up fc_lport->host
+/**
+ * fcoe_sw_shost_config() - Sets up fc_lport->host
  * @lp : ptr to the fc_lport
  * @shost : ptr to the associated scsi host
  * @dev : device associated to scsi host
  *
- * Must be called after fcoe_sw_lport_config) and fcoe_sw_netdev_config()
+ * Must be called after fcoe_sw_lport_config() and fcoe_sw_netdev_config()
  *
  * Returns : 0 for success
- *
  */
 static int fcoe_sw_shost_config(struct fc_lport *lp, struct Scsi_Host *shost,
                                struct device *dev)
@@ -261,8 +258,8 @@ static int fcoe_sw_shost_config(struct fc_lport *lp, struct Scsi_Host *shost,
        return 0;
 }
 
-/*
- * fcoe_sw_em_config - allocates em for this lport
+/**
+ * fcoe_sw_em_config() - allocates em for this lport
  * @lp: the port that em is to allocated for
  *
  * Returns : 0 on success
@@ -279,8 +276,8 @@ static inline int fcoe_sw_em_config(struct fc_lport *lp)
        return 0;
 }
 
-/*
- * fcoe_sw_destroy - FCoE software HBA tear-down function
+/**
+ * fcoe_sw_destroy() - FCoE software HBA tear-down function
  * @netdev: ptr to the associated net_device
  *
  * Returns: 0 if link is OK for use by FCoE.
@@ -301,7 +298,7 @@ static int fcoe_sw_destroy(struct net_device *netdev)
        if (!lp)
                return -ENODEV;
 
-       fc = fcoe_softc(lp);
+       fc = lport_priv(lp);
 
        /* Logout of the fabric */
        fc_fabric_logoff(lp);
@@ -353,8 +350,8 @@ static struct libfc_function_template fcoe_sw_libfc_fcn_templ = {
        .frame_send = fcoe_xmit,
 };
 
-/*
- * fcoe_sw_create - this function creates the fcoe interface
+/**
+ * fcoe_sw_create() - this function creates the fcoe interface
  * @netdev: pointer the associated netdevice
  *
  * Creates fc_lport struct and scsi_host for lport, configures lport
@@ -440,8 +437,8 @@ out_host_put:
        return rc;
 }
 
-/*
- * fcoe_sw_match - the fcoe sw transport match function
+/**
+ * fcoe_sw_match() - The FCoE SW transport match function
  *
  * Returns : false always
  */
@@ -461,8 +458,8 @@ struct fcoe_transport fcoe_sw_transport = {
        .device = 0xffff,
 };
 
-/*
- * fcoe_sw_init - registers fcoe_sw_transport
+/**
+ * fcoe_sw_init() - Registers fcoe_sw_transport
  *
  * Returns : 0 on success
  */
@@ -471,17 +468,22 @@ int __init fcoe_sw_init(void)
        /* attach to scsi transport */
        scsi_transport_fcoe_sw =
                fc_attach_transport(&fcoe_sw_transport_function);
+
        if (!scsi_transport_fcoe_sw) {
                printk(KERN_ERR "fcoe_sw_init:fc_attach_transport() failed\n");
                return -ENODEV;
        }
+
+       mutex_init(&fcoe_sw_transport.devlock);
+       INIT_LIST_HEAD(&fcoe_sw_transport.devlist);
+
        /* register sw transport */
        fcoe_transport_register(&fcoe_sw_transport);
        return 0;
 }
 
-/*
- * fcoe_sw_exit - unregisters fcoe_sw_transport
+/**
+ * fcoe_sw_exit() - Unregisters fcoe_sw_transport
  *
  * Returns : 0 on success
  */
index e419f48..5548bf3 100644 (file)
@@ -49,6 +49,7 @@
 static int debug_fcoe;
 
 #define FCOE_MAX_QUEUE_DEPTH  256
+#define FCOE_LOW_QUEUE_DEPTH  32
 
 /* destination address mode */
 #define FCOE_GW_ADDR_MODE          0x00
@@ -69,8 +70,6 @@ struct fcoe_percpu_s *fcoe_percpu[NR_CPUS];
 
 /* Function Prototyes */
 static int fcoe_check_wait_queue(struct fc_lport *);
-static void fcoe_insert_wait_queue_head(struct fc_lport *, struct sk_buff *);
-static void fcoe_insert_wait_queue(struct fc_lport *, struct sk_buff *);
 static void fcoe_recv_flogi(struct fcoe_softc *, struct fc_frame *, u8 *);
 #ifdef CONFIG_HOTPLUG_CPU
 static int fcoe_cpu_callback(struct notifier_block *, ulong, void *);
@@ -91,13 +90,13 @@ static struct notifier_block fcoe_cpu_notifier = {
 };
 
 /**
- * fcoe_create_percpu_data - creates the associated cpu data
+ * fcoe_create_percpu_data() - creates the associated cpu data
  * @cpu: index for the cpu where fcoe cpu data will be created
  *
  * create percpu stats block, from cpu add notifier
  *
  * Returns: none
- **/
+ */
 static void fcoe_create_percpu_data(int cpu)
 {
        struct fc_lport *lp;
@@ -115,13 +114,13 @@ static void fcoe_create_percpu_data(int cpu)
 }
 
 /**
- * fcoe_destroy_percpu_data - destroys the associated cpu data
+ * fcoe_destroy_percpu_data() - destroys the associated cpu data
  * @cpu: index for the cpu where fcoe cpu data will destroyed
  *
  * destroy percpu stats block called by cpu add/remove notifier
  *
  * Retuns: none
- **/
+ */
 static void fcoe_destroy_percpu_data(int cpu)
 {
        struct fc_lport *lp;
@@ -137,7 +136,7 @@ static void fcoe_destroy_percpu_data(int cpu)
 }
 
 /**
- * fcoe_cpu_callback - fcoe cpu hotplug event callback
+ * fcoe_cpu_callback() - fcoe cpu hotplug event callback
  * @nfb: callback data block
  * @action: event triggering the callback
  * @hcpu: index for the cpu of this event
@@ -145,7 +144,7 @@ static void fcoe_destroy_percpu_data(int cpu)
  * this creates or destroys per cpu data for fcoe
  *
  * Returns NOTIFY_OK always.
- **/
+ */
 static int fcoe_cpu_callback(struct notifier_block *nfb, unsigned long action,
                             void *hcpu)
 {
@@ -166,7 +165,7 @@ static int fcoe_cpu_callback(struct notifier_block *nfb, unsigned long action,
 #endif /* CONFIG_HOTPLUG_CPU */
 
 /**
- * fcoe_rcv - this is the fcoe receive function called by NET_RX_SOFTIRQ
+ * fcoe_rcv() - this is the fcoe receive function called by NET_RX_SOFTIRQ
  * @skb: the receive skb
  * @dev: associated net device
  * @ptype: context
@@ -175,7 +174,7 @@ static int fcoe_cpu_callback(struct notifier_block *nfb, unsigned long action,
  * this function will receive the packet and build fc frame and pass it up
  *
  * Returns: 0 for success
- **/
+ */
 int fcoe_rcv(struct sk_buff *skb, struct net_device *dev,
             struct packet_type *ptype, struct net_device *olddev)
 {
@@ -265,11 +264,11 @@ err2:
 EXPORT_SYMBOL_GPL(fcoe_rcv);
 
 /**
- * fcoe_start_io - pass to netdev to start xmit for fcoe
+ * fcoe_start_io() - pass to netdev to start xmit for fcoe
  * @skb: the skb to be xmitted
  *
  * Returns: 0 for success
- **/
+ */
 static inline int fcoe_start_io(struct sk_buff *skb)
 {
        int rc;
@@ -283,12 +282,12 @@ static inline int fcoe_start_io(struct sk_buff *skb)
 }
 
 /**
- * fcoe_get_paged_crc_eof - in case we need alloc a page for crc_eof
+ * fcoe_get_paged_crc_eof() - in case we need alloc a page for crc_eof
  * @skb: the skb to be xmitted
  * @tlen: total len
  *
  * Returns: 0 for success
- **/
+ */
 static int fcoe_get_paged_crc_eof(struct sk_buff *skb, int tlen)
 {
        struct fcoe_percpu_s *fps;
@@ -326,13 +325,12 @@ static int fcoe_get_paged_crc_eof(struct sk_buff *skb, int tlen)
 }
 
 /**
- * fcoe_fc_crc - calculates FC CRC in this fcoe skb
+ * fcoe_fc_crc() - calculates FC CRC in this fcoe skb
  * @fp: the fc_frame containg data to be checksummed
  *
  * This uses crc32() to calculate the crc for fc frame
  * Return   : 32 bit crc
- *
- **/
+ */
 u32 fcoe_fc_crc(struct fc_frame *fp)
 {
        struct sk_buff *skb = fp_skb(fp);
@@ -363,13 +361,12 @@ u32 fcoe_fc_crc(struct fc_frame *fp)
 EXPORT_SYMBOL_GPL(fcoe_fc_crc);
 
 /**
- * fcoe_xmit - FCoE frame transmit function
+ * fcoe_xmit() - FCoE frame transmit function
  * @lp:        the associated local port
  * @fp: the fc_frame to be transmitted
  *
  * Return   : 0 for success
- *
- **/
+ */
 int fcoe_xmit(struct fc_lport *lp, struct fc_frame *fp)
 {
        int wlen, rc = 0;
@@ -389,7 +386,7 @@ int fcoe_xmit(struct fc_lport *lp, struct fc_frame *fp)
 
        WARN_ON((fr_len(fp) % sizeof(u32)) != 0);
 
-       fc = fcoe_softc(lp);
+       fc = lport_priv(lp);
        /*
         * if it is a flogi then we need to learn gw-addr
         * and my own fcid
@@ -439,7 +436,7 @@ int fcoe_xmit(struct fc_lport *lp, struct fc_frame *fp)
        if (skb_is_nonlinear(skb)) {
                skb_frag_t *frag;
                if (fcoe_get_paged_crc_eof(skb, tlen)) {
-                       kfree(skb);
+                       kfree_skb(skb);
                        return -ENOMEM;
                }
                frag = &skb_shinfo(skb)->frags[skb_shinfo(skb)->nr_frags - 1];
@@ -502,21 +499,22 @@ int fcoe_xmit(struct fc_lport *lp, struct fc_frame *fp)
                rc = fcoe_start_io(skb);
 
        if (rc) {
-               fcoe_insert_wait_queue(lp, skb);
+               spin_lock_bh(&fc->fcoe_pending_queue.lock);
+               __skb_queue_tail(&fc->fcoe_pending_queue, skb);
+               spin_unlock_bh(&fc->fcoe_pending_queue.lock);
                if (fc->fcoe_pending_queue.qlen > FCOE_MAX_QUEUE_DEPTH)
-                       fc_pause(lp);
+                       lp->qfull = 1;
        }
 
        return 0;
 }
 EXPORT_SYMBOL_GPL(fcoe_xmit);
 
-/*
- * fcoe_percpu_receive_thread - recv thread per cpu
+/**
+ * fcoe_percpu_receive_thread() - recv thread per cpu
  * @arg: ptr to the fcoe per cpu struct
  *
  * Return: 0 for success
- *
  */
 int fcoe_percpu_receive_thread(void *arg)
 {
@@ -533,7 +531,7 @@ int fcoe_percpu_receive_thread(void *arg)
        struct fcoe_softc *fc;
        struct fcoe_hdr *hp;
 
-       set_user_nice(current, 19);
+       set_user_nice(current, -20);
 
        while (!kthread_should_stop()) {
 
@@ -658,7 +656,7 @@ int fcoe_percpu_receive_thread(void *arg)
 }
 
 /**
- * fcoe_recv_flogi - flogi receive function
+ * fcoe_recv_flogi() - flogi receive function
  * @fc: associated fcoe_softc
  * @fp: the recieved frame
  * @sa: the source address of this flogi
@@ -667,7 +665,7 @@ int fcoe_percpu_receive_thread(void *arg)
  * mac address for the initiator, eitehr OUI based or GW based.
  *
  * Returns: none
- **/
+ */
 static void fcoe_recv_flogi(struct fcoe_softc *fc, struct fc_frame *fp, u8 *sa)
 {
        struct fc_frame_header *fh;
@@ -715,32 +713,23 @@ static void fcoe_recv_flogi(struct fcoe_softc *fc, struct fc_frame *fp, u8 *sa)
 }
 
 /**
- * fcoe_watchdog - fcoe timer callback
+ * fcoe_watchdog() - fcoe timer callback
  * @vp:
  *
- * This checks the pending queue length for fcoe and put fcoe to be paused state
+ * This checks the pending queue length for fcoe and set lport qfull
  * if the FCOE_MAX_QUEUE_DEPTH is reached. This is done for all fc_lport on the
  * fcoe_hostlist.
  *
  * Returns: 0 for success
- **/
+ */
 void fcoe_watchdog(ulong vp)
 {
-       struct fc_lport *lp;
        struct fcoe_softc *fc;
-       int paused = 0;
 
        read_lock(&fcoe_hostlist_lock);
        list_for_each_entry(fc, &fcoe_hostlist, list) {
-               lp = fc->lp;
-               if (lp) {
-                       if (fc->fcoe_pending_queue.qlen > FCOE_MAX_QUEUE_DEPTH)
-                               paused = 1;
-                       if (fcoe_check_wait_queue(lp) <  FCOE_MAX_QUEUE_DEPTH) {
-                               if (paused)
-                                       fc_unpause(lp);
-                       }
-               }
+               if (fc->lp)
+                       fcoe_check_wait_queue(fc->lp);
        }
        read_unlock(&fcoe_hostlist_lock);
 
@@ -750,96 +739,64 @@ void fcoe_watchdog(ulong vp)
 
 
 /**
- * fcoe_check_wait_queue - put the skb into fcoe pending xmit queue
+ * fcoe_check_wait_queue() - put the skb into fcoe pending xmit queue
  * @lp: the fc_port for this skb
  * @skb: the associated skb to be xmitted
  *
  * This empties the wait_queue, dequeue the head of the wait_queue queue
  * and calls fcoe_start_io() for each packet, if all skb have been
- * transmitted, return 0 if a error occurs, then restore wait_queue and
- * try again later.
+ * transmitted, return qlen or -1 if a error occurs, then restore
+ * wait_queue and  try again later.
  *
  * The wait_queue is used when the skb transmit fails. skb will go
  * in the wait_queue which will be emptied by the time function OR
  * by the next skb transmit.
  *
  * Returns: 0 for success
- **/
+ */
 static int fcoe_check_wait_queue(struct fc_lport *lp)
 {
-       int rc, unpause = 0;
-       int paused = 0;
+       struct fcoe_softc *fc = lport_priv(lp);
        struct sk_buff *skb;
-       struct fcoe_softc *fc;
+       int rc = -1;
 
-       fc = fcoe_softc(lp);
        spin_lock_bh(&fc->fcoe_pending_queue.lock);
+       if (fc->fcoe_pending_queue_active)
+               goto out;
+       fc->fcoe_pending_queue_active = 1;
 
-       /*
-        * is this interface paused?
-        */
-       if (fc->fcoe_pending_queue.qlen > FCOE_MAX_QUEUE_DEPTH)
-               paused = 1;
-       if (fc->fcoe_pending_queue.qlen) {
-               while ((skb = __skb_dequeue(&fc->fcoe_pending_queue)) != NULL) {
-                       spin_unlock_bh(&fc->fcoe_pending_queue.lock);
-                       rc = fcoe_start_io(skb);
-                       if (rc) {
-                               fcoe_insert_wait_queue_head(lp, skb);
-                               return rc;
-                       }
-                       spin_lock_bh(&fc->fcoe_pending_queue.lock);
-               }
-               if (fc->fcoe_pending_queue.qlen < FCOE_MAX_QUEUE_DEPTH)
-                       unpause = 1;
-       }
-       spin_unlock_bh(&fc->fcoe_pending_queue.lock);
-       if ((unpause) && (paused))
-               fc_unpause(lp);
-       return fc->fcoe_pending_queue.qlen;
-}
-
-/**
- * fcoe_insert_wait_queue_head - puts skb to fcoe pending queue head
- * @lp: the fc_port for this skb
- * @skb: the associated skb to be xmitted
- *
- * Returns: none
- **/
-static void fcoe_insert_wait_queue_head(struct fc_lport *lp,
-                                       struct sk_buff *skb)
-{
-       struct fcoe_softc *fc;
+       while (fc->fcoe_pending_queue.qlen) {
+               /* keep qlen > 0 until fcoe_start_io succeeds */
+               fc->fcoe_pending_queue.qlen++;
+               skb = __skb_dequeue(&fc->fcoe_pending_queue);
 
-       fc = fcoe_softc(lp);
-       spin_lock_bh(&fc->fcoe_pending_queue.lock);
-       __skb_queue_head(&fc->fcoe_pending_queue, skb);
-       spin_unlock_bh(&fc->fcoe_pending_queue.lock);
-}
+               spin_unlock_bh(&fc->fcoe_pending_queue.lock);
+               rc = fcoe_start_io(skb);
+               spin_lock_bh(&fc->fcoe_pending_queue.lock);
 
-/**
- * fcoe_insert_wait_queue - put the skb into fcoe pending queue tail
- * @lp: the fc_port for this skb
- * @skb: the associated skb to be xmitted
- *
- * Returns: none
- **/
-static void fcoe_insert_wait_queue(struct fc_lport *lp,
-                                  struct sk_buff *skb)
-{
-       struct fcoe_softc *fc;
+               if (rc) {
+                       __skb_queue_head(&fc->fcoe_pending_queue, skb);
+                       /* undo temporary increment above */
+                       fc->fcoe_pending_queue.qlen--;
+                       break;
+               }
+               /* undo temporary increment above */
+               fc->fcoe_pending_queue.qlen--;
+       }
 
-       fc = fcoe_softc(lp);
-       spin_lock_bh(&fc->fcoe_pending_queue.lock);
-       __skb_queue_tail(&fc->fcoe_pending_queue, skb);
+       if (fc->fcoe_pending_queue.qlen < FCOE_LOW_QUEUE_DEPTH)
+               lp->qfull = 0;
+       fc->fcoe_pending_queue_active = 0;
+       rc = fc->fcoe_pending_queue.qlen;
+out:
        spin_unlock_bh(&fc->fcoe_pending_queue.lock);
+       return rc;
 }
 
 /**
- * fcoe_dev_setup - setup link change notification interface
- *
- **/
-static void fcoe_dev_setup(void)
+ * fcoe_dev_setup() - setup link change notification interface
+ */
+static void fcoe_dev_setup()
 {
        /*
         * here setup a interface specific wd time to
@@ -849,15 +806,15 @@ static void fcoe_dev_setup(void)
 }
 
 /**
- * fcoe_dev_setup - cleanup link change notification interface
- **/
+ * fcoe_dev_setup() - cleanup link change notification interface
+ */
 static void fcoe_dev_cleanup(void)
 {
        unregister_netdevice_notifier(&fcoe_notifier);
 }
 
 /**
- * fcoe_device_notification - netdev event notification callback
+ * fcoe_device_notification() - netdev event notification callback
  * @notifier: context of the notification
  * @event: type of event
  * @ptr: fixed array for output parsed ifname
@@ -865,7 +822,7 @@ static void fcoe_dev_cleanup(void)
  * This function is called by the ethernet driver in case of link change event
  *
  * Returns: 0 for success
- **/
+ */
 static int fcoe_device_notification(struct notifier_block *notifier,
                                    ulong event, void *ptr)
 {
@@ -873,7 +830,7 @@ static int fcoe_device_notification(struct notifier_block *notifier,
        struct net_device *real_dev = ptr;
        struct fcoe_softc *fc;
        struct fcoe_dev_stats *stats;
-       u16 new_status;
+       u32 new_link_up;
        u32 mfs;
        int rc = NOTIFY_OK;
 
@@ -890,17 +847,15 @@ static int fcoe_device_notification(struct notifier_block *notifier,
                goto out;
        }
 
-       new_status = lp->link_status;
+       new_link_up = lp->link_up;
        switch (event) {
        case NETDEV_DOWN:
        case NETDEV_GOING_DOWN:
-               new_status &= ~FC_LINK_UP;
+               new_link_up = 0;
                break;
        case NETDEV_UP:
        case NETDEV_CHANGE:
-               new_status &= ~FC_LINK_UP;
-               if (!fcoe_link_ok(lp))
-                       new_status |= FC_LINK_UP;
+               new_link_up = !fcoe_link_ok(lp);
                break;
        case NETDEV_CHANGEMTU:
                mfs = fc->real_dev->mtu -
@@ -908,17 +863,15 @@ static int fcoe_device_notification(struct notifier_block *notifier,
                         sizeof(struct fcoe_crc_eof));
                if (mfs >= FC_MIN_MAX_FRAME)
                        fc_set_mfs(lp, mfs);
-               new_status &= ~FC_LINK_UP;
-               if (!fcoe_link_ok(lp))
-                       new_status |= FC_LINK_UP;
+               new_link_up = !fcoe_link_ok(lp);
                break;
        case NETDEV_REGISTER:
                break;
        default:
                FC_DBG("unknown event %ld call", event);
        }
-       if (lp->link_status != new_status) {
-               if ((new_status & FC_LINK_UP) == FC_LINK_UP)
+       if (lp->link_up != new_link_up) {
+               if (new_link_up)
                        fc_linkup(lp);
                else {
                        stats = lp->dev_stats[smp_processor_id()];
@@ -933,12 +886,12 @@ out:
 }
 
 /**
- * fcoe_if_to_netdev - parse a name buffer to get netdev
+ * fcoe_if_to_netdev() - parse a name buffer to get netdev
  * @ifname: fixed array for output parsed ifname
  * @buffer: incoming buffer to be copied
  *
  * Returns: NULL or ptr to netdeive
- **/
+ */
 static struct net_device *fcoe_if_to_netdev(const char *buffer)
 {
        char *cp;
@@ -955,13 +908,13 @@ static struct net_device *fcoe_if_to_netdev(const char *buffer)
 }
 
 /**
- * fcoe_netdev_to_module_owner - finds out the nic drive moddule of the netdev
+ * fcoe_netdev_to_module_owner() - finds out the nic drive moddule of the netdev
  * @netdev: the target netdev
  *
  * Returns: ptr to the struct module, NULL for failure
- **/
-static struct module *fcoe_netdev_to_module_owner(
-       const struct net_device *netdev)
+ */
+static struct module *
+fcoe_netdev_to_module_owner(const struct net_device *netdev)
 {
        struct device *dev;
 
@@ -979,12 +932,14 @@ static struct module *fcoe_netdev_to_module_owner(
 }
 
 /**
- * fcoe_ethdrv_get - holds the nic driver module by  try_module_get() for
- * the corresponding netdev.
+ * fcoe_ethdrv_get() - Hold the Ethernet driver
  * @netdev: the target netdev
  *
+ * Holds the Ethernet driver module by try_module_get() for
+ * the corresponding netdev.
+ *
  * Returns: 0 for succsss
- **/
+ */
 static int fcoe_ethdrv_get(const struct net_device *netdev)
 {
        struct module *owner;
@@ -999,12 +954,14 @@ static int fcoe_ethdrv_get(const struct net_device *netdev)
 }
 
 /**
- * fcoe_ethdrv_get - releases the nic driver module by module_put for
- * the corresponding netdev.
+ * fcoe_ethdrv_put() - Release the Ethernet driver
  * @netdev: the target netdev
  *
+ * Releases the Ethernet driver module by module_put for
+ * the corresponding netdev.
+ *
  * Returns: 0 for succsss
- **/
+ */
 static int fcoe_ethdrv_put(const struct net_device *netdev)
 {
        struct module *owner;
@@ -1020,12 +977,12 @@ static int fcoe_ethdrv_put(const struct net_device *netdev)
 }
 
 /**
- * fcoe_destroy- handles the destroy from sysfs
+ * fcoe_destroy() - handles the destroy from sysfs
  * @buffer: expcted to be a eth if name
  * @kp: associated kernel param
  *
  * Returns: 0 for success
- **/
+ */
 static int fcoe_destroy(const char *buffer, struct kernel_param *kp)
 {
        int rc;
@@ -1058,12 +1015,12 @@ out_nodev:
 }
 
 /**
- * fcoe_create - handles the create call from sysfs
+ * fcoe_create() - Handles the create call from sysfs
  * @buffer: expcted to be a eth if name
  * @kp: associated kernel param
  *
  * Returns: 0 for success
- **/
+ */
 static int fcoe_create(const char *buffer, struct kernel_param *kp)
 {
        int rc;
@@ -1104,8 +1061,8 @@ module_param_call(destroy, fcoe_destroy, NULL, NULL, S_IWUSR);
 __MODULE_PARM_TYPE(destroy, "string");
 MODULE_PARM_DESC(destroy, "Destroy fcoe port");
 
-/*
- * fcoe_link_ok - check if link is ok for the fc_lport
+/**
+ * fcoe_link_ok() - Check if link is ok for the fc_lport
  * @lp: ptr to the fc_lport
  *
  * Any permanently-disqualifying conditions have been previously checked.
@@ -1120,7 +1077,7 @@ MODULE_PARM_DESC(destroy, "Destroy fcoe port");
  */
 int fcoe_link_ok(struct fc_lport *lp)
 {
-       struct fcoe_softc *fc = fcoe_softc(lp);
+       struct fcoe_softc *fc = lport_priv(lp);
        struct net_device *dev = fc->real_dev;
        struct ethtool_cmd ecmd = { ETHTOOL_GSET };
        int rc = 0;
@@ -1149,9 +1106,8 @@ int fcoe_link_ok(struct fc_lport *lp)
 }
 EXPORT_SYMBOL_GPL(fcoe_link_ok);
 
-/*
- * fcoe_percpu_clean - frees skb of the corresponding lport from the per
- * cpu queue.
+/**
+ * fcoe_percpu_clean() - Clear the pending skbs for an lport
  * @lp: the fc_lport
  */
 void fcoe_percpu_clean(struct fc_lport *lp)
@@ -1185,11 +1141,11 @@ void fcoe_percpu_clean(struct fc_lport *lp)
 EXPORT_SYMBOL_GPL(fcoe_percpu_clean);
 
 /**
- * fcoe_clean_pending_queue - dequeue skb and free it
+ * fcoe_clean_pending_queue() - Dequeue a skb and free it
  * @lp: the corresponding fc_lport
  *
  * Returns: none
- **/
+ */
 void fcoe_clean_pending_queue(struct fc_lport *lp)
 {
        struct fcoe_softc  *fc = lport_priv(lp);
@@ -1206,21 +1162,21 @@ void fcoe_clean_pending_queue(struct fc_lport *lp)
 EXPORT_SYMBOL_GPL(fcoe_clean_pending_queue);
 
 /**
- * libfc_host_alloc - allocate a Scsi_Host with room for the fc_lport
+ * libfc_host_alloc() - Allocate a Scsi_Host with room for the fc_lport
  * @sht: ptr to the scsi host templ
  * @priv_size: size of private data after fc_lport
  *
  * Returns: ptr to Scsi_Host
- * TODO - to libfc?
+ * TODO: to libfc?
  */
-static inline struct Scsi_Host *libfc_host_alloc(
-       struct scsi_host_template *sht, int priv_size)
+static inline struct Scsi_Host *
+libfc_host_alloc(struct scsi_host_template *sht, int priv_size)
 {
        return scsi_host_alloc(sht, sizeof(struct fc_lport) + priv_size);
 }
 
 /**
- * fcoe_host_alloc - allocate a Scsi_Host with room for the fcoe_softc
+ * fcoe_host_alloc() - Allocate a Scsi_Host with room for the fcoe_softc
  * @sht: ptr to the scsi host templ
  * @priv_size: size of private data after fc_lport
  *
@@ -1232,8 +1188,8 @@ struct Scsi_Host *fcoe_host_alloc(struct scsi_host_template *sht, int priv_size)
 }
 EXPORT_SYMBOL_GPL(fcoe_host_alloc);
 
-/*
- * fcoe_reset - resets the fcoe
+/**
+ * fcoe_reset() - Resets the fcoe
  * @shost: shost the reset is from
  *
  * Returns: always 0
@@ -1246,8 +1202,8 @@ int fcoe_reset(struct Scsi_Host *shost)
 }
 EXPORT_SYMBOL_GPL(fcoe_reset);
 
-/*
- * fcoe_wwn_from_mac - converts 48-bit IEEE MAC address to 64-bit FC WWN.
+/**
+ * fcoe_wwn_from_mac() - Converts 48-bit IEEE MAC address to 64-bit FC WWN.
  * @mac: mac address
  * @scheme: check port
  * @port: port indicator for converting
@@ -1286,14 +1242,15 @@ u64 fcoe_wwn_from_mac(unsigned char mac[MAX_ADDR_LEN],
        return wwn;
 }
 EXPORT_SYMBOL_GPL(fcoe_wwn_from_mac);
-/*
- * fcoe_hostlist_lookup_softc - find the corresponding lport by a given device
+
+/**
+ * fcoe_hostlist_lookup_softc() - find the corresponding lport by a given device
  * @device: this is currently ptr to net_device
  *
  * Returns: NULL or the located fcoe_softc
  */
-static struct fcoe_softc *fcoe_hostlist_lookup_softc(
-       const struct net_device *dev)
+static struct fcoe_softc *
+fcoe_hostlist_lookup_softc(const struct net_device *dev)
 {
        struct fcoe_softc *fc;
 
@@ -1308,8 +1265,8 @@ static struct fcoe_softc *fcoe_hostlist_lookup_softc(
        return NULL;
 }
 
-/*
- * fcoe_hostlist_lookup - find the corresponding lport by netdev
+/**
+ * fcoe_hostlist_lookup() - Find the corresponding lport by netdev
  * @netdev: ptr to net_device
  *
  * Returns: 0 for success
@@ -1324,8 +1281,8 @@ struct fc_lport *fcoe_hostlist_lookup(const struct net_device *netdev)
 }
 EXPORT_SYMBOL_GPL(fcoe_hostlist_lookup);
 
-/*
- * fcoe_hostlist_add - add a lport to lports list
+/**
+ * fcoe_hostlist_add() - Add a lport to lports list
  * @lp: ptr to the fc_lport to badded
  *
  * Returns: 0 for success
@@ -1336,7 +1293,7 @@ int fcoe_hostlist_add(const struct fc_lport *lp)
 
        fc = fcoe_hostlist_lookup_softc(fcoe_netdev(lp));
        if (!fc) {
-               fc = fcoe_softc(lp);
+               fc = lport_priv(lp);
                write_lock_bh(&fcoe_hostlist_lock);
                list_add_tail(&fc->list, &fcoe_hostlist);
                write_unlock_bh(&fcoe_hostlist_lock);
@@ -1345,8 +1302,8 @@ int fcoe_hostlist_add(const struct fc_lport *lp)
 }
 EXPORT_SYMBOL_GPL(fcoe_hostlist_add);
 
-/*
- * fcoe_hostlist_remove - remove a lport from lports list
+/**
+ * fcoe_hostlist_remove() - remove a lport from lports list
  * @lp: ptr to the fc_lport to badded
  *
  * Returns: 0 for success
@@ -1366,12 +1323,12 @@ int fcoe_hostlist_remove(const struct fc_lport *lp)
 EXPORT_SYMBOL_GPL(fcoe_hostlist_remove);
 
 /**
- * fcoe_libfc_config - sets up libfc related properties for lport
+ * fcoe_libfc_config() - sets up libfc related properties for lport
  * @lp: ptr to the fc_lport
  * @tt: libfc function template
  *
  * Returns : 0 for success
- **/
+ */
 int fcoe_libfc_config(struct fc_lport *lp, struct libfc_function_template *tt)
 {
        /* Set the function pointers set by the LLDD */
@@ -1389,14 +1346,14 @@ int fcoe_libfc_config(struct fc_lport *lp, struct libfc_function_template *tt)
 EXPORT_SYMBOL_GPL(fcoe_libfc_config);
 
 /**
- * fcoe_init - fcoe module loading initialization
+ * fcoe_init() - fcoe module loading initialization
  *
  * Initialization routine
  * 1. Will create fc transport software structure
  * 2. initialize the link list of port information structure
  *
  * Returns 0 on success, negative on failure
- **/
+ */
 static int __init fcoe_init(void)
 {
        int cpu;
@@ -1433,7 +1390,6 @@ static int __init fcoe_init(void)
                        } else {
                                fcoe_percpu[cpu] = NULL;
                                kfree(p);
-
                        }
                }
        }
@@ -1443,11 +1399,9 @@ static int __init fcoe_init(void)
         */
        fcoe_dev_setup();
 
-       init_timer(&fcoe_timer);
-       fcoe_timer.data = 0;
-       fcoe_timer.function = fcoe_watchdog;
-       fcoe_timer.expires = (jiffies + (10 * HZ));
-       add_timer(&fcoe_timer);
+       setup_timer(&fcoe_timer, fcoe_watchdog, 0);
+
+       mod_timer(&fcoe_timer, jiffies + (10 * HZ));
 
        /* initiatlize the fcoe transport */
        fcoe_transport_init();
@@ -1459,10 +1413,10 @@ static int __init fcoe_init(void)
 module_init(fcoe_init);
 
 /**
- * fcoe_exit - fcoe module unloading cleanup
+ * fcoe_exit() - fcoe module unloading cleanup
  *
  * Returns 0 on success, negative on failure
- **/
+ */
 static void __exit fcoe_exit(void)
 {
        u32 idx;
@@ -1483,7 +1437,7 @@ static void __exit fcoe_exit(void)
         */
        del_timer_sync(&fcoe_timer);
 
-       /* releases the assocaited fcoe transport for each lport */
+       /* releases the associated fcoe transport for each lport */
        list_for_each_entry_safe(fc, tmp, &fcoe_hostlist, list)
                fcoe_transport_release(fc->real_dev);
 
index 4a4e695..f23c4ca 100644 (file)
@@ -103,7 +103,7 @@ lasi700_probe(struct parisc_device *dev)
 
        hostdata = kzalloc(sizeof(*hostdata), GFP_KERNEL);
        if (!hostdata) {
-               dev_printk(KERN_ERR, dev, "Failed to allocate host data\n");
+               dev_printk(KERN_ERR, &dev->dev, "Failed to allocate host data\n");
                return -ENOMEM;
        }
 
index dd1564c..e57556e 100644 (file)
@@ -64,7 +64,7 @@ static void fc_disc_single(struct fc_disc *, struct fc_disc_port *);
 static void fc_disc_restart(struct fc_disc *);
 
 /**
- * fc_disc_lookup_rport - lookup a remote port by port_id
+ * fc_disc_lookup_rport() - lookup a remote port by port_id
  * @lport: Fibre Channel host port instance
  * @port_id: remote port port_id to match
  */
@@ -92,7 +92,7 @@ struct fc_rport *fc_disc_lookup_rport(const struct fc_lport *lport,
 }
 
 /**
- * fc_disc_stop_rports - delete all the remote ports associated with the lport
+ * fc_disc_stop_rports() - delete all the remote ports associated with the lport
  * @disc: The discovery job to stop rports on
  *
  * Locking Note: This function expects that the lport mutex is locked before
@@ -117,7 +117,7 @@ void fc_disc_stop_rports(struct fc_disc *disc)
 }
 
 /**
- * fc_disc_rport_callback - Event handler for rport events
+ * fc_disc_rport_callback() - Event handler for rport events
  * @lport: The lport which is receiving the event
  * @rport: The rport which the event has occured on
  * @event: The event that occured
@@ -151,7 +151,7 @@ static void fc_disc_rport_callback(struct fc_lport *lport,
 }
 
 /**
- * fc_disc_recv_rscn_req - Handle Registered State Change Notification (RSCN)
+ * fc_disc_recv_rscn_req() - Handle Registered State Change Notification (RSCN)
  * @sp: Current sequence of the RSCN exchange
  * @fp: RSCN Frame
  * @lport: Fibre Channel host port instance
@@ -246,7 +246,7 @@ static void fc_disc_recv_rscn_req(struct fc_seq *sp, struct fc_frame *fp,
                        list_del(&dp->peers);
                        rport = lport->tt.rport_lookup(lport, dp->ids.port_id);
                        if (rport) {
-                               rdata = RPORT_TO_PRIV(rport);
+                               rdata = rport->dd_data;
                                list_del(&rdata->peers);
                                lport->tt.rport_logoff(rport);
                        }
@@ -265,7 +265,7 @@ reject:
 }
 
 /**
- * fc_disc_recv_req - Handle incoming requests
+ * fc_disc_recv_req() - Handle incoming requests
  * @sp: Current sequence of the request exchange
  * @fp: The frame
  * @lport: The FC local port
@@ -294,7 +294,7 @@ static void fc_disc_recv_req(struct fc_seq *sp, struct fc_frame *fp,
 }
 
 /**
- * fc_disc_restart - Restart discovery
+ * fc_disc_restart() - Restart discovery
  * @lport: FC discovery context
  *
  * Locking Note: This function expects that the disc mutex
@@ -322,7 +322,7 @@ static void fc_disc_restart(struct fc_disc *disc)
 }
 
 /**
- * fc_disc_start - Fibre Channel Target discovery
+ * fc_disc_start() - Fibre Channel Target discovery
  * @lport: FC local port
  *
  * Returns non-zero if discovery cannot be started.
@@ -383,7 +383,7 @@ static struct fc_rport_operations fc_disc_rport_ops = {
 };
 
 /**
- * fc_disc_new_target - Handle new target found by discovery
+ * fc_disc_new_target() - Handle new target found by discovery
  * @lport: FC local port
  * @rport: The previous FC remote port (NULL if new remote port)
  * @ids: Identifiers for the new FC remote port
@@ -396,7 +396,7 @@ static int fc_disc_new_target(struct fc_disc *disc,
                              struct fc_rport_identifiers *ids)
 {
        struct fc_lport *lport = disc->lport;
-       struct fc_rport_libfc_priv *rp;
+       struct fc_rport_libfc_priv *rdata;
        int error = 0;
 
        if (rport && ids->port_name) {
@@ -430,15 +430,15 @@ static int fc_disc_new_target(struct fc_disc *disc,
                                dp.ids.port_name = ids->port_name;
                                dp.ids.node_name = ids->node_name;
                                dp.ids.roles = ids->roles;
-                               rport = fc_rport_rogue_create(&dp);
+                               rport = lport->tt.rport_create(&dp);
                        }
                        if (!rport)
                                error = -ENOMEM;
                }
                if (rport) {
-                       rp = rport->dd_data;
-                       rp->ops = &fc_disc_rport_ops;
-                       rp->rp_state = RPORT_ST_INIT;
+                       rdata = rport->dd_data;
+                       rdata->ops = &fc_disc_rport_ops;
+                       rdata->rp_state = RPORT_ST_INIT;
                        lport->tt.rport_login(rport);
                }
        }
@@ -446,20 +446,20 @@ static int fc_disc_new_target(struct fc_disc *disc,
 }
 
 /**
- * fc_disc_del_target - Delete a target
+ * fc_disc_del_target() - Delete a target
  * @disc: FC discovery context
  * @rport: The remote port to be removed
  */
 static void fc_disc_del_target(struct fc_disc *disc, struct fc_rport *rport)
 {
        struct fc_lport *lport = disc->lport;
-       struct fc_rport_libfc_priv *rdata = RPORT_TO_PRIV(rport);
+       struct fc_rport_libfc_priv *rdata = rport->dd_data;
        list_del(&rdata->peers);
        lport->tt.rport_logoff(rport);
 }
 
 /**
- * fc_disc_done - Discovery has been completed
+ * fc_disc_done() - Discovery has been completed
  * @disc: FC discovery context
  */
 static void fc_disc_done(struct fc_disc *disc)
@@ -479,7 +479,7 @@ static void fc_disc_done(struct fc_disc *disc)
 }
 
 /**
- * fc_disc_error - Handle error on dNS request
+ * fc_disc_error() - Handle error on dNS request
  * @disc: FC discovery context
  * @fp: The frame pointer
  */
@@ -519,7 +519,7 @@ static void fc_disc_error(struct fc_disc *disc, struct fc_frame *fp)
 }
 
 /**
- * fc_disc_gpn_ft_req - Send Get Port Names by FC-4 type (GPN_FT) request
+ * fc_disc_gpn_ft_req() - Send Get Port Names by FC-4 type (GPN_FT) request
  * @lport: FC discovery context
  *
  * Locking Note: This function expects that the disc_mutex is locked
@@ -553,7 +553,7 @@ err:
 }
 
 /**
- * fc_disc_gpn_ft_parse - Parse the list of IDs and names resulting from a request
+ * fc_disc_gpn_ft_parse() - Parse the list of IDs and names resulting from a request
  * @lport: Fibre Channel host port instance
  * @buf: GPN_FT response buffer
  * @len: size of response buffer
@@ -617,7 +617,7 @@ static int fc_disc_gpn_ft_parse(struct fc_disc *disc, void *buf, size_t len)
 
                if ((dp.ids.port_id != fc_host_port_id(lport->host)) &&
                    (dp.ids.port_name != lport->wwpn)) {
-                       rport = fc_rport_rogue_create(&dp);
+                       rport = lport->tt.rport_create(&dp);
                        if (rport) {
                                rdata = rport->dd_data;
                                rdata->ops = &fc_disc_rport_ops;
@@ -658,7 +658,10 @@ static int fc_disc_gpn_ft_parse(struct fc_disc *disc, void *buf, size_t len)
        return error;
 }
 
-/*
+/**
+ * fc_disc_timeout() - Retry handler for the disc component
+ * @work: Structure holding disc obj that needs retry discovery
+ *
  * Handle retry of memory allocation for remote ports.
  */
 static void fc_disc_timeout(struct work_struct *work)
@@ -673,7 +676,7 @@ static void fc_disc_timeout(struct work_struct *work)
 }
 
 /**
- * fc_disc_gpn_ft_resp - Handle a response frame from Get Port Names (GPN_FT)
+ * fc_disc_gpn_ft_resp() - Handle a response frame from Get Port Names (GPN_FT)
  * @sp: Current sequence of GPN_FT exchange
  * @fp: response frame
  * @lp_arg: Fibre Channel host port instance
@@ -712,9 +715,7 @@ static void fc_disc_gpn_ft_resp(struct fc_seq *sp, struct fc_frame *fp,
                               fr_len(fp));
                } else if (ntohs(cp->ct_cmd) == FC_FS_ACC) {
 
-                       /*
-                        * Accepted.  Parse response.
-                        */
+                       /* Accepted, parse the response. */
                        buf = cp + 1;
                        len -= sizeof(*cp);
                } else if (ntohs(cp->ct_cmd) == FC_FS_RJT) {
@@ -746,7 +747,7 @@ static void fc_disc_gpn_ft_resp(struct fc_seq *sp, struct fc_frame *fp,
 }
 
 /**
- * fc_disc_single - Discover the directory information for a single target
+ * fc_disc_single() - Discover the directory information for a single target
  * @lport: FC local port
  * @dp: The port to rediscover
  *
@@ -769,7 +770,7 @@ static void fc_disc_single(struct fc_disc *disc, struct fc_disc_port *dp)
        if (rport)
                fc_disc_del_target(disc, rport);
 
-       new_rport = fc_rport_rogue_create(dp);
+       new_rport = lport->tt.rport_create(dp);
        if (new_rport) {
                rdata = new_rport->dd_data;
                rdata->ops = &fc_disc_rport_ops;
@@ -782,7 +783,7 @@ out:
 }
 
 /**
- * fc_disc_stop - Stop discovery for a given lport
+ * fc_disc_stop() - Stop discovery for a given lport
  * @lport: The lport that discovery should stop for
  */
 void fc_disc_stop(struct fc_lport *lport)
@@ -796,7 +797,7 @@ void fc_disc_stop(struct fc_lport *lport)
 }
 
 /**
- * fc_disc_stop_final - Stop discovery for a given lport
+ * fc_disc_stop_final() - Stop discovery for a given lport
  * @lport: The lport that discovery should stop for
  *
  * This function will block until discovery has been
@@ -809,7 +810,7 @@ void fc_disc_stop_final(struct fc_lport *lport)
 }
 
 /**
- * fc_disc_init - Initialize the discovery block
+ * fc_disc_init() - Initialize the discovery block
  * @lport: FC local port
  */
 int fc_disc_init(struct fc_lport *lport)
index 66db08a..505825b 100644 (file)
@@ -32,8 +32,6 @@
 #include <scsi/libfc.h>
 #include <scsi/fc_encode.h>
 
-#define          FC_DEF_R_A_TOV      (10 * 1000) /* resource allocation timeout */
-
 /*
  * fc_exch_debug can be set in debugger or at compile time to get more logs.
  */
@@ -627,7 +625,6 @@ static struct fc_exch *fc_exch_resp(struct fc_exch_mgr *mp, struct fc_frame *fp)
 {
        struct fc_exch *ep;
        struct fc_frame_header *fh;
-       u16 rxid;
 
        ep = mp->lp->tt.exch_get(mp->lp, fp);
        if (ep) {
@@ -654,18 +651,6 @@ static struct fc_exch *fc_exch_resp(struct fc_exch_mgr *mp, struct fc_frame *fp)
                if ((ntoh24(fh->fh_f_ctl) & FC_FC_SEQ_INIT) == 0)
                        ep->esb_stat &= ~ESB_ST_SEQ_INIT;
 
-               /*
-                * Set the responder ID in the frame header.
-                * The old one should've been 0xffff.
-                * If it isn't, don't assign one.
-                * Incoming basic link service frames may specify
-                * a referenced RX_ID.
-                */
-               if (fh->fh_type != FC_TYPE_BLS) {
-                       rxid = ntohs(fh->fh_rx_id);
-                       WARN_ON(rxid != FC_XID_UNKNOWN);
-                       fh->fh_rx_id = htons(ep->rxid);
-               }
                fc_exch_hold(ep);       /* hold for caller */
                spin_unlock_bh(&ep->ex_lock);   /* lock from exch_get */
        }
@@ -677,8 +662,8 @@ static struct fc_exch *fc_exch_resp(struct fc_exch_mgr *mp, struct fc_frame *fp)
  * If fc_pf_rjt_reason is FC_RJT_NONE then this function will have a hold
  * on the ep that should be released by the caller.
  */
-static enum fc_pf_rjt_reason
-fc_seq_lookup_recip(struct fc_exch_mgr *mp, struct fc_frame *fp)
+static enum fc_pf_rjt_reason fc_seq_lookup_recip(struct fc_exch_mgr *mp,
+                                                struct fc_frame *fp)
 {
        struct fc_frame_header *fh = fc_frame_header_get(fp);
        struct fc_exch *ep = NULL;
@@ -996,9 +981,9 @@ static void fc_seq_send_ack(struct fc_seq *sp, const struct fc_frame *rx_fp)
  * Send BLS Reject.
  * This is for rejecting BA_ABTS only.
  */
-static void
-fc_exch_send_ba_rjt(struct fc_frame *rx_fp, enum fc_ba_rjt_reason reason,
-                   enum fc_ba_rjt_explan explan)
+static void fc_exch_send_ba_rjt(struct fc_frame *rx_fp,
+                               enum fc_ba_rjt_reason reason,
+                               enum fc_ba_rjt_explan explan)
 {
        struct fc_frame *fp;
        struct fc_frame_header *rx_fh;
@@ -1096,7 +1081,7 @@ static void fc_exch_recv_abts(struct fc_exch *ep, struct fc_frame *rx_fp)
                ap->ba_high_seq_cnt = fh->fh_seq_cnt;
                ap->ba_low_seq_cnt = htons(sp->cnt);
        }
-       sp = fc_seq_start_next(sp);
+       sp = fc_seq_start_next_locked(sp);
        spin_unlock_bh(&ep->ex_lock);
        fc_seq_send_last(sp, fp, FC_RCTL_BA_ACC, FC_TYPE_BLS);
        fc_frame_free(rx_fp);
@@ -1480,10 +1465,11 @@ static void fc_exch_reset(struct fc_exch *ep)
  * If sid is non-zero, reset only exchanges we source from that FID.
  * If did is non-zero, reset only exchanges destined to that FID.
  */
-void fc_exch_mgr_reset(struct fc_exch_mgr *mp, u32 sid, u32 did)
+void fc_exch_mgr_reset(struct fc_lport *lp, u32 sid, u32 did)
 {
        struct fc_exch *ep;
        struct fc_exch *next;
+       struct fc_exch_mgr *mp = lp->emp;
 
        spin_lock_bh(&mp->em_lock);
 restart:
@@ -1607,7 +1593,7 @@ static void fc_exch_rrq_resp(struct fc_seq *sp, struct fc_frame *fp, void *arg)
        if (IS_ERR(fp)) {
                int err = PTR_ERR(fp);
 
-               if (err == -FC_EX_CLOSED)
+               if (err == -FC_EX_CLOSED || err == -FC_EX_TIMEOUT)
                        goto cleanup;
                FC_DBG("Cannot process RRQ, because of frame error %d\n", err);
                return;
index 404e63f..2a631d7 100644 (file)
@@ -161,7 +161,7 @@ static struct fc_fcp_pkt *fc_fcp_pkt_alloc(struct fc_lport *lp, gfp_t gfp)
 }
 
 /**
- * fc_fcp_pkt_release - release hold on scsi_pkt packet
+ * fc_fcp_pkt_release() - release hold on scsi_pkt packet
  * @fsp:       fcp packet struct
  *
  * This is used by upper layer scsi driver.
@@ -183,8 +183,7 @@ static void fc_fcp_pkt_hold(struct fc_fcp_pkt *fsp)
 }
 
 /**
- * fc_fcp_pkt_destory - release hold on scsi_pkt packet
- *
+ * fc_fcp_pkt_destory() - release hold on scsi_pkt packet
  * @seq:               exchange sequence
  * @fsp:       fcp packet struct
  *
@@ -199,7 +198,7 @@ static void fc_fcp_pkt_destroy(struct fc_seq *seq, void *fsp)
 }
 
 /**
- * fc_fcp_lock_pkt - lock a packet and get a ref to it.
+ * fc_fcp_lock_pkt() - lock a packet and get a ref to it.
  * @fsp:       fcp packet
  *
  * We should only return error if we return a command to scsi-ml before
@@ -291,9 +290,7 @@ static void fc_fcp_recv_data(struct fc_fcp_pkt *fsp, struct fc_frame *fp)
        buf = fc_frame_payload_get(fp, 0);
 
        if (offset + len > fsp->data_len) {
-               /*
-                * this should never happen
-                */
+               /* this should never happen */
                if ((fr_flags(fp) & FCPHF_CRC_UNCHECKED) &&
                    fc_frame_crc_check(fp))
                        goto crc_err;
@@ -387,8 +384,8 @@ crc_err:
                fc_fcp_complete_locked(fsp);
 }
 
-/*
- * fc_fcp_send_data -  Send SCSI data to target.
+/**
+ * fc_fcp_send_data() -  Send SCSI data to target.
  * @fsp: ptr to fc_fcp_pkt
  * @sp: ptr to this sequence
  * @offset: starting offset for this data request
@@ -610,8 +607,8 @@ static void fc_fcp_abts_resp(struct fc_fcp_pkt *fsp, struct fc_frame *fp)
        }
 }
 
-/*
- * fc_fcp_reduce_can_queue - drop can_queue
+/**
+ * fc_fcp_reduce_can_queue() - drop can_queue
  * @lp: lport to drop queueing for
  *
  * If we are getting memory allocation failures, then we may
@@ -642,9 +639,11 @@ done:
        spin_unlock_irqrestore(lp->host->host_lock, flags);
 }
 
-/*
- * exch mgr calls this routine to process scsi
- * exchanges.
+/**
+ * fc_fcp_recv() - Reveive FCP frames
+ * @seq: The sequence the frame is on
+ * @fp: The FC frame
+ * @arg: The related FCP packet
  *
  * Return   : None
  * Context  : called from Soft IRQ context
@@ -832,7 +831,7 @@ err:
 }
 
 /**
- * fc_fcp_complete_locked - complete processing of a fcp packet
+ * fc_fcp_complete_locked() - complete processing of a fcp packet
  * @fsp:       fcp packet
  *
  * This function may sleep if a timer is pending. The packet lock must be
@@ -900,7 +899,7 @@ static void fc_fcp_cleanup_cmd(struct fc_fcp_pkt *fsp, int error)
 }
 
 /**
- * fc_fcp_cleanup_each_cmd - run fn on each active command
+ * fc_fcp_cleanup_each_cmd() - Cleanup active commads
  * @lp:                logical port
  * @id:                target id
  * @lun:       lun
@@ -952,7 +951,7 @@ static void fc_fcp_abort_io(struct fc_lport *lp)
 }
 
 /**
- * fc_fcp_pkt_send - send a fcp packet to the lower level.
+ * fc_fcp_pkt_send() - send a fcp packet to the lower level.
  * @lp:                fc lport
  * @fsp:       fc packet.
  *
@@ -1621,7 +1620,7 @@ out:
 static inline int fc_fcp_lport_queue_ready(struct fc_lport *lp)
 {
        /* lock ? */
-       return (lp->state == LPORT_ST_READY) && (lp->link_status & FC_LINK_UP);
+       return (lp->state == LPORT_ST_READY) && lp->link_up && !lp->qfull;
 }
 
 /**
@@ -1727,7 +1726,7 @@ out:
 EXPORT_SYMBOL(fc_queuecommand);
 
 /**
- * fc_io_compl -  Handle responses for completed commands
+ * fc_io_compl() -  Handle responses for completed commands
  * @fsp:       scsi packet
  *
  * Translates a error to a Linux SCSI error.
@@ -1810,12 +1809,12 @@ static void fc_io_compl(struct fc_fcp_pkt *fsp)
                sc_cmd->result = DID_ERROR << 16;
                break;
        case FC_DATA_UNDRUN:
-               if (fsp->cdb_status == 0) {
+               if ((fsp->cdb_status == 0) && !(fsp->req_flags & FC_SRB_READ)) {
                        /*
                         * scsi status is good but transport level
-                        * underrun. for read it should be an error??
+                        * underrun.
                         */
-                       sc_cmd->result = (DID_OK << 16) | fsp->cdb_status;
+                       sc_cmd->result = DID_OK << 16;
                } else {
                        /*
                         * scsi got underrun, this is an error
@@ -1857,7 +1856,7 @@ static void fc_io_compl(struct fc_fcp_pkt *fsp)
 }
 
 /**
- * fc_fcp_complete - complete processing of a fcp packet
+ * fc_fcp_complete() - complete processing of a fcp packet
  * @fsp:       fcp packet
  *
  * This function may sleep if a fsp timer is pending.
@@ -1874,9 +1873,10 @@ void fc_fcp_complete(struct fc_fcp_pkt *fsp)
 EXPORT_SYMBOL(fc_fcp_complete);
 
 /**
- * fc_eh_abort - Abort a command...from scsi host template
+ * fc_eh_abort() - Abort a command
  * @sc_cmd:    scsi command to abort
  *
+ * From scsi host template.
  * send ABTS to the target device  and wait for the response
  * sc_cmd is the pointer to the command to be aborted.
  */
@@ -1890,7 +1890,7 @@ int fc_eh_abort(struct scsi_cmnd *sc_cmd)
        lp = shost_priv(sc_cmd->device->host);
        if (lp->state != LPORT_ST_READY)
                return rc;
-       else if (!(lp->link_status & FC_LINK_UP))
+       else if (!lp->link_up)
                return rc;
 
        spin_lock_irqsave(lp->host->host_lock, flags);
@@ -1920,7 +1920,7 @@ release_pkt:
 EXPORT_SYMBOL(fc_eh_abort);
 
 /**
- * fc_eh_device_reset: Reset a single LUN
+ * fc_eh_device_reset() Reset a single LUN
  * @sc_cmd:    scsi command
  *
  * Set from scsi host template to send tm cmd to the target and wait for the
@@ -1973,7 +1973,7 @@ out:
 EXPORT_SYMBOL(fc_eh_device_reset);
 
 /**
- * fc_eh_host_reset - The reset function will reset the ports on the host.
+ * fc_eh_host_reset() - The reset function will reset the ports on the host.
  * @sc_cmd:    scsi command
  */
 int fc_eh_host_reset(struct scsi_cmnd *sc_cmd)
@@ -1999,7 +1999,7 @@ int fc_eh_host_reset(struct scsi_cmnd *sc_cmd)
 EXPORT_SYMBOL(fc_eh_host_reset);
 
 /**
- * fc_slave_alloc - configure queue depth
+ * fc_slave_alloc() - configure queue depth
  * @sdev:      scsi device
  *
  * Configures queue depth based on host's cmd_per_len. If not set
index 0b9bdb1..2ae50a1 100644 (file)
@@ -139,7 +139,7 @@ static int fc_frame_drop(struct fc_lport *lport, struct fc_frame *fp)
 }
 
 /**
- * fc_lport_rport_callback - Event handler for rport events
+ * fc_lport_rport_callback() - Event handler for rport events
  * @lport: The lport which is receiving the event
  * @rport: The rport which the event has occured on
  * @event: The event that occured
@@ -195,7 +195,7 @@ static void fc_lport_rport_callback(struct fc_lport *lport,
 }
 
 /**
- * fc_lport_state - Return a string which represents the lport's state
+ * fc_lport_state() - Return a string which represents the lport's state
  * @lport: The lport whose state is to converted to a string
  */
 static const char *fc_lport_state(struct fc_lport *lport)
@@ -209,7 +209,7 @@ static const char *fc_lport_state(struct fc_lport *lport)
 }
 
 /**
- * fc_lport_ptp_setup - Create an rport for point-to-point mode
+ * fc_lport_ptp_setup() - Create an rport for point-to-point mode
  * @lport: The lport to attach the ptp rport to
  * @fid: The FID of the ptp rport
  * @remote_wwpn: The WWPN of the ptp rport
@@ -232,7 +232,7 @@ static void fc_lport_ptp_setup(struct fc_lport *lport,
                lport->ptp_rp = NULL;
        }
 
-       lport->ptp_rp = fc_rport_rogue_create(&dp);
+       lport->ptp_rp = lport->tt.rport_create(&dp);
 
        lport->tt.rport_login(lport->ptp_rp);
 
@@ -250,7 +250,7 @@ void fc_get_host_port_state(struct Scsi_Host *shost)
 {
        struct fc_lport *lp = shost_priv(shost);
 
-       if ((lp->link_status & FC_LINK_UP) == FC_LINK_UP)
+       if (lp->link_up)
                fc_host_port_state(shost) = FC_PORTSTATE_ONLINE;
        else
                fc_host_port_state(shost) = FC_PORTSTATE_OFFLINE;
@@ -351,7 +351,7 @@ static void fc_lport_add_fc4_type(struct fc_lport *lport, enum fc_fh_type type)
 }
 
 /**
- * fc_lport_recv_rlir_req - Handle received Registered Link Incident Report.
+ * fc_lport_recv_rlir_req() - Handle received Registered Link Incident Report.
  * @lport: Fibre Channel local port recieving the RLIR
  * @sp: current sequence in the RLIR exchange
  * @fp: RLIR request frame
@@ -370,7 +370,7 @@ static void fc_lport_recv_rlir_req(struct fc_seq *sp, struct fc_frame *fp,
 }
 
 /**
- * fc_lport_recv_echo_req - Handle received ECHO request
+ * fc_lport_recv_echo_req() - Handle received ECHO request
  * @lport: Fibre Channel local port recieving the ECHO
  * @sp: current sequence in the ECHO exchange
  * @fp: ECHO request frame
@@ -412,7 +412,7 @@ static void fc_lport_recv_echo_req(struct fc_seq *sp, struct fc_frame *in_fp,
 }
 
 /**
- * fc_lport_recv_echo_req - Handle received Request Node ID data request
+ * fc_lport_recv_echo_req() - Handle received Request Node ID data request
  * @lport: Fibre Channel local port recieving the RNID
  * @sp: current sequence in the RNID exchange
  * @fp: RNID request frame
@@ -479,7 +479,7 @@ static void fc_lport_recv_rnid_req(struct fc_seq *sp, struct fc_frame *in_fp,
 }
 
 /**
- * fc_lport_recv_adisc_req - Handle received Address Discovery Request
+ * fc_lport_recv_adisc_req() - Handle received Address Discovery Request
  * @lport: Fibre Channel local port recieving the ADISC
  * @sp: current sequence in the ADISC exchange
  * @fp: ADISC request frame
@@ -529,7 +529,7 @@ static void fc_lport_recv_adisc_req(struct fc_seq *sp, struct fc_frame *in_fp,
 }
 
 /**
- * fc_lport_recv_logo_req - Handle received fabric LOGO request
+ * fc_lport_recv_logo_req() - Handle received fabric LOGO request
  * @lport: Fibre Channel local port recieving the LOGO
  * @sp: current sequence in the LOGO exchange
  * @fp: LOGO request frame
@@ -546,7 +546,7 @@ static void fc_lport_recv_logo_req(struct fc_seq *sp, struct fc_frame *fp,
 }
 
 /**
- * fc_fabric_login - Start the lport state machine
+ * fc_fabric_login() - Start the lport state machine
  * @lport: The lport that should log into the fabric
  *
  * Locking Note: This function should not be called
@@ -568,7 +568,7 @@ int fc_fabric_login(struct fc_lport *lport)
 EXPORT_SYMBOL(fc_fabric_login);
 
 /**
- * fc_linkup - Handler for transport linkup events
+ * fc_linkup() - Handler for transport linkup events
  * @lport: The lport whose link is up
  */
 void fc_linkup(struct fc_lport *lport)
@@ -577,8 +577,8 @@ void fc_linkup(struct fc_lport *lport)
                       fc_host_port_id(lport->host));
 
        mutex_lock(&lport->lp_mutex);
-       if ((lport->link_status & FC_LINK_UP) != FC_LINK_UP) {
-               lport->link_status |= FC_LINK_UP;
+       if (!lport->link_up) {
+               lport->link_up = 1;
 
                if (lport->state == LPORT_ST_RESET)
                        fc_lport_enter_flogi(lport);
@@ -588,7 +588,7 @@ void fc_linkup(struct fc_lport *lport)
 EXPORT_SYMBOL(fc_linkup);
 
 /**
- * fc_linkdown - Handler for transport linkdown events
+ * fc_linkdown() - Handler for transport linkdown events
  * @lport: The lport whose link is down
  */
 void fc_linkdown(struct fc_lport *lport)
@@ -597,8 +597,8 @@ void fc_linkdown(struct fc_lport *lport)
        FC_DEBUG_LPORT("Link is down for port (%6x)\n",
                       fc_host_port_id(lport->host));
 
-       if ((lport->link_status & FC_LINK_UP) == FC_LINK_UP) {
-               lport->link_status &= ~(FC_LINK_UP);
+       if (lport->link_up) {
+               lport->link_up = 0;
                fc_lport_enter_reset(lport);
                lport->tt.fcp_cleanup(lport);
        }
@@ -607,48 +607,25 @@ void fc_linkdown(struct fc_lport *lport)
 EXPORT_SYMBOL(fc_linkdown);
 
 /**
- * fc_pause - Pause the flow of frames
- * @lport: The lport to be paused
- */
-void fc_pause(struct fc_lport *lport)
-{
-       mutex_lock(&lport->lp_mutex);
-       lport->link_status |= FC_PAUSE;
-       mutex_unlock(&lport->lp_mutex);
-}
-EXPORT_SYMBOL(fc_pause);
-
-/**
- * fc_unpause - Unpause the flow of frames
- * @lport: The lport to be unpaused
- */
-void fc_unpause(struct fc_lport *lport)
-{
-       mutex_lock(&lport->lp_mutex);
-       lport->link_status &= ~(FC_PAUSE);
-       mutex_unlock(&lport->lp_mutex);
-}
-EXPORT_SYMBOL(fc_unpause);
-
-/**
- * fc_fabric_logoff - Logout of the fabric
+ * fc_fabric_logoff() - Logout of the fabric
  * @lport:           fc_lport pointer to logoff the fabric
  *
  * Return value:
  *     0 for success, -1 for failure
- **/
+ */
 int fc_fabric_logoff(struct fc_lport *lport)
 {
        lport->tt.disc_stop_final(lport);
        mutex_lock(&lport->lp_mutex);
        fc_lport_enter_logo(lport);
        mutex_unlock(&lport->lp_mutex);
+       cancel_delayed_work_sync(&lport->retry_work);
        return 0;
 }
 EXPORT_SYMBOL(fc_fabric_logoff);
 
 /**
- * fc_lport_destroy - unregister a fc_lport
+ * fc_lport_destroy() - unregister a fc_lport
  * @lport:           fc_lport pointer to unregister
  *
  * Return value:
@@ -658,26 +635,25 @@ EXPORT_SYMBOL(fc_fabric_logoff);
  * clean-up all the allocated memory
  * and free up other system resources.
  *
- **/
+ */
 int fc_lport_destroy(struct fc_lport *lport)
 {
        lport->tt.frame_send = fc_frame_drop;
        lport->tt.fcp_abort_io(lport);
-       lport->tt.exch_mgr_reset(lport->emp, 0, 0);
+       lport->tt.exch_mgr_reset(lport, 0, 0);
        return 0;
 }
 EXPORT_SYMBOL(fc_lport_destroy);
 
 /**
- * fc_set_mfs - sets up the mfs for the corresponding fc_lport
+ * fc_set_mfs() - sets up the mfs for the corresponding fc_lport
  * @lport: fc_lport pointer to unregister
  * @mfs: the new mfs for fc_lport
  *
  * Set mfs for the given fc_lport to the new mfs.
  *
  * Return: 0 for success
- *
- **/
+ */
 int fc_set_mfs(struct fc_lport *lport, u32 mfs)
 {
        unsigned int old_mfs;
@@ -706,7 +682,7 @@ int fc_set_mfs(struct fc_lport *lport, u32 mfs)
 EXPORT_SYMBOL(fc_set_mfs);
 
 /**
- * fc_lport_disc_callback - Callback for discovery events
+ * fc_lport_disc_callback() - Callback for discovery events
  * @lport: FC local port
  * @event: The discovery event
  */
@@ -731,7 +707,7 @@ void fc_lport_disc_callback(struct fc_lport *lport, enum fc_disc_event event)
 }
 
 /**
- * fc_rport_enter_ready - Enter the ready state and start discovery
+ * fc_rport_enter_ready() - Enter the ready state and start discovery
  * @lport: Fibre Channel local port that is ready
  *
  * Locking Note: The lport lock is expected to be held before calling
@@ -748,7 +724,7 @@ static void fc_lport_enter_ready(struct fc_lport *lport)
 }
 
 /**
- * fc_lport_recv_flogi_req - Receive a FLOGI request
+ * fc_lport_recv_flogi_req() - Receive a FLOGI request
  * @sp_in: The sequence the FLOGI is on
  * @rx_fp: The frame the FLOGI is in
  * @lport: The lport that recieved the request
@@ -838,7 +814,7 @@ out:
 }
 
 /**
- * fc_lport_recv_req - The generic lport request handler
+ * fc_lport_recv_req() - The generic lport request handler
  * @lport: The lport that received the request
  * @sp: The sequence the request is on
  * @fp: The frame the request is in
@@ -934,7 +910,7 @@ static void fc_lport_recv_req(struct fc_lport *lport, struct fc_seq *sp,
 }
 
 /**
- * fc_lport_reset - Reset an lport
+ * fc_lport_reset() - Reset an lport
  * @lport: The lport which should be reset
  *
  * Locking Note: This functions should not be called with the
@@ -942,6 +918,7 @@ static void fc_lport_recv_req(struct fc_lport *lport, struct fc_seq *sp,
  */
 int fc_lport_reset(struct fc_lport *lport)
 {
+       cancel_delayed_work_sync(&lport->retry_work);
        mutex_lock(&lport->lp_mutex);
        fc_lport_enter_reset(lport);
        mutex_unlock(&lport->lp_mutex);
@@ -950,7 +927,7 @@ int fc_lport_reset(struct fc_lport *lport)
 EXPORT_SYMBOL(fc_lport_reset);
 
 /**
- * fc_rport_enter_reset - Reset the local port
+ * fc_rport_enter_reset() - Reset the local port
  * @lport: Fibre Channel local port to be reset
  *
  * Locking Note: The lport lock is expected to be held before calling
@@ -973,16 +950,16 @@ static void fc_lport_enter_reset(struct fc_lport *lport)
 
        lport->tt.disc_stop(lport);
 
-       lport->tt.exch_mgr_reset(lport->emp, 0, 0);
+       lport->tt.exch_mgr_reset(lport, 0, 0);
        fc_host_fabric_name(lport->host) = 0;
        fc_host_port_id(lport->host) = 0;
 
-       if ((lport->link_status & FC_LINK_UP) == FC_LINK_UP)
+       if (lport->link_up)
                fc_lport_enter_flogi(lport);
 }
 
 /**
- * fc_lport_error - Handler for any errors
+ * fc_lport_error() - Handler for any errors
  * @lport: The fc_lport object
  * @fp: The frame pointer
  *
@@ -1029,8 +1006,8 @@ static void fc_lport_error(struct fc_lport *lport, struct fc_frame *fp)
 }
 
 /**
- * fc_lport_rft_id_resp - Handle response to Register Fibre
- *                       Channel Types by ID (RPN_ID) request
+ * fc_lport_rft_id_resp() - Handle response to Register Fibre
+ *                         Channel Types by ID (RPN_ID) request
  * @sp: current sequence in RPN_ID exchange
  * @fp: response frame
  * @lp_arg: Fibre Channel host port instance
@@ -1053,17 +1030,17 @@ static void fc_lport_rft_id_resp(struct fc_seq *sp, struct fc_frame *fp,
 
        FC_DEBUG_LPORT("Received a RFT_ID response\n");
 
+       if (IS_ERR(fp)) {
+               fc_lport_error(lport, fp);
+               goto err;
+       }
+
        if (lport->state != LPORT_ST_RFT_ID) {
                FC_DBG("Received a RFT_ID response, but in state %s\n",
                       fc_lport_state(lport));
                goto out;
        }
 
-       if (IS_ERR(fp)) {
-               fc_lport_error(lport, fp);
-               goto err;
-       }
-
        fh = fc_frame_header_get(fp);
        ct = fc_frame_payload_get(fp, sizeof(*ct));
 
@@ -1081,8 +1058,8 @@ err:
 }
 
 /**
- * fc_lport_rpn_id_resp - Handle response to Register Port
- *                       Name by ID (RPN_ID) request
+ * fc_lport_rpn_id_resp() - Handle response to Register Port
+ *                         Name by ID (RPN_ID) request
  * @sp: current sequence in RPN_ID exchange
  * @fp: response frame
  * @lp_arg: Fibre Channel host port instance
@@ -1105,17 +1082,17 @@ static void fc_lport_rpn_id_resp(struct fc_seq *sp, struct fc_frame *fp,
 
        FC_DEBUG_LPORT("Received a RPN_ID response\n");
 
+       if (IS_ERR(fp)) {
+               fc_lport_error(lport, fp);
+               goto err;
+       }
+
        if (lport->state != LPORT_ST_RPN_ID) {
                FC_DBG("Received a RPN_ID response, but in state %s\n",
                       fc_lport_state(lport));
                goto out;
        }
 
-       if (IS_ERR(fp)) {
-               fc_lport_error(lport, fp);
-               goto err;
-       }
-
        fh = fc_frame_header_get(fp);
        ct = fc_frame_payload_get(fp, sizeof(*ct));
        if (fh && ct && fh->fh_type == FC_TYPE_CT &&
@@ -1133,7 +1110,7 @@ err:
 }
 
 /**
- * fc_lport_scr_resp - Handle response to State Change Register (SCR) request
+ * fc_lport_scr_resp() - Handle response to State Change Register (SCR) request
  * @sp: current sequence in SCR exchange
  * @fp: response frame
  * @lp_arg: Fibre Channel lport port instance that sent the registration request
@@ -1155,17 +1132,17 @@ static void fc_lport_scr_resp(struct fc_seq *sp, struct fc_frame *fp,
 
        FC_DEBUG_LPORT("Received a SCR response\n");
 
+       if (IS_ERR(fp)) {
+               fc_lport_error(lport, fp);
+               goto err;
+       }
+
        if (lport->state != LPORT_ST_SCR) {
                FC_DBG("Received a SCR response, but in state %s\n",
                       fc_lport_state(lport));
                goto out;
        }
 
-       if (IS_ERR(fp)) {
-               fc_lport_error(lport, fp);
-               goto err;
-       }
-
        op = fc_frame_payload_op(fp);
        if (op == ELS_LS_ACC)
                fc_lport_enter_ready(lport);
@@ -1179,7 +1156,7 @@ err:
 }
 
 /**
- * fc_lport_enter_scr - Send a State Change Register (SCR) request
+ * fc_lport_enter_scr() - Send a State Change Register (SCR) request
  * @lport: Fibre Channel local port to register for state changes
  *
  * Locking Note: The lport lock is expected to be held before calling
@@ -1206,7 +1183,7 @@ static void fc_lport_enter_scr(struct fc_lport *lport)
 }
 
 /**
- * fc_lport_enter_rft_id - Register FC4-types with the name server
+ * fc_lport_enter_rft_id() - Register FC4-types with the name server
  * @lport: Fibre Channel local port to register
  *
  * Locking Note: The lport lock is expected to be held before calling
@@ -1248,7 +1225,7 @@ static void fc_lport_enter_rft_id(struct fc_lport *lport)
 }
 
 /**
- * fc_rport_enter_rft_id - Register port name with the name server
+ * fc_rport_enter_rft_id() - Register port name with the name server
  * @lport: Fibre Channel local port to register
  *
  * Locking Note: The lport lock is expected to be held before calling
@@ -1281,7 +1258,7 @@ static struct fc_rport_operations fc_lport_rport_ops = {
 };
 
 /**
- * fc_rport_enter_dns - Create a rport to the name server
+ * fc_rport_enter_dns() - Create a rport to the name server
  * @lport: Fibre Channel local port requesting a rport for the name server
  *
  * Locking Note: The lport lock is expected to be held before calling
@@ -1304,7 +1281,7 @@ static void fc_lport_enter_dns(struct fc_lport *lport)
 
        fc_lport_state_enter(lport, LPORT_ST_DNS);
 
-       rport = fc_rport_rogue_create(&dp);
+       rport = lport->tt.rport_create(&dp);
        if (!rport)
                goto err;
 
@@ -1318,7 +1295,7 @@ err:
 }
 
 /**
- * fc_lport_timeout - Handler for the retry_work timer.
+ * fc_lport_timeout() - Handler for the retry_work timer.
  * @work: The work struct of the fc_lport
  */
 static void fc_lport_timeout(struct work_struct *work)
@@ -1359,7 +1336,7 @@ static void fc_lport_timeout(struct work_struct *work)
 }
 
 /**
- * fc_lport_logo_resp - Handle response to LOGO request
+ * fc_lport_logo_resp() - Handle response to LOGO request
  * @sp: current sequence in LOGO exchange
  * @fp: response frame
  * @lp_arg: Fibre Channel lport port instance that sent the LOGO request
@@ -1381,17 +1358,17 @@ static void fc_lport_logo_resp(struct fc_seq *sp, struct fc_frame *fp,
 
        FC_DEBUG_LPORT("Received a LOGO response\n");
 
+       if (IS_ERR(fp)) {
+               fc_lport_error(lport, fp);
+               goto err;
+       }
+
        if (lport->state != LPORT_ST_LOGO) {
                FC_DBG("Received a LOGO response, but in state %s\n",
                       fc_lport_state(lport));
                goto out;
        }
 
-       if (IS_ERR(fp)) {
-               fc_lport_error(lport, fp);
-               goto err;
-       }
-
        op = fc_frame_payload_op(fp);
        if (op == ELS_LS_ACC)
                fc_lport_enter_reset(lport);
@@ -1405,7 +1382,7 @@ err:
 }
 
 /**
- * fc_rport_enter_logo - Logout of the fabric
+ * fc_rport_enter_logo() - Logout of the fabric
  * @lport: Fibre Channel local port to be logged out
  *
  * Locking Note: The lport lock is expected to be held before calling
@@ -1437,7 +1414,7 @@ static void fc_lport_enter_logo(struct fc_lport *lport)
 }
 
 /**
- * fc_lport_flogi_resp - Handle response to FLOGI request
+ * fc_lport_flogi_resp() - Handle response to FLOGI request
  * @sp: current sequence in FLOGI exchange
  * @fp: response frame
  * @lp_arg: Fibre Channel lport port instance that sent the FLOGI request
@@ -1465,17 +1442,17 @@ static void fc_lport_flogi_resp(struct fc_seq *sp, struct fc_frame *fp,
 
        FC_DEBUG_LPORT("Received a FLOGI response\n");
 
+       if (IS_ERR(fp)) {
+               fc_lport_error(lport, fp);
+               goto err;
+       }
+
        if (lport->state != LPORT_ST_FLOGI) {
                FC_DBG("Received a FLOGI response, but in state %s\n",
                       fc_lport_state(lport));
                goto out;
        }
 
-       if (IS_ERR(fp)) {
-               fc_lport_error(lport, fp);
-               goto err;
-       }
-
        fh = fc_frame_header_get(fp);
        did = ntoh24(fh->fh_d_id);
        if (fc_frame_payload_op(fp) == ELS_LS_ACC && did != 0) {
@@ -1532,7 +1509,7 @@ err:
 }
 
 /**
- * fc_rport_enter_flogi - Send a FLOGI request to the fabric manager
+ * fc_rport_enter_flogi() - Send a FLOGI request to the fabric manager
  * @lport: Fibre Channel local port to be logged in to the fabric
  *
  * Locking Note: The lport lock is expected to be held before calling
index e780d8c..dae6513 100644 (file)
@@ -81,6 +81,7 @@ static void fc_rport_recv_logo_req(struct fc_rport *,
                                   struct fc_seq *, struct fc_frame *);
 static void fc_rport_timeout(struct work_struct *);
 static void fc_rport_error(struct fc_rport *, struct fc_frame *);
+static void fc_rport_error_retry(struct fc_rport *, struct fc_frame *);
 static void fc_rport_work(struct work_struct *);
 
 static const char *fc_rport_state_names[] = {
@@ -145,7 +146,7 @@ struct fc_rport *fc_rport_rogue_create(struct fc_disc_port *dp)
 }
 
 /**
- * fc_rport_state - return a string for the state the rport is in
+ * fc_rport_state() - return a string for the state the rport is in
  * @rport: The rport whose state we want to get a string for
  */
 static const char *fc_rport_state(struct fc_rport *rport)
@@ -160,7 +161,7 @@ static const char *fc_rport_state(struct fc_rport *rport)
 }
 
 /**
- * fc_set_rport_loss_tmo - Set the remote port loss timeout in seconds.
+ * fc_set_rport_loss_tmo() - Set the remote port loss timeout in seconds.
  * @rport: Pointer to Fibre Channel remote port structure
  * @timeout: timeout in seconds
  */
@@ -174,12 +175,12 @@ void fc_set_rport_loss_tmo(struct fc_rport *rport, u32 timeout)
 EXPORT_SYMBOL(fc_set_rport_loss_tmo);
 
 /**
- * fc_plogi_get_maxframe - Get max payload from the common service parameters
+ * fc_plogi_get_maxframe() - Get max payload from the common service parameters
  * @flp: FLOGI payload structure
  * @maxval: upper limit, may be less than what is in the service parameters
  */
-static unsigned int
-fc_plogi_get_maxframe(struct fc_els_flogi *flp, unsigned int maxval)
+static unsigned int fc_plogi_get_maxframe(struct fc_els_flogi *flp,
+                                         unsigned int maxval)
 {
        unsigned int mfs;
 
@@ -197,7 +198,7 @@ fc_plogi_get_maxframe(struct fc_els_flogi *flp, unsigned int maxval)
 }
 
 /**
- * fc_rport_state_enter - Change the rport's state
+ * fc_rport_state_enter() - Change the rport's state
  * @rport: The rport whose state should change
  * @new: The new state of the rport
  *
@@ -214,6 +215,7 @@ static void fc_rport_state_enter(struct fc_rport *rport,
 
 static void fc_rport_work(struct work_struct *work)
 {
+       u32 port_id;
        struct fc_rport_libfc_priv *rdata =
                container_of(work, struct fc_rport_libfc_priv, event_work);
        enum fc_rport_event event;
@@ -279,14 +281,18 @@ static void fc_rport_work(struct work_struct *work)
                        rport_ops->event_callback(lport, rport, event);
                if (trans_state == FC_PORTSTATE_ROGUE)
                        put_device(&rport->dev);
-               else
+               else {
+                       port_id = rport->port_id;
                        fc_remote_port_delete(rport);
+                       lport->tt.exch_mgr_reset(lport, 0, port_id);
+                       lport->tt.exch_mgr_reset(lport, port_id, 0);
+               }
        } else
                mutex_unlock(&rdata->rp_mutex);
 }
 
 /**
- * fc_rport_login - Start the remote port login state machine
+ * fc_rport_login() - Start the remote port login state machine
  * @rport: Fibre Channel remote port
  *
  * Locking Note: Called without the rport lock held. This
@@ -309,7 +315,7 @@ int fc_rport_login(struct fc_rport *rport)
 }
 
 /**
- * fc_rport_logoff - Logoff and remove an rport
+ * fc_rport_logoff() - Logoff and remove an rport
  * @rport: Fibre Channel remote port to be removed
  *
  * Locking Note: Called without the rport lock held. This
@@ -347,7 +353,7 @@ int fc_rport_logoff(struct fc_rport *rport)
 }
 
 /**
- * fc_rport_enter_ready - The rport is ready
+ * fc_rport_enter_ready() - The rport is ready
  * @rport: Fibre Channel remote port that is ready
  *
  * Locking Note: The rport lock is expected to be held before calling
@@ -366,7 +372,7 @@ static void fc_rport_enter_ready(struct fc_rport *rport)
 }
 
 /**
- * fc_rport_timeout - Handler for the retry_work timer.
+ * fc_rport_timeout() - Handler for the retry_work timer.
  * @work: The work struct of the fc_rport_libfc_priv
  *
  * Locking Note: Called without the rport lock held. This
@@ -405,59 +411,75 @@ static void fc_rport_timeout(struct work_struct *work)
 }
 
 /**
- * fc_rport_error - Handler for any errors
+ * fc_rport_error() - Error handler, called once retries have been exhausted
  * @rport: The fc_rport object
  * @fp: The frame pointer
  *
- * If the error was caused by a resource allocation failure
- * then wait for half a second and retry, otherwise retry
- * immediately.
- *
  * Locking Note: The rport lock is expected to be held before
  * calling this routine
  */
 static void fc_rport_error(struct fc_rport *rport, struct fc_frame *fp)
 {
        struct fc_rport_libfc_priv *rdata = rport->dd_data;
-       unsigned long delay = 0;
 
        FC_DEBUG_RPORT("Error %ld in state %s, retries %d\n",
                       PTR_ERR(fp), fc_rport_state(rport), rdata->retries);
 
-       if (!fp || PTR_ERR(fp) == -FC_EX_TIMEOUT) {
-               /*
-                * Memory allocation failure, or the exchange timed out.
-                *  Retry after delay
-                */
-               if (rdata->retries < rdata->local_port->max_retry_count) {
-                       rdata->retries++;
-                       if (!fp)
-                               delay = msecs_to_jiffies(500);
-                       get_device(&rport->dev);
-                       schedule_delayed_work(&rdata->retry_work, delay);
-               } else {
-                       switch (rdata->rp_state) {
-                       case RPORT_ST_PLOGI:
-                       case RPORT_ST_PRLI:
-                       case RPORT_ST_LOGO:
-                               rdata->event = RPORT_EV_FAILED;
-                               queue_work(rport_event_queue,
-                                          &rdata->event_work);
-                               break;
-                       case RPORT_ST_RTV:
-                               fc_rport_enter_ready(rport);
-                               break;
-                       case RPORT_ST_NONE:
-                       case RPORT_ST_READY:
-                       case RPORT_ST_INIT:
-                               break;
-                       }
-               }
+       switch (rdata->rp_state) {
+       case RPORT_ST_PLOGI:
+       case RPORT_ST_PRLI:
+       case RPORT_ST_LOGO:
+               rdata->event = RPORT_EV_FAILED;
+               queue_work(rport_event_queue,
+                          &rdata->event_work);
+               break;
+       case RPORT_ST_RTV:
+               fc_rport_enter_ready(rport);
+               break;
+       case RPORT_ST_NONE:
+       case RPORT_ST_READY:
+       case RPORT_ST_INIT:
+               break;
        }
 }
 
 /**
- * fc_rport_plogi_recv_resp - Handle incoming ELS PLOGI response
+ * fc_rport_error_retry() - Error handler when retries are desired
+ * @rport: The fc_rport object
+ * @fp: The frame pointer
+ *
+ * If the error was an exchange timeout retry immediately,
+ * otherwise wait for E_D_TOV.
+ *
+ * Locking Note: The rport lock is expected to be held before
+ * calling this routine
+ */
+static void fc_rport_error_retry(struct fc_rport *rport, struct fc_frame *fp)
+{
+       struct fc_rport_libfc_priv *rdata = rport->dd_data;
+       unsigned long delay = FC_DEF_E_D_TOV;
+
+       /* make sure this isn't an FC_EX_CLOSED error, never retry those */
+       if (PTR_ERR(fp) == -FC_EX_CLOSED)
+               return fc_rport_error(rport, fp);
+
+       if (rdata->retries < rdata->local_port->max_retry_count) {
+               FC_DEBUG_RPORT("Error %ld in state %s, retrying\n",
+                              PTR_ERR(fp), fc_rport_state(rport));
+               rdata->retries++;
+               /* no additional delay on exchange timeouts */
+               if (PTR_ERR(fp) == -FC_EX_TIMEOUT)
+                       delay = 0;
+               get_device(&rport->dev);
+               schedule_delayed_work(&rdata->retry_work, delay);
+               return;
+       }
+
+       return fc_rport_error(rport, fp);
+}
+
+/**
+ * fc_rport_plogi_recv_resp() - Handle incoming ELS PLOGI response
  * @sp: current sequence in the PLOGI exchange
  * @fp: response frame
  * @rp_arg: Fibre Channel remote port
@@ -483,17 +505,17 @@ static void fc_rport_plogi_resp(struct fc_seq *sp, struct fc_frame *fp,
        FC_DEBUG_RPORT("Received a PLOGI response from port (%6x)\n",
                       rport->port_id);
 
+       if (IS_ERR(fp)) {
+               fc_rport_error_retry(rport, fp);
+               goto err;
+       }
+
        if (rdata->rp_state != RPORT_ST_PLOGI) {
                FC_DBG("Received a PLOGI response, but in state %s\n",
                       fc_rport_state(rport));
                goto out;
        }
 
-       if (IS_ERR(fp)) {
-               fc_rport_error(rport, fp);
-               goto err;
-       }
-
        op = fc_frame_payload_op(fp);
        if (op == ELS_LS_ACC &&
            (plp = fc_frame_payload_get(fp, sizeof(*plp))) != NULL) {
@@ -522,7 +544,7 @@ static void fc_rport_plogi_resp(struct fc_seq *sp, struct fc_frame *fp,
                else
                        fc_rport_enter_prli(rport);
        } else
-               fc_rport_error(rport, fp);
+               fc_rport_error_retry(rport, fp);
 
 out:
        fc_frame_free(fp);
@@ -532,7 +554,7 @@ err:
 }
 
 /**
- * fc_rport_enter_plogi - Send Port Login (PLOGI) request to peer
+ * fc_rport_enter_plogi() - Send Port Login (PLOGI) request to peer
  * @rport: Fibre Channel remote port to send PLOGI to
  *
  * Locking Note: The rport lock is expected to be held before calling
@@ -552,20 +574,20 @@ static void fc_rport_enter_plogi(struct fc_rport *rport)
        rport->maxframe_size = FC_MIN_MAX_PAYLOAD;
        fp = fc_frame_alloc(lport, sizeof(struct fc_els_flogi));
        if (!fp) {
-               fc_rport_error(rport, fp);
+               fc_rport_error_retry(rport, fp);
                return;
        }
        rdata->e_d_tov = lport->e_d_tov;
 
        if (!lport->tt.elsct_send(lport, rport, fp, ELS_PLOGI,
                                  fc_rport_plogi_resp, rport, lport->e_d_tov))
-               fc_rport_error(rport, fp);
+               fc_rport_error_retry(rport, fp);
        else
                get_device(&rport->dev);
 }
 
 /**
- * fc_rport_prli_resp - Process Login (PRLI) response handler
+ * fc_rport_prli_resp() - Process Login (PRLI) response handler
  * @sp: current sequence in the PRLI exchange
  * @fp: response frame
  * @rp_arg: Fibre Channel remote port
@@ -592,17 +614,17 @@ static void fc_rport_prli_resp(struct fc_seq *sp, struct fc_frame *fp,
        FC_DEBUG_RPORT("Received a PRLI response from port (%6x)\n",
                       rport->port_id);
 
+       if (IS_ERR(fp)) {
+               fc_rport_error_retry(rport, fp);
+               goto err;
+       }
+
        if (rdata->rp_state != RPORT_ST_PRLI) {
                FC_DBG("Received a PRLI response, but in state %s\n",
                       fc_rport_state(rport));
                goto out;
        }
 
-       if (IS_ERR(fp)) {
-               fc_rport_error(rport, fp);
-               goto err;
-       }
-
        op = fc_frame_payload_op(fp);
        if (op == ELS_LS_ACC) {
                pp = fc_frame_payload_get(fp, sizeof(*pp));
@@ -635,7 +657,7 @@ err:
 }
 
 /**
- * fc_rport_logo_resp - Logout (LOGO) response handler
+ * fc_rport_logo_resp() - Logout (LOGO) response handler
  * @sp: current sequence in the LOGO exchange
  * @fp: response frame
  * @rp_arg: Fibre Channel remote port
@@ -657,7 +679,7 @@ static void fc_rport_logo_resp(struct fc_seq *sp, struct fc_frame *fp,
                       rport->port_id);
 
        if (IS_ERR(fp)) {
-               fc_rport_error(rport, fp);
+               fc_rport_error_retry(rport, fp);
                goto err;
        }
 
@@ -684,7 +706,7 @@ err:
 }
 
 /**
- * fc_rport_enter_prli - Send Process Login (PRLI) request to peer
+ * fc_rport_enter_prli() - Send Process Login (PRLI) request to peer
  * @rport: Fibre Channel remote port to send PRLI to
  *
  * Locking Note: The rport lock is expected to be held before calling
@@ -707,19 +729,19 @@ static void fc_rport_enter_prli(struct fc_rport *rport)
 
        fp = fc_frame_alloc(lport, sizeof(*pp));
        if (!fp) {
-               fc_rport_error(rport, fp);
+               fc_rport_error_retry(rport, fp);
                return;
        }
 
        if (!lport->tt.elsct_send(lport, rport, fp, ELS_PRLI,
                                  fc_rport_prli_resp, rport, lport->e_d_tov))
-               fc_rport_error(rport, fp);
+               fc_rport_error_retry(rport, fp);
        else
                get_device(&rport->dev);
 }
 
 /**
- * fc_rport_els_rtv_resp - Request Timeout Value response handler
+ * fc_rport_els_rtv_resp() - Request Timeout Value response handler
  * @sp: current sequence in the RTV exchange
  * @fp: response frame
  * @rp_arg: Fibre Channel remote port
@@ -742,17 +764,17 @@ static void fc_rport_rtv_resp(struct fc_seq *sp, struct fc_frame *fp,
        FC_DEBUG_RPORT("Received a RTV response from port (%6x)\n",
                       rport->port_id);
 
+       if (IS_ERR(fp)) {
+               fc_rport_error(rport, fp);
+               goto err;
+       }
+
        if (rdata->rp_state != RPORT_ST_RTV) {
                FC_DBG("Received a RTV response, but in state %s\n",
                       fc_rport_state(rport));
                goto out;
        }
 
-       if (IS_ERR(fp)) {
-               fc_rport_error(rport, fp);
-               goto err;
-       }
-
        op = fc_frame_payload_op(fp);
        if (op == ELS_LS_ACC) {
                struct fc_els_rtv_acc *rtv;
@@ -785,7 +807,7 @@ err:
 }
 
 /**
- * fc_rport_enter_rtv - Send Request Timeout Value (RTV) request to peer
+ * fc_rport_enter_rtv() - Send Request Timeout Value (RTV) request to peer
  * @rport: Fibre Channel remote port to send RTV to
  *
  * Locking Note: The rport lock is expected to be held before calling
@@ -804,19 +826,19 @@ static void fc_rport_enter_rtv(struct fc_rport *rport)
 
        fp = fc_frame_alloc(lport, sizeof(struct fc_els_rtv));
        if (!fp) {
-               fc_rport_error(rport, fp);
+               fc_rport_error_retry(rport, fp);
                return;
        }
 
        if (!lport->tt.elsct_send(lport, rport, fp, ELS_RTV,
                                     fc_rport_rtv_resp, rport, lport->e_d_tov))
-               fc_rport_error(rport, fp);
+               fc_rport_error_retry(rport, fp);
        else
                get_device(&rport->dev);
 }
 
 /**
- * fc_rport_enter_logo - Send Logout (LOGO) request to peer
+ * fc_rport_enter_logo() - Send Logout (LOGO) request to peer
  * @rport: Fibre Channel remote port to send LOGO to
  *
  * Locking Note: The rport lock is expected to be held before calling
@@ -835,20 +857,20 @@ static void fc_rport_enter_logo(struct fc_rport *rport)
 
        fp = fc_frame_alloc(lport, sizeof(struct fc_els_logo));
        if (!fp) {
-               fc_rport_error(rport, fp);
+               fc_rport_error_retry(rport, fp);
                return;
        }
 
        if (!lport->tt.elsct_send(lport, rport, fp, ELS_LOGO,
                                  fc_rport_logo_resp, rport, lport->e_d_tov))
-               fc_rport_error(rport, fp);
+               fc_rport_error_retry(rport, fp);
        else
                get_device(&rport->dev);
 }
 
 
 /**
- * fc_rport_recv_req - Receive a request from a rport
+ * fc_rport_recv_req() - Receive a request from a rport
  * @sp: current sequence in the PLOGI exchange
  * @fp: response frame
  * @rp_arg: Fibre Channel remote port
@@ -909,7 +931,7 @@ void fc_rport_recv_req(struct fc_seq *sp, struct fc_frame *fp,
 }
 
 /**
- * fc_rport_recv_plogi_req - Handle incoming Port Login (PLOGI) request
+ * fc_rport_recv_plogi_req() - Handle incoming Port Login (PLOGI) request
  * @rport: Fibre Channel remote port that initiated PLOGI
  * @sp: current sequence in the PLOGI exchange
  * @fp: PLOGI request frame
@@ -1031,7 +1053,7 @@ static void fc_rport_recv_plogi_req(struct fc_rport *rport,
 }
 
 /**
- * fc_rport_recv_prli_req - Handle incoming Process Login (PRLI) request
+ * fc_rport_recv_prli_req() - Handle incoming Process Login (PRLI) request
  * @rport: Fibre Channel remote port that initiated PRLI
  * @sp: current sequence in the PRLI exchange
  * @fp: PRLI request frame
@@ -1182,7 +1204,7 @@ static void fc_rport_recv_prli_req(struct fc_rport *rport,
 }
 
 /**
- * fc_rport_recv_prlo_req - Handle incoming Process Logout (PRLO) request
+ * fc_rport_recv_prlo_req() - Handle incoming Process Logout (PRLO) request
  * @rport: Fibre Channel remote port that initiated PRLO
  * @sp: current sequence in the PRLO exchange
  * @fp: PRLO request frame
@@ -1213,7 +1235,7 @@ static void fc_rport_recv_prlo_req(struct fc_rport *rport, struct fc_seq *sp,
 }
 
 /**
- * fc_rport_recv_logo_req - Handle incoming Logout (LOGO) request
+ * fc_rport_recv_logo_req() - Handle incoming Logout (LOGO) request
  * @rport: Fibre Channel remote port that initiated LOGO
  * @sp: current sequence in the LOGO exchange
  * @fp: LOGO request frame
@@ -1249,6 +1271,9 @@ static void fc_rport_flush_queue(void)
 
 int fc_rport_init(struct fc_lport *lport)
 {
+       if (!lport->tt.rport_create)
+               lport->tt.rport_create = fc_rport_rogue_create;
+
        if (!lport->tt.rport_login)
                lport->tt.rport_login = fc_rport_login;
 
@@ -1285,7 +1310,7 @@ void fc_rport_terminate_io(struct fc_rport *rport)
        struct fc_rport_libfc_priv *rdata = rport->dd_data;
        struct fc_lport *lport = rdata->local_port;
 
-       lport->tt.exch_mgr_reset(lport->emp, 0, rport->port_id);
-       lport->tt.exch_mgr_reset(lport->emp, rport->port_id, 0);
+       lport->tt.exch_mgr_reset(lport, 0, rport->port_id);
+       lport->tt.exch_mgr_reset(lport, rport->port_id, 0);
 }
 EXPORT_SYMBOL(fc_rport_terminate_io);
index f4c5722..ee9d401 100644 (file)
@@ -244,12 +244,6 @@ qla2x00_sysfs_write_optrom_ctl(struct kobject *kobj,
                if (ha->optrom_state != QLA_SWAITING)
                        break;
 
-               if (start & 0xfff) {
-                       qla_printk(KERN_WARNING, ha,
-                           "Invalid start region 0x%x/0x%x.\n", start, size);
-                       return -EINVAL;
-               }
-
                ha->optrom_region_start = start;
                ha->optrom_region_size = start + size > ha->optrom_size ?
                    ha->optrom_size - start : size;
@@ -303,8 +297,7 @@ qla2x00_sysfs_write_optrom_ctl(struct kobject *kobj,
                else if (start == (ha->flt_region_boot * 4) ||
                    start == (ha->flt_region_fw * 4))
                        valid = 1;
-               else if ((IS_QLA25XX(ha) || IS_QLA81XX(ha)) &&
-                   start == (ha->flt_region_vpd_nvram * 4))
+               else if (IS_QLA25XX(ha) || IS_QLA81XX(ha))
                    valid = 1;
                if (!valid) {
                        qla_printk(KERN_WARNING, ha,
index 9865017..87f9abc 100644 (file)
@@ -1308,8 +1308,12 @@ qla2x00_init_rings(scsi_qla_host_t *vha)
 
        DEBUG(printk("scsi(%ld): Issue init firmware.\n", vha->host_no));
 
-       if (ha->flags.npiv_supported)
+       if (ha->flags.npiv_supported) {
+               if (ha->operating_mode == LOOP)
+                       ha->max_npiv_vports = MIN_MULTI_ID_FABRIC - 1;
                mid_init_cb->count = cpu_to_le16(ha->max_npiv_vports);
+       }
+
 
        mid_init_cb->options = __constant_cpu_to_le16(BIT_1);
 
@@ -2610,6 +2614,7 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha,
        port_id_t       wrap, nxt_d_id;
        struct qla_hw_data *ha = vha->hw;
        struct scsi_qla_host *vp, *base_vha = pci_get_drvdata(ha->pdev);
+       struct scsi_qla_host *tvp;
 
        rval = QLA_SUCCESS;
 
@@ -2709,7 +2714,7 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha,
                /* Bypass virtual ports of the same host. */
                found = 0;
                if (ha->num_vhosts) {
-                       list_for_each_entry(vp, &ha->vp_list, list) {
+                       list_for_each_entry_safe(vp, tvp, &ha->vp_list, list) {
                                if (new_fcport->d_id.b24 == vp->d_id.b24) {
                                        found = 1;
                                        break;
@@ -2832,6 +2837,7 @@ qla2x00_find_new_loop_id(scsi_qla_host_t *vha, fc_port_t *dev)
        uint16_t first_loop_id;
        struct qla_hw_data *ha = vha->hw;
        struct scsi_qla_host *vp;
+       struct scsi_qla_host *tvp;
 
        rval = QLA_SUCCESS;
 
@@ -2856,7 +2862,7 @@ qla2x00_find_new_loop_id(scsi_qla_host_t *vha, fc_port_t *dev)
                /* Check for loop ID being already in use. */
                found = 0;
                fcport = NULL;
-               list_for_each_entry(vp, &ha->vp_list, list) {
+               list_for_each_entry_safe(vp, tvp, &ha->vp_list, list) {
                        list_for_each_entry(fcport, &vp->vp_fcports, list) {
                                if (fcport->loop_id == dev->loop_id &&
                                                                fcport != dev) {
@@ -3291,6 +3297,7 @@ qla2x00_abort_isp(scsi_qla_host_t *vha)
        uint8_t        status = 0;
        struct qla_hw_data *ha = vha->hw;
        struct scsi_qla_host *vp;
+       struct scsi_qla_host *tvp;
        struct req_que *req = ha->req_q_map[0];
 
        if (vha->flags.online) {
@@ -3306,7 +3313,7 @@ qla2x00_abort_isp(scsi_qla_host_t *vha)
                if (atomic_read(&vha->loop_state) != LOOP_DOWN) {
                        atomic_set(&vha->loop_state, LOOP_DOWN);
                        qla2x00_mark_all_devices_lost(vha, 0);
-                       list_for_each_entry(vp, &ha->vp_list, list)
+                       list_for_each_entry_safe(vp, tvp, &ha->vp_list, list)
                               qla2x00_mark_all_devices_lost(vp, 0);
                } else {
                        if (!atomic_read(&vha->loop_down_timer))
@@ -3403,7 +3410,7 @@ qla2x00_abort_isp(scsi_qla_host_t *vha)
                DEBUG(printk(KERN_INFO
                                "qla2x00_abort_isp(%ld): succeeded.\n",
                                vha->host_no));
-               list_for_each_entry(vp, &ha->vp_list, list) {
+               list_for_each_entry_safe(vp, tvp, &ha->vp_list, list) {
                        if (vp->vp_idx)
                                qla2x00_vp_abort_isp(vp);
                }
@@ -3428,7 +3435,7 @@ qla2x00_abort_isp(scsi_qla_host_t *vha)
 static int
 qla2x00_restart_isp(scsi_qla_host_t *vha)
 {
-       uint8_t         status = 0;
+       int status = 0;
        uint32_t wait_time;
        struct qla_hw_data *ha = vha->hw;
        struct req_que *req = ha->req_q_map[0];
index 4c7504c..4aab7ac 100644 (file)
@@ -2685,6 +2685,7 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha,
        uint16_t stat = le16_to_cpu(rptid_entry->vp_idx);
        struct qla_hw_data *ha = vha->hw;
        scsi_qla_host_t *vp;
+       scsi_qla_host_t *tvp;
 
        if (rptid_entry->entry_status != 0)
                return;
@@ -2710,7 +2711,7 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha,
                if (MSB(stat) == 1)
                        return;
 
-               list_for_each_entry(vp, &ha->vp_list, list)
+               list_for_each_entry_safe(vp, tvp, &ha->vp_list, list)
                        if (vp_idx == vp->vp_idx)
                                break;
                if (!vp)
index 3f23932..785c612 100644 (file)
@@ -69,9 +69,10 @@ static scsi_qla_host_t *
 qla24xx_find_vhost_by_name(struct qla_hw_data *ha, uint8_t *port_name)
 {
        scsi_qla_host_t *vha;
+       struct scsi_qla_host *tvha;
 
        /* Locate matching device in database. */
-       list_for_each_entry(vha, &ha->vp_list, list) {
+       list_for_each_entry_safe(vha, tvha, &ha->vp_list, list) {
                if (!memcmp(port_name, vha->port_name, WWN_SIZE))
                        return vha;
        }
@@ -194,11 +195,11 @@ qla24xx_configure_vp(scsi_qla_host_t *vha)
 void
 qla2x00_alert_all_vps(struct rsp_que *rsp, uint16_t *mb)
 {
-       scsi_qla_host_t *vha;
+       scsi_qla_host_t *vha, *tvha;
        struct qla_hw_data *ha = rsp->hw;
        int i = 0;
 
-       list_for_each_entry(vha, &ha->vp_list, list) {
+       list_for_each_entry_safe(vha, tvha, &ha->vp_list, list) {
                if (vha->vp_idx) {
                        switch (mb[0]) {
                        case MBA_LIP_OCCURRED:
@@ -300,6 +301,7 @@ qla2x00_do_dpc_all_vps(scsi_qla_host_t *vha)
        int ret;
        struct qla_hw_data *ha = vha->hw;
        scsi_qla_host_t *vp;
+       struct scsi_qla_host *tvp;
 
        if (vha->vp_idx)
                return;
@@ -308,7 +310,7 @@ qla2x00_do_dpc_all_vps(scsi_qla_host_t *vha)
 
        clear_bit(VP_DPC_NEEDED, &vha->dpc_flags);
 
-       list_for_each_entry(vp, &ha->vp_list, list) {
+       list_for_each_entry_safe(vp, tvp, &ha->vp_list, list) {
                if (vp->vp_idx)
                        ret = qla2x00_do_dpc_vp(vp);
        }
index 2f5f725..3ddfa88 100644 (file)
@@ -2222,10 +2222,6 @@ qla2x00_mem_alloc(struct qla_hw_data *ha, uint16_t req_len, uint16_t rsp_len,
 {
        char    name[16];
 
-       ha->init_cb_size = sizeof(init_cb_t);
-       if (IS_QLA2XXX_MIDTYPE(ha))
-               ha->init_cb_size = sizeof(struct mid_init_cb_24xx);
-
        ha->init_cb = dma_alloc_coherent(&ha->pdev->dev, ha->init_cb_size,
                &ha->init_cb_dma, GFP_KERNEL);
        if (!ha->init_cb)
@@ -2568,7 +2564,7 @@ qla2x00_do_work(struct scsi_qla_host *vha)
 void qla2x00_relogin(struct scsi_qla_host *vha)
 {
        fc_port_t       *fcport;
-       uint8_t         status;
+       int status;
        uint16_t        next_loopid = 0;
        struct qla_hw_data *ha = vha->hw;
 
index 79f7053..a772eab 100644 (file)
@@ -7,7 +7,7 @@
 /*
  * Driver version
  */
-#define QLA2XXX_VERSION      "8.03.00-k3"
+#define QLA2XXX_VERSION      "8.03.00-k4"
 
 #define QLA_DRIVER_MAJOR_VER   8
 #define QLA_DRIVER_MINOR_VER   3
index 55310db..4970ae4 100644 (file)
@@ -1167,23 +1167,19 @@ sd_spinup_disk(struct scsi_disk *sdkp)
                /*
                 * The device does not want the automatic start to be issued.
                 */
-               if (sdkp->device->no_start_on_add) {
+               if (sdkp->device->no_start_on_add)
                        break;
-               }
-
-               /*
-                * If manual intervention is required, or this is an
-                * absent USB storage device, a spinup is meaningless.
-                */
-               if (sense_valid &&
-                   sshdr.sense_key == NOT_READY &&
-                   sshdr.asc == 4 && sshdr.ascq == 3) {
-                       break;          /* manual intervention required */
 
-               /*
-                * Issue command to spin up drive when not ready
-                */
-               } else if (sense_valid && sshdr.sense_key == NOT_READY) {
+               if (sense_valid && sshdr.sense_key == NOT_READY) {
+                       if (sshdr.asc == 4 && sshdr.ascq == 3)
+                               break;  /* manual intervention required */
+                       if (sshdr.asc == 4 && sshdr.ascq == 0xb)
+                               break;  /* standby */
+                       if (sshdr.asc == 4 && sshdr.ascq == 0xc)
+                               break;  /* unavailable */
+                       /*
+                        * Issue command to spin up drive when not ready
+                        */
                        if (!spintime) {
                                sd_printk(KERN_NOTICE, sdkp, "Spinning up disk...");
                                cmd[0] = START_STOP;
index a8d61a6..97f3158 100644 (file)
@@ -137,7 +137,7 @@ zalon_probe(struct parisc_device *dev)
                goto fail;
 
        if (request_irq(dev->irq, ncr53c8xx_intr, IRQF_SHARED, "zalon", host)) {
-         dev_printk(KERN_ERR, dev, "irq problem with %d, detaching\n ",
+         dev_printk(KERN_ERR, &dev->dev, "irq problem with %d, detaching\n ",
                     dev->irq);
                goto fail;
        }
index ce6badd..211af86 100644 (file)
@@ -73,8 +73,6 @@ source "drivers/staging/rt2860/Kconfig"
 
 source "drivers/staging/rt2870/Kconfig"
 
-source "drivers/staging/benet/Kconfig"
-
 source "drivers/staging/comedi/Kconfig"
 
 source "drivers/staging/asus_oled/Kconfig"
index 9ddcc2b..47a56f5 100644 (file)
@@ -19,7 +19,6 @@ obj-$(CONFIG_AGNX)            += agnx/
 obj-$(CONFIG_OTUS)             += otus/
 obj-$(CONFIG_RT2860)           += rt2860/
 obj-$(CONFIG_RT2870)           += rt2870/
-obj-$(CONFIG_BENET)            += benet/
 obj-$(CONFIG_COMEDI)           += comedi/
 obj-$(CONFIG_ASUS_OLED)                += asus_oled/
 obj-$(CONFIG_PANEL)            += panel/
diff --git a/drivers/staging/benet/Kconfig b/drivers/staging/benet/Kconfig
deleted file mode 100644 (file)
index f680607..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-config BENET
-       tristate "ServerEngines 10Gb NIC - BladeEngine"
-       depends on PCI && INET
-       select INET_LRO
-       help
-         This driver implements the NIC functionality for ServerEngines
-         10Gb network adapter BladeEngine (EC 3210).
diff --git a/drivers/staging/benet/MAINTAINERS b/drivers/staging/benet/MAINTAINERS
deleted file mode 100644 (file)
index d5ce340..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-SERVER ENGINES 10Gbe NIC - BLADE-ENGINE
-P:     Subbu Seetharaman
-M:     subbus@serverengines.com
-L:     netdev@vger.kernel.org
-W:     http://www.serverengines.com
-S:     Supported
diff --git a/drivers/staging/benet/Makefile b/drivers/staging/benet/Makefile
deleted file mode 100644 (file)
index 460b923..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#
-# Makefile to build the network driver for ServerEngine's BladeEngine
-#
-obj-$(CONFIG_BENET) += benet.o
-
-benet-y :=  be_init.o \
-                       be_int.o \
-                       be_netif.o \
-                       be_ethtool.o \
-                       funcobj.o \
-                       cq.o \
-                       eq.o \
-                       mpu.o \
-                       eth.o
diff --git a/drivers/staging/benet/TODO b/drivers/staging/benet/TODO
deleted file mode 100644 (file)
index a51dfb5..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-TODO:
-       - remove wrappers around common iowrite functions
-       - full netdev audit of common problems/issues
-
-Please send all patches and questions to Subbu Seetharaman
-<subbus@serverengines.com> and Greg Kroah-Hartman <greg@kroah.com>
diff --git a/drivers/staging/benet/asyncmesg.h b/drivers/staging/benet/asyncmesg.h
deleted file mode 100644 (file)
index d1e779a..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-/*
- * Autogenerated by srcgen version: 0127
- */
-#ifndef __asyncmesg_amap_h__
-#define __asyncmesg_amap_h__
-#include "fwcmd_common.h"
-
-/* --- ASYNC_EVENT_CODES --- */
-#define ASYNC_EVENT_CODE_LINK_STATE     (1)
-#define ASYNC_EVENT_CODE_ISCSI          (2)
-
-/* --- ASYNC_LINK_STATES --- */
-#define ASYNC_EVENT_LINK_DOWN           (0)    /* Link Down on a port */
-#define ASYNC_EVENT_LINK_UP             (1)    /* Link Up on a port */
-
-/*
- * The last 4 bytes of the async events have this common format.  It allows
- * the driver to distinguish [link]MCC_CQ_ENTRY[/link] structs from
- * asynchronous events.  Both arrive on the same completion queue.  This
- * structure also contains the common fields used to decode the async event.
- */
-struct BE_ASYNC_EVENT_TRAILER_AMAP {
-       u8 rsvd0[8];    /* DWORD 0 */
-       u8 event_code[8];       /* DWORD 0 */
-       u8 event_type[8];       /* DWORD 0 */
-       u8 rsvd1[6];    /* DWORD 0 */
-       u8 async_event; /* DWORD 0 */
-       u8 valid;               /* DWORD 0 */
-} __packed;
-struct ASYNC_EVENT_TRAILER_AMAP {
-       u32 dw[1];
-};
-
-/*
- * Applicable in Initiator, Target and NIC modes.
- * A link state async event is seen by all device drivers as soon they
- * create an MCC ring. Thereafter, anytime the link status changes the
- * drivers will receive a link state async event. Notifications continue to
- * be sent until a driver destroys its MCC ring. A link down event is
- * reported when either port loses link. A link up event is reported
- * when either port regains link. When BE's failover mechanism is enabled, a
- * link down on the active port causes traffic to be diverted to the standby
- * port by the BE's ARM firmware (assuming the standby port has link). In
- * this case, the standy port assumes the active status. Note: when link is
- * restored on the failed port, traffic continues on the currently active
- * port. The ARM firmware does not attempt to 'fail back' traffic to
- * the restored port.
- */
-struct BE_ASYNC_EVENT_LINK_STATE_AMAP {
-       u8 port0_link_status[8];
-       u8 port1_link_status[8];
-       u8 active_port[8];
-       u8 rsvd0[8];    /* DWORD 0 */
-       u8 port0_duplex[8];
-       u8 port0_speed[8];
-       u8 port1_duplex[8];
-       u8 port1_speed[8];
-       u8 port0_fault[8];
-       u8 port1_fault[8];
-       u8 rsvd1[2][8]; /* DWORD 2 */
-       struct BE_ASYNC_EVENT_TRAILER_AMAP trailer;
-} __packed;
-struct ASYNC_EVENT_LINK_STATE_AMAP {
-       u32 dw[4];
-};
-#endif /* __asyncmesg_amap_h__ */
diff --git a/drivers/staging/benet/be_cm.h b/drivers/staging/benet/be_cm.h
deleted file mode 100644 (file)
index b7a1dfd..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-/*
- * Autogenerated by srcgen version: 0127
- */
-#ifndef __be_cm_amap_h__
-#define __be_cm_amap_h__
-#include "be_common.h"
-#include "etx_context.h"
-#include "mpu_context.h"
-
-/*
- * --- CEV_WATERMARK_ENUM ---
- * CQ/EQ Watermark Encodings. Encoded as number of free entries in
- * Queue when Watermark is reached.
- */
-#define CEV_WMARK_0        (0) /* Watermark when Queue full */
-#define CEV_WMARK_16       (1) /* Watermark at 16 free entries */
-#define CEV_WMARK_32       (2) /* Watermark at 32 free entries */
-#define CEV_WMARK_48       (3) /* Watermark at 48 free entries */
-#define CEV_WMARK_64       (4) /* Watermark at 64 free entries */
-#define CEV_WMARK_80       (5) /* Watermark at 80 free entries */
-#define CEV_WMARK_96       (6) /* Watermark at 96 free entries */
-#define CEV_WMARK_112      (7) /* Watermark at 112 free entries */
-#define CEV_WMARK_128      (8) /* Watermark at 128 free entries */
-#define CEV_WMARK_144      (9) /* Watermark at 144 free entries */
-#define CEV_WMARK_160      (10)        /* Watermark at 160 free entries */
-#define CEV_WMARK_176      (11)        /* Watermark at 176 free entries */
-#define CEV_WMARK_192      (12)        /* Watermark at 192 free entries */
-#define CEV_WMARK_208      (13)        /* Watermark at 208 free entries */
-#define CEV_WMARK_224      (14)        /* Watermark at 224 free entries */
-#define CEV_WMARK_240      (15)        /* Watermark at 240 free entries */
-
-/*
- * --- CQ_CNT_ENUM ---
- * Completion Queue Count Encodings.
- */
-#define CEV_CQ_CNT_256                  (0)    /* CQ has 256 entries */
-#define CEV_CQ_CNT_512                  (1)    /* CQ has 512 entries */
-#define CEV_CQ_CNT_1024                 (2)    /* CQ has 1024 entries */
-
-/*
- * --- EQ_CNT_ENUM ---
- * Event Queue Count Encodings.
- */
-#define CEV_EQ_CNT_256     (0) /* EQ has 256 entries (16-byte EQEs only) */
-#define CEV_EQ_CNT_512     (1) /* EQ has 512 entries (16-byte EQEs only) */
-#define CEV_EQ_CNT_1024    (2) /* EQ has 1024 entries (4-byte or */
-                               /* 16-byte EQEs only) */
-#define CEV_EQ_CNT_2048    (3) /* EQ has 2048 entries (4-byte or */
-                               /* 16-byte EQEs only) */
-#define CEV_EQ_CNT_4096    (4) /* EQ has 4096 entries (4-byte EQEs only) */
-
-/*
- * --- EQ_SIZE_ENUM ---
- * Event Queue Entry Size Encoding.
- */
-#define CEV_EQ_SIZE_4                   (0)    /* EQE is 4 bytes */
-#define CEV_EQ_SIZE_16                  (1)    /* EQE is 16 bytes */
-
-/*
- * Completion Queue Context Table Entry. Contains the state of a CQ.
- * Located in RAM within the CEV block.
- */
-struct BE_CQ_CONTEXT_AMAP {
-       u8 Cidx[11];    /* DWORD 0 */
-       u8 Watermark[4];        /* DWORD 0 */
-       u8 NoDelay;             /* DWORD 0 */
-       u8 EPIdx[11];   /* DWORD 0 */
-       u8 Count[2];    /* DWORD 0 */
-       u8 valid;               /* DWORD 0 */
-       u8 SolEvent;    /* DWORD 0 */
-       u8 Eventable;   /* DWORD 0 */
-       u8 Pidx[11];    /* DWORD 1 */
-       u8 PD[10];              /* DWORD 1 */
-       u8 EQID[7];             /* DWORD 1 */
-       u8 Func;                /* DWORD 1 */
-       u8 WME;         /* DWORD 1 */
-       u8 Stalled;             /* DWORD 1 */
-       u8 Armed;               /* DWORD 1 */
-} __packed;
-struct CQ_CONTEXT_AMAP {
-       u32 dw[2];
-};
-
-/*
- * Event Queue Context Table Entry. Contains the state of an EQ.
- * Located in RAM in the CEV block.
- */
-struct BE_EQ_CONTEXT_AMAP {
-       u8 Cidx[13];    /* DWORD 0 */
-       u8 rsvd0[2];    /* DWORD 0 */
-       u8 Func;                /* DWORD 0 */
-       u8 EPIdx[13];   /* DWORD 0 */
-       u8 valid;               /* DWORD 0 */
-       u8 rsvd1;               /* DWORD 0 */
-       u8 Size;                /* DWORD 0 */
-       u8 Pidx[13];    /* DWORD 1 */
-       u8 rsvd2[3];    /* DWORD 1 */
-       u8 PD[10];              /* DWORD 1 */
-       u8 Count[3];    /* DWORD 1 */
-       u8 SolEvent;    /* DWORD 1 */
-       u8 Stalled;             /* DWORD 1 */
-       u8 Armed;               /* DWORD 1 */
-       u8 Watermark[4];        /* DWORD 2 */
-       u8 WME;         /* DWORD 2 */
-       u8 rsvd3[3];    /* DWORD 2 */
-       u8 EventVect[6];        /* DWORD 2 */
-       u8 rsvd4[2];    /* DWORD 2 */
-       u8 Delay[8];    /* DWORD 2 */
-       u8 rsvd5[6];    /* DWORD 2 */
-       u8 TMR;         /* DWORD 2 */
-       u8 rsvd6;               /* DWORD 2 */
-       u8 rsvd7[32];   /* DWORD 3 */
-} __packed;
-struct EQ_CONTEXT_AMAP {
-       u32 dw[4];
-};
-
-#endif /* __be_cm_amap_h__ */
diff --git a/drivers/staging/benet/be_common.h b/drivers/staging/benet/be_common.h
deleted file mode 100644 (file)
index 7e63dc5..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-/*
- * Autogenerated by srcgen version: 0127
- */
-#ifndef __be_common_amap_h__
-#define __be_common_amap_h__
-
-/* Physical Address. */
-struct BE_PHYS_ADDR_AMAP {
-       u8 lo[32];              /* DWORD 0 */
-       u8 hi[32];              /* DWORD 1 */
-} __packed;
-struct PHYS_ADDR_AMAP {
-       u32 dw[2];
-};
-
-/* Virtual Address. */
-struct BE_VIRT_ADDR_AMAP {
-       u8 lo[32];              /* DWORD 0 */
-       u8 hi[32];              /* DWORD 1 */
-} __packed;
-struct VIRT_ADDR_AMAP {
-       u32 dw[2];
-};
-
-/* Scatter gather element. */
-struct BE_SGE_AMAP {
-       u8 addr_hi[32]; /* DWORD 0 */
-       u8 addr_lo[32]; /* DWORD 1 */
-       u8 rsvd0[32];   /* DWORD 2 */
-       u8 len[16];             /* DWORD 3 */
-       u8 rsvd1[16];   /* DWORD 3 */
-} __packed;
-struct SGE_AMAP {
-       u32 dw[4];
-};
-
-#endif /* __be_common_amap_h__ */
diff --git a/drivers/staging/benet/be_ethtool.c b/drivers/staging/benet/be_ethtool.c
deleted file mode 100644 (file)
index 027af85..0000000
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-/*
- * be_ethtool.c
- *
- *     This file contains various functions that ethtool can use
- *     to talk to the driver and the BE H/W.
- */
-
-#include "benet.h"
-
-#include <linux/ethtool.h>
-
-static const char benet_gstrings_stats[][ETH_GSTRING_LEN] = {
-/* net_device_stats */
-       "rx_packets",
-       "tx_packets",
-       "rx_bytes",
-       "tx_bytes",
-       "rx_errors",
-       "tx_errors",
-       "rx_dropped",
-       "tx_dropped",
-       "multicast",
-       "collisions",
-       "rx_length_errors",
-       "rx_over_errors",
-       "rx_crc_errors",
-       "rx_frame_errors",
-       "rx_fifo_errors",
-       "rx_missed_errors",
-       "tx_aborted_errors",
-       "tx_carrier_errors",
-       "tx_fifo_errors",
-       "tx_heartbeat_errors",
-       "tx_window_errors",
-       "rx_compressed",
-       "tc_compressed",
-/* BE driver Stats */
-       "bes_tx_reqs",
-       "bes_tx_fails",
-       "bes_fwd_reqs",
-       "bes_tx_wrbs",
-       "bes_interrupts",
-       "bes_events",
-       "bes_tx_events",
-       "bes_rx_events",
-       "bes_tx_compl",
-       "bes_rx_compl",
-       "bes_ethrx_post_fail",
-       "bes_802_3_dropped_frames",
-       "bes_802_3_malformed_frames",
-       "bes_rx_misc_pkts",
-       "bes_eth_tx_rate",
-       "bes_eth_rx_rate",
-       "Num Packets collected",
-       "Num Times Flushed",
-};
-
-#define NET_DEV_STATS_LEN \
-       (sizeof(struct net_device_stats)/sizeof(unsigned long))
-
-#define BENET_STATS_LEN  ARRAY_SIZE(benet_gstrings_stats)
-
-static void
-be_get_drvinfo(struct net_device *netdev, struct ethtool_drvinfo *drvinfo)
-{
-       struct be_net_object *pnob = netdev_priv(netdev);
-       struct be_adapter *adapter = pnob->adapter;
-
-       strncpy(drvinfo->driver, be_driver_name, 32);
-       strncpy(drvinfo->version, be_drvr_ver, 32);
-       strncpy(drvinfo->fw_version, be_fw_ver, 32);
-       strcpy(drvinfo->bus_info, pci_name(adapter->pdev));
-       drvinfo->testinfo_len = 0;
-       drvinfo->regdump_len = 0;
-       drvinfo->eedump_len = 0;
-}
-
-static int
-be_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *coalesce)
-{
-       struct be_net_object *pnob = netdev_priv(netdev);
-       struct be_adapter *adapter = pnob->adapter;
-
-       coalesce->rx_max_coalesced_frames = adapter->max_rx_coal;
-
-       coalesce->rx_coalesce_usecs = adapter->cur_eqd;
-       coalesce->rx_coalesce_usecs_high = adapter->max_eqd;
-       coalesce->rx_coalesce_usecs_low = adapter->min_eqd;
-
-       coalesce->tx_coalesce_usecs = adapter->cur_eqd;
-       coalesce->tx_coalesce_usecs_high = adapter->max_eqd;
-       coalesce->tx_coalesce_usecs_low = adapter->min_eqd;
-
-       coalesce->use_adaptive_rx_coalesce = adapter->enable_aic;
-       coalesce->use_adaptive_tx_coalesce = adapter->enable_aic;
-
-       return 0;
-}
-
-/*
- * This routine is used to set interrup coalescing delay *as well as*
- * the number of pkts to coalesce for LRO.
- */
-static int
-be_set_coalesce(struct net_device *netdev, struct ethtool_coalesce *coalesce)
-{
-       struct be_net_object *pnob = netdev_priv(netdev);
-       struct be_adapter *adapter = pnob->adapter;
-       struct be_eq_object *eq_objectp;
-       u32 max, min, cur;
-       int status;
-
-       adapter->max_rx_coal = coalesce->rx_max_coalesced_frames;
-       if (adapter->max_rx_coal >= BE_LRO_MAX_PKTS)
-               adapter->max_rx_coal = BE_LRO_MAX_PKTS;
-
-       if (adapter->enable_aic == 0 &&
-               coalesce->use_adaptive_rx_coalesce == 1) {
-               /* if AIC is being turned on now, start with an EQD of 0 */
-               adapter->cur_eqd = 0;
-       }
-       adapter->enable_aic = coalesce->use_adaptive_rx_coalesce;
-
-       /* round off to nearest multiple of 8 */
-       max = (((coalesce->rx_coalesce_usecs_high + 4) >> 3) << 3);
-       min = (((coalesce->rx_coalesce_usecs_low + 4) >> 3) << 3);
-       cur = (((coalesce->rx_coalesce_usecs + 4) >> 3) << 3);
-
-       if (adapter->enable_aic) {
-               /* accept low and high if AIC is enabled */
-               if (max > MAX_EQD)
-                       max = MAX_EQD;
-               if (min > max)
-                       min = max;
-               adapter->max_eqd = max;
-               adapter->min_eqd = min;
-               if (adapter->cur_eqd > max)
-                       adapter->cur_eqd = max;
-               if (adapter->cur_eqd < min)
-                       adapter->cur_eqd = min;
-       } else {
-               /* accept specified coalesce_usecs only if AIC is disabled */
-               if (cur > MAX_EQD)
-                       cur = MAX_EQD;
-               eq_objectp = &pnob->event_q_obj;
-               status =
-                   be_eq_modify_delay(&pnob->fn_obj, 1, &eq_objectp, &cur,
-                                      NULL, NULL, NULL);
-               if (status == BE_SUCCESS)
-                       adapter->cur_eqd = cur;
-       }
-       return 0;
-}
-
-static u32 be_get_rx_csum(struct net_device *netdev)
-{
-       struct be_net_object *pnob = netdev_priv(netdev);
-       struct be_adapter *adapter = pnob->adapter;
-       return adapter->rx_csum;
-}
-
-static int be_set_rx_csum(struct net_device *netdev, uint32_t data)
-{
-       struct be_net_object *pnob = netdev_priv(netdev);
-       struct be_adapter *adapter = pnob->adapter;
-
-       if (data)
-               adapter->rx_csum = 1;
-       else
-               adapter->rx_csum = 0;
-
-       return 0;
-}
-
-static void
-be_get_strings(struct net_device *netdev, uint32_t stringset, uint8_t *data)
-{
-       switch (stringset) {
-       case ETH_SS_STATS:
-               memcpy(data, *benet_gstrings_stats,
-                      sizeof(benet_gstrings_stats));
-               break;
-       }
-}
-
-static int be_get_stats_count(struct net_device *netdev)
-{
-       return BENET_STATS_LEN;
-}
-
-static void
-be_get_ethtool_stats(struct net_device *netdev,
-                    struct ethtool_stats *stats, uint64_t *data)
-{
-       struct be_net_object *pnob = netdev_priv(netdev);
-       struct be_adapter *adapter = pnob->adapter;
-       int i;
-
-       benet_get_stats(netdev);
-
-       for (i = 0; i <= NET_DEV_STATS_LEN; i++)
-               data[i] = ((unsigned long *)&adapter->benet_stats)[i];
-
-       data[i] = adapter->be_stat.bes_tx_reqs;
-       data[i++] = adapter->be_stat.bes_tx_fails;
-       data[i++] = adapter->be_stat.bes_fwd_reqs;
-       data[i++] = adapter->be_stat.bes_tx_wrbs;
-
-       data[i++] = adapter->be_stat.bes_ints;
-       data[i++] = adapter->be_stat.bes_events;
-       data[i++] = adapter->be_stat.bes_tx_events;
-       data[i++] = adapter->be_stat.bes_rx_events;
-       data[i++] = adapter->be_stat.bes_tx_compl;
-       data[i++] = adapter->be_stat.bes_rx_compl;
-       data[i++] = adapter->be_stat.bes_ethrx_post_fail;
-       data[i++] = adapter->be_stat.bes_802_3_dropped_frames;
-       data[i++] = adapter->be_stat.bes_802_3_malformed_frames;
-       data[i++] = adapter->be_stat.bes_rx_misc_pkts;
-       data[i++] = adapter->be_stat.bes_eth_tx_rate;
-       data[i++] = adapter->be_stat.bes_eth_rx_rate;
-       data[i++] = adapter->be_stat.bes_rx_coal;
-       data[i++] = adapter->be_stat.bes_rx_flush;
-
-}
-
-static int be_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
-{
-       ecmd->speed = SPEED_10000;
-       ecmd->duplex = DUPLEX_FULL;
-       ecmd->autoneg = AUTONEG_DISABLE;
-       return 0;
-}
-
-/* Get the Ring parameters from the pnob */
-static void
-be_get_ringparam(struct net_device *netdev, struct ethtool_ringparam *ring)
-{
-       struct be_net_object *pnob = netdev_priv(netdev);
-
-       /* Pre Set Maxims */
-       ring->rx_max_pending = pnob->rx_q_len;
-       ring->rx_mini_max_pending = ring->rx_mini_max_pending;
-       ring->rx_jumbo_max_pending = ring->rx_jumbo_max_pending;
-       ring->tx_max_pending = pnob->tx_q_len;
-
-       /* Current hardware Settings                */
-       ring->rx_pending = atomic_read(&pnob->rx_q_posted);
-       ring->rx_mini_pending = ring->rx_mini_pending;
-       ring->rx_jumbo_pending = ring->rx_jumbo_pending;
-       ring->tx_pending = atomic_read(&pnob->tx_q_used);
-
-}
-
-static void
-be_get_pauseparam(struct net_device *netdev, struct ethtool_pauseparam *ecmd)
-{
-       struct be_net_object *pnob = netdev_priv(netdev);
-       bool rxfc, txfc;
-       int status;
-
-       status = be_eth_get_flow_control(&pnob->fn_obj, &txfc, &rxfc);
-       if (status != BE_SUCCESS) {
-               dev_info(&netdev->dev, "Unable to get pause frame settings\n");
-               /* return defaults */
-               ecmd->rx_pause = 1;
-               ecmd->tx_pause = 0;
-               ecmd->autoneg = AUTONEG_ENABLE;
-               return;
-       }
-
-       if (txfc == true)
-               ecmd->tx_pause = 1;
-       else
-               ecmd->tx_pause = 0;
-
-       if (rxfc == true)
-               ecmd->rx_pause = 1;
-       else
-               ecmd->rx_pause = 0;
-
-       ecmd->autoneg = AUTONEG_ENABLE;
-}
-
-static int
-be_set_pauseparam(struct net_device *netdev, struct ethtool_pauseparam *ecmd)
-{
-       struct be_net_object *pnob = netdev_priv(netdev);
-       bool txfc, rxfc;
-       int status;
-
-       if (ecmd->autoneg != AUTONEG_ENABLE)
-               return -EINVAL;
-
-       if (ecmd->tx_pause)
-               txfc = true;
-       else
-               txfc = false;
-
-       if (ecmd->rx_pause)
-               rxfc = true;
-       else
-               rxfc = false;
-
-       status = be_eth_set_flow_control(&pnob->fn_obj, txfc, rxfc);
-       if (status != BE_SUCCESS) {
-               dev_info(&netdev->dev, "Unable to set pause frame settings\n");
-               return -1;
-       }
-       return 0;
-}
-
-struct ethtool_ops be_ethtool_ops = {
-       .get_settings = be_get_settings,
-       .get_drvinfo = be_get_drvinfo,
-       .get_link = ethtool_op_get_link,
-       .get_coalesce = be_get_coalesce,
-       .set_coalesce = be_set_coalesce,
-       .get_ringparam = be_get_ringparam,
-       .get_pauseparam = be_get_pauseparam,
-       .set_pauseparam = be_set_pauseparam,
-       .get_rx_csum = be_get_rx_csum,
-       .set_rx_csum = be_set_rx_csum,
-       .get_tx_csum = ethtool_op_get_tx_csum,
-       .set_tx_csum = ethtool_op_set_tx_csum,
-       .get_sg = ethtool_op_get_sg,
-       .set_sg = ethtool_op_set_sg,
-       .get_tso = ethtool_op_get_tso,
-       .set_tso = ethtool_op_set_tso,
-       .get_strings = be_get_strings,
-       .get_stats_count = be_get_stats_count,
-       .get_ethtool_stats = be_get_ethtool_stats,
-};
diff --git a/drivers/staging/benet/be_init.c b/drivers/staging/benet/be_init.c
deleted file mode 100644 (file)
index 12a026c..0000000
+++ /dev/null
@@ -1,1382 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-#include <linux/etherdevice.h>
-#include "benet.h"
-
-#define  DRVR_VERSION  "1.0.728"
-
-static const struct pci_device_id be_device_id_table[] = {
-       {PCI_DEVICE(0x19a2, 0x0201)},
-       {0}
-};
-
-MODULE_DEVICE_TABLE(pci, be_device_id_table);
-
-MODULE_VERSION(DRVR_VERSION);
-
-#define DRV_DESCRIPTION "ServerEngines BladeEngine Network Driver Version "
-
-MODULE_DESCRIPTION(DRV_DESCRIPTION DRVR_VERSION);
-MODULE_AUTHOR("ServerEngines");
-MODULE_LICENSE("GPL");
-
-static unsigned int msix = 1;
-module_param(msix, uint, S_IRUGO);
-MODULE_PARM_DESC(msix, "Use MSI-x interrupts");
-
-static unsigned int rxbuf_size = 2048; /* Default RX frag size */
-module_param(rxbuf_size, uint, S_IRUGO);
-MODULE_PARM_DESC(rxbuf_size, "Size of buffers to hold Rx data");
-
-const char be_drvr_ver[] = DRVR_VERSION;
-char be_fw_ver[32];            /* F/W version filled in by be_probe */
-char be_driver_name[] = "benet";
-
-/*
- * Number of entries in each queue.
- */
-#define EVENT_Q_LEN            1024
-#define ETH_TXQ_LEN            2048
-#define ETH_TXCQ_LEN           1024
-#define ETH_RXQ_LEN            1024    /* Does not support any other value */
-#define ETH_UC_RXCQ_LEN                1024
-#define ETH_BC_RXCQ_LEN                256
-#define MCC_Q_LEN               64     /* total size not to exceed 8 pages */
-#define MCC_CQ_LEN              256
-
-/* Bit mask describing events of interest to be traced */
-unsigned int trace_level;
-
-static int
-init_pci_be_function(struct be_adapter *adapter, struct pci_dev *pdev)
-{
-       u64 pa;
-
-       /* CSR */
-       pa = pci_resource_start(pdev, 2);
-       adapter->csr_va = ioremap_nocache(pa, pci_resource_len(pdev, 2));
-       if (adapter->csr_va == NULL)
-               return -ENOMEM;
-
-       /* Door Bell */
-       pa = pci_resource_start(pdev, 4);
-       adapter->db_va = ioremap_nocache(pa, (128 * 1024));
-       if (adapter->db_va == NULL) {
-               iounmap(adapter->csr_va);
-               return -ENOMEM;
-       }
-
-       /* PCI */
-       pa = pci_resource_start(pdev, 1);
-       adapter->pci_va = ioremap_nocache(pa, pci_resource_len(pdev, 1));
-       if (adapter->pci_va == NULL) {
-               iounmap(adapter->csr_va);
-               iounmap(adapter->db_va);
-               return -ENOMEM;
-       }
-       return 0;
-}
-
-/*
-   This function enables the interrupt corresponding to the Event
-   queue ID for the given NetObject
-*/
-void be_enable_eq_intr(struct be_net_object *pnob)
-{
-       struct CQ_DB_AMAP cqdb;
-       cqdb.dw[0] = 0;
-       AMAP_SET_BITS_PTR(CQ_DB, event, &cqdb, 1);
-       AMAP_SET_BITS_PTR(CQ_DB, rearm, &cqdb, 1);
-       AMAP_SET_BITS_PTR(CQ_DB, num_popped, &cqdb, 0);
-       AMAP_SET_BITS_PTR(CQ_DB, qid, &cqdb, pnob->event_q_id);
-       PD_WRITE(&pnob->fn_obj, cq_db, cqdb.dw[0]);
-}
-
-/*
-   This function disables the interrupt corresponding to the Event
-   queue ID for the given NetObject
-*/
-void be_disable_eq_intr(struct be_net_object *pnob)
-{
-       struct CQ_DB_AMAP cqdb;
-       cqdb.dw[0] = 0;
-       AMAP_SET_BITS_PTR(CQ_DB, event, &cqdb, 1);
-       AMAP_SET_BITS_PTR(CQ_DB, rearm, &cqdb, 0);
-       AMAP_SET_BITS_PTR(CQ_DB, num_popped, &cqdb, 0);
-       AMAP_SET_BITS_PTR(CQ_DB, qid, &cqdb, pnob->event_q_id);
-       PD_WRITE(&pnob->fn_obj, cq_db, cqdb.dw[0]);
-}
-
-/*
-    This function enables the interrupt from the  network function
-    of the BladeEngine. Use the function be_disable_eq_intr()
-    to enable the interrupt from the event queue of only one specific
-    NetObject
-*/
-void be_enable_intr(struct be_net_object *pnob)
-{
-       struct PCICFG_HOST_TIMER_INT_CTRL_CSR_AMAP ctrl;
-       u32 host_intr;
-
-       ctrl.dw[0] = PCICFG1_READ(&pnob->fn_obj, host_timer_int_ctrl);
-       host_intr = AMAP_GET_BITS_PTR(PCICFG_HOST_TIMER_INT_CTRL_CSR,
-                                                       hostintr, ctrl.dw);
-       if (!host_intr) {
-               AMAP_SET_BITS_PTR(PCICFG_HOST_TIMER_INT_CTRL_CSR,
-                       hostintr, ctrl.dw, 1);
-               PCICFG1_WRITE(&pnob->fn_obj, host_timer_int_ctrl,
-                       ctrl.dw[0]);
-       }
-}
-
-/*
-   This function disables the interrupt from the network function of
-   the BladeEngine.  Use the function be_disable_eq_intr() to
-   disable the interrupt from the event queue of only one specific NetObject
-*/
-void be_disable_intr(struct be_net_object *pnob)
-{
-
-       struct PCICFG_HOST_TIMER_INT_CTRL_CSR_AMAP ctrl;
-       u32 host_intr;
-       ctrl.dw[0] = PCICFG1_READ(&pnob->fn_obj, host_timer_int_ctrl);
-       host_intr = AMAP_GET_BITS_PTR(PCICFG_HOST_TIMER_INT_CTRL_CSR,
-                                                       hostintr, ctrl.dw);
-       if (host_intr) {
-               AMAP_SET_BITS_PTR(PCICFG_HOST_TIMER_INT_CTRL_CSR, hostintr,
-                       ctrl.dw, 0);
-               PCICFG1_WRITE(&pnob->fn_obj, host_timer_int_ctrl,
-                       ctrl.dw[0]);
-       }
-}
-
-static int be_enable_msix(struct be_adapter *adapter)
-{
-       int i, ret;
-
-       if (!msix)
-               return -1;
-
-       for (i = 0; i < BE_MAX_REQ_MSIX_VECTORS; i++)
-               adapter->msix_entries[i].entry = i;
-
-       ret = pci_enable_msix(adapter->pdev, adapter->msix_entries,
-               BE_MAX_REQ_MSIX_VECTORS);
-
-       if (ret == 0)
-               adapter->msix_enabled = 1;
-       return ret;
-}
-
-static int be_register_isr(struct be_adapter *adapter,
-               struct be_net_object *pnob)
-{
-       struct net_device *netdev = pnob->netdev;
-       int intx = 0, r;
-
-       netdev->irq = adapter->pdev->irq;
-       r = be_enable_msix(adapter);
-
-       if (r == 0) {
-               r = request_irq(adapter->msix_entries[0].vector,
-                               be_int, IRQF_SHARED, netdev->name, netdev);
-               if (r) {
-                       printk(KERN_WARNING
-                               "MSIX Request IRQ failed - Errno %d\n", r);
-                       intx = 1;
-                       pci_disable_msix(adapter->pdev);
-                       adapter->msix_enabled = 0;
-               }
-       } else {
-               intx = 1;
-       }
-
-       if (intx) {
-               r = request_irq(netdev->irq, be_int, IRQF_SHARED,
-                               netdev->name, netdev);
-               if (r) {
-                       printk(KERN_WARNING
-                               "INTx Request IRQ failed - Errno %d\n", r);
-                       return -1;
-               }
-       }
-       adapter->isr_registered = 1;
-       return 0;
-}
-
-static void be_unregister_isr(struct be_adapter *adapter)
-{
-       struct net_device *netdev = adapter->netdevp;
-       if (adapter->isr_registered) {
-               if (adapter->msix_enabled) {
-                       free_irq(adapter->msix_entries[0].vector, netdev);
-                       pci_disable_msix(adapter->pdev);
-                       adapter->msix_enabled = 0;
-               } else {
-                       free_irq(netdev->irq, netdev);
-               }
-               adapter->isr_registered = 0;
-       }
-}
-
-/*
-    This function processes the Flush Completions that are issued by the
-    ARM F/W, when a Recv Ring is destroyed.  A flush completion is
-    identified when a Rx COmpl descriptor has the tcpcksum and udpcksum
-    set and the pktsize is 32.  These completions are received on the
-    Rx Completion Queue.
-*/
-static u32 be_process_rx_flush_cmpl(struct be_net_object *pnob)
-{
-       struct ETH_RX_COMPL_AMAP *rxcp;
-       unsigned int i = 0;
-       while ((rxcp = be_get_rx_cmpl(pnob)) != NULL) {
-               be_notify_cmpl(pnob, 1, pnob->rx_cq_id, 1);
-               i++;
-       }
-       return i;
-}
-
-static void be_tx_q_clean(struct be_net_object *pnob)
-{
-       while (atomic_read(&pnob->tx_q_used))
-               process_one_tx_compl(pnob, tx_compl_lastwrb_idx_get(pnob));
-}
-
-static void be_rx_q_clean(struct be_net_object *pnob)
-{
-       if (pnob->rx_ctxt) {
-               int i;
-               struct be_rx_page_info *rx_page_info;
-               for (i = 0; i < pnob->rx_q_len; i++) {
-                       rx_page_info = &(pnob->rx_page_info[i]);
-                       if (!pnob->rx_pg_shared || rx_page_info->page_offset) {
-                               pci_unmap_page(pnob->adapter->pdev,
-                                      pci_unmap_addr(rx_page_info, bus),
-                                              pnob->rx_buf_size,
-                                              PCI_DMA_FROMDEVICE);
-                       }
-                       if (rx_page_info->page)
-                               put_page(rx_page_info->page);
-                       memset(rx_page_info, 0, sizeof(struct be_rx_page_info));
-               }
-               pnob->rx_pg_info_hd = 0;
-       }
-}
-
-static void be_destroy_netobj(struct be_net_object *pnob)
-{
-       int status;
-
-       if (pnob->tx_q_created) {
-               status = be_eth_sq_destroy(&pnob->tx_q_obj);
-               pnob->tx_q_created = 0;
-       }
-
-       if (pnob->rx_q_created) {
-               status = be_eth_rq_destroy(&pnob->rx_q_obj);
-               if (status != 0) {
-                       status = be_eth_rq_destroy_options(&pnob->rx_q_obj, 0,
-                                                     NULL, NULL);
-                       BUG_ON(status);
-               }
-               pnob->rx_q_created = 0;
-       }
-
-       be_process_rx_flush_cmpl(pnob);
-
-       if (pnob->tx_cq_created) {
-               status = be_cq_destroy(&pnob->tx_cq_obj);
-               pnob->tx_cq_created = 0;
-       }
-
-       if (pnob->rx_cq_created) {
-               status = be_cq_destroy(&pnob->rx_cq_obj);
-               pnob->rx_cq_created = 0;
-       }
-
-       if (pnob->mcc_q_created) {
-               status = be_mcc_ring_destroy(&pnob->mcc_q_obj);
-               pnob->mcc_q_created = 0;
-       }
-       if (pnob->mcc_cq_created) {
-               status = be_cq_destroy(&pnob->mcc_cq_obj);
-               pnob->mcc_cq_created = 0;
-       }
-
-       if (pnob->event_q_created) {
-               status = be_eq_destroy(&pnob->event_q_obj);
-               pnob->event_q_created = 0;
-       }
-       be_function_cleanup(&pnob->fn_obj);
-}
-
-/*
- * free all resources associated with a pnob
- * Called at the time of module cleanup as well a any error during
- * module init.  Some resources may be partially allocated in a NetObj.
- */
-static void netobject_cleanup(struct be_adapter *adapter,
-                       struct be_net_object *pnob)
-{
-       struct net_device *netdev = adapter->netdevp;
-
-       if (netif_running(netdev)) {
-               netif_stop_queue(netdev);
-               be_wait_nic_tx_cmplx_cmpl(pnob);
-               be_disable_eq_intr(pnob);
-       }
-
-       be_unregister_isr(adapter);
-
-       if (adapter->tasklet_started) {
-               tasklet_kill(&(adapter->sts_handler));
-               adapter->tasklet_started = 0;
-       }
-       if (pnob->fn_obj_created)
-               be_disable_intr(pnob);
-
-       if (adapter->dev_state != BE_DEV_STATE_NONE)
-               unregister_netdev(netdev);
-
-       if (pnob->fn_obj_created)
-               be_destroy_netobj(pnob);
-
-       adapter->net_obj = NULL;
-       adapter->netdevp = NULL;
-
-       be_rx_q_clean(pnob);
-       if (pnob->rx_ctxt) {
-               kfree(pnob->rx_page_info);
-               kfree(pnob->rx_ctxt);
-       }
-
-       be_tx_q_clean(pnob);
-       kfree(pnob->tx_ctxt);
-
-       if (pnob->mcc_q)
-               pci_free_consistent(adapter->pdev, pnob->mcc_q_size,
-                       pnob->mcc_q, pnob->mcc_q_bus);
-
-       if (pnob->mcc_wrb_ctxt)
-               free_pages((unsigned long)pnob->mcc_wrb_ctxt,
-                          get_order(pnob->mcc_wrb_ctxt_size));
-
-       if (pnob->mcc_cq)
-               pci_free_consistent(adapter->pdev, pnob->mcc_cq_size,
-                       pnob->mcc_cq, pnob->mcc_cq_bus);
-
-       if (pnob->event_q)
-               pci_free_consistent(adapter->pdev, pnob->event_q_size,
-                       pnob->event_q, pnob->event_q_bus);
-
-       if (pnob->tx_cq)
-               pci_free_consistent(adapter->pdev, pnob->tx_cq_size,
-                       pnob->tx_cq, pnob->tx_cq_bus);
-
-       if (pnob->tx_q)
-               pci_free_consistent(adapter->pdev, pnob->tx_q_size,
-                       pnob->tx_q, pnob->tx_q_bus);
-
-       if (pnob->rx_q)
-               pci_free_consistent(adapter->pdev, pnob->rx_q_size,
-                       pnob->rx_q, pnob->rx_q_bus);
-
-       if (pnob->rx_cq)
-               pci_free_consistent(adapter->pdev, pnob->rx_cq_size,
-                       pnob->rx_cq, pnob->rx_cq_bus);
-
-
-       if (pnob->mb_ptr)
-               pci_free_consistent(adapter->pdev, pnob->mb_size, pnob->mb_ptr,
-                       pnob->mb_bus);
-
-       free_netdev(netdev);
-}
-
-
-static int be_nob_ring_alloc(struct be_adapter *adapter,
-       struct be_net_object *pnob)
-{
-       u32 size;
-
-       /* Mail box rd; mailbox pointer needs to be 16 byte aligned */
-       pnob->mb_size = sizeof(struct MCC_MAILBOX_AMAP) + 16;
-       pnob->mb_ptr = pci_alloc_consistent(adapter->pdev, pnob->mb_size,
-                               &pnob->mb_bus);
-       if (!pnob->mb_bus)
-               return -1;
-       memset(pnob->mb_ptr, 0, pnob->mb_size);
-       pnob->mb_rd.va = PTR_ALIGN(pnob->mb_ptr, 16);
-       pnob->mb_rd.pa = PTR_ALIGN(pnob->mb_bus, 16);
-       pnob->mb_rd.length = sizeof(struct MCC_MAILBOX_AMAP);
-       /*
-        * Event queue
-        */
-       pnob->event_q_len = EVENT_Q_LEN;
-       pnob->event_q_size = pnob->event_q_len * sizeof(struct EQ_ENTRY_AMAP);
-       pnob->event_q = pci_alloc_consistent(adapter->pdev, pnob->event_q_size,
-                               &pnob->event_q_bus);
-       if (!pnob->event_q_bus)
-               return -1;
-       memset(pnob->event_q, 0, pnob->event_q_size);
-       /*
-        * Eth TX queue
-        */
-       pnob->tx_q_len = ETH_TXQ_LEN;
-       pnob->tx_q_port = 0;
-       pnob->tx_q_size =  pnob->tx_q_len * sizeof(struct ETH_WRB_AMAP);
-       pnob->tx_q = pci_alloc_consistent(adapter->pdev, pnob->tx_q_size,
-                               &pnob->tx_q_bus);
-       if (!pnob->tx_q_bus)
-               return -1;
-       memset(pnob->tx_q, 0, pnob->tx_q_size);
-       /*
-        * Eth TX Compl queue
-        */
-       pnob->txcq_len = ETH_TXCQ_LEN;
-       pnob->tx_cq_size = pnob->txcq_len * sizeof(struct ETH_TX_COMPL_AMAP);
-       pnob->tx_cq = pci_alloc_consistent(adapter->pdev, pnob->tx_cq_size,
-                               &pnob->tx_cq_bus);
-       if (!pnob->tx_cq_bus)
-               return -1;
-       memset(pnob->tx_cq, 0, pnob->tx_cq_size);
-       /*
-        * Eth RX queue
-        */
-       pnob->rx_q_len = ETH_RXQ_LEN;
-       pnob->rx_q_size =  pnob->rx_q_len * sizeof(struct ETH_RX_D_AMAP);
-       pnob->rx_q = pci_alloc_consistent(adapter->pdev, pnob->rx_q_size,
-                               &pnob->rx_q_bus);
-       if (!pnob->rx_q_bus)
-               return -1;
-       memset(pnob->rx_q, 0, pnob->rx_q_size);
-       /*
-        * Eth Unicast RX Compl queue
-        */
-       pnob->rx_cq_len = ETH_UC_RXCQ_LEN;
-       pnob->rx_cq_size =  pnob->rx_cq_len *
-                       sizeof(struct ETH_RX_COMPL_AMAP);
-       pnob->rx_cq = pci_alloc_consistent(adapter->pdev, pnob->rx_cq_size,
-                               &pnob->rx_cq_bus);
-       if (!pnob->rx_cq_bus)
-               return -1;
-       memset(pnob->rx_cq, 0, pnob->rx_cq_size);
-
-       /* TX resources */
-       size = pnob->tx_q_len * sizeof(void **);
-       pnob->tx_ctxt = kzalloc(size, GFP_KERNEL);
-       if (pnob->tx_ctxt == NULL)
-               return -1;
-
-       /* RX resources */
-       size = pnob->rx_q_len * sizeof(void *);
-       pnob->rx_ctxt = kzalloc(size, GFP_KERNEL);
-       if (pnob->rx_ctxt == NULL)
-               return -1;
-
-       size = (pnob->rx_q_len * sizeof(struct be_rx_page_info));
-       pnob->rx_page_info = kzalloc(size, GFP_KERNEL);
-       if (pnob->rx_page_info == NULL)
-               return -1;
-
-       adapter->eth_statsp = kzalloc(sizeof(struct FWCMD_ETH_GET_STATISTICS),
-                               GFP_KERNEL);
-       if (adapter->eth_statsp == NULL)
-               return -1;
-       pnob->rx_buf_size = rxbuf_size;
-       return 0;
-}
-
-/*
-    This function initializes the be_net_object for subsequent
-    network operations.
-
-    Before calling this function, the driver  must have allocated
-    space for the NetObject structure, initialized the structure,
-    allocated DMAable memory for all the network queues that form
-    part of the NetObject and populated the start address (virtual)
-    and number of entries allocated for each queue in the NetObject structure.
-
-    The driver must also have allocated memory to hold the
-    mailbox structure (MCC_MAILBOX) and post the physical address,
-    virtual addresses and the size of the mailbox memory in the
-    NetObj.mb_rd.  This structure is used by BECLIB for
-    initial communication with the embedded MCC processor. BECLIB
-    uses the mailbox until MCC rings are created for  more  efficient
-    communication with the MCC processor.
-
-    If the driver wants to create multiple network interface for more
-    than one protection domain, it can call be_create_netobj()
-    multiple times  once for each protection domain.  A Maximum of
-    32 protection domains are supported.
-
-*/
-static int
-be_create_netobj(struct be_net_object *pnob, u8 __iomem *csr_va,
-       u8 __iomem *db_va, u8 __iomem *pci_va)
-{
-       int status = 0;
-       bool  eventable = false, tx_no_delay = false, rx_no_delay = false;
-       struct be_eq_object *eq_objectp = NULL;
-       struct be_function_object *pfob = &pnob->fn_obj;
-       struct ring_desc rd;
-       u32 set_rxbuf_size;
-       u32 tx_cmpl_wm = CEV_WMARK_96;  /* 0xffffffff to disable */
-       u32 rx_cmpl_wm = CEV_WMARK_160; /* 0xffffffff to disable */
-       u32 eq_delay = 0; /* delay in 8usec units. 0xffffffff to disable */
-
-       memset(&rd, 0, sizeof(struct ring_desc));
-
-       status = be_function_object_create(csr_va, db_va, pci_va,
-                       BE_FUNCTION_TYPE_NETWORK, &pnob->mb_rd, pfob);
-       if (status != BE_SUCCESS)
-               return status;
-       pnob->fn_obj_created = true;
-
-       if (tx_cmpl_wm == 0xffffffff)
-               tx_no_delay = true;
-       if (rx_cmpl_wm == 0xffffffff)
-               rx_no_delay = true;
-       /*
-        * now create the necessary rings
-        * Event Queue first.
-        */
-       if (pnob->event_q_len) {
-               rd.va = pnob->event_q;
-               rd.pa = pnob->event_q_bus;
-               rd.length = pnob->event_q_size;
-
-               status = be_eq_create(pfob, &rd, 4, pnob->event_q_len,
-                               (u32) -1,       /* CEV_WMARK_* or -1 */
-                               eq_delay,       /* in 8us units, or -1 */
-                               &pnob->event_q_obj);
-               if (status != BE_SUCCESS)
-                       goto error_ret;
-               pnob->event_q_id = pnob->event_q_obj.eq_id;
-               pnob->event_q_created = 1;
-               eventable = true;
-               eq_objectp = &pnob->event_q_obj;
-       }
-       /*
-        * Now Eth Tx Compl. queue.
-        */
-       if (pnob->txcq_len) {
-               rd.va = pnob->tx_cq;
-               rd.pa = pnob->tx_cq_bus;
-               rd.length = pnob->tx_cq_size;
-
-               status = be_cq_create(pfob, &rd,
-                       pnob->txcq_len * sizeof(struct ETH_TX_COMPL_AMAP),
-                       false,  /* solicted events,  */
-                       tx_no_delay,    /* nodelay  */
-                       tx_cmpl_wm,     /* Watermark encodings */
-                       eq_objectp, &pnob->tx_cq_obj);
-               if (status != BE_SUCCESS)
-                       goto error_ret;
-
-               pnob->tx_cq_id = pnob->tx_cq_obj.cq_id;
-               pnob->tx_cq_created = 1;
-       }
-       /*
-        * Eth Tx queue
-        */
-       if (pnob->tx_q_len) {
-               struct be_eth_sq_parameters ex_params = { 0 };
-               u32 type;
-
-               if (pnob->tx_q_port) {
-                       /* TXQ to be bound to a specific port */
-                       type = BE_ETH_TX_RING_TYPE_BOUND;
-                       ex_params.port = pnob->tx_q_port - 1;
-               } else
-                       type = BE_ETH_TX_RING_TYPE_STANDARD;
-
-               rd.va = pnob->tx_q;
-               rd.pa = pnob->tx_q_bus;
-               rd.length = pnob->tx_q_size;
-
-               status = be_eth_sq_create_ex(pfob, &rd,
-                               pnob->tx_q_len * sizeof(struct ETH_WRB_AMAP),
-                               type, 2, &pnob->tx_cq_obj,
-                               &ex_params, &pnob->tx_q_obj);
-
-               if (status != BE_SUCCESS)
-                       goto error_ret;
-
-               pnob->tx_q_id = pnob->tx_q_obj.bid;
-               pnob->tx_q_created = 1;
-       }
-       /*
-        * Now Eth Rx compl. queue.  Always needed.
-        */
-       rd.va = pnob->rx_cq;
-       rd.pa = pnob->rx_cq_bus;
-       rd.length = pnob->rx_cq_size;
-
-       status = be_cq_create(pfob, &rd,
-                       pnob->rx_cq_len * sizeof(struct ETH_RX_COMPL_AMAP),
-                       false,  /* solicted events,  */
-                       rx_no_delay,    /* nodelay  */
-                       rx_cmpl_wm,     /* Watermark encodings */
-                       eq_objectp, &pnob->rx_cq_obj);
-       if (status != BE_SUCCESS)
-               goto error_ret;
-
-       pnob->rx_cq_id = pnob->rx_cq_obj.cq_id;
-       pnob->rx_cq_created = 1;
-
-       status = be_eth_rq_set_frag_size(pfob, pnob->rx_buf_size,
-                       (u32 *) &set_rxbuf_size);
-       if (status != BE_SUCCESS) {
-               be_eth_rq_get_frag_size(pfob, (u32 *) &pnob->rx_buf_size);
-               if ((pnob->rx_buf_size != 2048) && (pnob->rx_buf_size != 4096)
-                   && (pnob->rx_buf_size != 8192))
-                       goto error_ret;
-       } else {
-               if (pnob->rx_buf_size != set_rxbuf_size)
-                       pnob->rx_buf_size = set_rxbuf_size;
-       }
-       /*
-        * Eth RX queue. be_eth_rq_create() always assumes 2 pages size
-        */
-       rd.va = pnob->rx_q;
-       rd.pa = pnob->rx_q_bus;
-       rd.length = pnob->rx_q_size;
-
-       status = be_eth_rq_create(pfob, &rd, &pnob->rx_cq_obj,
-                            &pnob->rx_cq_obj, &pnob->rx_q_obj);
-
-       if (status != BE_SUCCESS)
-               goto error_ret;
-
-       pnob->rx_q_id = pnob->rx_q_obj.rid;
-       pnob->rx_q_created = 1;
-
-       return BE_SUCCESS;      /* All required queues created. */
-
-error_ret:
-       be_destroy_netobj(pnob);
-       return status;
-}
-
-static int be_nob_ring_init(struct be_adapter *adapter,
-                               struct be_net_object *pnob)
-{
-       int status;
-
-       pnob->event_q_tl = 0;
-
-       pnob->tx_q_hd = 0;
-       pnob->tx_q_tl = 0;
-
-       pnob->tx_cq_tl = 0;
-
-       pnob->rx_cq_tl = 0;
-
-       memset(pnob->event_q, 0, pnob->event_q_size);
-       memset(pnob->tx_cq, 0, pnob->tx_cq_size);
-       memset(pnob->tx_ctxt, 0, pnob->tx_q_len * sizeof(void **));
-       memset(pnob->rx_ctxt, 0, pnob->rx_q_len * sizeof(void *));
-       pnob->rx_pg_info_hd = 0;
-       pnob->rx_q_hd = 0;
-       atomic_set(&pnob->rx_q_posted, 0);
-
-       status = be_create_netobj(pnob, adapter->csr_va, adapter->db_va,
-                               adapter->pci_va);
-       if (status != BE_SUCCESS)
-               return -1;
-
-       be_post_eth_rx_buffs(pnob);
-       return 0;
-}
-
-/* This function handles async callback for link status */
-static void
-be_link_status_async_callback(void *context, u32 event_code, void *event)
-{
-       struct ASYNC_EVENT_LINK_STATE_AMAP *link_status = event;
-       struct be_adapter *adapter = context;
-       bool link_enable = false;
-       struct be_net_object *pnob;
-       struct ASYNC_EVENT_TRAILER_AMAP *async_trailer;
-       struct net_device *netdev;
-       u32 async_event_code, async_event_type, active_port;
-       u32 port0_link_status, port1_link_status, port0_duplex, port1_duplex;
-       u32 port0_speed, port1_speed;
-
-       if (event_code != ASYNC_EVENT_CODE_LINK_STATE) {
-               /* Not our event to handle */
-               return;
-       }
-       async_trailer = (struct ASYNC_EVENT_TRAILER_AMAP *)
-           ((u8 *) event + sizeof(struct MCC_CQ_ENTRY_AMAP) -
-            sizeof(struct ASYNC_EVENT_TRAILER_AMAP));
-
-       async_event_code = AMAP_GET_BITS_PTR(ASYNC_EVENT_TRAILER, event_code,
-                                            async_trailer);
-       BUG_ON(async_event_code != ASYNC_EVENT_CODE_LINK_STATE);
-
-       pnob = adapter->net_obj;
-       netdev = pnob->netdev;
-
-       /* Determine if this event is a switch VLD or a physical link event */
-       async_event_type = AMAP_GET_BITS_PTR(ASYNC_EVENT_TRAILER, event_type,
-                                            async_trailer);
-       active_port = AMAP_GET_BITS_PTR(ASYNC_EVENT_LINK_STATE,
-                                       active_port, link_status);
-       port0_link_status = AMAP_GET_BITS_PTR(ASYNC_EVENT_LINK_STATE,
-                                             port0_link_status, link_status);
-       port1_link_status = AMAP_GET_BITS_PTR(ASYNC_EVENT_LINK_STATE,
-                                             port1_link_status, link_status);
-       port0_duplex = AMAP_GET_BITS_PTR(ASYNC_EVENT_LINK_STATE,
-                                        port0_duplex, link_status);
-       port1_duplex = AMAP_GET_BITS_PTR(ASYNC_EVENT_LINK_STATE,
-                                        port1_duplex, link_status);
-       port0_speed = AMAP_GET_BITS_PTR(ASYNC_EVENT_LINK_STATE,
-                                       port0_speed, link_status);
-       port1_speed = AMAP_GET_BITS_PTR(ASYNC_EVENT_LINK_STATE,
-                                       port1_speed, link_status);
-       if (async_event_type == NTWK_LINK_TYPE_VIRTUAL) {
-               adapter->be_stat.bes_link_change_virtual++;
-               if (adapter->be_link_sts->active_port != active_port) {
-                       dev_notice(&netdev->dev,
-                              "Active port changed due to VLD on switch\n");
-               } else {
-                       dev_notice(&netdev->dev, "Link status update\n");
-               }
-
-       } else {
-               adapter->be_stat.bes_link_change_physical++;
-               if (adapter->be_link_sts->active_port != active_port) {
-                       dev_notice(&netdev->dev,
-                              "Active port changed due to port link"
-                              " status change\n");
-               } else {
-                       dev_notice(&netdev->dev, "Link status update\n");
-               }
-       }
-
-       memset(adapter->be_link_sts, 0, sizeof(adapter->be_link_sts));
-
-       if ((port0_link_status == ASYNC_EVENT_LINK_UP) ||
-           (port1_link_status == ASYNC_EVENT_LINK_UP)) {
-               if ((adapter->port0_link_sts == BE_PORT_LINK_DOWN) &&
-                   (adapter->port1_link_sts == BE_PORT_LINK_DOWN)) {
-                       /* Earlier both the ports are down So link is up */
-                       link_enable = true;
-               }
-
-               if (port0_link_status == ASYNC_EVENT_LINK_UP) {
-                       adapter->port0_link_sts = BE_PORT_LINK_UP;
-                       adapter->be_link_sts->mac0_duplex = port0_duplex;
-                       adapter->be_link_sts->mac0_speed = port0_speed;
-                       if (active_port == NTWK_PORT_A)
-                               adapter->be_link_sts->active_port = 0;
-               } else
-                       adapter->port0_link_sts = BE_PORT_LINK_DOWN;
-
-               if (port1_link_status == ASYNC_EVENT_LINK_UP) {
-                       adapter->port1_link_sts = BE_PORT_LINK_UP;
-                       adapter->be_link_sts->mac1_duplex = port1_duplex;
-                       adapter->be_link_sts->mac1_speed = port1_speed;
-                       if (active_port == NTWK_PORT_B)
-                               adapter->be_link_sts->active_port = 1;
-               } else
-                       adapter->port1_link_sts = BE_PORT_LINK_DOWN;
-
-               printk(KERN_INFO "Link Properties for %s:\n", netdev->name);
-               dev_info(&netdev->dev, "Link Properties:\n");
-               be_print_link_info(adapter->be_link_sts);
-
-               if (!link_enable)
-                       return;
-               /*
-                * Both ports were down previously, but atleast one of
-                * them has come up if this netdevice's carrier is not up,
-                * then indicate to stack
-                */
-               if (!netif_carrier_ok(netdev)) {
-                       netif_start_queue(netdev);
-                       netif_carrier_on(netdev);
-               }
-               return;
-       }
-
-       /* Now both the ports are down. Tell the stack about it */
-       dev_info(&netdev->dev, "Both ports are down\n");
-       adapter->port0_link_sts = BE_PORT_LINK_DOWN;
-       adapter->port1_link_sts = BE_PORT_LINK_DOWN;
-       if (netif_carrier_ok(netdev)) {
-               netif_carrier_off(netdev);
-               netif_stop_queue(netdev);
-       }
-       return;
-}
-
-static int be_mcc_create(struct be_adapter *adapter)
-{
-       struct be_net_object *pnob;
-
-       pnob = adapter->net_obj;
-       /*
-        * Create the MCC ring so that all further communication with
-        * MCC can go thru the ring. we do this at the end since
-        * we do not want to be dealing with interrupts until the
-        * initialization is complete.
-        */
-       pnob->mcc_q_len = MCC_Q_LEN;
-       pnob->mcc_q_size = pnob->mcc_q_len * sizeof(struct MCC_WRB_AMAP);
-       pnob->mcc_q =  pci_alloc_consistent(adapter->pdev, pnob->mcc_q_size,
-                               &pnob->mcc_q_bus);
-       if (!pnob->mcc_q_bus)
-               return -1;
-       /*
-        * space for MCC WRB context
-        */
-       pnob->mcc_wrb_ctxtLen = MCC_Q_LEN;
-       pnob->mcc_wrb_ctxt_size =  pnob->mcc_wrb_ctxtLen *
-               sizeof(struct be_mcc_wrb_context);
-       pnob->mcc_wrb_ctxt = (void *)__get_free_pages(GFP_KERNEL,
-               get_order(pnob->mcc_wrb_ctxt_size));
-       if (pnob->mcc_wrb_ctxt == NULL)
-               return -1;
-       /*
-        * Space for MCC compl. ring
-        */
-       pnob->mcc_cq_len = MCC_CQ_LEN;
-       pnob->mcc_cq_size = pnob->mcc_cq_len * sizeof(struct MCC_CQ_ENTRY_AMAP);
-       pnob->mcc_cq = pci_alloc_consistent(adapter->pdev, pnob->mcc_cq_size,
-                               &pnob->mcc_cq_bus);
-       if (!pnob->mcc_cq_bus)
-               return -1;
-       return 0;
-}
-
-/*
-    This function creates the MCC request and completion ring required
-    for communicating with the ARM processor.  The caller must have
-    allocated required amount of memory for the MCC ring and MCC
-    completion ring and posted the virtual address and number of
-    entries in the corresponding members (mcc_q and mcc_cq) in the
-    NetObject struture.
-
-    When this call is completed, all further communication with
-    ARM will switch from mailbox to this ring.
-
-    pnob       - Pointer to the NetObject structure. This NetObject should
-                 have been created using a previous call to be_create_netobj()
-*/
-int be_create_mcc_rings(struct be_net_object *pnob)
-{
-       int status = 0;
-       struct ring_desc rd;
-       struct be_function_object *pfob = &pnob->fn_obj;
-
-       memset(&rd, 0, sizeof(struct ring_desc));
-       if (pnob->mcc_cq_len) {
-               rd.va = pnob->mcc_cq;
-               rd.pa = pnob->mcc_cq_bus;
-               rd.length = pnob->mcc_cq_size;
-
-               status = be_cq_create(pfob, &rd,
-                       pnob->mcc_cq_len * sizeof(struct MCC_CQ_ENTRY_AMAP),
-                       false,  /* solicted events,  */
-                       true,   /* nodelay  */
-                       0,      /* 0 Watermark since Nodelay is true */
-                       &pnob->event_q_obj,
-                       &pnob->mcc_cq_obj);
-
-               if (status != BE_SUCCESS)
-                       return status;
-
-               pnob->mcc_cq_id = pnob->mcc_cq_obj.cq_id;
-               pnob->mcc_cq_created = 1;
-       }
-       if (pnob->mcc_q_len) {
-               rd.va = pnob->mcc_q;
-               rd.pa = pnob->mcc_q_bus;
-               rd.length = pnob->mcc_q_size;
-
-               status = be_mcc_ring_create(pfob, &rd,
-                               pnob->mcc_q_len * sizeof(struct MCC_WRB_AMAP),
-                               pnob->mcc_wrb_ctxt, pnob->mcc_wrb_ctxtLen,
-                               &pnob->mcc_cq_obj, &pnob->mcc_q_obj);
-
-               if (status != BE_SUCCESS)
-                       return status;
-
-               pnob->mcc_q_created = 1;
-       }
-       return BE_SUCCESS;
-}
-
-static int be_mcc_init(struct be_adapter *adapter)
-{
-       u32 r;
-       struct be_net_object *pnob;
-
-       pnob = adapter->net_obj;
-       memset(pnob->mcc_q, 0, pnob->mcc_q_size);
-       pnob->mcc_q_hd = 0;
-
-       memset(pnob->mcc_wrb_ctxt, 0, pnob->mcc_wrb_ctxt_size);
-
-       memset(pnob->mcc_cq, 0, pnob->mcc_cq_size);
-       pnob->mcc_cq_tl = 0;
-
-       r = be_create_mcc_rings(adapter->net_obj);
-       if (r != BE_SUCCESS)
-               return -1;
-
-       return 0;
-}
-
-static void be_remove(struct pci_dev *pdev)
-{
-       struct be_net_object *pnob;
-       struct be_adapter *adapter;
-
-       adapter = pci_get_drvdata(pdev);
-       if (!adapter)
-               return;
-
-       pci_set_drvdata(pdev, NULL);
-       pnob = (struct be_net_object *)adapter->net_obj;
-
-       flush_scheduled_work();
-
-       if (pnob) {
-               /* Unregister async callback function for link status updates */
-               if (pnob->mcc_q_created)
-                       be_mcc_add_async_event_callback(&pnob->mcc_q_obj,
-                                                               NULL, NULL);
-               netobject_cleanup(adapter, pnob);
-       }
-
-       if (adapter->csr_va)
-               iounmap(adapter->csr_va);
-       if (adapter->db_va)
-               iounmap(adapter->db_va);
-       if (adapter->pci_va)
-               iounmap(adapter->pci_va);
-
-       pci_release_regions(adapter->pdev);
-       pci_disable_device(adapter->pdev);
-
-       kfree(adapter->be_link_sts);
-       kfree(adapter->eth_statsp);
-
-       if (adapter->timer_ctxt.get_stats_timer.function)
-               del_timer_sync(&adapter->timer_ctxt.get_stats_timer);
-       kfree(adapter);
-}
-
-/*
- * This function is called by the PCI sub-system when it finds a PCI
- * device with dev/vendor IDs that match with one of our devices.
- * All of the driver initialization is done in this function.
- */
-static int be_probe(struct pci_dev *pdev, const struct pci_device_id *pdev_id)
-{
-       int status = 0;
-       struct be_adapter *adapter;
-       struct FWCMD_COMMON_GET_FW_VERSION_RESPONSE_PAYLOAD get_fwv;
-       struct be_net_object *pnob;
-       struct net_device *netdev;
-
-       status = pci_enable_device(pdev);
-       if (status)
-               goto error;
-
-       status = pci_request_regions(pdev, be_driver_name);
-       if (status)
-               goto error_pci_req;
-
-       pci_set_master(pdev);
-       adapter = kzalloc(sizeof(struct be_adapter), GFP_KERNEL);
-       if (adapter == NULL) {
-               status = -ENOMEM;
-               goto error_adapter;
-       }
-       adapter->dev_state = BE_DEV_STATE_NONE;
-       adapter->pdev = pdev;
-       pci_set_drvdata(pdev, adapter);
-
-       adapter->enable_aic = 1;
-       adapter->max_eqd = MAX_EQD;
-       adapter->min_eqd = 0;
-       adapter->cur_eqd = 0;
-
-       status = pci_set_dma_mask(pdev, DMA_64BIT_MASK);
-       if (!status) {
-               adapter->dma_64bit_cap = true;
-       } else {
-               adapter->dma_64bit_cap = false;
-               status = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
-               if (status != 0) {
-                       printk(KERN_ERR "Could not set PCI DMA Mask\n");
-                       goto cleanup;
-               }
-       }
-
-       status = init_pci_be_function(adapter, pdev);
-       if (status != 0) {
-               printk(KERN_ERR "Failed to map PCI BARS\n");
-               status = -ENOMEM;
-               goto cleanup;
-       }
-
-       be_trace_set_level(DL_ALWAYS | DL_ERR);
-
-       adapter->be_link_sts = kmalloc(sizeof(struct BE_LINK_STATUS),
-                                       GFP_KERNEL);
-       if (adapter->be_link_sts == NULL) {
-               printk(KERN_ERR "Memory allocation for link status "
-                      "buffer failed\n");
-               goto cleanup;
-       }
-       spin_lock_init(&adapter->txq_lock);
-
-       netdev = alloc_etherdev(sizeof(struct be_net_object));
-       if (netdev == NULL) {
-               status = -ENOMEM;
-               goto cleanup;
-       }
-       pnob = netdev_priv(netdev);
-       adapter->net_obj = pnob;
-       adapter->netdevp = netdev;
-       pnob->adapter = adapter;
-       pnob->netdev = netdev;
-
-       status = be_nob_ring_alloc(adapter, pnob);
-       if (status != 0)
-               goto cleanup;
-
-       status = be_nob_ring_init(adapter, pnob);
-       if (status != 0)
-               goto cleanup;
-
-       be_rxf_mac_address_read_write(&pnob->fn_obj, false, false, false,
-               false, false, netdev->dev_addr, NULL, NULL);
-
-       netdev->init = &benet_init;
-       netif_carrier_off(netdev);
-       netif_stop_queue(netdev);
-
-       SET_NETDEV_DEV(netdev, &(adapter->pdev->dev));
-
-       netif_napi_add(netdev, &pnob->napi, be_poll, 64);
-
-       /* if the rx_frag size if 2K, one page is shared as two RX frags */
-       pnob->rx_pg_shared =
-               (pnob->rx_buf_size <= PAGE_SIZE / 2) ? true : false;
-       if (pnob->rx_buf_size != rxbuf_size) {
-               printk(KERN_WARNING
-                      "Could not set Rx buffer size to %d. Using %d\n",
-                                      rxbuf_size, pnob->rx_buf_size);
-               rxbuf_size = pnob->rx_buf_size;
-       }
-
-       tasklet_init(&(adapter->sts_handler), be_process_intr,
-                    (unsigned long)adapter);
-       adapter->tasklet_started = 1;
-       spin_lock_init(&(adapter->int_lock));
-
-       status = be_register_isr(adapter, pnob);
-       if (status != 0)
-               goto cleanup;
-
-       adapter->rx_csum = 1;
-       adapter->max_rx_coal = BE_LRO_MAX_PKTS;
-
-       memset(&get_fwv, 0,
-              sizeof(struct FWCMD_COMMON_GET_FW_VERSION_RESPONSE_PAYLOAD));
-       printk(KERN_INFO "BladeEngine Driver version:%s. "
-              "Copyright ServerEngines, Corporation 2005 - 2008\n",
-                              be_drvr_ver);
-       status = be_function_get_fw_version(&pnob->fn_obj, &get_fwv, NULL,
-                                           NULL);
-       if (status == BE_SUCCESS) {
-               strncpy(be_fw_ver, get_fwv.firmware_version_string, 32);
-               printk(KERN_INFO "BladeEngine Firmware Version:%s\n",
-                      get_fwv.firmware_version_string);
-       } else {
-               printk(KERN_WARNING "Unable to get BE Firmware Version\n");
-       }
-
-       sema_init(&adapter->get_eth_stat_sem, 0);
-       init_timer(&adapter->timer_ctxt.get_stats_timer);
-       atomic_set(&adapter->timer_ctxt.get_stat_flag, 0);
-       adapter->timer_ctxt.get_stats_timer.function =
-           &be_get_stats_timer_handler;
-
-       status = be_mcc_create(adapter);
-       if (status < 0)
-               goto cleanup;
-       status = be_mcc_init(adapter);
-       if (status < 0)
-               goto cleanup;
-
-
-       status = be_mcc_add_async_event_callback(&adapter->net_obj->mcc_q_obj,
-                        be_link_status_async_callback, (void *)adapter);
-       if (status != BE_SUCCESS) {
-               printk(KERN_WARNING "add_async_event_callback failed");
-               printk(KERN_WARNING
-                      "Link status changes may not be reflected\n");
-       }
-
-       status = register_netdev(netdev);
-       if (status != 0)
-               goto cleanup;
-       be_update_link_status(adapter);
-       adapter->dev_state = BE_DEV_STATE_INIT;
-       return 0;
-
-cleanup:
-       be_remove(pdev);
-       return status;
-error_adapter:
-       pci_release_regions(pdev);
-error_pci_req:
-       pci_disable_device(pdev);
-error:
-       printk(KERN_ERR "BladeEngine initalization failed\n");
-       return status;
-}
-
-/*
- * Get the current link status and print the status on console
- */
-void be_update_link_status(struct be_adapter *adapter)
-{
-       int status;
-       struct be_net_object *pnob = adapter->net_obj;
-
-       status = be_rxf_link_status(&pnob->fn_obj, adapter->be_link_sts, NULL,
-                       NULL, NULL);
-       if (status == BE_SUCCESS) {
-               if (adapter->be_link_sts->mac0_speed &&
-                   adapter->be_link_sts->mac0_duplex)
-                       adapter->port0_link_sts = BE_PORT_LINK_UP;
-               else
-                       adapter->port0_link_sts = BE_PORT_LINK_DOWN;
-
-               if (adapter->be_link_sts->mac1_speed &&
-                   adapter->be_link_sts->mac1_duplex)
-                       adapter->port1_link_sts = BE_PORT_LINK_UP;
-               else
-                       adapter->port1_link_sts = BE_PORT_LINK_DOWN;
-
-               dev_info(&pnob->netdev->dev, "Link Properties:\n");
-               be_print_link_info(adapter->be_link_sts);
-               return;
-       }
-       dev_info(&pnob->netdev->dev, "Could not get link status\n");
-       return;
-}
-
-
-#ifdef CONFIG_PM
-static void
-be_pm_cleanup(struct be_adapter *adapter,
-             struct be_net_object *pnob, struct net_device *netdev)
-{
-       netif_carrier_off(netdev);
-       netif_stop_queue(netdev);
-
-       be_wait_nic_tx_cmplx_cmpl(pnob);
-       be_disable_eq_intr(pnob);
-
-       if (adapter->tasklet_started) {
-               tasklet_kill(&adapter->sts_handler);
-               adapter->tasklet_started = 0;
-       }
-
-       be_unregister_isr(adapter);
-       be_disable_intr(pnob);
-
-       be_tx_q_clean(pnob);
-       be_rx_q_clean(pnob);
-
-       be_destroy_netobj(pnob);
-}
-
-static int be_suspend(struct pci_dev *pdev, pm_message_t state)
-{
-       struct be_adapter *adapter = pci_get_drvdata(pdev);
-       struct net_device *netdev =  adapter->netdevp;
-       struct be_net_object *pnob = netdev_priv(netdev);
-
-       adapter->dev_pm_state = adapter->dev_state;
-       adapter->dev_state = BE_DEV_STATE_SUSPEND;
-
-       netif_device_detach(netdev);
-       if (netif_running(netdev))
-               be_pm_cleanup(adapter, pnob, netdev);
-
-       pci_enable_wake(pdev, 3, 1);
-       pci_enable_wake(pdev, 4, 1);    /* D3 Cold = 4 */
-       pci_save_state(pdev);
-       pci_disable_device(pdev);
-       pci_set_power_state(pdev, pci_choose_state(pdev, state));
-       return 0;
-}
-
-static void be_up(struct be_adapter *adapter)
-{
-       struct be_net_object *pnob = adapter->net_obj;
-
-       if (pnob->num_vlans != 0)
-               be_rxf_vlan_config(&pnob->fn_obj, false, pnob->num_vlans,
-                       pnob->vlan_tag, NULL, NULL, NULL);
-
-}
-
-static int be_resume(struct pci_dev *pdev)
-{
-       int status = 0;
-       struct be_adapter *adapter = pci_get_drvdata(pdev);
-       struct net_device *netdev =  adapter->netdevp;
-       struct be_net_object *pnob = netdev_priv(netdev);
-
-       netif_device_detach(netdev);
-
-       status = pci_enable_device(pdev);
-       if (status)
-               return status;
-
-       pci_set_power_state(pdev, 0);
-       pci_restore_state(pdev);
-       pci_enable_wake(pdev, 3, 0);
-       pci_enable_wake(pdev, 4, 0);    /* 4 is D3 cold */
-
-       netif_carrier_on(netdev);
-       netif_start_queue(netdev);
-
-       if (netif_running(netdev)) {
-               be_rxf_mac_address_read_write(&pnob->fn_obj, false, false,
-                       false, true, false, netdev->dev_addr, NULL, NULL);
-
-               status = be_nob_ring_init(adapter, pnob);
-               if (status < 0)
-                       return status;
-
-               tasklet_init(&(adapter->sts_handler), be_process_intr,
-                            (unsigned long)adapter);
-               adapter->tasklet_started = 1;
-
-               if (be_register_isr(adapter, pnob) != 0) {
-                       printk(KERN_ERR "be_register_isr failed\n");
-                       return status;
-               }
-
-
-               status = be_mcc_init(adapter);
-               if (status < 0) {
-                       printk(KERN_ERR "be_mcc_init failed\n");
-                       return status;
-               }
-               be_update_link_status(adapter);
-               /*
-                * Register async call back function to handle link
-                * status updates
-                */
-               status = be_mcc_add_async_event_callback(
-                               &adapter->net_obj->mcc_q_obj,
-                               be_link_status_async_callback, (void *)adapter);
-               if (status != BE_SUCCESS) {
-                       printk(KERN_WARNING "add_async_event_callback failed");
-                       printk(KERN_WARNING
-                              "Link status changes may not be reflected\n");
-               }
-               be_enable_intr(pnob);
-               be_enable_eq_intr(pnob);
-               be_up(adapter);
-       }
-       netif_device_attach(netdev);
-       adapter->dev_state = adapter->dev_pm_state;
-       return 0;
-
-}
-
-#endif
-
-/* Wait until no more pending transmits  */
-void be_wait_nic_tx_cmplx_cmpl(struct be_net_object *pnob)
-{
-       int i;
-
-       /* Wait for 20us * 50000 (= 1s) and no more */
-       i = 0;
-       while ((pnob->tx_q_tl != pnob->tx_q_hd) && (i < 50000)) {
-               ++i;
-               udelay(20);
-       }
-
-       /* Check for no more pending transmits */
-       if (i >= 50000) {
-               printk(KERN_WARNING
-                      "Did not receive completions for all TX requests\n");
-       }
-}
-
-static struct pci_driver be_driver = {
-       .name = be_driver_name,
-       .id_table = be_device_id_table,
-       .probe = be_probe,
-#ifdef CONFIG_PM
-       .suspend = be_suspend,
-       .resume = be_resume,
-#endif
-       .remove = be_remove
-};
-
-/*
- * Module init entry point. Registers our our device and return.
- * Our probe will be called if the device is found.
- */
-static int __init be_init_module(void)
-{
-       int ret;
-
-       if (rxbuf_size != 8192 && rxbuf_size != 4096 && rxbuf_size != 2048) {
-               printk(KERN_WARNING
-                      "Unsupported receive buffer size (%d) requested\n",
-                      rxbuf_size);
-               printk(KERN_WARNING
-                      "Must be 2048, 4096 or 8192. Defaulting to 2048\n");
-               rxbuf_size = 2048;
-       }
-
-       ret = pci_register_driver(&be_driver);
-
-       return ret;
-}
-
-module_init(be_init_module);
-
-/*
- * be_exit_module - Driver Exit Cleanup Routine
- */
-static void __exit be_exit_module(void)
-{
-       pci_unregister_driver(&be_driver);
-}
-
-module_exit(be_exit_module);
diff --git a/drivers/staging/benet/be_int.c b/drivers/staging/benet/be_int.c
deleted file mode 100644 (file)
index cba95d0..0000000
+++ /dev/null
@@ -1,863 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-#include <linux/if_vlan.h>
-#include <linux/inet_lro.h>
-
-#include "benet.h"
-
-/* number of bytes of RX frame that are copied to skb->data */
-#define BE_HDR_LEN 64
-
-#define NETIF_RX(skb) netif_receive_skb(skb)
-#define VLAN_ACCEL_RX(skb, pnob, vt) \
-               vlan_hwaccel_rx(skb, pnob->vlan_grp, vt)
-
-/*
-    This function notifies BladeEngine of the number of completion
-    entries processed from the specified completion queue by writing
-    the number of popped entries to the door bell.
-
-    pnob       - Pointer to the NetObject structure
-    n          - Number of completion entries processed
-    cq_id      - Queue ID of the completion queue for which notification
-                       is being done.
-    re_arm     - 1  - rearm the completion ring to generate an event.
-               - 0  - dont rearm the completion ring to generate an event
-*/
-void be_notify_cmpl(struct be_net_object *pnob, int n, int cq_id, int re_arm)
-{
-       struct CQ_DB_AMAP cqdb;
-
-       cqdb.dw[0] = 0;
-       AMAP_SET_BITS_PTR(CQ_DB, qid, &cqdb, cq_id);
-       AMAP_SET_BITS_PTR(CQ_DB, rearm, &cqdb, re_arm);
-       AMAP_SET_BITS_PTR(CQ_DB, num_popped, &cqdb, n);
-       PD_WRITE(&pnob->fn_obj, cq_db, cqdb.dw[0]);
-}
-
-/*
- * adds additional receive frags indicated by BE starting from given
- * frag index (fi) to specified skb's frag list
- */
-static void
-add_skb_frags(struct be_net_object *pnob, struct sk_buff *skb,
-             u32 nresid, u32 fi)
-{
-       struct be_adapter *adapter = pnob->adapter;
-       u32 sk_frag_idx, n;
-       struct be_rx_page_info *rx_page_info;
-       u32 frag_sz = pnob->rx_buf_size;
-
-       sk_frag_idx = skb_shinfo(skb)->nr_frags;
-       while (nresid) {
-               index_inc(&fi, pnob->rx_q_len);
-
-               rx_page_info = (struct be_rx_page_info *)pnob->rx_ctxt[fi];
-               pnob->rx_ctxt[fi] = NULL;
-               if ((rx_page_info->page_offset) ||
-                   (pnob->rx_pg_shared == false)) {
-                       pci_unmap_page(adapter->pdev,
-                                      pci_unmap_addr(rx_page_info, bus),
-                                      frag_sz, PCI_DMA_FROMDEVICE);
-               }
-
-               n = min(nresid, frag_sz);
-               skb_shinfo(skb)->frags[sk_frag_idx].page = rx_page_info->page;
-               skb_shinfo(skb)->frags[sk_frag_idx].page_offset
-                   = rx_page_info->page_offset;
-               skb_shinfo(skb)->frags[sk_frag_idx].size = n;
-
-               sk_frag_idx++;
-               skb->len += n;
-               skb->data_len += n;
-               skb_shinfo(skb)->nr_frags++;
-               nresid -= n;
-
-               memset(rx_page_info, 0, sizeof(struct be_rx_page_info));
-               atomic_dec(&pnob->rx_q_posted);
-       }
-}
-
-/*
- * This function processes incoming nic packets over various Rx queues.
- * This function takes the adapter, the current Rx status descriptor
- * entry and the Rx completion queue ID as argument.
- */
-static inline int process_nic_rx_completion(struct be_net_object *pnob,
-                                           struct ETH_RX_COMPL_AMAP *rxcp)
-{
-       struct be_adapter *adapter = pnob->adapter;
-       struct sk_buff *skb;
-       int udpcksm, tcpcksm;
-       int n;
-       u32 nresid, fi;
-       u32 frag_sz = pnob->rx_buf_size;
-       u8 *va;
-       struct be_rx_page_info *rx_page_info;
-       u32 numfrags, vtp, vtm, vlan_tag, pktsize;
-
-       fi = AMAP_GET_BITS_PTR(ETH_RX_COMPL, fragndx, rxcp);
-       BUG_ON(fi >= (int)pnob->rx_q_len);
-       BUG_ON(fi < 0);
-
-       rx_page_info = (struct be_rx_page_info *)pnob->rx_ctxt[fi];
-       BUG_ON(!rx_page_info->page);
-       pnob->rx_ctxt[fi] = NULL;
-
-       /*
-        * If one page is used per fragment or if this is the second half of
-        *  of the page, unmap the page here
-        */
-       if ((rx_page_info->page_offset) || (pnob->rx_pg_shared == false)) {
-               pci_unmap_page(adapter->pdev,
-                              pci_unmap_addr(rx_page_info, bus), frag_sz,
-                              PCI_DMA_FROMDEVICE);
-       }
-
-       atomic_dec(&pnob->rx_q_posted);
-       udpcksm = AMAP_GET_BITS_PTR(ETH_RX_COMPL, udpcksm, rxcp);
-       tcpcksm = AMAP_GET_BITS_PTR(ETH_RX_COMPL, tcpcksm, rxcp);
-       pktsize = AMAP_GET_BITS_PTR(ETH_RX_COMPL, pktsize, rxcp);
-       /*
-        * get rid of RX flush completions first.
-        */
-       if ((tcpcksm) && (udpcksm) && (pktsize == 32)) {
-               put_page(rx_page_info->page);
-               memset(rx_page_info, 0, sizeof(struct be_rx_page_info));
-               return 0;
-       }
-       skb = netdev_alloc_skb(pnob->netdev, BE_HDR_LEN + NET_IP_ALIGN);
-       if (skb == NULL) {
-               dev_info(&pnob->netdev->dev, "alloc_skb() failed\n");
-               put_page(rx_page_info->page);
-               memset(rx_page_info, 0, sizeof(struct be_rx_page_info));
-               goto free_frags;
-       }
-       skb_reserve(skb, NET_IP_ALIGN);
-
-       skb->dev = pnob->netdev;
-
-       n = min(pktsize, frag_sz);
-
-       va = page_address(rx_page_info->page) + rx_page_info->page_offset;
-       prefetch(va);
-
-       skb->len = n;
-       skb->data_len = n;
-       if (n <= BE_HDR_LEN) {
-               memcpy(skb->data, va, n);
-               put_page(rx_page_info->page);
-               skb->data_len -= n;
-               skb->tail += n;
-       } else {
-
-               /* Setup the SKB with page buffer information */
-               skb_shinfo(skb)->frags[0].page = rx_page_info->page;
-               skb_shinfo(skb)->nr_frags++;
-
-               /* Copy the header into the skb_data */
-               memcpy(skb->data, va, BE_HDR_LEN);
-               skb_shinfo(skb)->frags[0].page_offset =
-                   rx_page_info->page_offset + BE_HDR_LEN;
-               skb_shinfo(skb)->frags[0].size = n - BE_HDR_LEN;
-               skb->data_len -= BE_HDR_LEN;
-               skb->tail += BE_HDR_LEN;
-       }
-       memset(rx_page_info, 0, sizeof(struct be_rx_page_info));
-       nresid = pktsize - n;
-
-       skb->protocol = eth_type_trans(skb, pnob->netdev);
-
-       if ((tcpcksm || udpcksm) && adapter->rx_csum)
-               skb->ip_summed = CHECKSUM_UNNECESSARY;
-       else
-               skb->ip_summed = CHECKSUM_NONE;
-       /*
-        * if we have more bytes left, the frame has been
-        * given to us in multiple fragments.  This happens
-        * with Jumbo frames. Add the remaining fragments to
-        * skb->frags[] array.
-        */
-       if (nresid)
-               add_skb_frags(pnob, skb, nresid, fi);
-
-       /* update the the true size of the skb. */
-       skb->truesize = skb->len + sizeof(struct sk_buff);
-
-       /*
-        * If a 802.3 frame or 802.2 LLC frame
-        * (i.e) contains length field in MAC Hdr
-        * and frame len is greater than 64 bytes
-        */
-       if (((skb->protocol == ntohs(ETH_P_802_2)) ||
-            (skb->protocol == ntohs(ETH_P_802_3)))
-           && (pktsize > BE_HDR_LEN)) {
-               /*
-                * If the length given in Mac Hdr is less than frame size
-                * Erraneous frame, Drop it
-                */
-               if ((ntohs(*(u16 *) (va + 12)) + ETH_HLEN) < pktsize) {
-                       /* Increment Non Ether type II frames dropped */
-                       adapter->be_stat.bes_802_3_dropped_frames++;
-
-                       kfree_skb(skb);
-                       return 0;
-               }
-               /*
-                * else if the length given in Mac Hdr is greater than
-                * frame size, should not be seeing this sort of frames
-                * dump the pkt and pass to stack
-                */
-               else if ((ntohs(*(u16 *) (va + 12)) + ETH_HLEN) > pktsize) {
-                       /* Increment Non Ether type II frames malformed */
-                       adapter->be_stat.bes_802_3_malformed_frames++;
-               }
-       }
-
-       vtp = AMAP_GET_BITS_PTR(ETH_RX_COMPL, vtp, rxcp);
-       vtm = AMAP_GET_BITS_PTR(ETH_RX_COMPL, vtm, rxcp);
-       if (vtp && vtm) {
-               /* Vlan tag present in pkt and BE found
-                * that the tag matched an entry in VLAN table
-                */
-               if (!pnob->vlan_grp || pnob->num_vlans == 0) {
-                       /* But we have no VLANs configured.
-                        * This should never happen.  Drop the packet.
-                        */
-                       dev_info(&pnob->netdev->dev,
-                              "BladeEngine: Unexpected vlan tagged packet\n");
-                       kfree_skb(skb);
-                       return 0;
-               }
-               /* pass the VLAN packet to stack */
-               vlan_tag = AMAP_GET_BITS_PTR(ETH_RX_COMPL, vlan_tag, rxcp);
-               VLAN_ACCEL_RX(skb, pnob, be16_to_cpu(vlan_tag));
-
-       } else {
-               NETIF_RX(skb);
-       }
-       return 0;
-
-free_frags:
-       /* free all frags associated with the current rxcp */
-       numfrags = AMAP_GET_BITS_PTR(ETH_RX_COMPL, numfrags, rxcp);
-       while (numfrags-- > 1) {
-               index_inc(&fi, pnob->rx_q_len);
-
-               rx_page_info = (struct be_rx_page_info *)
-                   pnob->rx_ctxt[fi];
-               pnob->rx_ctxt[fi] = (void *)NULL;
-               if (rx_page_info->page_offset || !pnob->rx_pg_shared) {
-                       pci_unmap_page(adapter->pdev,
-                                      pci_unmap_addr(rx_page_info, bus),
-                                      frag_sz, PCI_DMA_FROMDEVICE);
-               }
-
-               put_page(rx_page_info->page);
-               memset(rx_page_info, 0, sizeof(struct be_rx_page_info));
-               atomic_dec(&pnob->rx_q_posted);
-       }
-       return -ENOMEM;
-}
-
-static void process_nic_rx_completion_lro(struct be_net_object *pnob,
-                                         struct ETH_RX_COMPL_AMAP *rxcp)
-{
-       struct be_adapter *adapter = pnob->adapter;
-       struct skb_frag_struct rx_frags[BE_MAX_FRAGS_PER_FRAME];
-       unsigned int udpcksm, tcpcksm;
-       u32 numfrags, vlanf, vtm, vlan_tag, nresid;
-       u16 vlant;
-       unsigned int fi, idx, n;
-       struct be_rx_page_info *rx_page_info;
-       u32 frag_sz = pnob->rx_buf_size, pktsize;
-       bool rx_coal = (adapter->max_rx_coal <= 1) ? 0 : 1;
-       u8 err, *va;
-       __wsum csum = 0;
-
-       if (AMAP_GET_BITS_PTR(ETH_RX_COMPL, ipsec, rxcp)) {
-               /*  Drop the pkt and move to the next completion.  */
-               adapter->be_stat.bes_rx_misc_pkts++;
-               return;
-       }
-       err = AMAP_GET_BITS_PTR(ETH_RX_COMPL, err, rxcp);
-       if (err || !rx_coal) {
-               /* We won't coalesce Rx pkts if the err bit set.
-                * take the path of normal completion processing */
-               process_nic_rx_completion(pnob, rxcp);
-               return;
-       }
-
-       fi = AMAP_GET_BITS_PTR(ETH_RX_COMPL, fragndx, rxcp);
-       BUG_ON(fi >= (int)pnob->rx_q_len);
-       BUG_ON(fi < 0);
-       rx_page_info = (struct be_rx_page_info *)pnob->rx_ctxt[fi];
-       BUG_ON(!rx_page_info->page);
-       pnob->rx_ctxt[fi] = (void *)NULL;
-       /*  If one page is used per fragment or if this is the
-        * second half of the page, unmap the page here
-        */
-       if (rx_page_info->page_offset || !pnob->rx_pg_shared) {
-               pci_unmap_page(adapter->pdev,
-                              pci_unmap_addr(rx_page_info, bus),
-                              frag_sz, PCI_DMA_FROMDEVICE);
-       }
-
-       numfrags = AMAP_GET_BITS_PTR(ETH_RX_COMPL, numfrags, rxcp);
-       udpcksm = AMAP_GET_BITS_PTR(ETH_RX_COMPL, udpcksm, rxcp);
-       tcpcksm = AMAP_GET_BITS_PTR(ETH_RX_COMPL, tcpcksm, rxcp);
-       vlan_tag = AMAP_GET_BITS_PTR(ETH_RX_COMPL, vlan_tag, rxcp);
-       vlant = be16_to_cpu(vlan_tag);
-       vlanf = AMAP_GET_BITS_PTR(ETH_RX_COMPL, vtp, rxcp);
-       vtm = AMAP_GET_BITS_PTR(ETH_RX_COMPL, vtm, rxcp);
-       pktsize = AMAP_GET_BITS_PTR(ETH_RX_COMPL, pktsize, rxcp);
-
-       atomic_dec(&pnob->rx_q_posted);
-
-       if (tcpcksm && udpcksm && pktsize == 32) {
-               /* flush completion entries */
-               put_page(rx_page_info->page);
-               memset(rx_page_info, 0, sizeof(struct be_rx_page_info));
-               return;
-       }
-       /* Only one of udpcksum and tcpcksum can be set */
-       BUG_ON(udpcksm && tcpcksm);
-
-       /* jumbo frames could come in multiple fragments */
-       BUG_ON(numfrags != ((pktsize + (frag_sz - 1)) / frag_sz));
-       n = min(pktsize, frag_sz);
-       nresid = pktsize - n;   /* will be useful for jumbo pkts */
-       idx = 0;
-
-       va = page_address(rx_page_info->page) + rx_page_info->page_offset;
-       prefetch(va);
-       rx_frags[idx].page = rx_page_info->page;
-       rx_frags[idx].page_offset = (rx_page_info->page_offset);
-       rx_frags[idx].size = n;
-       memset(rx_page_info, 0, sizeof(struct be_rx_page_info));
-
-       /* If we got multiple fragments, we have more data. */
-       while (nresid) {
-               idx++;
-               index_inc(&fi, pnob->rx_q_len);
-
-               rx_page_info = (struct be_rx_page_info *)pnob->rx_ctxt[fi];
-               pnob->rx_ctxt[fi] = (void *)NULL;
-               if (rx_page_info->page_offset || !pnob->rx_pg_shared) {
-                       pci_unmap_page(adapter->pdev,
-                                      pci_unmap_addr(rx_page_info, bus),
-                                      frag_sz, PCI_DMA_FROMDEVICE);
-               }
-
-               n = min(nresid, frag_sz);
-               rx_frags[idx].page = rx_page_info->page;
-               rx_frags[idx].page_offset = (rx_page_info->page_offset);
-               rx_frags[idx].size = n;
-
-               nresid -= n;
-               memset(rx_page_info, 0, sizeof(struct be_rx_page_info));
-               atomic_dec(&pnob->rx_q_posted);
-       }
-
-       if (likely(!(vlanf && vtm))) {
-               lro_receive_frags(&pnob->lro_mgr, rx_frags,
-                                 pktsize, pktsize,
-                                 (void *)(unsigned long)csum, csum);
-       } else {
-               /* Vlan tag present in pkt and BE found
-                * that the tag matched an entry in VLAN table
-                */
-               if (unlikely(!pnob->vlan_grp || pnob->num_vlans == 0)) {
-                       /* But we have no VLANs configured.
-                        * This should never happen.  Drop the packet.
-                        */
-                       dev_info(&pnob->netdev->dev,
-                              "BladeEngine: Unexpected vlan tagged packet\n");
-                       return;
-               }
-               /* pass the VLAN packet to stack */
-               lro_vlan_hwaccel_receive_frags(&pnob->lro_mgr,
-                                              rx_frags, pktsize, pktsize,
-                                              pnob->vlan_grp, vlant,
-                                              (void *)(unsigned long)csum,
-                                              csum);
-       }
-
-       adapter->be_stat.bes_rx_coal++;
-}
-
-struct ETH_RX_COMPL_AMAP *be_get_rx_cmpl(struct be_net_object *pnob)
-{
-       struct ETH_RX_COMPL_AMAP *rxcp = &pnob->rx_cq[pnob->rx_cq_tl];
-       u32 valid, ct;
-
-       valid = AMAP_GET_BITS_PTR(ETH_RX_COMPL, valid, rxcp);
-       if (valid == 0)
-               return NULL;
-
-       ct = AMAP_GET_BITS_PTR(ETH_RX_COMPL, ct, rxcp);
-       if (ct != 0) {
-               /* Invalid chute #. treat as error */
-               AMAP_SET_BITS_PTR(ETH_RX_COMPL, err, rxcp, 1);
-       }
-
-       be_adv_rxcq_tl(pnob);
-       AMAP_SET_BITS_PTR(ETH_RX_COMPL, valid, rxcp, 0);
-       return rxcp;
-}
-
-static void update_rx_rate(struct be_adapter *adapter)
-{
-       /* update the rate once in two seconds */
-       if ((jiffies - adapter->eth_rx_jiffies) > 2 * (HZ)) {
-               u32 r;
-               r = adapter->eth_rx_bytes /
-                   ((jiffies - adapter->eth_rx_jiffies) / (HZ));
-               r = (r / 1000000);      /* MB/Sec */
-
-               /* Mega Bits/Sec */
-               adapter->be_stat.bes_eth_rx_rate = (r * 8);
-               adapter->eth_rx_jiffies = jiffies;
-               adapter->eth_rx_bytes = 0;
-       }
-}
-
-static int process_rx_completions(struct be_net_object *pnob, int max_work)
-{
-       struct be_adapter *adapter = pnob->adapter;
-       struct ETH_RX_COMPL_AMAP *rxcp;
-       u32 nc = 0;
-       unsigned int pktsize;
-
-       while (max_work && (rxcp = be_get_rx_cmpl(pnob))) {
-               prefetch(rxcp);
-               pktsize = AMAP_GET_BITS_PTR(ETH_RX_COMPL, pktsize, rxcp);
-               process_nic_rx_completion_lro(pnob, rxcp);
-               adapter->eth_rx_bytes += pktsize;
-               update_rx_rate(adapter);
-               nc++;
-               max_work--;
-               adapter->be_stat.bes_rx_compl++;
-       }
-       if (likely(adapter->max_rx_coal > 1)) {
-               adapter->be_stat.bes_rx_flush++;
-               lro_flush_all(&pnob->lro_mgr);
-       }
-
-       /* Refill the queue */
-       if (atomic_read(&pnob->rx_q_posted) < 900)
-               be_post_eth_rx_buffs(pnob);
-
-       return nc;
-}
-
-static struct ETH_TX_COMPL_AMAP *be_get_tx_cmpl(struct be_net_object *pnob)
-{
-       struct ETH_TX_COMPL_AMAP *txcp = &pnob->tx_cq[pnob->tx_cq_tl];
-       u32 valid;
-
-       valid = AMAP_GET_BITS_PTR(ETH_TX_COMPL, valid, txcp);
-       if (valid == 0)
-               return NULL;
-
-       AMAP_SET_BITS_PTR(ETH_TX_COMPL, valid, txcp, 0);
-       be_adv_txcq_tl(pnob);
-       return txcp;
-
-}
-
-void process_one_tx_compl(struct be_net_object *pnob, u32 end_idx)
-{
-       struct be_adapter *adapter = pnob->adapter;
-       int cur_index, tx_wrbs_completed = 0;
-       struct sk_buff *skb;
-       u64 busaddr, pa, pa_lo, pa_hi;
-       struct ETH_WRB_AMAP *wrb;
-       u32 frag_len, last_index, j;
-
-       last_index = tx_compl_lastwrb_idx_get(pnob);
-       BUG_ON(last_index != end_idx);
-       pnob->tx_ctxt[pnob->tx_q_tl] = NULL;
-       do {
-               cur_index = pnob->tx_q_tl;
-               wrb = &pnob->tx_q[cur_index];
-               pa_hi = AMAP_GET_BITS_PTR(ETH_WRB, frag_pa_hi, wrb);
-               pa_lo = AMAP_GET_BITS_PTR(ETH_WRB, frag_pa_lo, wrb);
-               frag_len = AMAP_GET_BITS_PTR(ETH_WRB, frag_len, wrb);
-               busaddr = (pa_hi << 32) | pa_lo;
-               if (busaddr != 0) {
-                       pa = le64_to_cpu(busaddr);
-                       pci_unmap_single(adapter->pdev, pa,
-                                        frag_len, PCI_DMA_TODEVICE);
-               }
-               if (cur_index == last_index) {
-                       skb = (struct sk_buff *)pnob->tx_ctxt[cur_index];
-                       BUG_ON(!skb);
-                       for (j = 0; j < skb_shinfo(skb)->nr_frags; j++) {
-                               struct skb_frag_struct *frag;
-                               frag = &skb_shinfo(skb)->frags[j];
-                               pci_unmap_page(adapter->pdev,
-                                              (ulong) frag->page, frag->size,
-                                              PCI_DMA_TODEVICE);
-                       }
-                       kfree_skb(skb);
-                       pnob->tx_ctxt[cur_index] = NULL;
-               } else {
-                       BUG_ON(pnob->tx_ctxt[cur_index]);
-               }
-               tx_wrbs_completed++;
-               be_adv_txq_tl(pnob);
-       } while (cur_index != last_index);
-       atomic_sub(tx_wrbs_completed, &pnob->tx_q_used);
-}
-
-/* there is no need to take an SMP lock here since currently
- * we have only one instance of the tasklet that does completion
- * processing.
- */
-static void process_nic_tx_completions(struct be_net_object *pnob)
-{
-       struct be_adapter *adapter = pnob->adapter;
-       struct ETH_TX_COMPL_AMAP *txcp;
-       struct net_device *netdev = pnob->netdev;
-       u32 end_idx, num_processed = 0;
-
-       adapter->be_stat.bes_tx_events++;
-
-       while ((txcp = be_get_tx_cmpl(pnob))) {
-               end_idx = AMAP_GET_BITS_PTR(ETH_TX_COMPL, wrb_index, txcp);
-               process_one_tx_compl(pnob, end_idx);
-               num_processed++;
-               adapter->be_stat.bes_tx_compl++;
-       }
-       be_notify_cmpl(pnob, num_processed, pnob->tx_cq_id, 1);
-       /*
-        * We got Tx completions and have usable WRBs.
-        * If the netdev's queue has been stopped
-        * because we had run out of WRBs, wake it now.
-        */
-       spin_lock(&adapter->txq_lock);
-       if (netif_queue_stopped(netdev)
-           && atomic_read(&pnob->tx_q_used) < pnob->tx_q_len / 2) {
-               netif_wake_queue(netdev);
-       }
-       spin_unlock(&adapter->txq_lock);
-}
-
-static u32 post_rx_buffs(struct be_net_object *pnob, struct list_head *rxbl)
-{
-       u32 nposted = 0;
-       struct ETH_RX_D_AMAP *rxd = NULL;
-       struct be_recv_buffer *rxbp;
-       void **rx_ctxp;
-       struct RQ_DB_AMAP rqdb;
-
-       rx_ctxp = pnob->rx_ctxt;
-
-       while (!list_empty(rxbl) &&
-              (rx_ctxp[pnob->rx_q_hd] == NULL) && nposted < 255) {
-
-               rxbp = list_first_entry(rxbl, struct be_recv_buffer, rxb_list);
-               list_del(&rxbp->rxb_list);
-               rxd = pnob->rx_q + pnob->rx_q_hd;
-               AMAP_SET_BITS_PTR(ETH_RX_D, fragpa_lo, rxd, rxbp->rxb_pa_lo);
-               AMAP_SET_BITS_PTR(ETH_RX_D, fragpa_hi, rxd, rxbp->rxb_pa_hi);
-
-               rx_ctxp[pnob->rx_q_hd] = rxbp->rxb_ctxt;
-               be_adv_rxq_hd(pnob);
-               nposted++;
-       }
-
-       if (nposted) {
-               /* Now press the door bell to notify BladeEngine. */
-               rqdb.dw[0] = 0;
-               AMAP_SET_BITS_PTR(RQ_DB, numPosted, &rqdb, nposted);
-               AMAP_SET_BITS_PTR(RQ_DB, rq, &rqdb, pnob->rx_q_id);
-               PD_WRITE(&pnob->fn_obj, erx_rq_db, rqdb.dw[0]);
-       }
-       atomic_add(nposted, &pnob->rx_q_posted);
-       return nposted;
-}
-
-void be_post_eth_rx_buffs(struct be_net_object *pnob)
-{
-       struct be_adapter *adapter = pnob->adapter;
-       u32 num_bufs, r;
-       u64 busaddr = 0, tmp_pa;
-       u32 max_bufs, pg_hd;
-       u32 frag_size;
-       struct be_recv_buffer *rxbp;
-       struct list_head rxbl;
-       struct be_rx_page_info *rx_page_info;
-       struct page *page = NULL;
-       u32 page_order = 0;
-       gfp_t alloc_flags = GFP_ATOMIC;
-
-       BUG_ON(!adapter);
-
-       max_bufs = 64;          /* should be even # <= 255. */
-
-       frag_size = pnob->rx_buf_size;
-       page_order = get_order(frag_size);
-
-       if (frag_size == 8192)
-               alloc_flags |= (gfp_t) __GFP_COMP;
-       /*
-        * Form a linked list of RECV_BUFFFER structure to be be posted.
-        * We will post even number of buffer so that pages can be
-        * shared.
-        */
-       INIT_LIST_HEAD(&rxbl);
-
-       for (num_bufs = 0; num_bufs < max_bufs &&
-               !pnob->rx_page_info[pnob->rx_pg_info_hd].page; ++num_bufs) {
-
-               rxbp = &pnob->eth_rx_bufs[num_bufs];
-               pg_hd = pnob->rx_pg_info_hd;
-               rx_page_info = &pnob->rx_page_info[pg_hd];
-
-               if (!page) {
-                       page = alloc_pages(alloc_flags, page_order);
-                       if (unlikely(page == NULL)) {
-                               adapter->be_stat.bes_ethrx_post_fail++;
-                               pnob->rxbuf_post_fail++;
-                               break;
-                       }
-                       pnob->rxbuf_post_fail = 0;
-                       busaddr = pci_map_page(adapter->pdev, page, 0,
-                                              frag_size, PCI_DMA_FROMDEVICE);
-                       rx_page_info->page_offset = 0;
-                       rx_page_info->page = page;
-                       /*
-                        * If we are sharing a page among two skbs,
-                        * alloc a new one on the next iteration
-                        */
-                       if (pnob->rx_pg_shared == false)
-                               page = NULL;
-               } else {
-                       get_page(page);
-                       rx_page_info->page_offset += frag_size;
-                       rx_page_info->page = page;
-                       /*
-                        * We are finished with the alloced page,
-                        * Alloc a new one on the next iteration
-                        */
-                       page = NULL;
-               }
-               rxbp->rxb_ctxt = (void *)rx_page_info;
-               index_inc(&pnob->rx_pg_info_hd, pnob->rx_q_len);
-
-               pci_unmap_addr_set(rx_page_info, bus, busaddr);
-               tmp_pa = busaddr + rx_page_info->page_offset;
-               rxbp->rxb_pa_lo = (tmp_pa & 0xFFFFFFFF);
-               rxbp->rxb_pa_hi = (tmp_pa >> 32);
-               rxbp->rxb_len = frag_size;
-               list_add_tail(&rxbp->rxb_list, &rxbl);
-       }                       /* End of for */
-
-       r = post_rx_buffs(pnob, &rxbl);
-       BUG_ON(r != num_bufs);
-       return;
-}
-
-/*
- * Interrupt service for network function.  We just schedule the
- * tasklet which does all completion processing.
- */
-irqreturn_t be_int(int irq, void *dev)
-{
-       struct net_device *netdev = dev;
-       struct be_net_object *pnob = netdev_priv(netdev);
-       struct be_adapter *adapter = pnob->adapter;
-       u32 isr;
-
-       isr = CSR_READ(&pnob->fn_obj, cev.isr1);
-       if (unlikely(!isr))
-               return IRQ_NONE;
-
-       spin_lock(&adapter->int_lock);
-       adapter->isr |= isr;
-       spin_unlock(&adapter->int_lock);
-
-       adapter->be_stat.bes_ints++;
-
-       tasklet_schedule(&adapter->sts_handler);
-       return IRQ_HANDLED;
-}
-
-/*
- * Poll function called by NAPI with a work budget.
- * We process as many UC. BC and MC receive completions
- * as the budget allows and return the actual number of
- * RX ststutses processed.
- */
-int be_poll(struct napi_struct *napi, int budget)
-{
-       struct be_net_object *pnob =
-                       container_of(napi, struct be_net_object, napi);
-       u32 work_done;
-
-       pnob->adapter->be_stat.bes_polls++;
-       work_done = process_rx_completions(pnob, budget);
-       BUG_ON(work_done > budget);
-
-       /* All consumed */
-       if (work_done < budget) {
-               netif_rx_complete(napi);
-               /* enable intr */
-               be_notify_cmpl(pnob, work_done, pnob->rx_cq_id, 1);
-       } else {
-               /* More to be consumed; continue with interrupts disabled */
-               be_notify_cmpl(pnob, work_done, pnob->rx_cq_id, 0);
-       }
-       return work_done;
-}
-
-static struct EQ_ENTRY_AMAP *get_event(struct be_net_object *pnob)
-{
-       struct EQ_ENTRY_AMAP *eqp = &(pnob->event_q[pnob->event_q_tl]);
-       if (!AMAP_GET_BITS_PTR(EQ_ENTRY, Valid, eqp))
-               return NULL;
-       be_adv_eq_tl(pnob);
-       return eqp;
-}
-
-/*
- * Processes all valid events in the event ring associated with given
- * NetObject.  Also, notifies BE the number of events processed.
- */
-static inline u32 process_events(struct be_net_object *pnob)
-{
-       struct be_adapter *adapter = pnob->adapter;
-       struct EQ_ENTRY_AMAP *eqp;
-       u32 rid, num_events = 0;
-       struct net_device *netdev = pnob->netdev;
-
-       while ((eqp = get_event(pnob)) != NULL) {
-               adapter->be_stat.bes_events++;
-               rid = AMAP_GET_BITS_PTR(EQ_ENTRY, ResourceID, eqp);
-               if (rid == pnob->rx_cq_id) {
-                       adapter->be_stat.bes_rx_events++;
-                       netif_rx_schedule(&pnob->napi);
-               } else if (rid == pnob->tx_cq_id) {
-                       process_nic_tx_completions(pnob);
-               } else if (rid == pnob->mcc_cq_id) {
-                       be_mcc_process_cq(&pnob->mcc_q_obj, 1);
-               } else {
-                       dev_info(&netdev->dev,
-                                       "Invalid EQ ResourceID %d\n", rid);
-               }
-               AMAP_SET_BITS_PTR(EQ_ENTRY, Valid, eqp, 0);
-               AMAP_SET_BITS_PTR(EQ_ENTRY, ResourceID, eqp, 0);
-               num_events++;
-       }
-       return num_events;
-}
-
-static void update_eqd(struct be_adapter *adapter, struct be_net_object *pnob)
-{
-       int status;
-       struct be_eq_object *eq_objectp;
-
-       /* update once a second */
-       if ((jiffies - adapter->ips_jiffies) > 1 * (HZ)) {
-               /* One second elapsed since last update  */
-               u32 r, new_eqd = -1;
-               r = adapter->be_stat.bes_ints - adapter->be_stat.bes_prev_ints;
-               r = r / ((jiffies - adapter->ips_jiffies) / (HZ));
-               adapter->be_stat.bes_ips = r;
-               adapter->ips_jiffies = jiffies;
-               adapter->be_stat.bes_prev_ints = adapter->be_stat.bes_ints;
-               if (r > IPS_HI_WM && adapter->cur_eqd < adapter->max_eqd)
-                       new_eqd = (adapter->cur_eqd + 8);
-               if (r < IPS_LO_WM && adapter->cur_eqd > adapter->min_eqd)
-                       new_eqd = (adapter->cur_eqd - 8);
-               if (adapter->enable_aic && new_eqd != -1) {
-                       eq_objectp = &pnob->event_q_obj;
-                       status = be_eq_modify_delay(&pnob->fn_obj, 1,
-                                                   &eq_objectp, &new_eqd, NULL,
-                                                   NULL, NULL);
-                       if (status == BE_SUCCESS)
-                               adapter->cur_eqd = new_eqd;
-               }
-       }
-}
-
-/*
-    This function notifies BladeEngine of how many events were processed
-    from the event queue by ringing the corresponding door bell and
-    optionally re-arms the event queue.
-    n          - number of events processed
-    re_arm     - 1 - re-arm the EQ, 0 - do not re-arm the EQ
-
-*/
-static void be_notify_event(struct be_net_object *pnob, int n, int re_arm)
-{
-       struct CQ_DB_AMAP eqdb;
-       eqdb.dw[0] = 0;
-
-       AMAP_SET_BITS_PTR(CQ_DB, qid, &eqdb, pnob->event_q_id);
-       AMAP_SET_BITS_PTR(CQ_DB, rearm, &eqdb, re_arm);
-       AMAP_SET_BITS_PTR(CQ_DB, event, &eqdb, 1);
-       AMAP_SET_BITS_PTR(CQ_DB, num_popped, &eqdb, n);
-       /*
-        * Under some situations we see an interrupt and no valid
-        * EQ entry.  To keep going, we need to ring the DB even if
-        * numPOsted is 0.
-        */
-       PD_WRITE(&pnob->fn_obj, cq_db, eqdb.dw[0]);
-       return;
-}
-
-/*
- * Called from the tasklet scheduled by ISR.  All real interrupt processing
- * is done here.
- */
-void be_process_intr(unsigned long context)
-{
-       struct be_adapter *adapter = (struct be_adapter *)context;
-       struct be_net_object *pnob = adapter->net_obj;
-       u32 isr, n;
-       ulong flags = 0;
-
-       isr = adapter->isr;
-
-       /*
-        * we create only one NIC event queue in Linux. Event is
-        * expected only in the first event queue
-        */
-       BUG_ON(isr & 0xfffffffe);
-       if ((isr & 1) == 0)
-               return;         /* not our interrupt */
-       n = process_events(pnob);
-       /*
-        * Clear the event bit. adapter->isr is  set by
-        * hard interrupt.  Prevent race with lock.
-        */
-       spin_lock_irqsave(&adapter->int_lock, flags);
-       adapter->isr &= ~1;
-       spin_unlock_irqrestore(&adapter->int_lock, flags);
-       be_notify_event(pnob, n, 1);
-       /*
-        * If previous allocation attempts had failed and
-        * BE has used up all posted buffers, post RX buffers here
-        */
-       if (pnob->rxbuf_post_fail && atomic_read(&pnob->rx_q_posted) == 0)
-               be_post_eth_rx_buffs(pnob);
-       update_eqd(adapter, pnob);
-       return;
-}
diff --git a/drivers/staging/benet/be_netif.c b/drivers/staging/benet/be_netif.c
deleted file mode 100644 (file)
index 2b8daf6..0000000
+++ /dev/null
@@ -1,705 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-/*
- * be_netif.c
- *
- * This file contains various entry points of drivers seen by tcp/ip stack.
- */
-
-#include <linux/if_vlan.h>
-#include <linux/in.h>
-#include "benet.h"
-#include <linux/ip.h>
-#include <linux/inet_lro.h>
-
-/* Strings to print Link properties */
-static const char *link_speed[] = {
-       "Invalid link Speed Value",
-       "10 Mbps",
-       "100 Mbps",
-       "1 Gbps",
-       "10 Gbps"
-};
-
-static const char *link_duplex[] = {
-       "Invalid Duplex Value",
-       "Half Duplex",
-       "Full Duplex"
-};
-
-static const char *link_state[] = {
-       "",
-       "(active)"
-};
-
-void be_print_link_info(struct BE_LINK_STATUS *lnk_status)
-{
-       u16 si, di, ai;
-
-       /* Port 0 */
-       if (lnk_status->mac0_speed && lnk_status->mac0_duplex) {
-               /* Port is up and running */
-               si = (lnk_status->mac0_speed < 5) ? lnk_status->mac0_speed : 0;
-               di = (lnk_status->mac0_duplex < 3) ?
-                   lnk_status->mac0_duplex : 0;
-               ai = (lnk_status->active_port == 0) ? 1 : 0;
-               printk(KERN_INFO "PortNo. 0: Speed - %s %s %s\n",
-                      link_speed[si], link_duplex[di], link_state[ai]);
-       } else
-               printk(KERN_INFO "PortNo. 0: Down\n");
-
-       /* Port 1 */
-       if (lnk_status->mac1_speed && lnk_status->mac1_duplex) {
-               /* Port is up and running */
-               si = (lnk_status->mac1_speed < 5) ? lnk_status->mac1_speed : 0;
-               di = (lnk_status->mac1_duplex < 3) ?
-                   lnk_status->mac1_duplex : 0;
-               ai = (lnk_status->active_port == 0) ? 1 : 0;
-               printk(KERN_INFO "PortNo. 1: Speed - %s %s %s\n",
-                      link_speed[si], link_duplex[di], link_state[ai]);
-       } else
-               printk(KERN_INFO "PortNo. 1: Down\n");
-
-       return;
-}
-
-static int
-be_get_frag_header(struct skb_frag_struct *frag, void **mac_hdr,
-                  void **ip_hdr, void **tcpudp_hdr,
-                  u64 *hdr_flags, void *priv)
-{
-       struct ethhdr *eh;
-       struct vlan_ethhdr *veh;
-       struct iphdr *iph;
-       u8 *va = page_address(frag->page) + frag->page_offset;
-       unsigned long ll_hlen;
-
-       /* find the mac header, abort if not IPv4 */
-
-       prefetch(va);
-       eh = (struct ethhdr *)va;
-       *mac_hdr = eh;
-       ll_hlen = ETH_HLEN;
-       if (eh->h_proto != htons(ETH_P_IP)) {
-               if (eh->h_proto == htons(ETH_P_8021Q)) {
-                       veh = (struct vlan_ethhdr *)va;
-                       if (veh->h_vlan_encapsulated_proto != htons(ETH_P_IP))
-                               return -1;
-
-                       ll_hlen += VLAN_HLEN;
-
-               } else {
-                       return -1;
-               }
-       }
-       *hdr_flags = LRO_IPV4;
-
-       iph = (struct iphdr *)(va + ll_hlen);
-       *ip_hdr = iph;
-       if (iph->protocol != IPPROTO_TCP)
-               return -1;
-       *hdr_flags |= LRO_TCP;
-       *tcpudp_hdr = (u8 *) (*ip_hdr) + (iph->ihl << 2);
-
-       return 0;
-}
-
-static int benet_open(struct net_device *netdev)
-{
-       struct be_net_object *pnob = netdev_priv(netdev);
-       struct be_adapter *adapter = pnob->adapter;
-       struct net_lro_mgr *lro_mgr;
-
-       if (adapter->dev_state < BE_DEV_STATE_INIT)
-               return -EAGAIN;
-
-       lro_mgr = &pnob->lro_mgr;
-       lro_mgr->dev = netdev;
-
-       lro_mgr->features = LRO_F_NAPI;
-       lro_mgr->ip_summed = CHECKSUM_UNNECESSARY;
-       lro_mgr->ip_summed_aggr = CHECKSUM_UNNECESSARY;
-       lro_mgr->max_desc = BE_MAX_LRO_DESCRIPTORS;
-       lro_mgr->lro_arr = pnob->lro_desc;
-       lro_mgr->get_frag_header = be_get_frag_header;
-       lro_mgr->max_aggr = adapter->max_rx_coal;
-       lro_mgr->frag_align_pad = 2;
-       if (lro_mgr->max_aggr > MAX_SKB_FRAGS)
-               lro_mgr->max_aggr = MAX_SKB_FRAGS;
-
-       adapter->max_rx_coal = BE_LRO_MAX_PKTS;
-
-       be_update_link_status(adapter);
-
-       /*
-        * Set carrier on only if Physical Link up
-        * Either of the port link status up signifies this
-        */
-       if ((adapter->port0_link_sts == BE_PORT_LINK_UP) ||
-           (adapter->port1_link_sts == BE_PORT_LINK_UP)) {
-               netif_start_queue(netdev);
-               netif_carrier_on(netdev);
-       }
-
-       adapter->dev_state = BE_DEV_STATE_OPEN;
-       napi_enable(&pnob->napi);
-       be_enable_intr(pnob);
-       be_enable_eq_intr(pnob);
-       /*
-        * RX completion queue may be in dis-armed state. Arm it.
-        */
-       be_notify_cmpl(pnob, 0, pnob->rx_cq_id, 1);
-
-       return 0;
-}
-
-static int benet_close(struct net_device *netdev)
-{
-       struct be_net_object *pnob = netdev_priv(netdev);
-       struct be_adapter *adapter = pnob->adapter;
-
-       netif_stop_queue(netdev);
-       synchronize_irq(netdev->irq);
-
-       be_wait_nic_tx_cmplx_cmpl(pnob);
-       adapter->dev_state = BE_DEV_STATE_INIT;
-       netif_carrier_off(netdev);
-
-       adapter->port0_link_sts = BE_PORT_LINK_DOWN;
-       adapter->port1_link_sts = BE_PORT_LINK_DOWN;
-       be_disable_intr(pnob);
-       be_disable_eq_intr(pnob);
-       napi_disable(&pnob->napi);
-
-       return 0;
-}
-
-/*
- * Setting a Mac Address for BE
- * Takes netdev and a void pointer as arguments.
- * The pointer holds the new addres to be used.
- */
-static int benet_set_mac_addr(struct net_device *netdev, void *p)
-{
-       struct sockaddr *addr = p;
-       struct be_net_object *pnob = netdev_priv(netdev);
-
-       memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
-       be_rxf_mac_address_read_write(&pnob->fn_obj, 0, 0, false, true, false,
-                               netdev->dev_addr, NULL, NULL);
-       /*
-        * Since we are doing Active-Passive failover, both
-        * ports should have matching MAC addresses everytime.
-        */
-       be_rxf_mac_address_read_write(&pnob->fn_obj, 1, 0, false, true, false,
-                                     netdev->dev_addr, NULL, NULL);
-
-       return 0;
-}
-
-void be_get_stats_timer_handler(unsigned long context)
-{
-       struct be_timer_ctxt *ctxt = (struct be_timer_ctxt *)context;
-
-       if (atomic_read(&ctxt->get_stat_flag)) {
-               atomic_dec(&ctxt->get_stat_flag);
-               up((void *)ctxt->get_stat_sem_addr);
-       }
-       del_timer(&ctxt->get_stats_timer);
-       return;
-}
-
-void be_get_stat_cb(void *context, int status,
-                   struct MCC_WRB_AMAP *optional_wrb)
-{
-       struct be_timer_ctxt *ctxt = (struct be_timer_ctxt *)context;
-       /*
-        * just up the semaphore if the get_stat_flag
-        * reads 1. so that the waiter can continue.
-        * If it is 0, then it was handled by the timer handler.
-        */
-       del_timer(&ctxt->get_stats_timer);
-       if (atomic_read(&ctxt->get_stat_flag)) {
-               atomic_dec(&ctxt->get_stat_flag);
-               up((void *)ctxt->get_stat_sem_addr);
-       }
-}
-
-struct net_device_stats *benet_get_stats(struct net_device *dev)
-{
-       struct be_net_object *pnob = netdev_priv(dev);
-       struct be_adapter *adapter = pnob->adapter;
-       u64 pa;
-       struct be_timer_ctxt *ctxt = &adapter->timer_ctxt;
-
-       if (adapter->dev_state != BE_DEV_STATE_OPEN) {
-               /* Return previously read stats */
-               return &(adapter->benet_stats);
-       }
-       /* Get Physical Addr */
-       pa = pci_map_single(adapter->pdev, adapter->eth_statsp,
-                           sizeof(struct FWCMD_ETH_GET_STATISTICS),
-                           PCI_DMA_FROMDEVICE);
-       ctxt->get_stat_sem_addr = (unsigned long)&adapter->get_eth_stat_sem;
-       atomic_inc(&ctxt->get_stat_flag);
-
-       be_rxf_query_eth_statistics(&pnob->fn_obj, adapter->eth_statsp,
-                                   cpu_to_le64(pa), be_get_stat_cb, ctxt,
-                                   NULL);
-
-       ctxt->get_stats_timer.data = (unsigned long)ctxt;
-       mod_timer(&ctxt->get_stats_timer, (jiffies + (HZ * 2)));
-       down((void *)ctxt->get_stat_sem_addr);  /* callback will unblock us */
-
-       /* Adding port0 and port1 stats. */
-       adapter->benet_stats.rx_packets =
-           adapter->eth_statsp->params.response.p0recvdtotalframes +
-           adapter->eth_statsp->params.response.p1recvdtotalframes;
-       adapter->benet_stats.tx_packets =
-           adapter->eth_statsp->params.response.p0xmitunicastframes +
-           adapter->eth_statsp->params.response.p1xmitunicastframes;
-       adapter->benet_stats.tx_bytes =
-           adapter->eth_statsp->params.response.p0xmitbyteslsd +
-           adapter->eth_statsp->params.response.p1xmitbyteslsd;
-       adapter->benet_stats.rx_errors =
-           adapter->eth_statsp->params.response.p0crcerrors +
-           adapter->eth_statsp->params.response.p1crcerrors;
-       adapter->benet_stats.rx_errors +=
-           adapter->eth_statsp->params.response.p0alignmentsymerrs +
-           adapter->eth_statsp->params.response.p1alignmentsymerrs;
-       adapter->benet_stats.rx_errors +=
-           adapter->eth_statsp->params.response.p0inrangelenerrors +
-           adapter->eth_statsp->params.response.p1inrangelenerrors;
-       adapter->benet_stats.rx_bytes =
-           adapter->eth_statsp->params.response.p0recvdtotalbytesLSD +
-           adapter->eth_statsp->params.response.p1recvdtotalbytesLSD;
-       adapter->benet_stats.rx_crc_errors =
-           adapter->eth_statsp->params.response.p0crcerrors +
-           adapter->eth_statsp->params.response.p1crcerrors;
-
-       adapter->benet_stats.tx_packets +=
-           adapter->eth_statsp->params.response.p0xmitmulticastframes +
-           adapter->eth_statsp->params.response.p1xmitmulticastframes;
-       adapter->benet_stats.tx_packets +=
-           adapter->eth_statsp->params.response.p0xmitbroadcastframes +
-           adapter->eth_statsp->params.response.p1xmitbroadcastframes;
-       adapter->benet_stats.tx_errors = 0;
-
-       adapter->benet_stats.multicast =
-           adapter->eth_statsp->params.response.p0xmitmulticastframes +
-           adapter->eth_statsp->params.response.p1xmitmulticastframes;
-
-       adapter->benet_stats.rx_fifo_errors =
-           adapter->eth_statsp->params.response.p0rxfifooverflowdropped +
-           adapter->eth_statsp->params.response.p1rxfifooverflowdropped;
-       adapter->benet_stats.rx_frame_errors =
-           adapter->eth_statsp->params.response.p0alignmentsymerrs +
-           adapter->eth_statsp->params.response.p1alignmentsymerrs;
-       adapter->benet_stats.rx_length_errors =
-           adapter->eth_statsp->params.response.p0inrangelenerrors +
-           adapter->eth_statsp->params.response.p1inrangelenerrors;
-       adapter->benet_stats.rx_length_errors +=
-           adapter->eth_statsp->params.response.p0outrangeerrors +
-           adapter->eth_statsp->params.response.p1outrangeerrors;
-       adapter->benet_stats.rx_length_errors +=
-           adapter->eth_statsp->params.response.p0frametoolongerrors +
-           adapter->eth_statsp->params.response.p1frametoolongerrors;
-
-       pci_unmap_single(adapter->pdev, (ulong) adapter->eth_statsp,
-                        sizeof(struct FWCMD_ETH_GET_STATISTICS),
-                        PCI_DMA_FROMDEVICE);
-       return &(adapter->benet_stats);
-
-}
-
-static void be_start_tx(struct be_net_object *pnob, u32 nposted)
-{
-#define CSR_ETH_MAX_SQPOSTS 255
-       struct SQ_DB_AMAP sqdb;
-
-       sqdb.dw[0] = 0;
-
-       AMAP_SET_BITS_PTR(SQ_DB, cid, &sqdb, pnob->tx_q_id);
-       while (nposted) {
-               if (nposted > CSR_ETH_MAX_SQPOSTS) {
-                       AMAP_SET_BITS_PTR(SQ_DB, numPosted, &sqdb,
-                                         CSR_ETH_MAX_SQPOSTS);
-                       nposted -= CSR_ETH_MAX_SQPOSTS;
-               } else {
-                       AMAP_SET_BITS_PTR(SQ_DB, numPosted, &sqdb, nposted);
-                       nposted = 0;
-               }
-               PD_WRITE(&pnob->fn_obj, etx_sq_db, sqdb.dw[0]);
-       }
-
-       return;
-}
-
-static void update_tx_rate(struct be_adapter *adapter)
-{
-       /* update the rate once in two seconds */
-       if ((jiffies - adapter->eth_tx_jiffies) > 2 * (HZ)) {
-               u32 r;
-               r = adapter->eth_tx_bytes /
-                   ((jiffies - adapter->eth_tx_jiffies) / (HZ));
-               r = (r / 1000000);      /* M bytes/s */
-               adapter->be_stat.bes_eth_tx_rate = (r * 8); /* M bits/s */
-               adapter->eth_tx_jiffies = jiffies;
-               adapter->eth_tx_bytes = 0;
-       }
-}
-
-static int wrb_cnt_in_skb(struct sk_buff *skb)
-{
-       int cnt = 0;
-       while (skb) {
-               if (skb->len > skb->data_len)
-                       cnt++;
-               cnt += skb_shinfo(skb)->nr_frags;
-               skb = skb_shinfo(skb)->frag_list;
-       }
-       BUG_ON(cnt > BE_MAX_TX_FRAG_COUNT);
-       return cnt;
-}
-
-static void wrb_fill(struct ETH_WRB_AMAP *wrb, u64 addr, int len)
-{
-       AMAP_SET_BITS_PTR(ETH_WRB, frag_pa_hi, wrb, addr >> 32);
-       AMAP_SET_BITS_PTR(ETH_WRB, frag_pa_lo, wrb, addr & 0xFFFFFFFF);
-       AMAP_SET_BITS_PTR(ETH_WRB, frag_len, wrb, len);
-}
-
-static void wrb_fill_extra(struct ETH_WRB_AMAP *wrb, struct sk_buff *skb,
-                          struct be_net_object *pnob)
-{
-       wrb->dw[2] = 0;
-       wrb->dw[3] = 0;
-       AMAP_SET_BITS_PTR(ETH_WRB, crc, wrb, 1);
-       if (skb_shinfo(skb)->gso_segs > 1 && skb_shinfo(skb)->gso_size) {
-               AMAP_SET_BITS_PTR(ETH_WRB, lso, wrb, 1);
-               AMAP_SET_BITS_PTR(ETH_WRB, lso_mss, wrb,
-                                 skb_shinfo(skb)->gso_size);
-       } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
-               u8 proto = ((struct iphdr *)ip_hdr(skb))->protocol;
-               if (proto == IPPROTO_TCP)
-                       AMAP_SET_BITS_PTR(ETH_WRB, tcpcs, wrb, 1);
-               else if (proto == IPPROTO_UDP)
-                       AMAP_SET_BITS_PTR(ETH_WRB, udpcs, wrb, 1);
-       }
-       if (pnob->vlan_grp && vlan_tx_tag_present(skb)) {
-               AMAP_SET_BITS_PTR(ETH_WRB, vlan, wrb, 1);
-               AMAP_SET_BITS_PTR(ETH_WRB, vlan_tag, wrb, vlan_tx_tag_get(skb));
-       }
-}
-
-static inline void wrb_copy_extra(struct ETH_WRB_AMAP *to,
-                                 struct ETH_WRB_AMAP *from)
-{
-
-       to->dw[2] = from->dw[2];
-       to->dw[3] = from->dw[3];
-}
-
-/* Returns the actual count of wrbs used including a possible dummy */
-static int copy_skb_to_txq(struct be_net_object *pnob, struct sk_buff *skb,
-                          u32 wrb_cnt, u32 *copied)
-{
-       u64 busaddr;
-       struct ETH_WRB_AMAP *wrb = NULL, *first = NULL;
-       u32 i;
-       bool dummy = true;
-       struct pci_dev *pdev = pnob->adapter->pdev;
-
-       if (wrb_cnt & 1)
-               wrb_cnt++;
-       else
-               dummy = false;
-
-       atomic_add(wrb_cnt, &pnob->tx_q_used);
-
-       while (skb) {
-               if (skb->len > skb->data_len) {
-                       int len = skb->len - skb->data_len;
-                       busaddr = pci_map_single(pdev, skb->data, len,
-                                                PCI_DMA_TODEVICE);
-                       busaddr = cpu_to_le64(busaddr);
-                       wrb = &pnob->tx_q[pnob->tx_q_hd];
-                       if (first == NULL) {
-                               wrb_fill_extra(wrb, skb, pnob);
-                               first = wrb;
-                       } else {
-                               wrb_copy_extra(wrb, first);
-                       }
-                       wrb_fill(wrb, busaddr, len);
-                       be_adv_txq_hd(pnob);
-                       *copied += len;
-               }
-
-               for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
-                       struct skb_frag_struct *frag =
-                           &skb_shinfo(skb)->frags[i];
-                       busaddr = pci_map_page(pdev, frag->page,
-                                              frag->page_offset, frag->size,
-                                              PCI_DMA_TODEVICE);
-                       busaddr = cpu_to_le64(busaddr);
-                       wrb = &pnob->tx_q[pnob->tx_q_hd];
-                       if (first == NULL) {
-                               wrb_fill_extra(wrb, skb, pnob);
-                               first = wrb;
-                       } else {
-                               wrb_copy_extra(wrb, first);
-                       }
-                       wrb_fill(wrb, busaddr, frag->size);
-                       be_adv_txq_hd(pnob);
-                       *copied += frag->size;
-               }
-               skb = skb_shinfo(skb)->frag_list;
-       }
-
-       if (dummy) {
-               wrb = &pnob->tx_q[pnob->tx_q_hd];
-               BUG_ON(first == NULL);
-               wrb_copy_extra(wrb, first);
-               wrb_fill(wrb, 0, 0);
-               be_adv_txq_hd(pnob);
-       }
-       AMAP_SET_BITS_PTR(ETH_WRB, complete, wrb, 1);
-       AMAP_SET_BITS_PTR(ETH_WRB, last, wrb, 1);
-       return wrb_cnt;
-}
-
-/* For each skb transmitted, tx_ctxt stores the num of wrbs in the
- * start index and skb pointer in the end index
- */
-static inline void be_tx_wrb_info_remember(struct be_net_object *pnob,
-                                          struct sk_buff *skb, int wrb_cnt,
-                                          u32 start)
-{
-       *(u32 *) (&pnob->tx_ctxt[start]) = wrb_cnt;
-       index_adv(&start, wrb_cnt - 1, pnob->tx_q_len);
-       pnob->tx_ctxt[start] = skb;
-}
-
-static int benet_xmit(struct sk_buff *skb, struct net_device *netdev)
-{
-       struct be_net_object *pnob = netdev_priv(netdev);
-       struct be_adapter *adapter = pnob->adapter;
-       u32 wrb_cnt, copied = 0;
-       u32 start = pnob->tx_q_hd;
-
-       adapter->be_stat.bes_tx_reqs++;
-
-       wrb_cnt = wrb_cnt_in_skb(skb);
-       spin_lock_bh(&adapter->txq_lock);
-       if ((pnob->tx_q_len - 2 - atomic_read(&pnob->tx_q_used)) <= wrb_cnt) {
-               netif_stop_queue(pnob->netdev);
-               spin_unlock_bh(&adapter->txq_lock);
-               adapter->be_stat.bes_tx_fails++;
-               return NETDEV_TX_BUSY;
-       }
-       spin_unlock_bh(&adapter->txq_lock);
-
-       wrb_cnt = copy_skb_to_txq(pnob, skb, wrb_cnt, &copied);
-       be_tx_wrb_info_remember(pnob, skb, wrb_cnt, start);
-
-       be_start_tx(pnob, wrb_cnt);
-
-       adapter->eth_tx_bytes += copied;
-       adapter->be_stat.bes_tx_wrbs += wrb_cnt;
-       update_tx_rate(adapter);
-       netdev->trans_start = jiffies;
-
-       return NETDEV_TX_OK;
-}
-
-/*
- * This is the driver entry point to change the mtu of the device
- * Returns 0 for success and errno for failure.
- */
-static int benet_change_mtu(struct net_device *netdev, int new_mtu)
-{
-       /*
-        * BE supports jumbo frame size upto 9000 bytes including the link layer
-        * header. Considering the different variants of frame formats possible
-        * like VLAN, SNAP/LLC, the maximum possible value for MTU is 8974 bytes
-        */
-
-       if (new_mtu < (ETH_ZLEN + ETH_FCS_LEN) || (new_mtu > BE_MAX_MTU)) {
-               dev_info(&netdev->dev, "Invalid MTU requested. "
-                              "Must be between %d and %d bytes\n",
-                                      (ETH_ZLEN + ETH_FCS_LEN), BE_MAX_MTU);
-               return -EINVAL;
-       }
-       dev_info(&netdev->dev, "MTU changed from %d to %d\n",
-                                               netdev->mtu, new_mtu);
-       netdev->mtu = new_mtu;
-       return 0;
-}
-
-/*
- * This is the driver entry point to register a vlan with the device
- */
-static void benet_vlan_register(struct net_device *netdev,
-                               struct vlan_group *grp)
-{
-       struct be_net_object *pnob = netdev_priv(netdev);
-
-       be_disable_eq_intr(pnob);
-       pnob->vlan_grp = grp;
-       pnob->num_vlans = 0;
-       be_enable_eq_intr(pnob);
-}
-
-/*
- * This is the driver entry point to add a vlan vlan_id
- * with the device netdev
- */
-static void benet_vlan_add_vid(struct net_device *netdev, u16 vlan_id)
-{
-       struct be_net_object *pnob = netdev_priv(netdev);
-
-       if (pnob->num_vlans == (BE_NUM_VLAN_SUPPORTED - 1)) {
-               /* no  way to return an error */
-               dev_info(&netdev->dev,
-                      "BladeEngine: Cannot configure more than %d Vlans\n",
-                              BE_NUM_VLAN_SUPPORTED);
-               return;
-       }
-       /* The new vlan tag will be in the slot indicated by num_vlans. */
-       pnob->vlan_tag[pnob->num_vlans++] = vlan_id;
-       be_rxf_vlan_config(&pnob->fn_obj, false, pnob->num_vlans,
-                          pnob->vlan_tag, NULL, NULL, NULL);
-}
-
-/*
- * This is the driver entry point to remove a vlan vlan_id
- * with the device netdev
- */
-static void benet_vlan_rem_vid(struct net_device *netdev, u16 vlan_id)
-{
-       struct be_net_object *pnob = netdev_priv(netdev);
-
-       u32 i, value;
-
-       /*
-        * In Blade Engine, we support 32 vlan tag filters across both ports.
-        * To program a vlan tag, the RXF_RTPR_CSR register is used.
-        * Each 32-bit value of RXF_RTDR_CSR can address 2 vlan tag entries.
-        * The Vlan table is of depth 16. thus we support 32 tags.
-        */
-
-       value = vlan_id | VLAN_VALID_BIT;
-       for (i = 0; i < BE_NUM_VLAN_SUPPORTED; i++) {
-               if (pnob->vlan_tag[i] == vlan_id)
-                       break;
-       }
-
-       if (i == BE_NUM_VLAN_SUPPORTED)
-               return;
-       /* Now compact the vlan tag array by removing hole created. */
-       while ((i + 1) < BE_NUM_VLAN_SUPPORTED) {
-               pnob->vlan_tag[i] = pnob->vlan_tag[i + 1];
-               i++;
-       }
-       if ((i + 1) == BE_NUM_VLAN_SUPPORTED)
-               pnob->vlan_tag[i] = (u16) 0x0;
-       pnob->num_vlans--;
-       be_rxf_vlan_config(&pnob->fn_obj, false, pnob->num_vlans,
-                          pnob->vlan_tag, NULL, NULL, NULL);
-}
-
-/*
- * This function is called to program multicast
- * address in the multicast filter of the ASIC.
- */
-static void be_set_multicast_filter(struct net_device *netdev)
-{
-       struct be_net_object *pnob = netdev_priv(netdev);
-       struct dev_mc_list *mc_ptr;
-       u8 mac_addr[32][ETH_ALEN];
-       int i;
-
-       if (netdev->flags & IFF_ALLMULTI) {
-               /* set BE in Multicast promiscuous */
-               be_rxf_multicast_config(&pnob->fn_obj, true, 0, NULL, NULL,
-                                       NULL, NULL);
-               return;
-       }
-
-       for (mc_ptr = netdev->mc_list, i = 0; mc_ptr;
-            mc_ptr = mc_ptr->next, i++) {
-               memcpy(&mac_addr[i][0], mc_ptr->dmi_addr, ETH_ALEN);
-       }
-
-       /* reset the promiscuous mode also. */
-       be_rxf_multicast_config(&pnob->fn_obj, false, i,
-                               &mac_addr[0][0], NULL, NULL, NULL);
-}
-
-/*
- * This is the driver entry point to set multicast list
- * with the device netdev. This function will be used to
- * set promiscuous mode or multicast promiscuous mode
- * or multicast mode....
- */
-static void benet_set_multicast_list(struct net_device *netdev)
-{
-       struct be_net_object *pnob = netdev_priv(netdev);
-
-       if (netdev->flags & IFF_PROMISC) {
-               be_rxf_promiscuous(&pnob->fn_obj, 1, 1, NULL, NULL, NULL);
-       } else {
-               be_rxf_promiscuous(&pnob->fn_obj, 0, 0, NULL, NULL, NULL);
-               be_set_multicast_filter(netdev);
-       }
-}
-
-int benet_init(struct net_device *netdev)
-{
-       struct be_net_object *pnob = netdev_priv(netdev);
-       struct be_adapter *adapter = pnob->adapter;
-
-       ether_setup(netdev);
-
-       netdev->open = &benet_open;
-       netdev->stop = &benet_close;
-       netdev->hard_start_xmit = &benet_xmit;
-
-       netdev->get_stats = &benet_get_stats;
-
-       netdev->set_multicast_list = &benet_set_multicast_list;
-
-       netdev->change_mtu = &benet_change_mtu;
-       netdev->set_mac_address = &benet_set_mac_addr;
-
-       netdev->vlan_rx_register = benet_vlan_register;
-       netdev->vlan_rx_add_vid = benet_vlan_add_vid;
-       netdev->vlan_rx_kill_vid = benet_vlan_rem_vid;
-
-       netdev->features =
-           NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_HW_VLAN_RX | NETIF_F_TSO |
-           NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_FILTER | NETIF_F_IP_CSUM;
-
-       netdev->flags |= IFF_MULTICAST;
-
-       /* If device is DAC Capable, set the HIGHDMA flag for netdevice. */
-       if (adapter->dma_64bit_cap)
-               netdev->features |= NETIF_F_HIGHDMA;
-
-       SET_ETHTOOL_OPS(netdev, &be_ethtool_ops);
-       return 0;
-}
diff --git a/drivers/staging/benet/benet.h b/drivers/staging/benet/benet.h
deleted file mode 100644 (file)
index 09a1f08..0000000
+++ /dev/null
@@ -1,429 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-#ifndef _BENET_H_
-#define _BENET_H_
-
-#include <linux/pci.h>
-#include <linux/netdevice.h>
-#include <linux/inet_lro.h>
-#include "hwlib.h"
-
-#define _SA_MODULE_NAME "net-driver"
-
-#define VLAN_VALID_BIT         0x8000
-#define BE_NUM_VLAN_SUPPORTED  32
-#define BE_PORT_LINK_DOWN       0000
-#define BE_PORT_LINK_UP         0001
-#define        BE_MAX_TX_FRAG_COUNT            (30)
-
-/* Flag bits for send operation */
-#define IPCS            (1 << 0)       /* Enable IP checksum offload */
-#define UDPCS           (1 << 1)       /* Enable UDP checksum offload */
-#define TCPCS           (1 << 2)       /* Enable TCP checksum offload */
-#define LSO             (1 << 3)       /* Enable Large Segment  offload */
-#define ETHVLAN         (1 << 4)       /* Enable VLAN insert */
-#define ETHEVENT        (1 << 5)       /* Generate  event on completion */
-#define ETHCOMPLETE     (1 << 6)       /* Generate completion when done */
-#define IPSEC           (1 << 7)       /* Enable IPSEC */
-#define FORWARD         (1 << 8)       /* Send the packet in forwarding path */
-#define FIN             (1 << 9)       /* Issue FIN segment */
-
-#define BE_MAX_MTU     8974
-
-#define BE_MAX_LRO_DESCRIPTORS                 8
-#define BE_LRO_MAX_PKTS                                64
-#define BE_MAX_FRAGS_PER_FRAME                 6
-
-extern const char be_drvr_ver[];
-extern char be_fw_ver[];
-extern char be_driver_name[];
-
-extern struct ethtool_ops be_ethtool_ops;
-
-#define BE_DEV_STATE_NONE 0
-#define BE_DEV_STATE_INIT 1
-#define BE_DEV_STATE_OPEN 2
-#define BE_DEV_STATE_SUSPEND 3
-
-/* This structure is used to describe physical fragments to use
- * for DMAing data from NIC.
- */
-struct be_recv_buffer {
-       struct list_head rxb_list;      /* for maintaining a linked list */
-       void *rxb_va;           /* buffer virtual address */
-       u32 rxb_pa_lo;          /* low part of physical address */
-       u32 rxb_pa_hi;          /* high part of physical address */
-       u32 rxb_len;            /* length of recv buffer */
-       void *rxb_ctxt;         /* context for OSM driver to use */
-};
-
-/*
- * fragment list to describe scattered data.
- */
-struct be_tx_frag_list {
-       u32 txb_len;            /* Size of this fragment */
-       u32 txb_pa_lo;          /* Lower 32 bits of 64 bit physical addr */
-       u32 txb_pa_hi;          /* Higher 32 bits of 64 bit physical addr */
-};
-
-struct be_rx_page_info {
-       struct page *page;
-       dma_addr_t bus;
-       u16 page_offset;
-};
-
-/*
- *  This structure is the main tracking structure for a NIC interface.
- */
-struct be_net_object {
-       /* MCC Ring - used to send fwcmds to embedded ARM processor */
-       struct MCC_WRB_AMAP *mcc_q;     /* VA of the start of the ring */
-       u32 mcc_q_len;                  /* # of WRB entries in this ring */
-       u32 mcc_q_size;
-       u32 mcc_q_hd;                   /* MCC ring head */
-       u8 mcc_q_created;               /* flag to help cleanup */
-       struct be_mcc_object mcc_q_obj; /* BECLIB's MCC ring Object */
-       dma_addr_t mcc_q_bus;           /* DMA'ble bus address */
-
-       /* MCC Completion Ring - FW responses to fwcmds sent from MCC ring */
-       struct MCC_CQ_ENTRY_AMAP *mcc_cq; /* VA of the start of the ring */
-       u32 mcc_cq_len;                 /* # of compl. entries in this ring */
-       u32 mcc_cq_size;
-       u32 mcc_cq_tl;                  /* compl. ring tail */
-       u8 mcc_cq_created;              /* flag to help cleanup */
-       struct be_cq_object mcc_cq_obj; /* BECLIB's MCC compl. ring object */
-       u32 mcc_cq_id;                  /* MCC ring ID */
-       dma_addr_t mcc_cq_bus;          /* DMA'ble bus address */
-
-       struct ring_desc mb_rd;         /* RD for MCC_MAIL_BOX */
-       void *mb_ptr;                   /* mailbox ptr to be freed  */
-       dma_addr_t mb_bus;              /* DMA'ble bus address */
-       u32 mb_size;
-
-       /* BEClib uses an array of context objects to track outstanding
-        * requests to the MCC.  We need allocate the same number of
-        * conext entries as the number of entries in the MCC WRB ring
-        */
-       u32 mcc_wrb_ctxt_size;
-       void *mcc_wrb_ctxt;             /* pointer to the context area */
-       u32 mcc_wrb_ctxtLen;            /* Number of entries in the context */
-       /*
-        * NIC send request ring - used for xmitting raw ether frames.
-        */
-       struct ETH_WRB_AMAP *tx_q;      /* VA of the start of the ring */
-       u32 tx_q_len;                   /* # if entries in the send ring */
-       u32 tx_q_size;
-       u32 tx_q_hd;                    /* Head index. Next req. goes here */
-       u32 tx_q_tl;                    /* Tail indx. oldest outstanding req. */
-       u8 tx_q_created;                /* flag to help cleanup */
-       struct be_ethsq_object tx_q_obj;/* BECLIB's send Q handle */
-       dma_addr_t tx_q_bus;            /* DMA'ble bus address */
-       u32 tx_q_id;                    /* send queue ring ID */
-       u32 tx_q_port;                  /* 0 no binding, 1 port A,  2 port B */
-       atomic_t tx_q_used;             /* # of WRBs used */
-       /* ptr to an array in which we store context info for each send req. */
-       void **tx_ctxt;
-       /*
-        * NIC Send compl. ring - completion status for all NIC frames xmitted.
-        */
-       struct ETH_TX_COMPL_AMAP *tx_cq;/* VA of start of the ring */
-       u32 txcq_len;                   /* # of entries in the ring */
-       u32 tx_cq_size;
-       /*
-        * index into compl ring where the host expects next completion entry
-        */
-       u32 tx_cq_tl;
-       u32 tx_cq_id;                   /* completion queue id */
-       u8 tx_cq_created;               /* flag to help cleanup */
-       struct be_cq_object tx_cq_obj;
-       dma_addr_t tx_cq_bus;           /* DMA'ble bus address */
-       /*
-        * Event Queue - all completion entries post events here.
-        */
-       struct EQ_ENTRY_AMAP *event_q;  /* VA of start of event queue */
-       u32 event_q_len;                /* # of entries */
-       u32 event_q_size;
-       u32 event_q_tl;                 /* Tail of the event queue */
-       u32 event_q_id;                 /* Event queue ID */
-       u8 event_q_created;             /* flag to help cleanup */
-       struct be_eq_object event_q_obj; /* Queue handle */
-       dma_addr_t event_q_bus;         /* DMA'ble bus address */
-       /*
-        * NIC receive queue - Data buffers to be used for receiving unicast,
-        * broadcast and multi-cast frames  are posted here.
-        */
-       struct ETH_RX_D_AMAP *rx_q;     /* VA of start of the queue */
-       u32 rx_q_len;                   /* # of entries */
-       u32 rx_q_size;
-       u32 rx_q_hd;                    /* Head of the queue */
-       atomic_t rx_q_posted;           /* number of posted buffers */
-       u32 rx_q_id;                    /* queue ID */
-       u8 rx_q_created;                /* flag to help cleanup */
-       struct be_ethrq_object rx_q_obj;        /* NIC RX queue handle */
-       dma_addr_t rx_q_bus;            /* DMA'ble bus address */
-       /*
-        * Pointer to an array of opaque context object for use by OSM driver
-        */
-       void **rx_ctxt;
-       /*
-        * NIC unicast RX completion queue - all unicast ether frame completion
-        * statuses from BE come here.
-        */
-       struct ETH_RX_COMPL_AMAP *rx_cq;        /* VA of start of the queue */
-       u32 rx_cq_len;          /* # of entries */
-       u32 rx_cq_size;
-       u32 rx_cq_tl;                   /* Tail of the queue */
-       u32 rx_cq_id;                   /* queue ID */
-       u8 rx_cq_created;               /* flag to help cleanup */
-       struct be_cq_object rx_cq_obj;  /* queue handle */
-       dma_addr_t rx_cq_bus;           /* DMA'ble bus address */
-       struct be_function_object fn_obj;       /* function object   */
-       bool    fn_obj_created;
-       u32 rx_buf_size;                /* Size of the RX buffers */
-
-       struct net_device *netdev;
-       struct be_recv_buffer eth_rx_bufs[256]; /* to pass Rx buffer
-                                                          addresses */
-       struct be_adapter *adapter;     /* Pointer to OSM adapter */
-       u32 devno;              /* OSM, network dev no. */
-       u32 use_port;           /* Current active port */
-       struct be_rx_page_info *rx_page_info;   /* Array of Rx buf pages */
-       u32 rx_pg_info_hd;      /* Head of queue */
-       int rxbuf_post_fail;    /* RxBuff posting fail count */
-       bool rx_pg_shared;      /* Is an allocsted page shared as two frags ? */
-       struct vlan_group *vlan_grp;
-       u32 num_vlans;          /* Number of vlans in BE's filter */
-       u16 vlan_tag[BE_NUM_VLAN_SUPPORTED]; /* vlans currently configured */
-       struct napi_struct napi;
-       struct net_lro_mgr lro_mgr;
-       struct net_lro_desc lro_desc[BE_MAX_LRO_DESCRIPTORS];
-};
-
-#define NET_FH(np)       (&(np)->fn_obj)
-
-/*
- * BE driver statistics.
- */
-struct be_drvr_stat {
-       u32 bes_tx_reqs;        /* number of TX requests initiated */
-       u32 bes_tx_fails;       /* number of TX requests that failed */
-       u32 bes_fwd_reqs;       /* number of send reqs through forwarding i/f */
-       u32 bes_tx_wrbs;        /* number of tx WRBs used */
-
-       u32 bes_ints;           /* number of interrupts */
-       u32 bes_polls;          /* number of times NAPI called poll function */
-       u32 bes_events;         /* total evet entries processed */
-       u32 bes_tx_events;      /* number of tx completion events  */
-       u32 bes_rx_events;      /* number of ucast rx completion events  */
-       u32 bes_tx_compl;       /* number of tx completion entries processed */
-       u32 bes_rx_compl;       /* number of rx completion entries
-                                  processed */
-       u32 bes_ethrx_post_fail;        /* number of ethrx buffer alloc
-                                          failures */
-       /*
-        * number of non ether type II frames dropped where
-        * frame len > length field of Mac Hdr
-        */
-       u32 bes_802_3_dropped_frames;
-       /*
-        * number of non ether type II frames malformed where
-        * in frame len < length field of Mac Hdr
-        */
-       u32 bes_802_3_malformed_frames;
-       u32 bes_ips;            /*  interrupts / sec */
-       u32 bes_prev_ints;      /* bes_ints at last IPS calculation  */
-       u16 bes_eth_tx_rate;    /*  ETH TX rate - Mb/sec */
-       u16 bes_eth_rx_rate;    /*  ETH RX rate - Mb/sec */
-       u32 bes_rx_coal;        /* Num pkts coalasced */
-       u32 bes_rx_flush;       /* Num times coalasced */
-       u32 bes_link_change_physical;   /*Num of times physical link changed */
-       u32 bes_link_change_virtual;    /*Num of times virtual link changed */
-       u32 bes_rx_misc_pkts;   /* Misc pkts received */
-};
-
-/* Maximum interrupt delay (in microseconds) allowed */
-#define MAX_EQD                                120
-
-/*
- * timer to prevent system shutdown hang for ever if h/w stops responding
- */
-struct be_timer_ctxt {
-       atomic_t get_stat_flag;
-       struct timer_list get_stats_timer;
-       unsigned long get_stat_sem_addr;
-} ;
-
-/* This structure is the main BladeEngine driver context.  */
-struct be_adapter {
-       struct net_device *netdevp;
-       struct be_drvr_stat be_stat;
-       struct net_device_stats benet_stats;
-
-       /* PCI BAR mapped addresses */
-       u8 __iomem *csr_va;     /* CSR */
-       u8 __iomem *db_va;      /* Door  Bell  */
-       u8 __iomem *pci_va;     /* PCI Config */
-
-       struct tasklet_struct sts_handler;
-       struct timer_list cq_timer;
-       spinlock_t int_lock;    /* to protect the isr field in adapter */
-
-       struct FWCMD_ETH_GET_STATISTICS *eth_statsp;
-       /*
-        * This will enable the use of ethtool to enable or disable
-        * Checksum on Rx pkts to be obeyed or disobeyed.
-        * If this is true = 1, then whatever is the checksum on the
-        * Received pkt as per BE, it will be given to the stack.
-        * Else the stack will re calculate it.
-        */
-       bool rx_csum;
-       /*
-        * This will enable the use of ethtool to enable or disable
-        * Coalese on Rx pkts to be obeyed or disobeyed.
-        * If this is grater than 0 and less than 16 then coalascing
-        * is enabled else it is disabled
-        */
-       u32 max_rx_coal;
-       struct pci_dev *pdev;   /* Pointer to OS's PCI dvice */
-
-       spinlock_t txq_lock;    /* to stop/wake queue based on tx_q_used */
-
-       u32 isr;                /* copy of Intr status reg. */
-
-       u32 port0_link_sts;     /* Port 0 link status */
-       u32 port1_link_sts;     /* port 1 list status */
-       struct BE_LINK_STATUS *be_link_sts;
-
-       /* pointer to the first netobject of this adapter */
-       struct be_net_object *net_obj;
-
-       /*  Flags to indicate what to clean up */
-       bool tasklet_started;
-       bool isr_registered;
-       /*
-        * adaptive interrupt coalescing (AIC) related
-        */
-       bool enable_aic;        /* 1 if AIC is enabled */
-       u16 min_eqd;            /* minimum EQ delay in usec */
-       u16 max_eqd;            /* minimum EQ delay in usec */
-       u16 cur_eqd;            /* current EQ delay in usec */
-       /*
-        * book keeping for interrupt / sec and TX/RX rate calculation
-        */
-       ulong ips_jiffies;      /* jiffies at last IPS calc */
-       u32 eth_tx_bytes;
-       ulong eth_tx_jiffies;
-       u32 eth_rx_bytes;
-       ulong eth_rx_jiffies;
-
-       struct semaphore get_eth_stat_sem;
-
-       /* timer ctxt to prevent shutdown hanging due to un-responsive BE */
-       struct be_timer_ctxt timer_ctxt;
-
-#define BE_MAX_MSIX_VECTORS             32
-#define BE_MAX_REQ_MSIX_VECTORS         1 /* only one EQ in Linux driver */
-       struct msix_entry msix_entries[BE_MAX_MSIX_VECTORS];
-       bool msix_enabled;
-       bool dma_64bit_cap;     /* the Device DAC capable  or not */
-       u8 dev_state;   /* The current state of the device */
-       u8 dev_pm_state; /* The State of device before going to suspend */
-};
-
-/*
- * Every second we look at the ints/sec and adjust eq_delay
- * between adapter->min_eqd and adapter->max_eqd to keep the ints/sec between
- * IPS_HI_WM and IPS_LO_WM.
- */
-#define IPS_HI_WM      18000
-#define IPS_LO_WM      8000
-
-
-static inline void index_adv(u32 *index, u32 val,  u32 limit)
-{
-       BUG_ON(limit & (limit-1));
-       *index = (*index + val) & (limit - 1);
-}
-
-static inline void index_inc(u32 *index, u32 limit)
-{
-       BUG_ON(limit & (limit-1));
-       *index = (*index + 1) & (limit - 1);
-}
-
-static inline void be_adv_eq_tl(struct be_net_object *pnob)
-{
-       index_inc(&pnob->event_q_tl, pnob->event_q_len);
-}
-
-static inline void be_adv_txq_hd(struct be_net_object *pnob)
-{
-       index_inc(&pnob->tx_q_hd, pnob->tx_q_len);
-}
-
-static inline void be_adv_txq_tl(struct be_net_object *pnob)
-{
-       index_inc(&pnob->tx_q_tl, pnob->tx_q_len);
-}
-
-static inline void be_adv_txcq_tl(struct be_net_object *pnob)
-{
-       index_inc(&pnob->tx_cq_tl, pnob->txcq_len);
-}
-
-static inline void be_adv_rxq_hd(struct be_net_object *pnob)
-{
-       index_inc(&pnob->rx_q_hd, pnob->rx_q_len);
-}
-
-static inline void be_adv_rxcq_tl(struct be_net_object *pnob)
-{
-       index_inc(&pnob->rx_cq_tl, pnob->rx_cq_len);
-}
-
-static inline u32 tx_compl_lastwrb_idx_get(struct be_net_object *pnob)
-{
-       return (pnob->tx_q_tl + *(u32 *)&pnob->tx_ctxt[pnob->tx_q_tl] - 1)
-                   & (pnob->tx_q_len - 1);
-}
-
-int benet_init(struct net_device *);
-int be_ethtool_ioctl(struct net_device *, struct ifreq *);
-struct net_device_stats *benet_get_stats(struct net_device *);
-void be_process_intr(unsigned long context);
-irqreturn_t be_int(int irq, void *dev);
-void be_post_eth_rx_buffs(struct be_net_object *);
-void be_get_stat_cb(void *, int, struct MCC_WRB_AMAP *);
-void be_get_stats_timer_handler(unsigned long);
-void be_wait_nic_tx_cmplx_cmpl(struct be_net_object *);
-void be_print_link_info(struct BE_LINK_STATUS *);
-void be_update_link_status(struct be_adapter *);
-void be_init_procfs(struct be_adapter *);
-void be_cleanup_procfs(struct be_adapter *);
-int be_poll(struct napi_struct *, int);
-struct ETH_RX_COMPL_AMAP *be_get_rx_cmpl(struct be_net_object *);
-void be_notify_cmpl(struct be_net_object *, int, int, int);
-void be_enable_intr(struct be_net_object *);
-void be_enable_eq_intr(struct be_net_object *);
-void be_disable_intr(struct be_net_object *);
-void be_disable_eq_intr(struct be_net_object *);
-int be_set_uc_mac_adr(struct be_net_object *, u8, u8, u8,
-                   u8 *, mcc_wrb_cqe_callback, void *);
-int be_get_flow_ctl(struct be_function_object *pFnObj, bool *, bool *);
-void process_one_tx_compl(struct be_net_object *pnob, u32 end_idx);
-
-#endif /* _BENET_H_ */
diff --git a/drivers/staging/benet/bestatus.h b/drivers/staging/benet/bestatus.h
deleted file mode 100644 (file)
index 59c7a4b..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-#ifndef _BESTATUS_H_
-#define _BESTATUS_H_
-
-#define BE_SUCCESS                      (0x00000000L)
-/*
- * MessageId: BE_PENDING
- *  The BladeEngine Driver call succeeded, and pended operation.
- */
-#define BE_PENDING                       (0x20070001L)
-#define BE_STATUS_PENDING                (BE_PENDING)
-/*
- * MessageId: BE_NOT_OK
- *  An error occurred.
- */
-#define BE_NOT_OK                        (0xE0070002L)
-/*
- * MessageId: BE_STATUS_SYSTEM_RESOURCES
- *  Insufficient host system resources exist to complete the API.
- */
-#define BE_STATUS_SYSTEM_RESOURCES       (0xE0070003L)
-/*
- * MessageId: BE_STATUS_CHIP_RESOURCES
- *  Insufficient chip resources exist to complete the API.
- */
-#define BE_STATUS_CHIP_RESOURCES         (0xE0070004L)
-/*
- * MessageId: BE_STATUS_NO_RESOURCE
- *  Insufficient resources to complete request.
- */
-#define BE_STATUS_NO_RESOURCE            (0xE0070005L)
-/*
- * MessageId: BE_STATUS_BUSY
- *  Resource is currently busy.
- */
-#define BE_STATUS_BUSY                   (0xE0070006L)
-/*
- * MessageId: BE_STATUS_INVALID_PARAMETER
- *  Invalid Parameter in request.
- */
-#define BE_STATUS_INVALID_PARAMETER      (0xE0000007L)
-/*
- * MessageId: BE_STATUS_NOT_SUPPORTED
- *  Requested operation is not supported.
- */
-#define BE_STATUS_NOT_SUPPORTED          (0xE000000DL)
-
-/*
- * ***************************************************************************
- *                     E T H E R N E T   S T A T U S
- * ***************************************************************************
- */
-
-/*
- * MessageId: BE_ETH_TX_ERROR
- *  The Ethernet device driver failed to transmit a packet.
- */
-#define BE_ETH_TX_ERROR                  (0xE0070101L)
-
-/*
- * ***************************************************************************
- *                     S H A R E D   S T A T U S
- * ***************************************************************************
- */
-
-/*
- * MessageId: BE_STATUS_VBD_INVALID_VERSION
- *  The device driver is not compatible with this version of the VBD.
- */
-#define BE_STATUS_INVALID_VERSION    (0xE0070402L)
-/*
- * MessageId: BE_STATUS_DOMAIN_DENIED
- *  The operation failed to complete due to insufficient access
- *  rights for the requesting domain.
- */
-#define BE_STATUS_DOMAIN_DENIED          (0xE0070403L)
-/*
- * MessageId: BE_STATUS_TCP_NOT_STARTED
- *  The embedded TCP/IP stack has not been started.
- */
-#define BE_STATUS_TCP_NOT_STARTED        (0xE0070409L)
-/*
- * MessageId: BE_STATUS_NO_MCC_WRB
- *  No free MCC WRB are available for posting the request.
- */
-#define BE_STATUS_NO_MCC_WRB                 (0xE0070414L)
-
-#endif /* _BESTATUS_ */
diff --git a/drivers/staging/benet/cev.h b/drivers/staging/benet/cev.h
deleted file mode 100644 (file)
index 3099692..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-/*
- * Autogenerated by srcgen version: 0127
- */
-#ifndef __cev_amap_h__
-#define __cev_amap_h__
-#include "ep.h"
-
-/*
- * Host Interrupt Status Register 0. The first of four application
- * interrupt status registers. This register contains the interrupts
- * for Event Queues EQ0 through EQ31.
- */
-struct BE_CEV_ISR0_CSR_AMAP {
-       u8 interrupt0;  /* DWORD 0 */
-       u8 interrupt1;  /* DWORD 0 */
-       u8 interrupt2;  /* DWORD 0 */
-       u8 interrupt3;  /* DWORD 0 */
-       u8 interrupt4;  /* DWORD 0 */
-       u8 interrupt5;  /* DWORD 0 */
-       u8 interrupt6;  /* DWORD 0 */
-       u8 interrupt7;  /* DWORD 0 */
-       u8 interrupt8;  /* DWORD 0 */
-       u8 interrupt9;  /* DWORD 0 */
-       u8 interrupt10; /* DWORD 0 */
-       u8 interrupt11; /* DWORD 0 */
-       u8 interrupt12; /* DWORD 0 */
-       u8 interrupt13; /* DWORD 0 */
-       u8 interrupt14; /* DWORD 0 */
-       u8 interrupt15; /* DWORD 0 */
-       u8 interrupt16; /* DWORD 0 */
-       u8 interrupt17; /* DWORD 0 */
-       u8 interrupt18; /* DWORD 0 */
-       u8 interrupt19; /* DWORD 0 */
-       u8 interrupt20; /* DWORD 0 */
-       u8 interrupt21; /* DWORD 0 */
-       u8 interrupt22; /* DWORD 0 */
-       u8 interrupt23; /* DWORD 0 */
-       u8 interrupt24; /* DWORD 0 */
-       u8 interrupt25; /* DWORD 0 */
-       u8 interrupt26; /* DWORD 0 */
-       u8 interrupt27; /* DWORD 0 */
-       u8 interrupt28; /* DWORD 0 */
-       u8 interrupt29; /* DWORD 0 */
-       u8 interrupt30; /* DWORD 0 */
-       u8 interrupt31; /* DWORD 0 */
-} __packed;
-struct CEV_ISR0_CSR_AMAP {
-       u32 dw[1];
-};
-
-/*
- * Host Interrupt Status Register 1. The second of four application
- * interrupt status registers. This register contains the interrupts
- * for Event Queues EQ32 through EQ63.
- */
-struct BE_CEV_ISR1_CSR_AMAP {
-       u8 interrupt32; /* DWORD 0 */
-       u8 interrupt33; /* DWORD 0 */
-       u8 interrupt34; /* DWORD 0 */
-       u8 interrupt35; /* DWORD 0 */
-       u8 interrupt36; /* DWORD 0 */
-       u8 interrupt37; /* DWORD 0 */
-       u8 interrupt38; /* DWORD 0 */
-       u8 interrupt39; /* DWORD 0 */
-       u8 interrupt40; /* DWORD 0 */
-       u8 interrupt41; /* DWORD 0 */
-       u8 interrupt42; /* DWORD 0 */
-       u8 interrupt43; /* DWORD 0 */
-       u8 interrupt44; /* DWORD 0 */
-       u8 interrupt45; /* DWORD 0 */
-       u8 interrupt46; /* DWORD 0 */
-       u8 interrupt47; /* DWORD 0 */
-       u8 interrupt48; /* DWORD 0 */
-       u8 interrupt49; /* DWORD 0 */
-       u8 interrupt50; /* DWORD 0 */
-       u8 interrupt51; /* DWORD 0 */
-       u8 interrupt52; /* DWORD 0 */
-       u8 interrupt53; /* DWORD 0 */
-       u8 interrupt54; /* DWORD 0 */
-       u8 interrupt55; /* DWORD 0 */
-       u8 interrupt56; /* DWORD 0 */
-       u8 interrupt57; /* DWORD 0 */
-       u8 interrupt58; /* DWORD 0 */
-       u8 interrupt59; /* DWORD 0 */
-       u8 interrupt60; /* DWORD 0 */
-       u8 interrupt61; /* DWORD 0 */
-       u8 interrupt62; /* DWORD 0 */
-       u8 interrupt63; /* DWORD 0 */
-} __packed;
-struct CEV_ISR1_CSR_AMAP {
-       u32 dw[1];
-};
-/*
- * Host Interrupt Status Register 2. The third of four application
- * interrupt status registers. This register contains the interrupts
- * for Event Queues EQ64 through EQ95.
- */
-struct BE_CEV_ISR2_CSR_AMAP {
-       u8 interrupt64; /* DWORD 0 */
-       u8 interrupt65; /* DWORD 0 */
-       u8 interrupt66; /* DWORD 0 */
-       u8 interrupt67; /* DWORD 0 */
-       u8 interrupt68; /* DWORD 0 */
-       u8 interrupt69; /* DWORD 0 */
-       u8 interrupt70; /* DWORD 0 */
-       u8 interrupt71; /* DWORD 0 */
-       u8 interrupt72; /* DWORD 0 */
-       u8 interrupt73; /* DWORD 0 */
-       u8 interrupt74; /* DWORD 0 */
-       u8 interrupt75; /* DWORD 0 */
-       u8 interrupt76; /* DWORD 0 */
-       u8 interrupt77; /* DWORD 0 */
-       u8 interrupt78; /* DWORD 0 */
-       u8 interrupt79; /* DWORD 0 */
-       u8 interrupt80; /* DWORD 0 */
-       u8 interrupt81; /* DWORD 0 */
-       u8 interrupt82; /* DWORD 0 */
-       u8 interrupt83; /* DWORD 0 */
-       u8 interrupt84; /* DWORD 0 */
-       u8 interrupt85; /* DWORD 0 */
-       u8 interrupt86; /* DWORD 0 */
-       u8 interrupt87; /* DWORD 0 */
-       u8 interrupt88; /* DWORD 0 */
-       u8 interrupt89; /* DWORD 0 */
-       u8 interrupt90; /* DWORD 0 */
-       u8 interrupt91; /* DWORD 0 */
-       u8 interrupt92; /* DWORD 0 */
-       u8 interrupt93; /* DWORD 0 */
-       u8 interrupt94; /* DWORD 0 */
-       u8 interrupt95; /* DWORD 0 */
-} __packed;
-struct CEV_ISR2_CSR_AMAP {
-       u32 dw[1];
-};
-
-/*
- * Host Interrupt Status Register 3. The fourth of four application
- * interrupt status registers. This register contains the interrupts
- * for Event Queues EQ96 through EQ127.
- */
-struct BE_CEV_ISR3_CSR_AMAP {
-       u8 interrupt96; /* DWORD 0 */
-       u8 interrupt97; /* DWORD 0 */
-       u8 interrupt98; /* DWORD 0 */
-       u8 interrupt99; /* DWORD 0 */
-       u8 interrupt100;        /* DWORD 0 */
-       u8 interrupt101;        /* DWORD 0 */
-       u8 interrupt102;        /* DWORD 0 */
-       u8 interrupt103;        /* DWORD 0 */
-       u8 interrupt104;        /* DWORD 0 */
-       u8 interrupt105;        /* DWORD 0 */
-       u8 interrupt106;        /* DWORD 0 */
-       u8 interrupt107;        /* DWORD 0 */
-       u8 interrupt108;        /* DWORD 0 */
-       u8 interrupt109;        /* DWORD 0 */
-       u8 interrupt110;        /* DWORD 0 */
-       u8 interrupt111;        /* DWORD 0 */
-       u8 interrupt112;        /* DWORD 0 */
-       u8 interrupt113;        /* DWORD 0 */
-       u8 interrupt114;        /* DWORD 0 */
-       u8 interrupt115;        /* DWORD 0 */
-       u8 interrupt116;        /* DWORD 0 */
-       u8 interrupt117;        /* DWORD 0 */
-       u8 interrupt118;        /* DWORD 0 */
-       u8 interrupt119;        /* DWORD 0 */
-       u8 interrupt120;        /* DWORD 0 */
-       u8 interrupt121;        /* DWORD 0 */
-       u8 interrupt122;        /* DWORD 0 */
-       u8 interrupt123;        /* DWORD 0 */
-       u8 interrupt124;        /* DWORD 0 */
-       u8 interrupt125;        /* DWORD 0 */
-       u8 interrupt126;        /* DWORD 0 */
-       u8 interrupt127;        /* DWORD 0 */
-} __packed;
-struct CEV_ISR3_CSR_AMAP {
-       u32 dw[1];
-};
-
-/*  Completions and Events block Registers.  */
-struct BE_CEV_CSRMAP_AMAP {
-       u8 rsvd0[32];   /* DWORD 0 */
-       u8 rsvd1[32];   /* DWORD 1 */
-       u8 rsvd2[32];   /* DWORD 2 */
-       u8 rsvd3[32];   /* DWORD 3 */
-       struct BE_CEV_ISR0_CSR_AMAP isr0;
-       struct BE_CEV_ISR1_CSR_AMAP isr1;
-       struct BE_CEV_ISR2_CSR_AMAP isr2;
-       struct BE_CEV_ISR3_CSR_AMAP isr3;
-       u8 rsvd4[32];   /* DWORD 8 */
-       u8 rsvd5[32];   /* DWORD 9 */
-       u8 rsvd6[32];   /* DWORD 10 */
-       u8 rsvd7[32];   /* DWORD 11 */
-       u8 rsvd8[32];   /* DWORD 12 */
-       u8 rsvd9[32];   /* DWORD 13 */
-       u8 rsvd10[32];  /* DWORD 14 */
-       u8 rsvd11[32];  /* DWORD 15 */
-       u8 rsvd12[32];  /* DWORD 16 */
-       u8 rsvd13[32];  /* DWORD 17 */
-       u8 rsvd14[32];  /* DWORD 18 */
-       u8 rsvd15[32];  /* DWORD 19 */
-       u8 rsvd16[32];  /* DWORD 20 */
-       u8 rsvd17[32];  /* DWORD 21 */
-       u8 rsvd18[32];  /* DWORD 22 */
-       u8 rsvd19[32];  /* DWORD 23 */
-       u8 rsvd20[32];  /* DWORD 24 */
-       u8 rsvd21[32];  /* DWORD 25 */
-       u8 rsvd22[32];  /* DWORD 26 */
-       u8 rsvd23[32];  /* DWORD 27 */
-       u8 rsvd24[32];  /* DWORD 28 */
-       u8 rsvd25[32];  /* DWORD 29 */
-       u8 rsvd26[32];  /* DWORD 30 */
-       u8 rsvd27[32];  /* DWORD 31 */
-       u8 rsvd28[32];  /* DWORD 32 */
-       u8 rsvd29[32];  /* DWORD 33 */
-       u8 rsvd30[192]; /* DWORD 34 */
-       u8 rsvd31[192]; /* DWORD 40 */
-       u8 rsvd32[160]; /* DWORD 46 */
-       u8 rsvd33[160]; /* DWORD 51 */
-       u8 rsvd34[160]; /* DWORD 56 */
-       u8 rsvd35[96];  /* DWORD 61 */
-       u8 rsvd36[192][32];     /* DWORD 64 */
-} __packed;
-struct CEV_CSRMAP_AMAP {
-       u32 dw[256];
-};
-
-#endif /* __cev_amap_h__ */
diff --git a/drivers/staging/benet/cq.c b/drivers/staging/benet/cq.c
deleted file mode 100644 (file)
index 6504586..0000000
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-#include "hwlib.h"
-#include "bestatus.h"
-
-/*
- * Completion Queue Objects
- */
-/*
- *============================================================================
- *                  P U B L I C  R O U T I N E S
- *============================================================================
- */
-
-/*
-    This routine creates a completion queue based on the client completion
-    queue configuration information.
-
-
-    FunctionObject      - Handle to a function object
-    CqBaseVa            - Base VA for a the CQ ring
-    NumEntries          - CEV_CQ_CNT_* values
-    solEventEnable      - 0 = All CQEs can generate Events if CQ is eventable
-                       1 = only CQEs with solicited bit set are eventable
-    eventable           - Eventable CQ, generates interrupts.
-    nodelay             - 1 = Force interrupt, relevent if CQ eventable.
-                       Interrupt is asserted immediately after EQE
-                       write is confirmed, regardless of EQ Timer
-                       or watermark settings.
-    wme                 - Enable watermark based coalescing
-    wmThresh            - High watermark(CQ fullness at which event
-                       or interrupt should be asserted).  These are the
-                       CEV_WATERMARK encoded values.
-    EqObject            - EQ Handle to assign to this CQ
-    ppCqObject          - Internal CQ Handle returned.
-
-    Returns BE_SUCCESS if successfull, otherwise a useful error code is
-       returned.
-
-    IRQL < DISPATCH_LEVEL
-
-*/
-int be_cq_create(struct be_function_object *pfob,
-       struct ring_desc *rd, u32 length, bool solicited_eventable,
-       bool no_delay, u32 wm_thresh,
-       struct be_eq_object *eq_object, struct be_cq_object *cq_object)
-{
-       int status = BE_SUCCESS;
-       u32 num_entries_encoding;
-       u32 num_entries = length / sizeof(struct MCC_CQ_ENTRY_AMAP);
-       struct FWCMD_COMMON_CQ_CREATE *fwcmd = NULL;
-       struct MCC_WRB_AMAP *wrb = NULL;
-       u32 n;
-       unsigned long irql;
-
-       ASSERT(rd);
-       ASSERT(cq_object);
-       ASSERT(length % sizeof(struct MCC_CQ_ENTRY_AMAP) == 0);
-
-       switch (num_entries) {
-       case 256:
-               num_entries_encoding = CEV_CQ_CNT_256;
-               break;
-       case 512:
-               num_entries_encoding = CEV_CQ_CNT_512;
-               break;
-       case 1024:
-               num_entries_encoding = CEV_CQ_CNT_1024;
-               break;
-       default:
-               ASSERT(0);
-               return BE_STATUS_INVALID_PARAMETER;
-       }
-
-       /*
-        * All cq entries all the same size.  Use iSCSI version
-        * as a test for the proper rd length.
-        */
-       memset(cq_object, 0, sizeof(*cq_object));
-
-       atomic_set(&cq_object->ref_count, 0);
-       cq_object->parent_function = pfob;
-       cq_object->eq_object = eq_object;
-       cq_object->num_entries = num_entries;
-       /* save for MCC cq processing */
-       cq_object->va = rd->va;
-
-       /* map into UT. */
-       length = num_entries * sizeof(struct MCC_CQ_ENTRY_AMAP);
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-       if (!wrb) {
-               ASSERT(wrb);
-               TRACE(DL_ERR, "No free MCC WRBs in create EQ.");
-               status = BE_STATUS_NO_MCC_WRB;
-               goto Error;
-       }
-       /* Prepares an embedded fwcmd, including request/response sizes. */
-       fwcmd = BE_PREPARE_EMBEDDED_FWCMD(pfob, wrb, COMMON_CQ_CREATE);
-
-       fwcmd->params.request.num_pages = PAGES_SPANNED(OFFSET_IN_PAGE(rd->va),
-                                                                       length);
-
-       AMAP_SET_BITS_PTR(CQ_CONTEXT, valid, &fwcmd->params.request.context, 1);
-       n = pfob->pci_function_number;
-       AMAP_SET_BITS_PTR(CQ_CONTEXT, Func, &fwcmd->params.request.context, n);
-
-       n = (eq_object != NULL);
-       AMAP_SET_BITS_PTR(CQ_CONTEXT, Eventable,
-                               &fwcmd->params.request.context, n);
-       AMAP_SET_BITS_PTR(CQ_CONTEXT, Armed, &fwcmd->params.request.context, 1);
-
-       n = eq_object ? eq_object->eq_id : 0;
-       AMAP_SET_BITS_PTR(CQ_CONTEXT, EQID, &fwcmd->params.request.context, n);
-       AMAP_SET_BITS_PTR(CQ_CONTEXT, Count,
-                       &fwcmd->params.request.context, num_entries_encoding);
-
-       n = 0; /* Protection Domain is always 0 in  Linux  driver */
-       AMAP_SET_BITS_PTR(CQ_CONTEXT, PD, &fwcmd->params.request.context, n);
-       AMAP_SET_BITS_PTR(CQ_CONTEXT, NoDelay,
-                               &fwcmd->params.request.context, no_delay);
-       AMAP_SET_BITS_PTR(CQ_CONTEXT, SolEvent,
-                       &fwcmd->params.request.context, solicited_eventable);
-
-       n = (wm_thresh != 0xFFFFFFFF);
-       AMAP_SET_BITS_PTR(CQ_CONTEXT, WME, &fwcmd->params.request.context, n);
-
-       n = (n ? wm_thresh : 0);
-       AMAP_SET_BITS_PTR(CQ_CONTEXT, Watermark,
-                               &fwcmd->params.request.context, n);
-       /* Create a page list for the FWCMD. */
-       be_rd_to_pa_list(rd, fwcmd->params.request.pages,
-                         ARRAY_SIZE(fwcmd->params.request.pages));
-
-       /* Post the f/w command */
-       status = be_function_post_mcc_wrb(pfob, wrb, NULL, NULL, NULL,
-                       NULL, NULL, fwcmd, NULL);
-       if (status != BE_SUCCESS) {
-               TRACE(DL_ERR, "MCC to create CQ failed.");
-               goto Error;
-       }
-       /* Remember the CQ id. */
-       cq_object->cq_id = fwcmd->params.response.cq_id;
-
-       /* insert this cq into eq_object reference */
-       if (eq_object) {
-               atomic_inc(&eq_object->ref_count);
-               list_add_tail(&cq_object->cqlist_for_eq,
-                                       &eq_object->cq_list_head);
-       }
-
-Error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
-
-/*
-
-    Deferences the given object. Once the object's reference count drops to
-    zero, the object is destroyed and all resources that are held by this object
-    are released.  The on-chip context is also destroyed along with the queue
-    ID, and any mappings made into the UT.
-
-    cq_object            - CQ handle returned from cq_object_create.
-
-    returns the current reference count on the object
-
-    IRQL: IRQL < DISPATCH_LEVEL
-*/
-int be_cq_destroy(struct be_cq_object *cq_object)
-{
-       int status = 0;
-
-       /* Nothing should reference this CQ at this point. */
-       ASSERT(atomic_read(&cq_object->ref_count) == 0);
-
-       /* Send fwcmd to destroy the CQ. */
-       status = be_function_ring_destroy(cq_object->parent_function,
-                    cq_object->cq_id, FWCMD_RING_TYPE_CQ,
-                                       NULL, NULL, NULL, NULL);
-       ASSERT(status == 0);
-
-       /* Remove reference if this is an eventable CQ. */
-       if (cq_object->eq_object) {
-               atomic_dec(&cq_object->eq_object->ref_count);
-               list_del(&cq_object->cqlist_for_eq);
-       }
-       return BE_SUCCESS;
-}
-
diff --git a/drivers/staging/benet/descriptors.h b/drivers/staging/benet/descriptors.h
deleted file mode 100644 (file)
index 8da438c..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-/*
- * Autogenerated by srcgen version: 0127
- */
-#ifndef __descriptors_amap_h__
-#define __descriptors_amap_h__
-
-/*
- * --- IPC_NODE_ID_ENUM ---
- * IPC processor id values
- */
-#define TPOST_NODE_ID                   (0)    /* TPOST ID */
-#define TPRE_NODE_ID                    (1)    /* TPRE ID */
-#define TXULP0_NODE_ID                  (2)    /* TXULP0 ID */
-#define TXULP1_NODE_ID                  (3)    /* TXULP1 ID */
-#define TXULP2_NODE_ID                  (4)    /* TXULP2 ID */
-#define RXULP0_NODE_ID                  (5)    /* RXULP0 ID */
-#define RXULP1_NODE_ID                  (6)    /* RXULP1 ID */
-#define RXULP2_NODE_ID                  (7)    /* RXULP2 ID */
-#define MPU_NODE_ID                     (15)   /* MPU ID */
-
-/*
- * --- MAC_ID_ENUM ---
- * Meaning of the mac_id field in rxpp_eth_d
- */
-#define PORT0_HOST_MAC0    (0)  /* PD 0, Port 0, host networking, MAC 0. */
-#define PORT0_HOST_MAC1    (1) /* PD 0, Port 0, host networking, MAC 1. */
-#define PORT0_STORAGE_MAC0 (2) /* PD 0, Port 0, host storage, MAC 0. */
-#define PORT0_STORAGE_MAC1 (3) /* PD 0, Port 0, host storage, MAC 1. */
-#define PORT1_HOST_MAC0    (4) /* PD 0, Port 1 host networking, MAC 0. */
-#define PORT1_HOST_MAC1    (5) /* PD 0, Port 1 host networking, MAC 1. */
-#define PORT1_STORAGE_MAC0 (6) /* PD 0, Port 1 host storage, MAC 0. */
-#define PORT1_STORAGE_MAC1 (7) /* PD 0, Port 1 host storage, MAC 1. */
-#define FIRST_VM_MAC       (8) /* PD 1 MAC. Protection domains have IDs */
-                               /* from 0x8-0x26, one per PD. */
-#define LAST_VM_MAC        (38)        /* PD 31 MAC. */
-#define MGMT_MAC           (39)        /* Management port MAC. */
-#define MARBLE_MAC0        (59)        /* Used for flushing function 0 receive */
-                                 /*
-                                  * queues before re-using a torn-down
-                                  * receive ring. the DA =
-                                  * 00-00-00-00-00-00, and the MSB of the
-                                  * SA = 00
-                                  */
-#define MARBLE_MAC1        (60)        /* Used for flushing function 1 receive */
-                                 /*
-                                  * queues before re-using a torn-down
-                                  * receive ring. the DA =
-                                  * 00-00-00-00-00-00, and the MSB of the
-                                  * SA != 00
-                                  */
-#define NULL_MAC           (61)        /* Promiscuous mode, indicates no match */
-#define MCAST_MAC          (62)        /* Multicast match. */
-#define BCAST_MATCH        (63)        /* Broadcast match. */
-
-#endif /* __descriptors_amap_h__ */
diff --git a/drivers/staging/benet/doorbells.h b/drivers/staging/benet/doorbells.h
deleted file mode 100644 (file)
index 550cc4d..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-/*
- * Autogenerated by srcgen version: 0127
- */
-#ifndef __doorbells_amap_h__
-#define __doorbells_amap_h__
-
-/* The TX/RDMA send queue doorbell. */
-struct BE_SQ_DB_AMAP {
-       u8 cid[11];             /* DWORD 0 */
-       u8 rsvd0[5];    /* DWORD 0 */
-       u8 numPosted[14];       /* DWORD 0 */
-       u8 rsvd1[2];    /* DWORD 0 */
-} __packed;
-struct SQ_DB_AMAP {
-       u32 dw[1];
-};
-
-/* The receive queue doorbell. */
-struct BE_RQ_DB_AMAP {
-       u8 rq[10];              /* DWORD 0 */
-       u8 rsvd0[13];   /* DWORD 0 */
-       u8 Invalidate;  /* DWORD 0 */
-       u8 numPosted[8];        /* DWORD 0 */
-} __packed;
-struct RQ_DB_AMAP {
-       u32 dw[1];
-};
-
-/*
- * The CQ/EQ doorbell. Software MUST set reserved fields in this
- * descriptor to zero, otherwise (CEV) hardware will not execute the
- * doorbell (flagging a bad_db_qid error instead).
- */
-struct BE_CQ_DB_AMAP {
-       u8 qid[10];             /* DWORD 0 */
-       u8 rsvd0[4];    /* DWORD 0 */
-       u8 rearm;               /* DWORD 0 */
-       u8 event;               /* DWORD 0 */
-       u8 num_popped[13];      /* DWORD 0 */
-       u8 rsvd1[3];    /* DWORD 0 */
-} __packed;
-struct CQ_DB_AMAP {
-       u32 dw[1];
-};
-
-struct BE_TPM_RQ_DB_AMAP {
-       u8 qid[10];             /* DWORD 0 */
-       u8 rsvd0[6];    /* DWORD 0 */
-       u8 numPosted[11];       /* DWORD 0 */
-       u8 mss_cnt[5];  /* DWORD 0 */
-} __packed;
-struct TPM_RQ_DB_AMAP {
-       u32 dw[1];
-};
-
-/*
- * Post WRB Queue Doorbell Register used by the host Storage stack
- * to notify the controller of a posted Work Request Block
- */
-struct BE_WRB_POST_DB_AMAP {
-       u8 wrb_cid[10]; /* DWORD 0 */
-       u8 rsvd0[6];    /* DWORD 0 */
-       u8 wrb_index[8];        /* DWORD 0 */
-       u8 numberPosted[8];     /* DWORD 0 */
-} __packed;
-struct WRB_POST_DB_AMAP {
-       u32 dw[1];
-};
-
-/*
- * Update Default PDU Queue Doorbell Register used to communicate
- * to the controller that the driver has stopped processing the queue
- * and where in the queue it stopped, this is
- * a CQ Entry Type. Used by storage driver.
- */
-struct BE_DEFAULT_PDU_DB_AMAP {
-       u8 qid[10];             /* DWORD 0 */
-       u8 rsvd0[4];    /* DWORD 0 */
-       u8 rearm;               /* DWORD 0 */
-       u8 event;               /* DWORD 0 */
-       u8 cqproc[14];  /* DWORD 0 */
-       u8 rsvd1[2];    /* DWORD 0 */
-} __packed;
-struct DEFAULT_PDU_DB_AMAP {
-       u32 dw[1];
-};
-
-/* Management Command and Controller default fragment ring */
-struct BE_MCC_DB_AMAP {
-       u8 rid[11];             /* DWORD 0 */
-       u8 rsvd0[5];    /* DWORD 0 */
-       u8 numPosted[14];       /* DWORD 0 */
-       u8 rsvd1[2];    /* DWORD 0 */
-} __packed;
-struct MCC_DB_AMAP {
-       u32 dw[1];
-};
-
-/*
- * Used for bootstrapping the Host interface. This register is
- * used for driver communication with the MPU when no MCC Rings exist.
- * The software must write this register twice to post any MCC
- * command. First, it writes the register with hi=1 and the upper bits of
- * the  physical address for the MCC_MAILBOX structure.  Software must poll
- * the ready bit until this is acknowledged.  Then, sotware writes the
- * register with hi=0 with the lower bits in the address.  It must
- * poll the ready bit until the MCC command is complete.  Upon completion,
- * the MCC_MAILBOX will contain a valid completion queue  entry.
- */
-struct BE_MPU_MAILBOX_DB_AMAP {
-       u8 ready;               /* DWORD 0 */
-       u8 hi;          /* DWORD 0 */
-       u8 address[30]; /* DWORD 0 */
-} __packed;
-struct MPU_MAILBOX_DB_AMAP {
-       u32 dw[1];
-};
-
-/*
- *  This is the protection domain doorbell register map. Note that
- *  while this map shows doorbells for all Blade Engine supported
- *  protocols, not all of these may be valid in a given function or
- *  protection domain. It is the responsibility of the application
- *  accessing the doorbells to know which are valid. Each doorbell
- *  occupies 32 bytes of space, but unless otherwise specified,
- *  only the first 4 bytes should be written.  There are 32 instances
- *  of these doorbells for the host and 31 virtual machines respectively.
- *  The host and VMs will only map the doorbell pages belonging to its
- *  protection domain. It will not be able to touch the doorbells for
- *  another VM. The doorbells are the only registers directly accessible
- *  by a virtual machine. Similarly, there are 511 additional
- *  doorbells for RDMA protection domains. PD 0 for RDMA shares
- *  the same physical protection domain doorbell page as ETH/iSCSI.
- *
- */
-struct BE_PROTECTION_DOMAIN_DBMAP_AMAP {
-       u8 rsvd0[512];  /* DWORD 0 */
-       struct BE_SQ_DB_AMAP rdma_sq_db;
-       u8 rsvd1[7][32];        /* DWORD 17 */
-       struct BE_WRB_POST_DB_AMAP iscsi_wrb_post_db;
-       u8 rsvd2[7][32];        /* DWORD 25 */
-       struct BE_SQ_DB_AMAP etx_sq_db;
-       u8 rsvd3[7][32];        /* DWORD 33 */
-       struct BE_RQ_DB_AMAP rdma_rq_db;
-       u8 rsvd4[7][32];        /* DWORD 41 */
-       struct BE_DEFAULT_PDU_DB_AMAP iscsi_default_pdu_db;
-       u8 rsvd5[7][32];        /* DWORD 49 */
-       struct BE_TPM_RQ_DB_AMAP tpm_rq_db;
-       u8 rsvd6[7][32];        /* DWORD 57 */
-       struct BE_RQ_DB_AMAP erx_rq_db;
-       u8 rsvd7[7][32];        /* DWORD 65 */
-       struct BE_CQ_DB_AMAP cq_db;
-       u8 rsvd8[7][32];        /* DWORD 73 */
-       struct BE_MCC_DB_AMAP mpu_mcc_db;
-       u8 rsvd9[7][32];        /* DWORD 81 */
-       struct BE_MPU_MAILBOX_DB_AMAP mcc_bootstrap_db;
-       u8 rsvd10[935][32];     /* DWORD 89 */
-} __packed;
-struct PROTECTION_DOMAIN_DBMAP_AMAP {
-       u32 dw[1024];
-};
-
-#endif /* __doorbells_amap_h__ */
diff --git a/drivers/staging/benet/ep.h b/drivers/staging/benet/ep.h
deleted file mode 100644 (file)
index 72fcf64..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-/*
- * Autogenerated by srcgen version: 0127
- */
-#ifndef __ep_amap_h__
-#define __ep_amap_h__
-
-/* General Control and Status Register. */
-struct BE_EP_CONTROL_CSR_AMAP {
-       u8 m0_RxPbuf;   /* DWORD 0 */
-       u8 m1_RxPbuf;   /* DWORD 0 */
-       u8 m2_RxPbuf;   /* DWORD 0 */
-       u8 ff_en;               /* DWORD 0 */
-       u8 rsvd0[27];   /* DWORD 0 */
-       u8 CPU_reset;   /* DWORD 0 */
-} __packed;
-struct EP_CONTROL_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* Semaphore Register. */
-struct BE_EP_SEMAPHORE_CSR_AMAP {
-       u8 value[32];   /* DWORD 0 */
-} __packed;
-struct EP_SEMAPHORE_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* Embedded Processor Specific Registers. */
-struct BE_EP_CSRMAP_AMAP {
-       struct BE_EP_CONTROL_CSR_AMAP ep_control;
-       u8 rsvd0[32];   /* DWORD 1 */
-       u8 rsvd1[32];   /* DWORD 2 */
-       u8 rsvd2[32];   /* DWORD 3 */
-       u8 rsvd3[32];   /* DWORD 4 */
-       u8 rsvd4[32];   /* DWORD 5 */
-       u8 rsvd5[8][128];       /* DWORD 6 */
-       u8 rsvd6[32];   /* DWORD 38 */
-       u8 rsvd7[32];   /* DWORD 39 */
-       u8 rsvd8[32];   /* DWORD 40 */
-       u8 rsvd9[32];   /* DWORD 41 */
-       u8 rsvd10[32];  /* DWORD 42 */
-       struct BE_EP_SEMAPHORE_CSR_AMAP ep_semaphore;
-       u8 rsvd11[32];  /* DWORD 44 */
-       u8 rsvd12[19][32];      /* DWORD 45 */
-} __packed;
-struct EP_CSRMAP_AMAP {
-       u32 dw[64];
-};
-
-#endif /* __ep_amap_h__ */
diff --git a/drivers/staging/benet/eq.c b/drivers/staging/benet/eq.c
deleted file mode 100644 (file)
index db92ccd..0000000
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-#include "hwlib.h"
-#include "bestatus.h"
-/*
-    This routine creates an event queue based on the client completion
-    queue configuration information.
-
-    FunctionObject      - Handle to a function object
-    EqBaseVa            - Base VA for a the EQ ring
-    SizeEncoding        - The encoded size for the EQ entries. This value is
-                       either CEV_EQ_SIZE_4 or CEV_EQ_SIZE_16
-    NumEntries          - CEV_CQ_CNT_* values.
-    Watermark           - Enables watermark based coalescing.  This parameter
-                       must be of the type CEV_WMARK_* if watermarks
-                       are enabled.  If watermarks to to be disabled
-                       this value should be-1.
-    TimerDelay          - If a timer delay is enabled this value should be the
-                       time of the delay in 8 microsecond units.  If
-                       delays are not used this parameter should be
-                       set to -1.
-    ppEqObject          - Internal EQ Handle returned.
-
-    Returns BE_SUCCESS if successfull,, otherwise a useful error code
-       is returned.
-
-    IRQL < DISPATCH_LEVEL
-*/
-int
-be_eq_create(struct be_function_object *pfob,
-               struct ring_desc *rd, u32 eqe_size, u32 num_entries,
-               u32 watermark,  /* CEV_WMARK_* or -1 */
-               u32 timer_delay,        /* in 8us units, or -1 */
-               struct be_eq_object *eq_object)
-{
-       int status = BE_SUCCESS;
-       u32 num_entries_encoding, eqe_size_encoding, length;
-       struct FWCMD_COMMON_EQ_CREATE *fwcmd = NULL;
-       struct MCC_WRB_AMAP *wrb = NULL;
-       u32 n;
-       unsigned long irql;
-
-       ASSERT(rd);
-       ASSERT(eq_object);
-
-       switch (num_entries) {
-       case 256:
-               num_entries_encoding = CEV_EQ_CNT_256;
-               break;
-       case 512:
-               num_entries_encoding = CEV_EQ_CNT_512;
-               break;
-       case 1024:
-               num_entries_encoding = CEV_EQ_CNT_1024;
-               break;
-       case 2048:
-               num_entries_encoding = CEV_EQ_CNT_2048;
-               break;
-       case 4096:
-               num_entries_encoding = CEV_EQ_CNT_4096;
-               break;
-       default:
-               ASSERT(0);
-               return BE_STATUS_INVALID_PARAMETER;
-       }
-
-       switch (eqe_size) {
-       case 4:
-               eqe_size_encoding = CEV_EQ_SIZE_4;
-               break;
-       case 16:
-               eqe_size_encoding = CEV_EQ_SIZE_16;
-               break;
-       default:
-               ASSERT(0);
-               return BE_STATUS_INVALID_PARAMETER;
-       }
-
-       if ((eqe_size == 4 && num_entries < 1024) ||
-           (eqe_size == 16 && num_entries == 4096)) {
-               TRACE(DL_ERR, "Bad EQ size. eqe_size:%d num_entries:%d",
-                     eqe_size, num_entries);
-               ASSERT(0);
-               return BE_STATUS_INVALID_PARAMETER;
-       }
-
-       memset(eq_object, 0, sizeof(*eq_object));
-
-       atomic_set(&eq_object->ref_count, 0);
-       eq_object->parent_function = pfob;
-       eq_object->eq_id = 0xFFFFFFFF;
-
-       INIT_LIST_HEAD(&eq_object->cq_list_head);
-
-       length = num_entries * eqe_size;
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-       if (!wrb) {
-               ASSERT(wrb);
-               TRACE(DL_ERR, "No free MCC WRBs in create EQ.");
-               status = BE_STATUS_NO_MCC_WRB;
-               goto Error;
-       }
-       /* Prepares an embedded fwcmd, including request/response sizes. */
-       fwcmd = BE_PREPARE_EMBEDDED_FWCMD(pfob, wrb, COMMON_EQ_CREATE);
-
-       fwcmd->params.request.num_pages = PAGES_SPANNED(OFFSET_IN_PAGE(rd->va),
-                                                                       length);
-       n = pfob->pci_function_number;
-       AMAP_SET_BITS_PTR(EQ_CONTEXT, Func, &fwcmd->params.request.context, n);
-
-       AMAP_SET_BITS_PTR(EQ_CONTEXT, valid, &fwcmd->params.request.context, 1);
-
-       AMAP_SET_BITS_PTR(EQ_CONTEXT, Size,
-                       &fwcmd->params.request.context, eqe_size_encoding);
-
-       n = 0; /* Protection Domain is always 0 in  Linux  driver */
-       AMAP_SET_BITS_PTR(EQ_CONTEXT, PD, &fwcmd->params.request.context, n);
-
-       /* Let the caller ARM the EQ with the doorbell. */
-       AMAP_SET_BITS_PTR(EQ_CONTEXT, Armed, &fwcmd->params.request.context, 0);
-
-       AMAP_SET_BITS_PTR(EQ_CONTEXT, Count, &fwcmd->params.request.context,
-                                       num_entries_encoding);
-
-       n = pfob->pci_function_number * 32;
-       AMAP_SET_BITS_PTR(EQ_CONTEXT, EventVect,
-                               &fwcmd->params.request.context, n);
-       if (watermark != -1) {
-               AMAP_SET_BITS_PTR(EQ_CONTEXT, WME,
-                               &fwcmd->params.request.context, 1);
-               AMAP_SET_BITS_PTR(EQ_CONTEXT, Watermark,
-                               &fwcmd->params.request.context, watermark);
-               ASSERT(watermark <= CEV_WMARK_240);
-       } else
-               AMAP_SET_BITS_PTR(EQ_CONTEXT, WME,
-                                       &fwcmd->params.request.context, 0);
-       if (timer_delay != -1) {
-               AMAP_SET_BITS_PTR(EQ_CONTEXT, TMR,
-                                       &fwcmd->params.request.context, 1);
-
-               ASSERT(timer_delay <= 250);     /* max value according to EAS */
-               timer_delay = min(timer_delay, (u32)250);
-
-               AMAP_SET_BITS_PTR(EQ_CONTEXT, Delay,
-                               &fwcmd->params.request.context, timer_delay);
-       } else {
-               AMAP_SET_BITS_PTR(EQ_CONTEXT, TMR,
-                               &fwcmd->params.request.context, 0);
-       }
-       /* Create a page list for the FWCMD. */
-       be_rd_to_pa_list(rd, fwcmd->params.request.pages,
-                         ARRAY_SIZE(fwcmd->params.request.pages));
-
-       status = be_function_post_mcc_wrb(pfob, wrb, NULL, NULL, NULL,
-                                       NULL, NULL, fwcmd, NULL);
-       if (status != BE_SUCCESS) {
-               TRACE(DL_ERR, "MCC to create EQ failed.");
-               goto Error;
-       }
-       /* Get the EQ id.  The MPU allocates the IDs. */
-       eq_object->eq_id = fwcmd->params.response.eq_id;
-
-Error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
-
-/*
-    Deferences the given object. Once the object's reference count drops to
-    zero, the object is destroyed and all resources that are held by this
-    object are released.  The on-chip context is also destroyed along with
-    the queue ID, and any mappings made into the UT.
-
-    eq_object            - EQ handle returned from eq_object_create.
-
-    Returns BE_SUCCESS if successfull, otherwise a useful error code
-       is returned.
-
-    IRQL: IRQL < DISPATCH_LEVEL
-*/
-int be_eq_destroy(struct be_eq_object *eq_object)
-{
-       int status = 0;
-
-       ASSERT(atomic_read(&eq_object->ref_count) == 0);
-       /* no CQs should reference this EQ now */
-       ASSERT(list_empty(&eq_object->cq_list_head));
-
-       /* Send fwcmd to destroy the EQ. */
-       status = be_function_ring_destroy(eq_object->parent_function,
-                            eq_object->eq_id, FWCMD_RING_TYPE_EQ,
-                                       NULL, NULL, NULL, NULL);
-       ASSERT(status == 0);
-
-       return BE_SUCCESS;
-}
-/*
- *---------------------------------------------------------------------------
- * Function: be_eq_modify_delay
- *   Changes the EQ delay for a group of EQs.
- * num_eq             - The number of EQs in the eq_array to adjust.
- *                     This also is the number of delay values in
- *                     the eq_delay_array.
- * eq_array           - Array of struct be_eq_object pointers to adjust.
- * eq_delay_array     - Array of "num_eq" timer delays in units
- *                     of microseconds. The be_eq_query_delay_range
- *                     fwcmd returns the resolution and range of
- *                      legal EQ delays.
- * cb           -
- * cb_context   -
- * q_ctxt             - Optional. Pointer to a previously allocated
- *                     struct. If the MCC WRB ring is full, this
- *                     structure is used to queue the operation. It
- *                      will be posted to the MCC ring when space
- *                      becomes available. All queued commands will
- *                      be posted to the ring in the order they are
- *                      received. It is always valid to pass a pointer to
- *                      a generic be_generic_q_cntxt. However,
- *                      the specific context structs
- *                      are generally smaller than the generic struct.
- * return pend_status - BE_SUCCESS (0) on success.
- *                     BE_PENDING (postive value) if the FWCMD
- *                      completion is pending. Negative error code on failure.
- *-------------------------------------------------------------------------
- */
-int
-be_eq_modify_delay(struct be_function_object *pfob,
-                  u32 num_eq, struct be_eq_object **eq_array,
-                  u32 *eq_delay_array, mcc_wrb_cqe_callback cb,
-                  void *cb_context, struct be_eq_modify_delay_q_ctxt *q_ctxt)
-{
-       struct FWCMD_COMMON_MODIFY_EQ_DELAY *fwcmd = NULL;
-       struct MCC_WRB_AMAP *wrb = NULL;
-       int status = 0;
-       struct be_generic_q_ctxt *gen_ctxt = NULL;
-       u32 i;
-       unsigned long irql;
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-       if (!wrb) {
-               if (q_ctxt && cb) {
-                       wrb = (struct MCC_WRB_AMAP *) &q_ctxt->wrb_header;
-                       gen_ctxt = (struct be_generic_q_ctxt *) q_ctxt;
-                       gen_ctxt->context.bytes = sizeof(*q_ctxt);
-               } else {
-                       status = BE_STATUS_NO_MCC_WRB;
-                       goto Error;
-               }
-       }
-       /* Prepares an embedded fwcmd, including request/response sizes. */
-       fwcmd = BE_PREPARE_EMBEDDED_FWCMD(pfob, wrb, COMMON_MODIFY_EQ_DELAY);
-
-       ASSERT(num_eq > 0);
-       ASSERT(num_eq <= ARRAY_SIZE(fwcmd->params.request.delay));
-       fwcmd->params.request.num_eq = num_eq;
-       for (i = 0; i < num_eq; i++) {
-               fwcmd->params.request.delay[i].eq_id = eq_array[i]->eq_id;
-               fwcmd->params.request.delay[i].delay_in_microseconds =
-                   eq_delay_array[i];
-       }
-
-       /* Post the f/w command */
-       status = be_function_post_mcc_wrb(pfob, wrb, gen_ctxt,
-                       cb, cb_context, NULL, NULL, fwcmd, NULL);
-
-Error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
-
diff --git a/drivers/staging/benet/eth.c b/drivers/staging/benet/eth.c
deleted file mode 100644 (file)
index f641b62..0000000
+++ /dev/null
@@ -1,1273 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-#include <linux/if_ether.h>
-#include "hwlib.h"
-#include "bestatus.h"
-
-/*
- *---------------------------------------------------------
- * Function: be_eth_sq_create_ex
- *   Creates an ethernet send ring - extended version with
- *   additional parameters.
- * pfob -
- * rd             - ring address
- * length_in_bytes -
- * type            - The type of ring to create.
- * ulp             - The requested ULP number for the ring.
- *                  This should be zero based, i.e. 0,1,2. This must
- *                  be valid NIC ULP based on the firmware config.
- *                   All doorbells for this ring must be sent to
- *                   this ULP. The first network ring allocated for
- *                   each ULP are higher performance than subsequent rings.
- * cq_object       - cq object for completions
- * ex_parameters   - Additional parameters (that may increase in
- *                  future revisions). These parameters are only used
- *                  for certain ring types -- see
- *                   struct be_eth_sq_parameters for details.
- * eth_sq          -
- * return status   - BE_SUCCESS (0) on success. Negative error code on failure.
- *---------------------------------------------------------
- */
-int
-be_eth_sq_create_ex(struct be_function_object *pfob, struct ring_desc *rd,
-               u32 length, u32 type, u32 ulp, struct be_cq_object *cq_object,
-               struct be_eth_sq_parameters *ex_parameters,
-               struct be_ethsq_object *eth_sq)
-{
-       struct FWCMD_COMMON_ETH_TX_CREATE *fwcmd = NULL;
-       struct MCC_WRB_AMAP *wrb = NULL;
-       int status = 0;
-       u32 n;
-       unsigned long irql;
-
-       ASSERT(rd);
-       ASSERT(eth_sq);
-       ASSERT(ex_parameters);
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       memset(eth_sq, 0, sizeof(*eth_sq));
-
-       eth_sq->parent_function = pfob;
-       eth_sq->bid = 0xFFFFFFFF;
-       eth_sq->cq_object = cq_object;
-
-       /* Translate hwlib interface to arm interface. */
-       switch (type) {
-       case BE_ETH_TX_RING_TYPE_FORWARDING:
-               type = ETH_TX_RING_TYPE_FORWARDING;
-               break;
-       case BE_ETH_TX_RING_TYPE_STANDARD:
-               type = ETH_TX_RING_TYPE_STANDARD;
-               break;
-       case BE_ETH_TX_RING_TYPE_BOUND:
-               ASSERT(ex_parameters->port < 2);
-               type = ETH_TX_RING_TYPE_BOUND;
-               break;
-       default:
-               TRACE(DL_ERR, "Invalid eth tx ring type:%d", type);
-               return BE_NOT_OK;
-               break;
-       }
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-       if (!wrb) {
-               ASSERT(wrb);
-               TRACE(DL_ERR, "No free MCC WRBs in create EQ.");
-               status = BE_STATUS_NO_MCC_WRB;
-               goto Error;
-       }
-       /* NIC must be supported by the current config. */
-       ASSERT(pfob->fw_config.nic_ulp_mask);
-
-       /*
-        * The ulp parameter must select a valid NIC ULP
-        * for the current config.
-        */
-       ASSERT((1 << ulp) & pfob->fw_config.nic_ulp_mask);
-
-       /* Prepares an embedded fwcmd, including request/response sizes. */
-       fwcmd = BE_PREPARE_EMBEDDED_FWCMD(pfob, wrb, COMMON_ETH_TX_CREATE);
-       fwcmd->header.request.port_number = ex_parameters->port;
-
-       AMAP_SET_BITS_PTR(ETX_CONTEXT, pd_id,
-                               &fwcmd->params.request.context, 0);
-
-       n = be_ring_length_to_encoding(length, sizeof(struct ETH_WRB_AMAP));
-       AMAP_SET_BITS_PTR(ETX_CONTEXT, tx_ring_size,
-                                       &fwcmd->params.request.context, n);
-
-       AMAP_SET_BITS_PTR(ETX_CONTEXT, cq_id_send,
-                       &fwcmd->params.request.context, cq_object->cq_id);
-
-       n = pfob->pci_function_number;
-       AMAP_SET_BITS_PTR(ETX_CONTEXT, func, &fwcmd->params.request.context, n);
-
-       fwcmd->params.request.type = type;
-       fwcmd->params.request.ulp_num  = (1 << ulp);
-       fwcmd->params.request.num_pages = DIV_ROUND_UP(length, PAGE_SIZE);
-       ASSERT(PAGES_SPANNED(rd->va, rd->length) >=
-                               fwcmd->params.request.num_pages);
-
-       /* Create a page list for the FWCMD. */
-       be_rd_to_pa_list(rd, fwcmd->params.request.pages,
-                         ARRAY_SIZE(fwcmd->params.request.pages));
-
-       status = be_function_post_mcc_wrb(pfob, wrb, NULL, NULL, NULL,
-                                       NULL, NULL, fwcmd, NULL);
-       if (status != BE_SUCCESS) {
-               TRACE(DL_ERR, "MCC to create etx queue failed.");
-               goto Error;
-       }
-       /* save the butler ID */
-       eth_sq->bid = fwcmd->params.response.cid;
-
-       /* add a reference to the corresponding CQ */
-       atomic_inc(&cq_object->ref_count);
-
-Error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
-
-
-/*
-    This routine destroys an ethernet send queue
-
-    EthSq - EthSq Handle returned from EthSqCreate
-
-    This function always return BE_SUCCESS.
-
-    This function frees memory allocated by EthSqCreate for the EthSq Object.
-
-*/
-int be_eth_sq_destroy(struct be_ethsq_object *eth_sq)
-{
-       int status = 0;
-
-       /* Send fwcmd to destroy the queue. */
-       status = be_function_ring_destroy(eth_sq->parent_function, eth_sq->bid,
-                    FWCMD_RING_TYPE_ETH_TX, NULL, NULL, NULL, NULL);
-       ASSERT(status == 0);
-
-       /* Derefence any associated CQs. */
-       atomic_dec(&eth_sq->cq_object->ref_count);
-       return status;
-}
-/*
-    This routine attempts to set the transmit flow control parameters.
-
-    FunctionObject      - Handle to a function object
-
-    txfc_enable         - transmit flow control enable - true for
-                         enable, false for disable
-
-    rxfc_enable         - receive flow control enable - true for
-                               enable, false for disable
-
-    Returns BE_SUCCESS if successfull, otherwise a useful int error
-    code is returned.
-
-    IRQL: < DISPATCH_LEVEL
-
-    This function always fails in non-privileged machine context.
-*/
-int
-be_eth_set_flow_control(struct be_function_object *pfob,
-                       bool txfc_enable, bool rxfc_enable)
-{
-       struct FWCMD_COMMON_SET_FLOW_CONTROL *fwcmd = NULL;
-       struct MCC_WRB_AMAP *wrb = NULL;
-       int status = 0;
-       unsigned long irql;
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-       if (!wrb) {
-               TRACE(DL_ERR, "MCC wrb peek failed.");
-               status = BE_STATUS_NO_MCC_WRB;
-               goto error;
-       }
-       /* Prepares an embedded fwcmd, including request/response sizes. */
-       fwcmd = BE_PREPARE_EMBEDDED_FWCMD(pfob, wrb, COMMON_SET_FLOW_CONTROL);
-
-       fwcmd->params.request.rx_flow_control = rxfc_enable;
-       fwcmd->params.request.tx_flow_control = txfc_enable;
-
-       /* Post the f/w command */
-       status = be_function_post_mcc_wrb(pfob, wrb, NULL, NULL, NULL,
-                                       NULL, NULL, fwcmd, NULL);
-
-       if (status != 0) {
-               TRACE(DL_ERR, "set flow control fwcmd failed.");
-               goto error;
-       }
-
-error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
-
-/*
-    This routine attempts to get the transmit flow control parameters.
-
-    pfob      - Handle to a function object
-
-    txfc_enable         - transmit flow control enable - true for
-                       enable, false for disable
-
-    rxfc_enable         - receive flow control enable - true for enable,
-                       false for disable
-
-    Returns BE_SUCCESS if successfull, otherwise a useful int error code
-                       is returned.
-
-    IRQL: < DISPATCH_LEVEL
-
-    This function always fails in non-privileged machine context.
-*/
-int
-be_eth_get_flow_control(struct be_function_object *pfob,
-                       bool *txfc_enable, bool *rxfc_enable)
-{
-       struct FWCMD_COMMON_GET_FLOW_CONTROL *fwcmd = NULL;
-       struct MCC_WRB_AMAP *wrb = NULL;
-       int status = 0;
-       unsigned long irql;
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-       if (!wrb) {
-               TRACE(DL_ERR, "MCC wrb peek failed.");
-               status = BE_STATUS_NO_MCC_WRB;
-               goto error;
-       }
-       /* Prepares an embedded fwcmd, including request/response sizes. */
-       fwcmd = BE_PREPARE_EMBEDDED_FWCMD(pfob, wrb, COMMON_GET_FLOW_CONTROL);
-
-       /* Post the f/w command */
-       status = be_function_post_mcc_wrb(pfob, wrb, NULL, NULL, NULL,
-                                               NULL, NULL, fwcmd, NULL);
-
-       if (status != 0) {
-               TRACE(DL_ERR, "get flow control fwcmd failed.");
-               goto error;
-       }
-
-       *txfc_enable = fwcmd->params.response.tx_flow_control;
-       *rxfc_enable = fwcmd->params.response.rx_flow_control;
-
-error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
-
-/*
- *---------------------------------------------------------
- * Function: be_eth_set_qos
- *   This function sets the ethernet transmit Quality of Service (QoS)
- *   characteristics of BladeEngine for the domain. All ethernet
- *   transmit rings of the domain will evenly share the bandwidth.
- *   The exeception to sharing is the host primary (super) ethernet
- *   transmit ring as well as the host ethernet forwarding ring
- *   for missed offload data.
- * pfob -
- * max_bps         - the maximum bits per second in units of
- *                     10 Mbps (valid 0-100)
- * max_pps         - the maximum packets per second in units
- *                     of 1 Kpps (0 indicates no limit)
- * return status   - BE_SUCCESS (0) on success. Negative error code on failure.
- *---------------------------------------------------------
- */
-int
-be_eth_set_qos(struct be_function_object *pfob, u32 max_bps, u32 max_pps)
-{
-       struct FWCMD_COMMON_SET_QOS *fwcmd = NULL;
-       struct MCC_WRB_AMAP *wrb = NULL;
-       int status = 0;
-       unsigned long irql;
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-       if (!wrb) {
-               TRACE(DL_ERR, "MCC wrb peek failed.");
-               status = BE_STATUS_NO_MCC_WRB;
-               goto error;
-       }
-       /* Prepares an embedded fwcmd, including request/response sizes. */
-       fwcmd = BE_PREPARE_EMBEDDED_FWCMD(pfob, wrb, COMMON_SET_QOS);
-
-       /* Set fields in fwcmd */
-       fwcmd->params.request.max_bits_per_second_NIC = max_bps;
-       fwcmd->params.request.max_packets_per_second_NIC = max_pps;
-       fwcmd->params.request.valid_flags = QOS_BITS_NIC | QOS_PKTS_NIC;
-
-       /* Post the f/w command */
-       status = be_function_post_mcc_wrb(pfob, wrb, NULL, NULL, NULL,
-                                       NULL, NULL, fwcmd, NULL);
-
-       if (status != 0)
-               TRACE(DL_ERR, "network set qos fwcmd failed.");
-
-error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
-
-/*
- *---------------------------------------------------------
- * Function: be_eth_get_qos
- *   This function retrieves the ethernet transmit Quality of Service (QoS)
- *   characteristics for the domain.
- * max_bps         - the maximum bits per second in units of
- *                     10 Mbps (valid 0-100)
- * max_pps         - the maximum packets per second in units of
- *                     1 Kpps (0 indicates no limit)
- * return status   - BE_SUCCESS (0) on success. Negative error code on failure.
- *---------------------------------------------------------
- */
-int
-be_eth_get_qos(struct be_function_object *pfob, u32 *max_bps, u32 *max_pps)
-{
-       struct FWCMD_COMMON_GET_QOS *fwcmd = NULL;
-       struct MCC_WRB_AMAP *wrb = NULL;
-       int status = 0;
-       unsigned long irql;
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-       if (!wrb) {
-               TRACE(DL_ERR, "MCC wrb peek failed.");
-               status = BE_STATUS_NO_MCC_WRB;
-               goto error;
-       }
-       /* Prepares an embedded fwcmd, including request/response sizes. */
-       fwcmd = BE_PREPARE_EMBEDDED_FWCMD(pfob, wrb, COMMON_GET_QOS);
-
-       /* Post the f/w command */
-       status = be_function_post_mcc_wrb(pfob, wrb, NULL, NULL, NULL,
-                                       NULL, NULL, fwcmd, NULL);
-
-       if (status != 0) {
-               TRACE(DL_ERR, "network get qos fwcmd failed.");
-               goto error;
-       }
-
-       *max_bps = fwcmd->params.response.max_bits_per_second_NIC;
-       *max_pps = fwcmd->params.response.max_packets_per_second_NIC;
-
-error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
-
-/*
- *---------------------------------------------------------
- * Function: be_eth_set_frame_size
- *   This function sets the ethernet maximum frame size. The previous
- *   values are returned.
- * pfob -
- * tx_frame_size   - maximum transmit frame size in bytes
- * rx_frame_size   - maximum receive frame size in bytes
- * return status   - BE_SUCCESS (0) on success. Negative error code on failure.
- *---------------------------------------------------------
- */
-int
-be_eth_set_frame_size(struct be_function_object *pfob,
-                     u32 *tx_frame_size, u32 *rx_frame_size)
-{
-       struct FWCMD_COMMON_SET_FRAME_SIZE *fwcmd = NULL;
-       struct MCC_WRB_AMAP *wrb = NULL;
-       int status = 0;
-       unsigned long irql;
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-       if (!wrb) {
-               TRACE(DL_ERR, "MCC wrb peek failed.");
-               status = BE_STATUS_NO_MCC_WRB;
-               goto error;
-       }
-       /* Prepares an embedded fwcmd, including request/response sizes. */
-       fwcmd = BE_PREPARE_EMBEDDED_FWCMD(pfob, wrb, COMMON_SET_FRAME_SIZE);
-       fwcmd->params.request.max_tx_frame_size = *tx_frame_size;
-       fwcmd->params.request.max_rx_frame_size = *rx_frame_size;
-
-       /* Post the f/w command */
-       status = be_function_post_mcc_wrb(pfob, wrb, NULL, NULL, NULL,
-                                               NULL, NULL, fwcmd, NULL);
-
-       if (status != 0) {
-               TRACE(DL_ERR, "network set frame size fwcmd failed.");
-               goto error;
-       }
-
-       *tx_frame_size = fwcmd->params.response.chip_max_tx_frame_size;
-       *rx_frame_size = fwcmd->params.response.chip_max_rx_frame_size;
-
-error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
-
-
-/*
-    This routine creates a Ethernet receive ring.
-
-    pfob      - handle to a function object
-    rq_base_va            - base VA for the default receive ring. this must be
-                       exactly 8K in length and continguous physical memory.
-    cq_object            - handle to a previously created CQ to be associated
-                       with the RQ.
-    pp_eth_rq             - pointer to an opqaue handle where an eth
-                       receive object is returned.
-    Returns BE_SUCCESS if successfull, , otherwise a useful
-    int error code is returned.
-
-    IRQL: < DISPATCH_LEVEL
-    this function allocates a struct be_ethrq_object *object.
-    there must be no more than 1 of these per function object, unless the
-    function object supports RSS (is networking and on the host).
-    the rq_base_va must point to a buffer of exactly 8K.
-    the erx::host_cqid (or host_stor_cqid) register and erx::ring_page registers
-    will be updated as appropriate on return
-*/
-int
-be_eth_rq_create(struct be_function_object *pfob,
-                       struct ring_desc *rd, struct be_cq_object *cq_object,
-                       struct be_cq_object *bcmc_cq_object,
-                       struct be_ethrq_object *eth_rq)
-{
-       int status = 0;
-       struct MCC_WRB_AMAP *wrb = NULL;
-       struct FWCMD_COMMON_ETH_RX_CREATE *fwcmd = NULL;
-       unsigned long irql;
-
-       /* MPU will set the  */
-       ASSERT(rd);
-       ASSERT(eth_rq);
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       eth_rq->parent_function = pfob;
-       eth_rq->cq_object = cq_object;
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-       if (!wrb) {
-               TRACE(DL_ERR, "MCC wrb peek failed.");
-               status = BE_STATUS_NO_MCC_WRB;
-               goto Error;
-       }
-       /* Prepares an embedded fwcmd, including request/response sizes. */
-       fwcmd = BE_PREPARE_EMBEDDED_FWCMD(pfob, wrb, COMMON_ETH_RX_CREATE);
-
-       fwcmd->params.request.num_pages = 2;    /* required length */
-       fwcmd->params.request.cq_id = cq_object->cq_id;
-
-       if (bcmc_cq_object)
-               fwcmd->params.request.bcmc_cq_id = bcmc_cq_object->cq_id;
-       else
-               fwcmd->params.request.bcmc_cq_id = 0xFFFF;
-
-       /* Create a page list for the FWCMD. */
-       be_rd_to_pa_list(rd, fwcmd->params.request.pages,
-                         ARRAY_SIZE(fwcmd->params.request.pages));
-
-       /* Post the f/w command */
-       status = be_function_post_mcc_wrb(pfob, wrb, NULL, NULL, NULL,
-                                               NULL, NULL, fwcmd, NULL);
-       if (status != BE_SUCCESS) {
-               TRACE(DL_ERR, "fwcmd to map eth rxq frags failed.");
-               goto Error;
-       }
-       /* Save the ring ID for cleanup. */
-       eth_rq->rid = fwcmd->params.response.id;
-
-       atomic_inc(&cq_object->ref_count);
-
-Error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
-
-/*
-    This routine destroys an Ethernet receive queue
-
-    eth_rq - ethernet receive queue handle returned from eth_rq_create
-
-    Returns BE_SUCCESS on success and an appropriate int on failure.
-
-    This function frees resourcs allocated by EthRqCreate.
-    The erx::host_cqid (or host_stor_cqid) register and erx::ring_page
-    registers will be updated as appropriate on return
-    IRQL: < DISPATCH_LEVEL
-*/
-
-static void be_eth_rq_destroy_internal_cb(void *context, int status,
-                                        struct MCC_WRB_AMAP *wrb)
-{
-       struct be_ethrq_object *eth_rq = (struct be_ethrq_object *) context;
-
-       if (status != BE_SUCCESS) {
-               TRACE(DL_ERR, "Destroy eth rq failed in internal callback.\n");
-       } else {
-               /* Dereference any CQs associated with this queue. */
-               atomic_dec(&eth_rq->cq_object->ref_count);
-       }
-
-       return;
-}
-
-int be_eth_rq_destroy(struct be_ethrq_object *eth_rq)
-{
-       int status = BE_SUCCESS;
-
-       /* Send fwcmd to destroy the RQ. */
-       status = be_function_ring_destroy(eth_rq->parent_function,
-                       eth_rq->rid, FWCMD_RING_TYPE_ETH_RX, NULL, NULL,
-                       be_eth_rq_destroy_internal_cb, eth_rq);
-
-       return status;
-}
-
-/*
- *---------------------------------------------------------------------------
- * Function: be_eth_rq_destroy_options
- *   Destroys an ethernet receive ring with finer granularity options
- *   than the standard be_eth_rq_destroy() API function.
- * eth_rq           -
- * flush            - Set to 1 to flush the ring, set to 0 to bypass the flush
- * cb               - Callback function on completion
- * cb_context       - Callback context
- * return status    - BE_SUCCESS (0) on success. Negative error code on failure.
- *----------------------------------------------------------------------------
- */
-int
-be_eth_rq_destroy_options(struct be_ethrq_object *eth_rq, bool flush,
-               mcc_wrb_cqe_callback cb, void *cb_context)
-{
-       struct FWCMD_COMMON_RING_DESTROY *fwcmd = NULL;
-       struct MCC_WRB_AMAP *wrb = NULL;
-       int status = BE_SUCCESS;
-       struct be_function_object *pfob = NULL;
-       unsigned long irql;
-
-       pfob = eth_rq->parent_function;
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       TRACE(DL_INFO, "Destroy eth_rq ring id:%d, flush:%d", eth_rq->rid,
-             flush);
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-       if (!wrb) {
-               ASSERT(wrb);
-               TRACE(DL_ERR, "No free MCC WRBs in destroy eth_rq ring.");
-               status = BE_STATUS_NO_MCC_WRB;
-               goto Error;
-       }
-       /* Prepares an embedded fwcmd, including request/response sizes. */
-       fwcmd = BE_PREPARE_EMBEDDED_FWCMD(pfob, wrb, COMMON_RING_DESTROY);
-
-       fwcmd->params.request.id = eth_rq->rid;
-       fwcmd->params.request.ring_type = FWCMD_RING_TYPE_ETH_RX;
-       fwcmd->params.request.bypass_flush = ((0 == flush) ? 1 : 0);
-
-       /* Post the f/w command */
-       status = be_function_post_mcc_wrb(pfob, wrb, NULL, cb, cb_context,
-                       be_eth_rq_destroy_internal_cb, eth_rq, fwcmd, NULL);
-
-       if (status != BE_SUCCESS && status != BE_PENDING) {
-               TRACE(DL_ERR, "eth_rq ring destroy failed. id:%d, flush:%d",
-                     eth_rq->rid, flush);
-               goto Error;
-       }
-
-Error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
-
-/*
-    This routine queries the frag size for erx.
-
-    pfob      - handle to a function object
-
-    frag_size_bytes       - erx frag size in bytes that is/was set.
-
-    Returns BE_SUCCESS if successfull, otherwise a useful int error
-    code is returned.
-
-    IRQL: < DISPATCH_LEVEL
-
-*/
-int
-be_eth_rq_get_frag_size(struct be_function_object *pfob, u32 *frag_size_bytes)
-{
-       struct FWCMD_ETH_GET_RX_FRAG_SIZE *fwcmd = NULL;
-       struct MCC_WRB_AMAP *wrb = NULL;
-       int status = 0;
-       unsigned long irql;
-
-       ASSERT(frag_size_bytes);
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-       if (!wrb) {
-               TRACE(DL_ERR, "MCC wrb peek failed.");
-               return BE_STATUS_NO_MCC_WRB;
-       }
-       /* Prepares an embedded fwcmd, including request/response sizes. */
-       fwcmd = BE_PREPARE_EMBEDDED_FWCMD(pfob, wrb, ETH_GET_RX_FRAG_SIZE);
-
-       /* Post the f/w command */
-       status = be_function_post_mcc_wrb(pfob, wrb, NULL, NULL, NULL,
-                               NULL, NULL, fwcmd, NULL);
-
-       if (status != 0) {
-               TRACE(DL_ERR, "get frag size fwcmd failed.");
-               goto error;
-       }
-
-       *frag_size_bytes = 1 << fwcmd->params.response.actual_fragsize_log2;
-
-error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
-
-/*
-    This routine attempts to set the frag size for erx.  If the frag size is
-    already set, the attempt fails and the current frag size is returned.
-
-    pfob      - Handle to a function object
-
-    frag_size       - Erx frag size in bytes that is/was set.
-
-    current_frag_size_bytes    - Pointer to location where currrent frag
-                                is to be rturned
-
-    Returns BE_SUCCESS if successfull, otherwise a useful int error
-    code is returned.
-
-    IRQL: < DISPATCH_LEVEL
-
-    This function always fails in non-privileged machine context.
-*/
-int
-be_eth_rq_set_frag_size(struct be_function_object *pfob,
-                       u32 frag_size, u32 *frag_size_bytes)
-{
-       struct FWCMD_ETH_SET_RX_FRAG_SIZE *fwcmd = NULL;
-       struct MCC_WRB_AMAP *wrb = NULL;
-       int status = 0;
-       unsigned long irql;
-
-       ASSERT(frag_size_bytes);
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-       if (!wrb) {
-               TRACE(DL_ERR, "MCC wrb peek failed.");
-               status = BE_STATUS_NO_MCC_WRB;
-               goto error;
-       }
-       /* Prepares an embedded fwcmd, including request/response sizes. */
-       fwcmd = BE_PREPARE_EMBEDDED_FWCMD(pfob, wrb, ETH_SET_RX_FRAG_SIZE);
-
-       ASSERT(frag_size >= 128 && frag_size <= 16 * 1024);
-
-       /* This is the log2 of the fragsize.  This is not the exact
-        * ERX encoding. */
-       fwcmd->params.request.new_fragsize_log2 = __ilog2_u32(frag_size);
-
-       /* Post the f/w command */
-       status = be_function_post_mcc_wrb(pfob, wrb, NULL, NULL, NULL,
-                               NULL, NULL, fwcmd, NULL);
-
-       if (status != 0) {
-               TRACE(DL_ERR, "set frag size fwcmd failed.");
-               goto error;
-       }
-
-       *frag_size_bytes = 1 << fwcmd->params.response.actual_fragsize_log2;
-error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
-
-
-/*
-    This routine gets or sets a mac address for a domain
-    given the port and mac.
-
-    FunctionObject  - Function object handle.
-    port1           - Set to TRUE if this function will set/get the Port 1
-                       address.  Only the host may set this to TRUE.
-    mac1            - Set to TRUE if this function will set/get the
-                       MAC 1 address.  Only the host may set this to TRUE.
-    write           - Set to TRUE if this function should write the mac address.
-    mac_address      - Buffer of the mac address to read or write.
-
-    Returns BE_SUCCESS if successfull, otherwise a useful int is returned.
-
-    IRQL: < DISPATCH_LEVEL
-*/
-int be_rxf_mac_address_read_write(struct be_function_object *pfob,
-               bool port1,     /* VM must always set to false */
-               bool mac1,      /* VM must always set to false */
-               bool mgmt, bool write,
-               bool permanent, u8 *mac_address,
-               mcc_wrb_cqe_callback cb,        /* optional */
-               void *cb_context)       /* optional */
-{
-       int status = BE_SUCCESS;
-       union {
-               struct FWCMD_COMMON_NTWK_MAC_QUERY *query;
-               struct FWCMD_COMMON_NTWK_MAC_SET *set;
-       } fwcmd = {NULL};
-       struct MCC_WRB_AMAP *wrb = NULL;
-       u32 type = 0;
-       unsigned long irql;
-       struct be_mcc_wrb_response_copy rc;
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       ASSERT(mac_address);
-
-       ASSERT(port1 == false);
-       ASSERT(mac1 == false);
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-       if (!wrb) {
-               TRACE(DL_ERR, "MCC wrb peek failed.");
-               status = BE_STATUS_NO_MCC_WRB;
-               goto Error;
-       }
-
-       if (mgmt) {
-               type = MAC_ADDRESS_TYPE_MANAGEMENT;
-       } else {
-               if (pfob->type == BE_FUNCTION_TYPE_NETWORK)
-                       type = MAC_ADDRESS_TYPE_NETWORK;
-               else
-                       type = MAC_ADDRESS_TYPE_STORAGE;
-       }
-
-       if (write) {
-               /* Prepares an embedded fwcmd, including
-                * request/response sizes.
-                */
-               fwcmd.set = BE_PREPARE_EMBEDDED_FWCMD(pfob,
-                                              wrb, COMMON_NTWK_MAC_SET);
-
-               fwcmd.set->params.request.invalidate = 0;
-               fwcmd.set->params.request.mac1 = (mac1 ? 1 : 0);
-               fwcmd.set->params.request.port = (port1 ? 1 : 0);
-               fwcmd.set->params.request.type = type;
-
-               /* Copy the mac address to set. */
-               fwcmd.set->params.request.mac.SizeOfStructure =
-                           sizeof(fwcmd.set->params.request.mac);
-               memcpy(fwcmd.set->params.request.mac.MACAddress,
-                       mac_address, ETH_ALEN);
-
-               /* Post the f/w command */
-               status = be_function_post_mcc_wrb(pfob, wrb, NULL,
-                               cb, cb_context, NULL, NULL, fwcmd.set, NULL);
-
-       } else {
-
-               /*
-                * Prepares an embedded fwcmd, including
-                * request/response sizes.
-                */
-               fwcmd.query = BE_PREPARE_EMBEDDED_FWCMD(pfob,
-                                              wrb, COMMON_NTWK_MAC_QUERY);
-
-               fwcmd.query->params.request.mac1 = (mac1 ? 1 : 0);
-               fwcmd.query->params.request.port = (port1 ? 1 : 0);
-               fwcmd.query->params.request.type = type;
-               fwcmd.query->params.request.permanent = permanent;
-
-               rc.length = FIELD_SIZEOF(struct FWCMD_COMMON_NTWK_MAC_QUERY,
-                                               params.response.mac.MACAddress);
-               rc.fwcmd_offset = offsetof(struct FWCMD_COMMON_NTWK_MAC_QUERY,
-                                               params.response.mac.MACAddress);
-               rc.va = mac_address;
-               /* Post the f/w command (with a copy for the response) */
-               status = be_function_post_mcc_wrb(pfob, wrb, NULL, cb,
-                               cb_context, NULL, NULL, fwcmd.query, &rc);
-       }
-
-       if (status < 0) {
-               TRACE(DL_ERR, "mac set/query failed.");
-               goto Error;
-       }
-
-Error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
-
-/*
-    This routine writes data to context memory.
-
-    pfob  - Function object handle.
-    mac_table     - Set to the 128-bit multicast address hash table.
-
-    Returns BE_SUCCESS if successfull, otherwise a useful int is returned.
-
-    IRQL: < DISPATCH_LEVEL
-*/
-
-int be_rxf_multicast_config(struct be_function_object *pfob,
-               bool promiscuous, u32 num, u8 *mac_table,
-               mcc_wrb_cqe_callback cb,        /* optional */
-               void *cb_context,
-               struct be_multicast_q_ctxt *q_ctxt)
-{
-       int status = BE_SUCCESS;
-       struct FWCMD_COMMON_NTWK_MULTICAST_SET *fwcmd = NULL;
-       struct MCC_WRB_AMAP *wrb = NULL;
-       struct be_generic_q_ctxt *generic_ctxt = NULL;
-       unsigned long irql;
-
-       ASSERT(num <= ARRAY_SIZE(fwcmd->params.request.mac));
-
-       if (num > ARRAY_SIZE(fwcmd->params.request.mac)) {
-               TRACE(DL_ERR, "Too many multicast addresses. BE supports %d.",
-                     (int) ARRAY_SIZE(fwcmd->params.request.mac));
-               return BE_NOT_OK;
-       }
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-       if (!wrb) {
-               if (q_ctxt && cb) {
-                       wrb = (struct MCC_WRB_AMAP *) &q_ctxt->wrb_header;
-                       generic_ctxt = (struct be_generic_q_ctxt *) q_ctxt;
-                       generic_ctxt->context.bytes = sizeof(*q_ctxt);
-               } else {
-                       status = BE_STATUS_NO_MCC_WRB;
-                       goto Error;
-               }
-       }
-       /* Prepares an embedded fwcmd, including request/response sizes. */
-       fwcmd = BE_PREPARE_EMBEDDED_FWCMD(pfob, wrb, COMMON_NTWK_MULTICAST_SET);
-
-       fwcmd->params.request.promiscuous = promiscuous;
-       if (!promiscuous) {
-               fwcmd->params.request.num_mac = num;
-               if (num > 0) {
-                       ASSERT(mac_table);
-                       memcpy(fwcmd->params.request.mac,
-                                               mac_table, ETH_ALEN * num);
-               }
-       }
-
-       /* Post the f/w command */
-       status = be_function_post_mcc_wrb(pfob, wrb, generic_ctxt,
-                       cb, cb_context, NULL, NULL, fwcmd, NULL);
-       if (status < 0) {
-               TRACE(DL_ERR, "multicast fwcmd failed.");
-               goto Error;
-       }
-
-Error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
-
-/*
-    This routine adds or removes a vlan tag from the rxf table.
-
-    FunctionObject  - Function object handle.
-    VLanTag         - VLan tag to add or remove.
-    Add             - Set to TRUE if this will add a vlan tag
-
-    Returns BE_SUCCESS if successfull, otherwise a useful int is returned.
-
-    IRQL: < DISPATCH_LEVEL
-*/
-int be_rxf_vlan_config(struct be_function_object *pfob,
-               bool promiscuous, u32 num, u16 *vlan_tag_array,
-               mcc_wrb_cqe_callback cb,        /* optional */
-               void *cb_context,
-               struct be_vlan_q_ctxt *q_ctxt)  /* optional */
-{
-       int status = BE_SUCCESS;
-       struct FWCMD_COMMON_NTWK_VLAN_CONFIG *fwcmd = NULL;
-       struct MCC_WRB_AMAP *wrb = NULL;
-       struct be_generic_q_ctxt *generic_ctxt = NULL;
-       unsigned long irql;
-
-       if (num > ARRAY_SIZE(fwcmd->params.request.vlan_tag)) {
-               TRACE(DL_ERR, "Too many VLAN tags.");
-               return BE_NOT_OK;
-       }
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-       if (!wrb) {
-               if (q_ctxt && cb) {
-                       wrb = (struct MCC_WRB_AMAP *) &q_ctxt->wrb_header;
-                       generic_ctxt = (struct be_generic_q_ctxt *) q_ctxt;
-                       generic_ctxt->context.bytes = sizeof(*q_ctxt);
-               } else {
-                       status = BE_STATUS_NO_MCC_WRB;
-                       goto Error;
-               }
-       }
-       /* Prepares an embedded fwcmd, including request/response sizes. */
-       fwcmd = BE_PREPARE_EMBEDDED_FWCMD(pfob, wrb, COMMON_NTWK_VLAN_CONFIG);
-
-       fwcmd->params.request.promiscuous = promiscuous;
-       if (!promiscuous) {
-               fwcmd->params.request.num_vlan = num;
-
-               if (num > 0) {
-                       ASSERT(vlan_tag_array);
-                       memcpy(fwcmd->params.request.vlan_tag, vlan_tag_array,
-                                 num * sizeof(vlan_tag_array[0]));
-               }
-       }
-
-       /* Post the commadn */
-       status = be_function_post_mcc_wrb(pfob, wrb, generic_ctxt,
-                       cb, cb_context, NULL, NULL, fwcmd, NULL);
-       if (status < 0) {
-               TRACE(DL_ERR, "vlan fwcmd failed.");
-               goto Error;
-       }
-
-Error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
-
-
-int be_rxf_link_status(struct be_function_object *pfob,
-               struct BE_LINK_STATUS *link_status,
-               mcc_wrb_cqe_callback cb,
-               void *cb_context,
-               struct be_link_status_q_ctxt *q_ctxt)
-{
-       struct FWCMD_COMMON_NTWK_LINK_STATUS_QUERY *fwcmd = NULL;
-       struct MCC_WRB_AMAP *wrb = NULL;
-       int status = 0;
-       struct be_generic_q_ctxt *generic_ctxt = NULL;
-       unsigned long irql;
-       struct be_mcc_wrb_response_copy rc;
-
-       ASSERT(link_status);
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-
-       if (!wrb) {
-               if (q_ctxt && cb) {
-                       wrb = (struct MCC_WRB_AMAP *) &q_ctxt->wrb_header;
-                       generic_ctxt = (struct be_generic_q_ctxt *) q_ctxt;
-                       generic_ctxt->context.bytes = sizeof(*q_ctxt);
-               } else {
-                       status = BE_STATUS_NO_MCC_WRB;
-                       goto Error;
-               }
-       }
-       /* Prepares an embedded fwcmd, including request/response sizes. */
-       fwcmd = BE_PREPARE_EMBEDDED_FWCMD(pfob, wrb,
-                                              COMMON_NTWK_LINK_STATUS_QUERY);
-
-       rc.length = FIELD_SIZEOF(struct FWCMD_COMMON_NTWK_LINK_STATUS_QUERY,
-                                       params.response);
-       rc.fwcmd_offset = offsetof(struct FWCMD_COMMON_NTWK_LINK_STATUS_QUERY,
-                                       params.response);
-       rc.va = link_status;
-       /* Post or queue the f/w command */
-       status = be_function_post_mcc_wrb(pfob, wrb, generic_ctxt,
-                       cb, cb_context, NULL, NULL, fwcmd, &rc);
-
-       if (status < 0) {
-               TRACE(DL_ERR, "link status fwcmd failed.");
-               goto Error;
-       }
-
-Error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
-
-int
-be_rxf_query_eth_statistics(struct be_function_object *pfob,
-                   struct FWCMD_ETH_GET_STATISTICS *va_for_fwcmd,
-                   u64 pa_for_fwcmd, mcc_wrb_cqe_callback cb,
-                   void *cb_context,
-                   struct be_nonembedded_q_ctxt *q_ctxt)
-{
-       struct MCC_WRB_AMAP *wrb = NULL;
-       int status = 0;
-       struct be_generic_q_ctxt *generic_ctxt = NULL;
-       unsigned long irql;
-
-       ASSERT(va_for_fwcmd);
-       ASSERT(pa_for_fwcmd);
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-
-       if (!wrb) {
-               if (q_ctxt && cb) {
-                       wrb = (struct MCC_WRB_AMAP *) &q_ctxt->wrb_header;
-                       generic_ctxt = (struct be_generic_q_ctxt *) q_ctxt;
-                       generic_ctxt->context.bytes = sizeof(*q_ctxt);
-               } else {
-                       status = BE_STATUS_NO_MCC_WRB;
-                       goto Error;
-               }
-       }
-
-       TRACE(DL_INFO, "Query eth stats. fwcmd va:%p pa:0x%08x_%08x",
-             va_for_fwcmd, upper_32_bits(pa_for_fwcmd), (u32)pa_for_fwcmd);
-
-       /* Prepares an embedded fwcmd, including request/response sizes. */
-       va_for_fwcmd = BE_PREPARE_NONEMBEDDED_FWCMD(pfob, wrb,
-                         va_for_fwcmd, pa_for_fwcmd, ETH_GET_STATISTICS);
-
-       /* Post the f/w command */
-       status = be_function_post_mcc_wrb(pfob, wrb, generic_ctxt,
-               cb, cb_context, NULL, NULL, va_for_fwcmd, NULL);
-       if (status < 0) {
-               TRACE(DL_ERR, "eth stats fwcmd failed.");
-               goto Error;
-       }
-
-Error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
-
-int
-be_rxf_promiscuous(struct be_function_object *pfob,
-                  bool enable_port0, bool enable_port1,
-                  mcc_wrb_cqe_callback cb, void *cb_context,
-                  struct be_promiscuous_q_ctxt *q_ctxt)
-{
-       struct FWCMD_ETH_PROMISCUOUS *fwcmd = NULL;
-       struct MCC_WRB_AMAP *wrb = NULL;
-       int status = 0;
-       struct be_generic_q_ctxt *generic_ctxt = NULL;
-       unsigned long irql;
-
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-
-       if (!wrb) {
-               if (q_ctxt && cb) {
-                       wrb = (struct MCC_WRB_AMAP *) &q_ctxt->wrb_header;
-                       generic_ctxt = (struct be_generic_q_ctxt *) q_ctxt;
-                       generic_ctxt->context.bytes = sizeof(*q_ctxt);
-               } else {
-                       status = BE_STATUS_NO_MCC_WRB;
-                       goto Error;
-               }
-       }
-       /* Prepares an embedded fwcmd, including request/response sizes. */
-       fwcmd = BE_PREPARE_EMBEDDED_FWCMD(pfob, wrb, ETH_PROMISCUOUS);
-
-       fwcmd->params.request.port0_promiscuous = enable_port0;
-       fwcmd->params.request.port1_promiscuous = enable_port1;
-
-       /* Post the f/w command */
-       status = be_function_post_mcc_wrb(pfob, wrb, generic_ctxt,
-                       cb, cb_context, NULL, NULL, fwcmd, NULL);
-
-       if (status < 0) {
-               TRACE(DL_ERR, "promiscuous fwcmd failed.");
-               goto Error;
-       }
-
-Error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
-
-
-/*
- *-------------------------------------------------------------------------
- * Function: be_rxf_filter_config
- *   Configures BladeEngine ethernet receive filter settings.
- * pfob    -
- * settings           - Pointer to the requested filter settings.
- *                     The response from BladeEngine will be placed back
- *                     in this structure.
- * cb                 - optional
- * cb_context         - optional
- * q_ctxt             - Optional. Pointer to a previously allocated struct.
- *                     If the MCC WRB ring is full, this structure is
- *                     used to queue the operation. It will be posted
- *                     to the MCC ring when space becomes available. All
- *                      queued commands will be posted to the ring in
- *                      the order they are received. It is always valid
- *                      to pass a pointer to a generic
- *                      be_generic_q_ctxt. However, the specific
- *                      context structs are generally smaller than
- *                      the generic struct.
- * return pend_status - BE_SUCCESS (0) on success.
- *                     BE_PENDING (postive value) if the FWCMD
- *                      completion is pending. Negative error code on failure.
- *---------------------------------------------------------------------------
- */
-int
-be_rxf_filter_config(struct be_function_object *pfob,
-                    struct NTWK_RX_FILTER_SETTINGS *settings,
-                    mcc_wrb_cqe_callback cb, void *cb_context,
-                    struct be_rxf_filter_q_ctxt *q_ctxt)
-{
-       struct FWCMD_COMMON_NTWK_RX_FILTER *fwcmd = NULL;
-       struct MCC_WRB_AMAP *wrb = NULL;
-       int status = 0;
-       struct be_generic_q_ctxt *generic_ctxt = NULL;
-       unsigned long irql;
-       struct be_mcc_wrb_response_copy rc;
-
-       ASSERT(settings);
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-
-       if (!wrb) {
-               if (q_ctxt && cb) {
-                       wrb = (struct MCC_WRB_AMAP *) &q_ctxt->wrb_header;
-                       generic_ctxt = (struct be_generic_q_ctxt *) q_ctxt;
-                       generic_ctxt->context.bytes = sizeof(*q_ctxt);
-               } else {
-                       status = BE_STATUS_NO_MCC_WRB;
-                       goto Error;
-               }
-       }
-       /* Prepares an embedded fwcmd, including request/response sizes. */
-       fwcmd = BE_PREPARE_EMBEDDED_FWCMD(pfob, wrb, COMMON_NTWK_RX_FILTER);
-       memcpy(&fwcmd->params.request, settings, sizeof(*settings));
-
-       rc.length = FIELD_SIZEOF(struct FWCMD_COMMON_NTWK_RX_FILTER,
-                                       params.response);
-       rc.fwcmd_offset = offsetof(struct FWCMD_COMMON_NTWK_RX_FILTER,
-                                       params.response);
-       rc.va = settings;
-       /* Post or queue the f/w command */
-       status = be_function_post_mcc_wrb(pfob, wrb, generic_ctxt,
-                       cb, cb_context, NULL, NULL, fwcmd, &rc);
-
-       if (status < 0) {
-               TRACE(DL_ERR, "RXF/ERX filter config fwcmd failed.");
-               goto Error;
-       }
-
-Error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
diff --git a/drivers/staging/benet/etx_context.h b/drivers/staging/benet/etx_context.h
deleted file mode 100644 (file)
index 554fbe5..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-/*
- * Autogenerated by srcgen version: 0127
- */
-#ifndef __etx_context_amap_h__
-#define __etx_context_amap_h__
-
-/* ETX ring  context structure. */
-struct BE_ETX_CONTEXT_AMAP {
-       u8 tx_cidx[11]; /* DWORD 0 */
-       u8 rsvd0[5];    /* DWORD 0 */
-       u8 rsvd1[16];   /* DWORD 0 */
-       u8 tx_pidx[11]; /* DWORD 1 */
-       u8 rsvd2;               /* DWORD 1 */
-       u8 tx_ring_size[4];     /* DWORD 1 */
-       u8 pd_id[5];    /* DWORD 1 */
-       u8 pd_id_not_valid;     /* DWORD 1 */
-       u8 cq_id_send[10];      /* DWORD 1 */
-       u8 rsvd3[32];   /* DWORD 2 */
-       u8 rsvd4[32];   /* DWORD 3 */
-       u8 cur_bytes[32];       /* DWORD 4 */
-       u8 max_bytes[32];       /* DWORD 5 */
-       u8 time_stamp[32];      /* DWORD 6 */
-       u8 rsvd5[11];   /* DWORD 7 */
-       u8 func;                /* DWORD 7 */
-       u8 rsvd6[20];   /* DWORD 7 */
-       u8 cur_txd_count[32];   /* DWORD 8 */
-       u8 max_txd_count[32];   /* DWORD 9 */
-       u8 rsvd7[32];   /* DWORD 10 */
-       u8 rsvd8[32];   /* DWORD 11 */
-       u8 rsvd9[32];   /* DWORD 12 */
-       u8 rsvd10[32];  /* DWORD 13 */
-       u8 rsvd11[32];  /* DWORD 14 */
-       u8 rsvd12[32];  /* DWORD 15 */
-} __packed;
-struct ETX_CONTEXT_AMAP {
-       u32 dw[16];
-};
-
-#endif /* __etx_context_amap_h__ */
diff --git a/drivers/staging/benet/funcobj.c b/drivers/staging/benet/funcobj.c
deleted file mode 100644 (file)
index 0f57eb5..0000000
+++ /dev/null
@@ -1,565 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-#include "hwlib.h"
-#include "bestatus.h"
-
-
-int
-be_function_internal_query_firmware_config(struct be_function_object *pfob,
-                                  struct BE_FIRMWARE_CONFIG *config)
-{
-       struct FWCMD_COMMON_FIRMWARE_CONFIG *fwcmd = NULL;
-       struct MCC_WRB_AMAP *wrb = NULL;
-       int status = 0;
-       unsigned long irql;
-       struct be_mcc_wrb_response_copy rc;
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-       if (!wrb) {
-               TRACE(DL_ERR, "MCC wrb peek failed.");
-               status = BE_STATUS_NO_MCC_WRB;
-               goto error;
-       }
-       /* Prepares an embedded fwcmd, including request/response sizes. */
-       fwcmd = BE_PREPARE_EMBEDDED_FWCMD(pfob, wrb, COMMON_FIRMWARE_CONFIG);
-
-       rc.length = FIELD_SIZEOF(struct FWCMD_COMMON_FIRMWARE_CONFIG,
-                                       params.response);
-       rc.fwcmd_offset = offsetof(struct FWCMD_COMMON_FIRMWARE_CONFIG,
-                                       params.response);
-       rc.va = config;
-
-       /* Post the f/w command */
-       status = be_function_post_mcc_wrb(pfob, wrb, NULL, NULL,
-                                       NULL, NULL, NULL, fwcmd, &rc);
-error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
-
-/*
-    This allocates and initializes a function object based on the information
-    provided by upper layer drivers.
-
-    Returns BE_SUCCESS on success and an appropriate int on failure.
-
-    A function object represents a single BladeEngine (logical) PCI function.
-    That is a function object either represents
-    the networking side of BladeEngine or the iSCSI side of BladeEngine.
-
-    This routine will also detect and create an appropriate PD object for the
-    PCI function as needed.
-*/
-int
-be_function_object_create(u8 __iomem *csr_va, u8 __iomem *db_va,
-               u8 __iomem *pci_va, u32 function_type,
-               struct ring_desc *mailbox, struct be_function_object *pfob)
-{
-       int status;
-
-       ASSERT(pfob);   /* not a magic assert */
-       ASSERT(function_type <= 2);
-
-       TRACE(DL_INFO, "Create function object. type:%s object:0x%p",
-             (function_type == BE_FUNCTION_TYPE_ISCSI ? "iSCSI" :
-              (function_type == BE_FUNCTION_TYPE_NETWORK ? "Network" :
-               "Arm")), pfob);
-
-       memset(pfob, 0, sizeof(*pfob));
-
-       pfob->type = function_type;
-       pfob->csr_va = csr_va;
-       pfob->db_va = db_va;
-       pfob->pci_va = pci_va;
-
-       spin_lock_init(&pfob->cq_lock);
-       spin_lock_init(&pfob->post_lock);
-       spin_lock_init(&pfob->mcc_context_lock);
-
-
-       pfob->pci_function_number = 1;
-
-
-       pfob->emulate = false;
-       TRACE(DL_NOTE, "Non-emulation mode");
-       status = be_drive_POST(pfob);
-       if (status != BE_SUCCESS) {
-               TRACE(DL_ERR, "BladeEngine POST failed.");
-               goto error;
-       }
-
-       /* Initialize the mailbox */
-       status = be_mpu_init_mailbox(pfob, mailbox);
-       if (status != BE_SUCCESS) {
-               TRACE(DL_ERR, "Failed to initialize mailbox.");
-               goto error;
-       }
-       /*
-        * Cache the firmware config for ASSERTs in hwclib and later
-        * driver queries.
-        */
-       status = be_function_internal_query_firmware_config(pfob,
-                                              &pfob->fw_config);
-       if (status != BE_SUCCESS) {
-               TRACE(DL_ERR, "Failed to query firmware config.");
-               goto error;
-       }
-
-error:
-       if (status != BE_SUCCESS) {
-               /* No cleanup necessary */
-               TRACE(DL_ERR, "Failed to create function.");
-               memset(pfob, 0, sizeof(*pfob));
-       }
-       return status;
-}
-
-/*
-    This routine drops the reference count on a given function object. Once
-    the reference count falls to zero, the function object is destroyed and all
-    resources held are freed.
-
-    FunctionObject      - The function object to drop the reference to.
-*/
-int be_function_object_destroy(struct be_function_object *pfob)
-{
-       TRACE(DL_INFO, "Destroy pfob. Object:0x%p",
-             pfob);
-
-
-       ASSERT(pfob->mcc == NULL);
-
-       return BE_SUCCESS;
-}
-
-int be_function_cleanup(struct be_function_object *pfob)
-{
-       int status = 0;
-       u32 isr;
-       u32 host_intr;
-       struct PCICFG_HOST_TIMER_INT_CTRL_CSR_AMAP ctrl;
-
-
-       if (pfob->type == BE_FUNCTION_TYPE_NETWORK) {
-               status = be_rxf_multicast_config(pfob, false, 0,
-                                               NULL, NULL, NULL, NULL);
-               ASSERT(status == BE_SUCCESS);
-       }
-       /* VLAN */
-       status = be_rxf_vlan_config(pfob, false, 0, NULL, NULL, NULL, NULL);
-       ASSERT(status == BE_SUCCESS);
-       /*
-        * MCC Queue -- Switches to mailbox mode.  May want to destroy
-        * all but the MCC CQ before this call if polling CQ is much better
-        * performance than polling mailbox register.
-        */
-       if (pfob->mcc)
-               status = be_mcc_ring_destroy(pfob->mcc);
-       /*
-        * If interrupts are disabled, clear any CEV interrupt assertions that
-        * fired after we stopped processing EQs.
-        */
-       ctrl.dw[0] = PCICFG1_READ(pfob, host_timer_int_ctrl);
-       host_intr = AMAP_GET_BITS_PTR(PCICFG_HOST_TIMER_INT_CTRL_CSR,
-                                                       hostintr, ctrl.dw);
-       if (!host_intr)
-               if (pfob->type == BE_FUNCTION_TYPE_NETWORK)
-                       isr = CSR_READ(pfob, cev.isr1);
-               else
-                       isr = CSR_READ(pfob, cev.isr0);
-       else
-               /* This should never happen... */
-               TRACE(DL_ERR, "function_cleanup called with interrupt enabled");
-       /* Function object destroy */
-       status = be_function_object_destroy(pfob);
-       ASSERT(status == BE_SUCCESS);
-
-       return status;
-}
-
-
-void *
-be_function_prepare_embedded_fwcmd(struct be_function_object *pfob,
-       struct MCC_WRB_AMAP *wrb, u32 payld_len, u32 request_length,
-       u32 response_length, u32 opcode, u32 subsystem)
-{
-       struct FWCMD_REQUEST_HEADER *header = NULL;
-       u32 n;
-
-       ASSERT(wrb);
-
-       n = offsetof(struct BE_MCC_WRB_AMAP, payload)/8;
-       AMAP_SET_BITS_PTR(MCC_WRB, embedded, wrb, 1);
-       AMAP_SET_BITS_PTR(MCC_WRB, payload_length, wrb, min(payld_len, n));
-       header = (struct FWCMD_REQUEST_HEADER *)((u8 *)wrb + n);
-
-       header->timeout = 0;
-       header->domain = 0;
-       header->request_length = max(request_length, response_length);
-       header->opcode = opcode;
-       header->subsystem = subsystem;
-
-       return header;
-}
-
-void *
-be_function_prepare_nonembedded_fwcmd(struct be_function_object *pfob,
-       struct MCC_WRB_AMAP *wrb,
-       void *fwcmd_va, u64 fwcmd_pa,
-       u32 payld_len,
-       u32 request_length,
-       u32 response_length,
-       u32 opcode, u32 subsystem)
-{
-       struct FWCMD_REQUEST_HEADER *header = NULL;
-       u32 n;
-       struct MCC_WRB_PAYLOAD_AMAP *plp;
-
-       ASSERT(wrb);
-       ASSERT(fwcmd_va);
-
-       header = (struct FWCMD_REQUEST_HEADER *) fwcmd_va;
-
-       AMAP_SET_BITS_PTR(MCC_WRB, embedded, wrb, 0);
-       AMAP_SET_BITS_PTR(MCC_WRB, payload_length, wrb, payld_len);
-
-       /*
-        * Assume one fragment. The caller may override the SGL by
-        * rewriting the 0th length and adding more entries.  They
-        * will also need to update the sge_count.
-        */
-       AMAP_SET_BITS_PTR(MCC_WRB, sge_count, wrb, 1);
-
-       n = offsetof(struct BE_MCC_WRB_AMAP, payload)/8;
-       plp = (struct MCC_WRB_PAYLOAD_AMAP *)((u8 *)wrb + n);
-       AMAP_SET_BITS_PTR(MCC_WRB_PAYLOAD, sgl[0].length, plp, payld_len);
-       AMAP_SET_BITS_PTR(MCC_WRB_PAYLOAD, sgl[0].pa_lo, plp, (u32)fwcmd_pa);
-       AMAP_SET_BITS_PTR(MCC_WRB_PAYLOAD, sgl[0].pa_hi, plp,
-                                       upper_32_bits(fwcmd_pa));
-
-       header->timeout = 0;
-       header->domain = 0;
-       header->request_length = max(request_length, response_length);
-       header->opcode = opcode;
-       header->subsystem = subsystem;
-
-       return header;
-}
-
-struct MCC_WRB_AMAP *
-be_function_peek_mcc_wrb(struct be_function_object *pfob)
-{
-       struct MCC_WRB_AMAP *wrb = NULL;
-       u32 offset;
-
-       if (pfob->mcc)
-               wrb = _be_mpu_peek_ring_wrb(pfob->mcc, false);
-       else {
-               offset = offsetof(struct BE_MCC_MAILBOX_AMAP, wrb)/8;
-               wrb = (struct MCC_WRB_AMAP *) ((u8 *) pfob->mailbox.va +
-                               offset);
-       }
-
-       if (wrb)
-               memset(wrb, 0, sizeof(struct MCC_WRB_AMAP));
-
-       return wrb;
-}
-
-#if defined(BE_DEBUG)
-void be_function_debug_print_wrb(struct be_function_object *pfob,
-               struct MCC_WRB_AMAP *wrb, void *optional_fwcmd_va,
-               struct be_mcc_wrb_context *wrb_context)
-{
-
-       struct FWCMD_REQUEST_HEADER *header = NULL;
-       u8 embedded;
-       u32 n;
-
-       embedded = AMAP_GET_BITS_PTR(MCC_WRB, embedded, wrb);
-
-       if (embedded) {
-               n = offsetof(struct BE_MCC_WRB_AMAP, payload)/8;
-               header = (struct FWCMD_REQUEST_HEADER *)((u8 *)wrb + n);
-       } else {
-               header = (struct FWCMD_REQUEST_HEADER *) optional_fwcmd_va;
-       }
-
-       /* Save the completed count before posting for a debug assert. */
-
-       if (header) {
-               wrb_context->opcode = header->opcode;
-               wrb_context->subsystem = header->subsystem;
-
-       } else {
-               wrb_context->opcode = 0;
-               wrb_context->subsystem = 0;
-       }
-}
-#else
-#define be_function_debug_print_wrb(a_, b_, c_, d_)
-#endif
-
-int
-be_function_post_mcc_wrb(struct be_function_object *pfob,
-               struct MCC_WRB_AMAP *wrb,
-               struct be_generic_q_ctxt *q_ctxt,
-               mcc_wrb_cqe_callback cb, void *cb_context,
-               mcc_wrb_cqe_callback internal_cb,
-               void *internal_cb_context, void *optional_fwcmd_va,
-               struct be_mcc_wrb_response_copy *rc)
-{
-       int status;
-       struct be_mcc_wrb_context *wrb_context = NULL;
-       u64 *p;
-
-       if (q_ctxt) {
-               /* Initialize context.         */
-               q_ctxt->context.internal_cb = internal_cb;
-               q_ctxt->context.internal_cb_context = internal_cb_context;
-               q_ctxt->context.cb = cb;
-               q_ctxt->context.cb_context = cb_context;
-               if (rc) {
-                       q_ctxt->context.copy.length = rc->length;
-                       q_ctxt->context.copy.fwcmd_offset = rc->fwcmd_offset;
-                       q_ctxt->context.copy.va = rc->va;
-               } else
-                       q_ctxt->context.copy.length = 0;
-
-               q_ctxt->context.optional_fwcmd_va = optional_fwcmd_va;
-
-               /* Queue this request */
-               status = be_function_queue_mcc_wrb(pfob, q_ctxt);
-
-               goto Error;
-       }
-       /*
-        * Allocate a WRB context struct to hold the callback pointers,
-        * status, etc.  This is required if commands complete out of order.
-        */
-       wrb_context = _be_mcc_allocate_wrb_context(pfob);
-       if (!wrb_context) {
-               TRACE(DL_WARN, "Failed to allocate MCC WRB context.");
-               status = BE_STATUS_SYSTEM_RESOURCES;
-               goto Error;
-       }
-       /* Initialize context. */
-       memset(wrb_context, 0, sizeof(*wrb_context));
-       wrb_context->internal_cb = internal_cb;
-       wrb_context->internal_cb_context = internal_cb_context;
-       wrb_context->cb = cb;
-       wrb_context->cb_context = cb_context;
-       if (rc) {
-               wrb_context->copy.length = rc->length;
-               wrb_context->copy.fwcmd_offset = rc->fwcmd_offset;
-               wrb_context->copy.va = rc->va;
-       } else
-               wrb_context->copy.length = 0;
-       wrb_context->wrb = wrb;
-
-       /*
-        * Copy the context pointer into the WRB opaque tag field.
-        * Verify assumption of 64-bit tag with a compile time assert.
-        */
-       p = (u64 *) ((u8 *)wrb + offsetof(struct BE_MCC_WRB_AMAP, tag)/8);
-       *p = (u64)(size_t)wrb_context;
-
-       /* Print info about this FWCMD for debug builds. */
-       be_function_debug_print_wrb(pfob, wrb, optional_fwcmd_va, wrb_context);
-
-       /*
-        * issue the WRB to the MPU as appropriate
-        */
-       if (pfob->mcc) {
-               /*
-                * we're in WRB mode, pass to the mcc layer
-                */
-               status = _be_mpu_post_wrb_ring(pfob->mcc, wrb, wrb_context);
-       } else {
-               /*
-                * we're in mailbox mode
-                */
-               status = _be_mpu_post_wrb_mailbox(pfob, wrb, wrb_context);
-
-               /* mailbox mode always completes synchronously */
-               ASSERT(status != BE_STATUS_PENDING);
-       }
-
-Error:
-
-       return status;
-}
-
-int
-be_function_ring_destroy(struct be_function_object *pfob,
-               u32 id, u32 ring_type, mcc_wrb_cqe_callback cb,
-               void *cb_context, mcc_wrb_cqe_callback internal_cb,
-               void *internal_cb_context)
-{
-
-       struct FWCMD_COMMON_RING_DESTROY *fwcmd = NULL;
-       struct MCC_WRB_AMAP *wrb = NULL;
-       int status = 0;
-       unsigned long irql;
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       TRACE(DL_INFO, "Destroy ring id:%d type:%d", id, ring_type);
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-       if (!wrb) {
-               ASSERT(wrb);
-               TRACE(DL_ERR, "No free MCC WRBs in destroy ring.");
-               status = BE_STATUS_NO_MCC_WRB;
-               goto Error;
-       }
-       /* Prepares an embedded fwcmd, including request/response sizes. */
-       fwcmd = BE_PREPARE_EMBEDDED_FWCMD(pfob, wrb, COMMON_RING_DESTROY);
-
-       fwcmd->params.request.id = id;
-       fwcmd->params.request.ring_type = ring_type;
-
-       /* Post the f/w command */
-       status = be_function_post_mcc_wrb(pfob, wrb, NULL, cb, cb_context,
-                               internal_cb, internal_cb_context, fwcmd, NULL);
-       if (status != BE_SUCCESS && status != BE_PENDING) {
-               TRACE(DL_ERR, "Ring destroy fwcmd failed. id:%d ring_type:%d",
-                       id, ring_type);
-               goto Error;
-       }
-
-Error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
-
-void
-be_rd_to_pa_list(struct ring_desc *rd, struct PHYS_ADDR *pa_list, u32 max_num)
-{
-       u32 num_pages = PAGES_SPANNED(rd->va, rd->length);
-       u32 i = 0;
-       u64 pa = rd->pa;
-       __le64 lepa;
-
-       ASSERT(pa_list);
-       ASSERT(pa);
-
-       for (i = 0; i < min(num_pages, max_num); i++) {
-               lepa = cpu_to_le64(pa);
-               pa_list[i].lo = (u32)lepa;
-               pa_list[i].hi = upper_32_bits(lepa);
-               pa += PAGE_SIZE;
-       }
-}
-
-
-
-/*-----------------------------------------------------------------------------
- * Function: be_function_get_fw_version
- *   Retrieves the firmware version on the adpater. If the callback is
- *   NULL this call executes synchronously. If the callback is not NULL,
- *   the returned status will be BE_PENDING if the command was issued
- *   successfully.
- * pfob    -
- * fwv         - Pointer to response buffer if callback is NULL.
- * cb           - Callback function invoked when the FWCMD completes.
- * cb_context   - Passed to the callback function.
- * return pend_status - BE_SUCCESS (0) on success.
- *                     BE_PENDING (postive value) if the FWCMD
- *                      completion is pending. Negative error code on failure.
- *---------------------------------------------------------------------------
- */
-int
-be_function_get_fw_version(struct be_function_object *pfob,
-               struct FWCMD_COMMON_GET_FW_VERSION_RESPONSE_PAYLOAD *fwv,
-               mcc_wrb_cqe_callback cb, void *cb_context)
-{
-       int status = BE_SUCCESS;
-       struct MCC_WRB_AMAP *wrb = NULL;
-       struct FWCMD_COMMON_GET_FW_VERSION *fwcmd = NULL;
-       unsigned long irql;
-       struct be_mcc_wrb_response_copy rc;
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-       if (!wrb) {
-               TRACE(DL_ERR, "MCC wrb peek failed.");
-               status = BE_STATUS_NO_MCC_WRB;
-               goto Error;
-       }
-
-       if (!cb && !fwv) {
-               TRACE(DL_ERR, "callback and response buffer NULL!");
-               status = BE_NOT_OK;
-               goto Error;
-       }
-       /* Prepares an embedded fwcmd, including request/response sizes. */
-       fwcmd = BE_PREPARE_EMBEDDED_FWCMD(pfob, wrb, COMMON_GET_FW_VERSION);
-
-       rc.length = FIELD_SIZEOF(struct FWCMD_COMMON_GET_FW_VERSION,
-                                       params.response);
-       rc.fwcmd_offset = offsetof(struct FWCMD_COMMON_GET_FW_VERSION,
-                                       params.response);
-       rc.va = fwv;
-
-       /* Post the f/w command */
-       status = be_function_post_mcc_wrb(pfob, wrb, NULL, cb,
-                               cb_context, NULL, NULL, fwcmd, &rc);
-
-Error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
-
-int
-be_function_queue_mcc_wrb(struct be_function_object *pfob,
-                         struct be_generic_q_ctxt *q_ctxt)
-{
-       int status;
-
-       ASSERT(q_ctxt);
-
-       /*
-        * issue the WRB to the MPU as appropriate
-        */
-       if (pfob->mcc) {
-
-               /* We're in ring mode.  Queue this item. */
-               pfob->mcc->backlog_length++;
-               list_add_tail(&q_ctxt->context.list, &pfob->mcc->backlog);
-               status = BE_PENDING;
-       } else {
-               status = BE_NOT_OK;
-       }
-       return status;
-}
-
diff --git a/drivers/staging/benet/fwcmd_common.h b/drivers/staging/benet/fwcmd_common.h
deleted file mode 100644 (file)
index 406e0d6..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-/*
- * Autogenerated by srcgen version: 0127
- */
-#ifndef __fwcmd_common_amap_h__
-#define __fwcmd_common_amap_h__
-#include "host_struct.h"
-
-/* --- PHY_LINK_DUPLEX_ENUM --- */
-#define PHY_LINK_DUPLEX_NONE            (0)
-#define PHY_LINK_DUPLEX_HALF            (1)
-#define PHY_LINK_DUPLEX_FULL            (2)
-
-/* --- PHY_LINK_SPEED_ENUM --- */
-#define PHY_LINK_SPEED_ZERO             (0)    /* No link. */
-#define PHY_LINK_SPEED_10MBPS           (1)    /* 10 Mbps */
-#define PHY_LINK_SPEED_100MBPS          (2)    /* 100 Mbps */
-#define PHY_LINK_SPEED_1GBPS            (3)    /* 1 Gbps */
-#define PHY_LINK_SPEED_10GBPS           (4)    /* 10 Gbps */
-
-/* --- PHY_LINK_FAULT_ENUM --- */
-#define PHY_LINK_FAULT_NONE             (0)    /* No fault status
-                                                       available or detected */
-#define PHY_LINK_FAULT_LOCAL            (1)    /* Local fault detected */
-#define PHY_LINK_FAULT_REMOTE           (2)    /* Remote fault detected */
-
-/* --- BE_ULP_MASK --- */
-#define BE_ULP0_MASK                    (1)
-#define BE_ULP1_MASK                    (2)
-#define BE_ULP2_MASK                    (4)
-
-/* --- NTWK_ACTIVE_PORT --- */
-#define NTWK_PORT_A                     (0)    /* Port A is currently active */
-#define NTWK_PORT_B                     (1)    /* Port B is currently active */
-#define NTWK_NO_ACTIVE_PORT             (15)   /* Both ports have lost link */
-
-/* --- NTWK_LINK_TYPE --- */
-#define NTWK_LINK_TYPE_PHYSICAL         (0)    /* link up/down event
-                                                  applies to BladeEngine's
-                                                  Physical Ports
-                                                  */
-#define NTWK_LINK_TYPE_VIRTUAL          (1)    /* Virtual link up/down event
-                                                  reported by BladeExchange.
-                                                  This applies only when the
-                                                  VLD feature is enabled
-                                                  */
-
-/*
- * --- FWCMD_MAC_TYPE_ENUM ---
- * This enum defines the types of MAC addresses in the RXF MAC Address Table.
- */
-#define MAC_ADDRESS_TYPE_STORAGE        (0)    /* Storage MAC Address */
-#define MAC_ADDRESS_TYPE_NETWORK        (1)    /* Network MAC Address */
-#define MAC_ADDRESS_TYPE_PD             (2)    /* Protection Domain MAC Addr */
-#define MAC_ADDRESS_TYPE_MANAGEMENT     (3)    /* Managment MAC Address */
-
-
-/* --- FWCMD_RING_TYPE_ENUM --- */
-#define FWCMD_RING_TYPE_ETH_RX          (1)    /* Ring created with */
-                                       /* FWCMD_COMMON_ETH_RX_CREATE. */
-#define FWCMD_RING_TYPE_ETH_TX          (2)    /* Ring created with */
-                                       /* FWCMD_COMMON_ETH_TX_CREATE. */
-#define FWCMD_RING_TYPE_ISCSI_WRBQ      (3)    /* Ring created with */
-                                       /* FWCMD_COMMON_ISCSI_WRBQ_CREATE. */
-#define FWCMD_RING_TYPE_ISCSI_DEFQ      (4)    /* Ring created with */
-                                       /* FWCMD_COMMON_ISCSI_DEFQ_CREATE. */
-#define FWCMD_RING_TYPE_TPM_WRBQ        (5)    /* Ring created with */
-                                       /* FWCMD_COMMON_TPM_WRBQ_CREATE. */
-#define FWCMD_RING_TYPE_TPM_DEFQ        (6)    /* Ring created with */
-                                       /* FWCMD_COMMONTPM_TDEFQ_CREATE. */
-#define FWCMD_RING_TYPE_TPM_RQ          (7)    /* Ring created with */
-                                       /* FWCMD_COMMON_TPM_RQ_CREATE. */
-#define FWCMD_RING_TYPE_MCC             (8)    /* Ring created with */
-                                       /* FWCMD_COMMON_MCC_CREATE. */
-#define FWCMD_RING_TYPE_CQ              (9)    /* Ring created with */
-                                       /* FWCMD_COMMON_CQ_CREATE. */
-#define FWCMD_RING_TYPE_EQ              (10)   /* Ring created with */
-                                       /* FWCMD_COMMON_EQ_CREATE. */
-#define FWCMD_RING_TYPE_QP              (11)   /* Ring created with */
-                                       /* FWCMD_RDMA_QP_CREATE. */
-
-
-/* --- ETH_TX_RING_TYPE_ENUM --- */
-#define ETH_TX_RING_TYPE_FORWARDING     (1)    /* Ethernet ring for
-                                                  forwarding packets */
-#define ETH_TX_RING_TYPE_STANDARD       (2)    /* Ethernet ring for sending
-                                                  network packets. */
-#define ETH_TX_RING_TYPE_BOUND          (3)    /* Ethernet ring bound to the
-                                                  port specified in the command
-                                                  header.port_number field.
-                                                  Rings of this type are
-                                                  NOT subject to the
-                                                  failover logic implemented
-                                                  in the BladeEngine.
-                                                  */
-
-/* --- FWCMD_COMMON_QOS_TYPE_ENUM --- */
-#define QOS_BITS_NIC                    (1)    /* max_bits_per_second_NIC */
-                                                 /* field is valid.  */
-#define QOS_PKTS_NIC                    (2)    /* max_packets_per_second_NIC */
-                                                 /* field is valid.  */
-#define QOS_IOPS_ISCSI                  (4)    /* max_ios_per_second_iSCSI */
-                                                 /*field is valid.  */
-#define QOS_VLAN_TAG                    (8)    /* domain_VLAN_tag field
-                                                  is valid. */
-#define QOS_FABRIC_ID                   (16)   /* fabric_domain_ID field
-                                                  is valid. */
-#define QOS_OEM_PARAMS                  (32)   /* qos_params_oem field
-                                                  is valid. */
-#define QOS_TPUT_ISCSI                  (64)   /* max_bytes_per_second_iSCSI
-                                                  field  is valid.  */
-
-
-/*
- * --- FAILOVER_CONFIG_ENUM ---
- * Failover configuration setting used in FWCMD_COMMON_FORCE_FAILOVER
- */
-#define FAILOVER_CONFIG_NO_CHANGE       (0)    /* No change to automatic */
-                                                 /* port failover setting. */
-#define FAILOVER_CONFIG_ON              (1)    /* Automatic port failover
-                                                  on link down  is enabled. */
-#define FAILOVER_CONFIG_OFF             (2)    /* Automatic port failover
-                                                  on link down is disabled. */
-
-/*
- * --- FAILOVER_PORT_ENUM ---
- * Failover port setting used in FWCMD_COMMON_FORCE_FAILOVER
- */
-#define FAILOVER_PORT_A                 (0)    /* Selects port A. */
-#define FAILOVER_PORT_B                 (1)    /* Selects port B. */
-#define FAILOVER_PORT_NONE              (15)   /* No port change requested. */
-
-
-/*
- * --- MGMT_FLASHROM_OPCODE ---
- * Flash ROM operation code
- */
-#define MGMT_FLASHROM_OPCODE_FLASH      (1)    /* Commit downloaded data
-                                                  to Flash ROM */
-#define MGMT_FLASHROM_OPCODE_SAVE       (2)    /* Save downloaded data to
-                                                  ARM's DDR - do not flash */
-#define MGMT_FLASHROM_OPCODE_CLEAR      (3)    /* Erase specified component
-                                                  from FlashROM */
-#define MGMT_FLASHROM_OPCODE_REPORT     (4)    /* Read specified component
-                                                  from Flash ROM */
-#define MGMT_FLASHROM_OPCODE_IMAGE_INFO (5)    /* Returns size of a
-                                                  component */
-
-/*
- * --- MGMT_FLASHROM_OPTYPE ---
- * Flash ROM operation type
- */
-#define MGMT_FLASHROM_OPTYPE_CODE_FIRMWARE (0) /* Includes ARM firmware,
-                                                  IPSec (optional) and EP
-                                                  firmware  */
-#define MGMT_FLASHROM_OPTYPE_CODE_REDBOOT (1)
-#define MGMT_FLASHROM_OPTYPE_CODE_BIOS  (2)
-#define MGMT_FLASHROM_OPTYPE_CODE_PXE_BIOS (3)
-#define MGMT_FLASHROM_OPTYPE_CODE_CTRLS (4)
-#define MGMT_FLASHROM_OPTYPE_CFG_IPSEC  (5)
-#define MGMT_FLASHROM_OPTYPE_CFG_INI    (6)
-#define MGMT_FLASHROM_OPTYPE_ROM_OFFSET_SPECIFIED (7)
-
-/*
- * --- FLASHROM_TYPE ---
- * Flash ROM manufacturers supported in the f/w
- */
-#define INTEL                           (0)
-#define SPANSION                        (1)
-#define MICRON                          (2)
-
-/* --- DDR_CAS_TYPE --- */
-#define CAS_3                           (0)
-#define CAS_4                           (1)
-#define CAS_5                           (2)
-
-/* --- DDR_SIZE_TYPE --- */
-#define SIZE_256MB                      (0)
-#define SIZE_512MB                      (1)
-
-/* --- DDR_MODE_TYPE --- */
-#define DDR_NO_ECC                      (0)
-#define DDR_ECC                         (1)
-
-/* --- INTERFACE_10GB_TYPE --- */
-#define CX4_TYPE                        (0)
-#define XFP_TYPE                        (1)
-
-/* --- BE_CHIP_MAX_MTU --- */
-#define CHIP_MAX_MTU                    (9000)
-
-/* --- XAUI_STATE_ENUM --- */
-#define XAUI_STATE_ENABLE               (0)    /* This MUST be the default
-                                                  value for all requests
-                                                  which set/change
-                                                  equalization parameter.  */
-#define XAUI_STATE_DISABLE              (255)  /* The XAUI for both ports
-                                                  may be disabled for EMI
-                                                  tests. There is no
-                                                  provision for turning off
-                                                  individual ports.
-                                                  */
-/* --- BE_ASIC_REVISION --- */
-#define BE_ASIC_REV_A0                  (1)
-#define BE_ASIC_REV_A1                  (2)
-
-#endif /* __fwcmd_common_amap_h__ */
diff --git a/drivers/staging/benet/fwcmd_common_bmap.h b/drivers/staging/benet/fwcmd_common_bmap.h
deleted file mode 100644 (file)
index a007cf2..0000000
+++ /dev/null
@@ -1,717 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-/*
- * Autogenerated by srcgen version: 0127
- */
-#ifndef __fwcmd_common_bmap_h__
-#define __fwcmd_common_bmap_h__
-#include "fwcmd_types_bmap.h"
-#include "fwcmd_hdr_bmap.h"
-
-#if defined(__BIG_ENDIAN)
-   /* Physical Address. */
-struct PHYS_ADDR {
-       union {
-               struct {
-                       u32 lo; /* DWORD 0 */
-                       u32 hi; /* DWORD 1 */
-               } __packed;     /* unnamed struct */
-               u32 dw[2];      /* dword union */
-       };                      /* unnamed union */
-} __packed ;
-
-
-#else
-   /* Physical Address. */
-struct PHYS_ADDR {
-       union {
-               struct {
-                       u32 lo; /* DWORD 0 */
-                       u32 hi; /* DWORD 1 */
-               } __packed;     /* unnamed struct */
-               u32 dw[2];      /* dword union */
-       };                      /* unnamed union */
-} __packed ;
-
-struct BE_LINK_STATUS {
-       u8 mac0_duplex;
-       u8 mac0_speed;
-       u8 mac1_duplex;
-       u8 mac1_speed;
-       u8 mgmt_mac_duplex;
-       u8 mgmt_mac_speed;
-       u8 active_port;
-       u8 rsvd0;
-       u8 mac0_fault;
-       u8 mac1_fault;
-       u16 rsvd1;
-} __packed;
-#endif
-
-struct FWCMD_COMMON_ANON_170_REQUEST {
-       u32 rsvd0;
-} __packed;
-
-union LINK_STATUS_QUERY_PARAMS {
-       struct BE_LINK_STATUS response;
-       struct FWCMD_COMMON_ANON_170_REQUEST request;
-} __packed;
-
-/*
- *  Queries the the link status for all ports.  The valid values below
- *  DO NOT indicate that  a particular duplex or speed is supported by
- *  BladeEngine. These enumerations simply  list all possible duplexes
- *  and speeds for any port. Consult BladeEngine product  documentation
- *  for the supported parameters.
- */
-struct FWCMD_COMMON_NTWK_LINK_STATUS_QUERY {
-       union FWCMD_HEADER header;
-       union LINK_STATUS_QUERY_PARAMS params;
-} __packed;
-
-struct FWCMD_COMMON_ANON_171_REQUEST {
-       u8 type;
-       u8 port;
-       u8 mac1;
-       u8 permanent;
-} __packed;
-
-struct FWCMD_COMMON_ANON_172_RESPONSE {
-       struct MAC_ADDRESS_FORMAT mac;
-} __packed;
-
-union NTWK_MAC_QUERY_PARAMS {
-       struct FWCMD_COMMON_ANON_171_REQUEST request;
-       struct FWCMD_COMMON_ANON_172_RESPONSE response;
-} __packed;
-
-/* Queries one MAC address.  */
-struct FWCMD_COMMON_NTWK_MAC_QUERY {
-       union FWCMD_HEADER header;
-       union NTWK_MAC_QUERY_PARAMS params;
-} __packed;
-
-struct MAC_SET_PARAMS_IN {
-       u8 type;
-       u8 port;
-       u8 mac1;
-       u8 invalidate;
-       struct MAC_ADDRESS_FORMAT mac;
-} __packed;
-
-struct MAC_SET_PARAMS_OUT {
-       u32 rsvd0;
-} __packed;
-
-union MAC_SET_PARAMS {
-       struct MAC_SET_PARAMS_IN request;
-       struct MAC_SET_PARAMS_OUT response;
-} __packed;
-
-/* Sets a MAC address.  */
-struct FWCMD_COMMON_NTWK_MAC_SET {
-       union FWCMD_HEADER header;
-       union MAC_SET_PARAMS params;
-} __packed;
-
-/* MAC address list. */
-struct NTWK_MULTICAST_MAC_LIST {
-       u8 byte[6];
-} __packed;
-
-struct FWCMD_COMMON_NTWK_MULTICAST_SET_REQUEST_PAYLOAD {
-       u16 num_mac;
-       u8 promiscuous;
-       u8 rsvd0;
-       struct NTWK_MULTICAST_MAC_LIST mac[32];
-} __packed;
-
-struct FWCMD_COMMON_ANON_174_RESPONSE {
-       u32 rsvd0;
-} __packed;
-
-union FWCMD_COMMON_ANON_173_PARAMS {
-       struct FWCMD_COMMON_NTWK_MULTICAST_SET_REQUEST_PAYLOAD request;
-       struct FWCMD_COMMON_ANON_174_RESPONSE response;
-} __packed;
-
-/*
- *  Sets multicast address hash. The MPU will merge the MAC address lists
- *  from all clients,  including the networking and storage functions.
- *  This command may fail if the final merged  list of MAC addresses exceeds
- *  32 entries.
- */
-struct FWCMD_COMMON_NTWK_MULTICAST_SET {
-       union FWCMD_HEADER header;
-       union FWCMD_COMMON_ANON_173_PARAMS params;
-} __packed;
-
-struct FWCMD_COMMON_NTWK_VLAN_CONFIG_REQUEST_PAYLOAD {
-       u16 num_vlan;
-       u8 promiscuous;
-       u8 rsvd0;
-       u16 vlan_tag[32];
-} __packed;
-
-struct FWCMD_COMMON_ANON_176_RESPONSE {
-       u32 rsvd0;
-} __packed;
-
-union FWCMD_COMMON_ANON_175_PARAMS {
-       struct FWCMD_COMMON_NTWK_VLAN_CONFIG_REQUEST_PAYLOAD request;
-       struct FWCMD_COMMON_ANON_176_RESPONSE response;
-} __packed;
-
-/*
- *  Sets VLAN tag filter. The MPU will merge the VLAN tag list from all
- *  clients, including  the networking and storage functions. This command
- *  may fail if the final vlan_tag array  (from all functions) is longer
- *  than 32 entries.
- */
-struct FWCMD_COMMON_NTWK_VLAN_CONFIG {
-       union FWCMD_HEADER header;
-       union FWCMD_COMMON_ANON_175_PARAMS params;
-} __packed;
-
-struct RING_DESTROY_REQUEST {
-       u16 ring_type;
-       u16 id;
-       u8 bypass_flush;
-       u8 rsvd0;
-       u16 rsvd1;
-} __packed;
-
-struct FWCMD_COMMON_ANON_190_RESPONSE {
-       u32 rsvd0;
-} __packed;
-
-union FWCMD_COMMON_ANON_189_PARAMS {
-       struct RING_DESTROY_REQUEST request;
-       struct FWCMD_COMMON_ANON_190_RESPONSE response;
-} __packed;
-/*
- *  Command for destroying any ring. The connection(s) using the ring should
- *  be quiesced  before destroying the ring.
- */
-struct FWCMD_COMMON_RING_DESTROY {
-       union FWCMD_HEADER header;
-       union FWCMD_COMMON_ANON_189_PARAMS params;
-} __packed;
-
-struct FWCMD_COMMON_ANON_192_REQUEST {
-       u16 num_pages;
-       u16 rsvd0;
-       struct CQ_CONTEXT_AMAP context;
-       struct PHYS_ADDR pages[4];
-} __packed ;
-
-struct FWCMD_COMMON_ANON_193_RESPONSE {
-       u16 cq_id;
-} __packed ;
-
-union FWCMD_COMMON_ANON_191_PARAMS {
-       struct FWCMD_COMMON_ANON_192_REQUEST request;
-       struct FWCMD_COMMON_ANON_193_RESPONSE response;
-} __packed ;
-
-/*
- *  Command for creating a completion queue. A Completion Queue must span
- *  at least 1 page and  at most 4 pages. Each completion queue entry
- *  is 16 bytes regardless of CQ entry format.  Thus the ring must be
- *  at least 256 entries deep (corresponding to 1 page) and can be at
- *   most 1024 entries deep (corresponding to 4 pages). The number of
- *  pages posted must  contain the CQ ring size as encoded in the context.
- *
- */
-struct FWCMD_COMMON_CQ_CREATE {
-       union FWCMD_HEADER header;
-       union FWCMD_COMMON_ANON_191_PARAMS params;
-} __packed ;
-
-struct FWCMD_COMMON_ANON_198_REQUEST {
-       u16 num_pages;
-       u16 rsvd0;
-       struct EQ_CONTEXT_AMAP context;
-       struct PHYS_ADDR pages[8];
-} __packed ;
-
-struct FWCMD_COMMON_ANON_199_RESPONSE {
-       u16 eq_id;
-} __packed ;
-
-union FWCMD_COMMON_ANON_197_PARAMS {
-       struct FWCMD_COMMON_ANON_198_REQUEST request;
-       struct FWCMD_COMMON_ANON_199_RESPONSE response;
-} __packed ;
-
-/*
- *  Command for creating a event queue. An Event Queue must span at least
- *  1 page and at most  8 pages. The number of pages posted must contain
- *  the EQ ring. The ring is defined by  the size of the EQ entries (encoded
- *  in the context) and the number of EQ entries (also  encoded in the
- *  context).
- */
-struct FWCMD_COMMON_EQ_CREATE {
-       union  FWCMD_HEADER header;
-       union FWCMD_COMMON_ANON_197_PARAMS params;
-} __packed ;
-
-struct FWCMD_COMMON_ANON_201_REQUEST {
-       u16 cq_id;
-       u16 bcmc_cq_id;
-       u16 num_pages;
-       u16 rsvd0;
-       struct PHYS_ADDR pages[2];
-} __packed;
-
-struct FWCMD_COMMON_ANON_202_RESPONSE {
-       u16 id;
-} __packed;
-
-union FWCMD_COMMON_ANON_200_PARAMS {
-       struct FWCMD_COMMON_ANON_201_REQUEST request;
-       struct FWCMD_COMMON_ANON_202_RESPONSE response;
-} __packed;
-
-/*
- *  Command for creating Ethernet receive ring.  An ERX ring contains ETH_RX_D
- *  entries (8  bytes each). An ERX ring must be 1024 entries deep
- *  (corresponding to 2 pages).
- */
-struct FWCMD_COMMON_ETH_RX_CREATE {
-       union FWCMD_HEADER header;
-       union FWCMD_COMMON_ANON_200_PARAMS params;
-} __packed;
-
-struct FWCMD_COMMON_ANON_204_REQUEST {
-       u16 num_pages;
-       u8 ulp_num;
-       u8 type;
-       struct ETX_CONTEXT_AMAP context;
-       struct PHYS_ADDR pages[8];
-} __packed ;
-
-struct FWCMD_COMMON_ANON_205_RESPONSE {
-       u16 cid;
-       u8 ulp_num;
-       u8 rsvd0;
-} __packed ;
-
-union FWCMD_COMMON_ANON_203_PARAMS {
-       struct FWCMD_COMMON_ANON_204_REQUEST request;
-       struct FWCMD_COMMON_ANON_205_RESPONSE response;
-} __packed ;
-
-/*
- *  Command for creating an Ethernet transmit ring.  An ETX ring contains
- *  ETH_WRB entries (16  bytes each). An ETX ring must be at least 256
- *  entries deep (corresponding to 1 page)  and at most 2k entries deep
- *  (corresponding to 8 pages).
- */
-struct FWCMD_COMMON_ETH_TX_CREATE {
-       union FWCMD_HEADER header;
-       union FWCMD_COMMON_ANON_203_PARAMS params;
-} __packed ;
-
-struct FWCMD_COMMON_ANON_222_REQUEST {
-       u16 num_pages;
-       u16 rsvd0;
-       struct MCC_RING_CONTEXT_AMAP context;
-       struct PHYS_ADDR pages[8];
-} __packed ;
-
-struct FWCMD_COMMON_ANON_223_RESPONSE {
-       u16 id;
-} __packed ;
-
-union FWCMD_COMMON_ANON_221_PARAMS {
-       struct FWCMD_COMMON_ANON_222_REQUEST request;
-       struct FWCMD_COMMON_ANON_223_RESPONSE response;
-} __packed ;
-
-/*
- *  Command for creating the MCC ring. An MCC ring must be at least 16
- *  entries deep  (corresponding to 1 page) and at most 128 entries deep
- *  (corresponding to 8 pages).
- */
-struct FWCMD_COMMON_MCC_CREATE {
-       union FWCMD_HEADER header;
-       union FWCMD_COMMON_ANON_221_PARAMS params;
-} __packed ;
-
-struct GET_QOS_IN {
-       u32 qos_params_rsvd;
-} __packed;
-
-struct GET_QOS_OUT {
-       u32 max_bits_per_second_NIC;
-       u32 max_packets_per_second_NIC;
-       u32 max_ios_per_second_iSCSI;
-       u32 max_bytes_per_second_iSCSI;
-       u16 domain_VLAN_tag;
-       u16 fabric_domain_ID;
-       u32 qos_params_oem[4];
-} __packed;
-
-union GET_QOS_PARAMS {
-       struct GET_QOS_IN request;
-       struct GET_QOS_OUT response;
-} __packed;
-
-/* QOS/Bandwidth settings per domain. Applicable only in VMs.  */
-struct FWCMD_COMMON_GET_QOS {
-       union FWCMD_HEADER header;
-       union GET_QOS_PARAMS params;
-} __packed;
-
-struct SET_QOS_IN {
-       u32 valid_flags;
-       u32 max_bits_per_second_NIC;
-       u32 max_packets_per_second_NIC;
-       u32 max_ios_per_second_iSCSI;
-       u32 max_bytes_per_second_iSCSI;
-       u16 domain_VLAN_tag;
-       u16 fabric_domain_ID;
-       u32 qos_params_oem[4];
-} __packed;
-
-struct SET_QOS_OUT {
-       u32 qos_params_rsvd;
-} __packed;
-
-union SET_QOS_PARAMS {
-       struct SET_QOS_IN request;
-       struct SET_QOS_OUT response;
-} __packed;
-
-/* QOS/Bandwidth settings per domain. Applicable only in VMs.  */
-struct FWCMD_COMMON_SET_QOS {
-       union FWCMD_HEADER header;
-       union SET_QOS_PARAMS params;
-} __packed;
-
-struct SET_FRAME_SIZE_IN {
-       u32 max_tx_frame_size;
-       u32 max_rx_frame_size;
-} __packed;
-
-struct SET_FRAME_SIZE_OUT {
-       u32 chip_max_tx_frame_size;
-       u32 chip_max_rx_frame_size;
-} __packed;
-
-union SET_FRAME_SIZE_PARAMS {
-       struct SET_FRAME_SIZE_IN request;
-       struct SET_FRAME_SIZE_OUT response;
-} __packed;
-
-/* Set frame size command. Only host domain may issue this command.  */
-struct FWCMD_COMMON_SET_FRAME_SIZE {
-       union FWCMD_HEADER header;
-       union SET_FRAME_SIZE_PARAMS params;
-} __packed;
-
-struct FORCE_FAILOVER_IN {
-       u32 move_to_port;
-       u32 failover_config;
-} __packed;
-
-struct FWCMD_COMMON_ANON_231_RESPONSE {
-       u32 rsvd0;
-} __packed;
-
-union FWCMD_COMMON_ANON_230_PARAMS {
-       struct FORCE_FAILOVER_IN request;
-       struct FWCMD_COMMON_ANON_231_RESPONSE response;
-} __packed;
-
-/*
- *  Use this command to control failover in BladeEngine. It may be used
- *  to failback to a  restored port or to forcibly move traffic from
- *  one port to another. It may also be used  to enable or disable the
- *  automatic failover feature. This command can only be issued by  domain
- *  0.
- */
-struct FWCMD_COMMON_FORCE_FAILOVER {
-       union FWCMD_HEADER header;
-       union FWCMD_COMMON_ANON_230_PARAMS params;
-} __packed;
-
-struct FWCMD_COMMON_ANON_240_REQUEST {
-       u64 context;
-} __packed;
-
-struct FWCMD_COMMON_ANON_241_RESPONSE {
-       u64 context;
-} __packed;
-
-union FWCMD_COMMON_ANON_239_PARAMS {
-       struct FWCMD_COMMON_ANON_240_REQUEST request;
-       struct FWCMD_COMMON_ANON_241_RESPONSE response;
-} __packed;
-
-/*
- *  This command can be used by clients as a no-operation request. Typical
- *  uses for drivers  are as a heartbeat mechanism, or deferred processing
- *  catalyst. The ARM will always  complete this command with a good completion.
- *  The 64-bit parameter is not touched by the  ARM processor.
- */
-struct FWCMD_COMMON_NOP {
-       union FWCMD_HEADER header;
-       union FWCMD_COMMON_ANON_239_PARAMS params;
-} __packed;
-
-struct NTWK_RX_FILTER_SETTINGS {
-       u8 promiscuous;
-       u8 ip_cksum;
-       u8 tcp_cksum;
-       u8 udp_cksum;
-       u8 pass_err;
-       u8 pass_ckerr;
-       u8 strip_crc;
-       u8 mcast_en;
-       u8 bcast_en;
-       u8 mcast_promiscuous_en;
-       u8 unicast_en;
-       u8 vlan_promiscuous;
-} __packed;
-
-union FWCMD_COMMON_ANON_242_PARAMS {
-       struct NTWK_RX_FILTER_SETTINGS request;
-       struct NTWK_RX_FILTER_SETTINGS response;
-} __packed;
-
-/*
- *  This command is used to modify the ethernet receive filter configuration.
- *  Only domain 0  network function drivers may issue this command. The
- *  applied configuration is returned in  the response payload. Note:
- *  Some receive packet filter settings are global on  BladeEngine and
- *  can affect both the storage and network function clients that the
- *   BladeEngine hardware and firmware serve. Additionaly, depending
- *  on the revision of  BladeEngine, some ethernet receive filter settings
- *  are dependent on others. If a  dependency exists between settings
- *  for the BladeEngine revision, and the command request  settings do
- *  not meet the dependency requirement, the invalid settings will not
- *  be  applied despite the comand succeeding. For example: a driver may
- *  request to enable  broadcast packets, but not enable multicast packets.
- *  On early revisions of BladeEngine,  there may be no distinction between
- *  broadcast and multicast filters, so broadcast could  not be enabled
- *  without enabling multicast. In this scenario, the comand would still
- *   succeed, but the response payload would indicate the previously
- *  configured broadcast  and multicast setting.
- */
-struct FWCMD_COMMON_NTWK_RX_FILTER {
-       union FWCMD_HEADER header;
-       union FWCMD_COMMON_ANON_242_PARAMS params;
-} __packed;
-
-
-struct FWCMD_COMMON_ANON_244_REQUEST {
-       u32 rsvd0;
-} __packed;
-
-struct FWCMD_COMMON_GET_FW_VERSION_RESPONSE_PAYLOAD {
-       u8 firmware_version_string[32];
-       u8 fw_on_flash_version_string[32];
-} __packed;
-
-union FWCMD_COMMON_ANON_243_PARAMS {
-       struct FWCMD_COMMON_ANON_244_REQUEST request;
-       struct FWCMD_COMMON_GET_FW_VERSION_RESPONSE_PAYLOAD response;
-} __packed;
-
-/* This comand retrieves the firmware version.  */
-struct FWCMD_COMMON_GET_FW_VERSION {
-       union FWCMD_HEADER header;
-       union FWCMD_COMMON_ANON_243_PARAMS params;
-} __packed;
-
-struct FWCMD_COMMON_ANON_246_REQUEST {
-       u16 tx_flow_control;
-       u16 rx_flow_control;
-} __packed;
-
-struct FWCMD_COMMON_ANON_247_RESPONSE {
-       u32 rsvd0;
-} __packed;
-
-union FWCMD_COMMON_ANON_245_PARAMS {
-       struct FWCMD_COMMON_ANON_246_REQUEST request;
-       struct FWCMD_COMMON_ANON_247_RESPONSE response;
-} __packed;
-
-/*
- *  This comand is used to program BladeEngine flow control behavior.
- *  Only the host  networking driver is allowed to use this comand.
- */
-struct FWCMD_COMMON_SET_FLOW_CONTROL {
-       union FWCMD_HEADER header;
-       union FWCMD_COMMON_ANON_245_PARAMS params;
-} __packed;
-
-struct FWCMD_COMMON_ANON_249_REQUEST {
-       u32 rsvd0;
-} __packed;
-
-struct FWCMD_COMMON_ANON_250_RESPONSE {
-       u16 tx_flow_control;
-       u16 rx_flow_control;
-} __packed;
-
-union FWCMD_COMMON_ANON_248_PARAMS {
-       struct FWCMD_COMMON_ANON_249_REQUEST request;
-       struct FWCMD_COMMON_ANON_250_RESPONSE response;
-} __packed;
-
-/* This comand is used to read BladeEngine flow control settings.  */
-struct FWCMD_COMMON_GET_FLOW_CONTROL {
-       union FWCMD_HEADER header;
-       union FWCMD_COMMON_ANON_248_PARAMS params;
-} __packed;
-
-struct EQ_DELAY_PARAMS {
-       u32 eq_id;
-       u32 delay_in_microseconds;
-} __packed;
-
-struct FWCMD_COMMON_ANON_257_REQUEST {
-       u32 num_eq;
-       u32 rsvd0;
-       struct EQ_DELAY_PARAMS delay[16];
-} __packed;
-
-struct FWCMD_COMMON_ANON_258_RESPONSE {
-       u32 delay_resolution_in_microseconds;
-       u32 delay_max_in_microseconds;
-} __packed;
-
-union MODIFY_EQ_DELAY_PARAMS {
-       struct FWCMD_COMMON_ANON_257_REQUEST request;
-       struct FWCMD_COMMON_ANON_258_RESPONSE response;
-} __packed;
-
-/* This comand changes the EQ delay for a given set of EQs.  */
-struct FWCMD_COMMON_MODIFY_EQ_DELAY {
-       union FWCMD_HEADER header;
-       union MODIFY_EQ_DELAY_PARAMS params;
-} __packed;
-
-struct FWCMD_COMMON_ANON_260_REQUEST {
-       u32 rsvd0;
-} __packed;
-
-struct BE_FIRMWARE_CONFIG {
-       u16 be_config_number;
-       u16 asic_revision;
-       u32 nic_ulp_mask;
-       u32 tulp_mask;
-       u32 iscsi_ulp_mask;
-       u32 rdma_ulp_mask;
-       u32 rsvd0[4];
-       u32 eth_tx_id_start;
-       u32 eth_tx_id_count;
-       u32 eth_rx_id_start;
-       u32 eth_rx_id_count;
-       u32 tpm_wrbq_id_start;
-       u32 tpm_wrbq_id_count;
-       u32 tpm_defq_id_start;
-       u32 tpm_defq_id_count;
-       u32 iscsi_wrbq_id_start;
-       u32 iscsi_wrbq_id_count;
-       u32 iscsi_defq_id_start;
-       u32 iscsi_defq_id_count;
-       u32 rdma_qp_id_start;
-       u32 rdma_qp_id_count;
-       u32 rsvd1[8];
-} __packed;
-
-union FWCMD_COMMON_ANON_259_PARAMS {
-       struct FWCMD_COMMON_ANON_260_REQUEST request;
-       struct BE_FIRMWARE_CONFIG response;
-} __packed;
-
-/*
- *  This comand queries the current firmware configuration parameters.
- *   The static  configuration type is defined by be_config_number. This
- *  differentiates different  BladeEngine builds, such as iSCSI Initiator
- *  versus iSCSI Target.  For a given static  configuration, the Upper
- *  Layer Protocol (ULP) processors may be reconfigured to support  different
- *  protocols. Each ULP processor supports one or more protocols. The
- *  masks  indicate which processors are configured for each protocol.
- *   For a given static  configuration, the number of TCP connections
- *  supported for each protocol may vary. The  *_id_start and *_id_count
- *  variables define a linear range of IDs that are available for  each
- *  supported protocol. The *_id_count may be used by the driver to allocate
- *  the  appropriate number of connection resources. The *_id_start may
- *  be used to map the  arbitrary range of IDs to a zero-based range
- *  of indices.
- */
-struct FWCMD_COMMON_FIRMWARE_CONFIG {
-       union FWCMD_HEADER header;
-       union FWCMD_COMMON_ANON_259_PARAMS params;
-} __packed;
-
-struct FWCMD_COMMON_PORT_EQUALIZATION_PARAMS {
-       u32 emph_lev_sel_port0;
-       u32 emph_lev_sel_port1;
-       u8 xaui_vo_sel;
-       u8 xaui_state;
-       u16 rsvd0;
-       u32 xaui_eq_vector;
-} __packed;
-
-struct FWCMD_COMMON_ANON_262_REQUEST {
-       u32 rsvd0;
-} __packed;
-
-union FWCMD_COMMON_ANON_261_PARAMS {
-       struct FWCMD_COMMON_ANON_262_REQUEST request;
-       struct FWCMD_COMMON_PORT_EQUALIZATION_PARAMS response;
-} __packed;
-
-/*
- *  This comand can be used to read XAUI equalization parameters. The
- *  ARM firmware applies  default equalization parameters during initialization.
- *  These parameters may be  customer-specific when derived from the
- *  SEEPROM. See SEEPROM_DATA for equalization  specific fields.
- */
-struct FWCMD_COMMON_GET_PORT_EQUALIZATION {
-       union FWCMD_HEADER header;
-       union FWCMD_COMMON_ANON_261_PARAMS params;
-} __packed;
-
-struct FWCMD_COMMON_ANON_264_RESPONSE {
-       u32 rsvd0;
-} __packed;
-
-union FWCMD_COMMON_ANON_263_PARAMS {
-       struct FWCMD_COMMON_PORT_EQUALIZATION_PARAMS request;
-       struct FWCMD_COMMON_ANON_264_RESPONSE response;
-} __packed;
-
-/*
- *  This comand can be used to set XAUI equalization parameters. The ARM
- *  firmware applies  default equalization parameters during initialization.
- *  These parameters may be  customer-specific when derived from the
- *  SEEPROM. See SEEPROM_DATA for equalization  specific fields.
- */
-struct FWCMD_COMMON_SET_PORT_EQUALIZATION {
-       union FWCMD_HEADER header;
-       union FWCMD_COMMON_ANON_263_PARAMS params;
-} __packed;
-
-#endif /* __fwcmd_common_bmap_h__ */
diff --git a/drivers/staging/benet/fwcmd_eth_bmap.h b/drivers/staging/benet/fwcmd_eth_bmap.h
deleted file mode 100644 (file)
index 234b179..0000000
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-/*
- * Autogenerated by srcgen version: 0127
- */
-#ifndef __fwcmd_eth_bmap_h__
-#define __fwcmd_eth_bmap_h__
-#include "fwcmd_hdr_bmap.h"
-#include "fwcmd_types_bmap.h"
-
-struct MIB_ETH_STATISTICS_PARAMS_IN {
-       u32 rsvd0;
-} __packed;
-
-struct BE_RXF_STATS {
-       u32 p0recvdtotalbytesLSD;       /* DWORD 0 */
-       u32 p0recvdtotalbytesMSD;       /* DWORD 1 */
-       u32 p0recvdtotalframes; /* DWORD 2 */
-       u32 p0recvdunicastframes;       /* DWORD 3 */
-       u32 p0recvdmulticastframes;     /* DWORD 4 */
-       u32 p0recvdbroadcastframes;     /* DWORD 5 */
-       u32 p0crcerrors;        /* DWORD 6 */
-       u32 p0alignmentsymerrs; /* DWORD 7 */
-       u32 p0pauseframesrecvd; /* DWORD 8 */
-       u32 p0controlframesrecvd;       /* DWORD 9 */
-       u32 p0inrangelenerrors; /* DWORD 10 */
-       u32 p0outrangeerrors;   /* DWORD 11 */
-       u32 p0frametoolongerrors;       /* DWORD 12 */
-       u32 p0droppedaddressmatch;      /* DWORD 13 */
-       u32 p0droppedvlanmismatch;      /* DWORD 14 */
-       u32 p0ipdroppedtoosmall;        /* DWORD 15 */
-       u32 p0ipdroppedtooshort;        /* DWORD 16 */
-       u32 p0ipdroppedhdrtoosmall;     /* DWORD 17 */
-       u32 p0tcpdroppedlen;    /* DWORD 18 */
-       u32 p0droppedrunt;      /* DWORD 19 */
-       u32 p0recvd64;          /* DWORD 20 */
-       u32 p0recvd65_127;      /* DWORD 21 */
-       u32 p0recvd128_256;     /* DWORD 22 */
-       u32 p0recvd256_511;     /* DWORD 23 */
-       u32 p0recvd512_1023;    /* DWORD 24 */
-       u32 p0recvd1518_1522;   /* DWORD 25 */
-       u32 p0recvd1522_2047;   /* DWORD 26 */
-       u32 p0recvd2048_4095;   /* DWORD 27 */
-       u32 p0recvd4096_8191;   /* DWORD 28 */
-       u32 p0recvd8192_9216;   /* DWORD 29 */
-       u32 p0rcvdipcksmerrs;   /* DWORD 30 */
-       u32 p0recvdtcpcksmerrs; /* DWORD 31 */
-       u32 p0recvdudpcksmerrs; /* DWORD 32 */
-       u32 p0recvdnonrsspackets;       /* DWORD 33 */
-       u32 p0recvdippackets;   /* DWORD 34 */
-       u32 p0recvdchute1packets;       /* DWORD 35 */
-       u32 p0recvdchute2packets;       /* DWORD 36 */
-       u32 p0recvdchute3packets;       /* DWORD 37 */
-       u32 p0recvdipsecpackets;        /* DWORD 38 */
-       u32 p0recvdmanagementpackets;   /* DWORD 39 */
-       u32 p0xmitbyteslsd;     /* DWORD 40 */
-       u32 p0xmitbytesmsd;     /* DWORD 41 */
-       u32 p0xmitunicastframes;        /* DWORD 42 */
-       u32 p0xmitmulticastframes;      /* DWORD 43 */
-       u32 p0xmitbroadcastframes;      /* DWORD 44 */
-       u32 p0xmitpauseframes;  /* DWORD 45 */
-       u32 p0xmitcontrolframes;        /* DWORD 46 */
-       u32 p0xmit64;           /* DWORD 47 */
-       u32 p0xmit65_127;       /* DWORD 48 */
-       u32 p0xmit128_256;      /* DWORD 49 */
-       u32 p0xmit256_511;      /* DWORD 50 */
-       u32 p0xmit512_1023;     /* DWORD 51 */
-       u32 p0xmit1518_1522;    /* DWORD 52 */
-       u32 p0xmit1522_2047;    /* DWORD 53 */
-       u32 p0xmit2048_4095;    /* DWORD 54 */
-       u32 p0xmit4096_8191;    /* DWORD 55 */
-       u32 p0xmit8192_9216;    /* DWORD 56 */
-       u32 p0rxfifooverflowdropped;    /* DWORD 57 */
-       u32 p0ipseclookupfaileddropped; /* DWORD 58 */
-       u32 p1recvdtotalbytesLSD;       /* DWORD 59 */
-       u32 p1recvdtotalbytesMSD;       /* DWORD 60 */
-       u32 p1recvdtotalframes; /* DWORD 61 */
-       u32 p1recvdunicastframes;       /* DWORD 62 */
-       u32 p1recvdmulticastframes;     /* DWORD 63 */
-       u32 p1recvdbroadcastframes;     /* DWORD 64 */
-       u32 p1crcerrors;        /* DWORD 65 */
-       u32 p1alignmentsymerrs; /* DWORD 66 */
-       u32 p1pauseframesrecvd; /* DWORD 67 */
-       u32 p1controlframesrecvd;       /* DWORD 68 */
-       u32 p1inrangelenerrors; /* DWORD 69 */
-       u32 p1outrangeerrors;   /* DWORD 70 */
-       u32 p1frametoolongerrors;       /* DWORD 71 */
-       u32 p1droppedaddressmatch;      /* DWORD 72 */
-       u32 p1droppedvlanmismatch;      /* DWORD 73 */
-       u32 p1ipdroppedtoosmall;        /* DWORD 74 */
-       u32 p1ipdroppedtooshort;        /* DWORD 75 */
-       u32 p1ipdroppedhdrtoosmall;     /* DWORD 76 */
-       u32 p1tcpdroppedlen;    /* DWORD 77 */
-       u32 p1droppedrunt;      /* DWORD 78 */
-       u32 p1recvd64;          /* DWORD 79 */
-       u32 p1recvd65_127;      /* DWORD 80 */
-       u32 p1recvd128_256;     /* DWORD 81 */
-       u32 p1recvd256_511;     /* DWORD 82 */
-       u32 p1recvd512_1023;    /* DWORD 83 */
-       u32 p1recvd1518_1522;   /* DWORD 84 */
-       u32 p1recvd1522_2047;   /* DWORD 85 */
-       u32 p1recvd2048_4095;   /* DWORD 86 */
-       u32 p1recvd4096_8191;   /* DWORD 87 */
-       u32 p1recvd8192_9216;   /* DWORD 88 */
-       u32 p1rcvdipcksmerrs;   /* DWORD 89 */
-       u32 p1recvdtcpcksmerrs; /* DWORD 90 */
-       u32 p1recvdudpcksmerrs; /* DWORD 91 */
-       u32 p1recvdnonrsspackets;       /* DWORD 92 */
-       u32 p1recvdippackets;   /* DWORD 93 */
-       u32 p1recvdchute1packets;       /* DWORD 94 */
-       u32 p1recvdchute2packets;       /* DWORD 95 */
-       u32 p1recvdchute3packets;       /* DWORD 96 */
-       u32 p1recvdipsecpackets;        /* DWORD 97 */
-       u32 p1recvdmanagementpackets;   /* DWORD 98 */
-       u32 p1xmitbyteslsd;     /* DWORD 99 */
-       u32 p1xmitbytesmsd;     /* DWORD 100 */
-       u32 p1xmitunicastframes;        /* DWORD 101 */
-       u32 p1xmitmulticastframes;      /* DWORD 102 */
-       u32 p1xmitbroadcastframes;      /* DWORD 103 */
-       u32 p1xmitpauseframes;  /* DWORD 104 */
-       u32 p1xmitcontrolframes;        /* DWORD 105 */
-       u32 p1xmit64;           /* DWORD 106 */
-       u32 p1xmit65_127;       /* DWORD 107 */
-       u32 p1xmit128_256;      /* DWORD 108 */
-       u32 p1xmit256_511;      /* DWORD 109 */
-       u32 p1xmit512_1023;     /* DWORD 110 */
-       u32 p1xmit1518_1522;    /* DWORD 111 */
-       u32 p1xmit1522_2047;    /* DWORD 112 */
-       u32 p1xmit2048_4095;    /* DWORD 113 */
-       u32 p1xmit4096_8191;    /* DWORD 114 */
-       u32 p1xmit8192_9216;    /* DWORD 115 */
-       u32 p1rxfifooverflowdropped;    /* DWORD 116 */
-       u32 p1ipseclookupfaileddropped; /* DWORD 117 */
-       u32 pxdroppednopbuf;    /* DWORD 118 */
-       u32 pxdroppednotxpb;    /* DWORD 119 */
-       u32 pxdroppednoipsecbuf;        /* DWORD 120 */
-       u32 pxdroppednoerxdescr;        /* DWORD 121 */
-       u32 pxdroppednotpredescr;       /* DWORD 122 */
-       u32 pxrecvdmanagementportpackets;       /* DWORD 123 */
-       u32 pxrecvdmanagementportbytes; /* DWORD 124 */
-       u32 pxrecvdmanagementportpauseframes;   /* DWORD 125 */
-       u32 pxrecvdmanagementporterrors;        /* DWORD 126 */
-       u32 pxxmitmanagementportpackets;        /* DWORD 127 */
-       u32 pxxmitmanagementportbytes;  /* DWORD 128 */
-       u32 pxxmitmanagementportpause;  /* DWORD 129 */
-       u32 pxxmitmanagementportrxfifooverflow; /* DWORD 130 */
-       u32 pxrecvdipsecipcksmerrs;     /* DWORD 131 */
-       u32 pxrecvdtcpsecipcksmerrs;    /* DWORD 132 */
-       u32 pxrecvdudpsecipcksmerrs;    /* DWORD 133 */
-       u32 pxipsecrunt;        /* DWORD 134 */
-       u32 pxipsecaddressmismatchdropped;      /* DWORD 135 */
-       u32 pxipsecrxfifooverflowdropped;       /* DWORD 136 */
-       u32 pxipsecframestoolong;       /* DWORD 137 */
-       u32 pxipsectotalipframes;       /* DWORD 138 */
-       u32 pxipseciptoosmall;  /* DWORD 139 */
-       u32 pxipseciptooshort;  /* DWORD 140 */
-       u32 pxipseciphdrtoosmall;       /* DWORD 141 */
-       u32 pxipsectcphdrbad;   /* DWORD 142 */
-       u32 pxrecvdipsecchute1; /* DWORD 143 */
-       u32 pxrecvdipsecchute2; /* DWORD 144 */
-       u32 pxrecvdipsecchute3; /* DWORD 145 */
-       u32 pxdropped7frags;    /* DWORD 146 */
-       u32 pxdroppedfrags;     /* DWORD 147 */
-       u32 pxdroppedinvalidfragring;   /* DWORD 148 */
-       u32 pxnumforwardedpackets;      /* DWORD 149 */
-} __packed;
-
-union MIB_ETH_STATISTICS_PARAMS {
-       struct MIB_ETH_STATISTICS_PARAMS_IN request;
-       struct BE_RXF_STATS response;
-} __packed;
-
-/*
- *  Query ethernet statistics. All domains may issue this command. The
- *  host domain drivers  may optionally reset internal statistic counters
- *  with a query.
- */
-struct FWCMD_ETH_GET_STATISTICS {
-       union FWCMD_HEADER header;
-       union MIB_ETH_STATISTICS_PARAMS params;
-} __packed;
-
-
-struct FWCMD_ETH_ANON_175_REQUEST {
-       u8 port0_promiscuous;
-       u8 port1_promiscuous;
-       u16 rsvd0;
-} __packed;
-
-struct FWCMD_ETH_ANON_176_RESPONSE {
-       u32 rsvd0;
-} __packed;
-
-union FWCMD_ETH_ANON_174_PARAMS {
-       struct FWCMD_ETH_ANON_175_REQUEST request;
-       struct FWCMD_ETH_ANON_176_RESPONSE response;
-} __packed;
-
-/* Enables/Disables promiscuous ethernet receive mode.  */
-struct FWCMD_ETH_PROMISCUOUS {
-       union FWCMD_HEADER header;
-       union FWCMD_ETH_ANON_174_PARAMS params;
-} __packed;
-
-struct FWCMD_ETH_ANON_178_REQUEST {
-       u32 new_fragsize_log2;
-} __packed;
-
-struct FWCMD_ETH_ANON_179_RESPONSE {
-       u32 actual_fragsize_log2;
-} __packed;
-
-union FWCMD_ETH_ANON_177_PARAMS {
-       struct FWCMD_ETH_ANON_178_REQUEST request;
-       struct FWCMD_ETH_ANON_179_RESPONSE response;
-} __packed;
-
-/*
- *  Sets the Ethernet RX fragment size. Only host (domain 0) networking
- *  drivers may issue  this command.  This call will fail for non-host
- *  protection domains. In this situation the  MCC CQ status will indicate
- *  a failure due to insufficient priviledges. The response  should be
- *  ignored, and the driver should use the FWCMD_ETH_GET_FRAG_SIZE to
- *  query the  existing ethernet receive fragment size. It must use this
- *  fragment size for all  fragments in the ethernet receive ring.  If
- *  the command succeeds, the driver must use the  frag size indicated
- *  in the command response since the requested frag size may not be  applied
- *  until the next reboot. When the requested fragsize matches the response
- *   fragsize, this indicates the request was applied immediately.
- */
-struct FWCMD_ETH_SET_RX_FRAG_SIZE {
-       union FWCMD_HEADER header;
-       union FWCMD_ETH_ANON_177_PARAMS params;
-} __packed;
-
-struct FWCMD_ETH_ANON_181_REQUEST {
-       u32 rsvd0;
-} __packed;
-
-struct FWCMD_ETH_ANON_182_RESPONSE {
-       u32 actual_fragsize_log2;
-} __packed;
-
-union FWCMD_ETH_ANON_180_PARAMS {
-       struct FWCMD_ETH_ANON_181_REQUEST request;
-       struct FWCMD_ETH_ANON_182_RESPONSE response;
-} __packed;
-
-/*
- *  Queries the Ethernet RX fragment size. All domains may issue this
- *  command.  The driver  should call this command to determine the minimum
- *  required fragment size for the ethernet  RX ring buffers. Drivers
- *  may choose to use a larger size for each fragment buffer, but  BladeEngine
- *  will use up to the configured minimum required fragsize in each ethernet
- *   receive fragment buffer. For example, if the ethernet receive fragment
- *  size is  configured to 4kB, and a driver uses 8kB fragments, a 6kB
- *  ethernet packet received by  BladeEngine will be split accross two
- *  of the driver's receive framgents (4kB in one  fragment buffer, and
- *  2kB in the subsequent fragment buffer).
- */
-struct FWCMD_ETH_GET_RX_FRAG_SIZE {
-       union FWCMD_HEADER header;
-       union FWCMD_ETH_ANON_180_PARAMS params;
-} __packed;
-
-#endif /* __fwcmd_eth_bmap_h__ */
diff --git a/drivers/staging/benet/fwcmd_hdr_bmap.h b/drivers/staging/benet/fwcmd_hdr_bmap.h
deleted file mode 100644 (file)
index 28b4532..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-/*
- * Autogenerated by srcgen version: 0127
- */
-#ifndef __fwcmd_hdr_bmap_h__
-#define __fwcmd_hdr_bmap_h__
-
-struct FWCMD_REQUEST_HEADER {
-       u8 opcode;
-       u8 subsystem;
-       u8 port_number;
-       u8 domain;
-       u32 timeout;
-       u32 request_length;
-       u32 rsvd0;
-} __packed;
-
-struct FWCMD_RESPONSE_HEADER {
-       u8 opcode;
-       u8 subsystem;
-       u8 rsvd0;
-       u8 domain;
-       u8 status;
-       u8 additional_status;
-       u16 rsvd1;
-       u32 response_length;
-       u32 actual_response_length;
-} __packed;
-
-/*
- *  The firmware/driver overwrites the input FWCMD_REQUEST_HEADER with
- *  the output  FWCMD_RESPONSE_HEADER.
- */
-union FWCMD_HEADER {
-       struct FWCMD_REQUEST_HEADER request;
-       struct FWCMD_RESPONSE_HEADER response;
-} __packed;
-
-#endif /* __fwcmd_hdr_bmap_h__ */
diff --git a/drivers/staging/benet/fwcmd_mcc.h b/drivers/staging/benet/fwcmd_mcc.h
deleted file mode 100644 (file)
index 9eeca87..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-/*
- * Autogenerated by srcgen version: 0127
- */
-#ifndef __fwcmd_mcc_amap_h__
-#define __fwcmd_mcc_amap_h__
-#include "fwcmd_opcodes.h"
-/*
- * Where applicable, a WRB, may contain a list of Scatter-gather elements.
- * Each element supports a 64 bit address and a 32bit length field.
- */
-struct BE_MCC_SGE_AMAP {
-       u8 pa_lo[32];   /* DWORD 0 */
-       u8 pa_hi[32];   /* DWORD 1 */
-       u8 length[32];  /* DWORD 2 */
-} __packed;
-struct MCC_SGE_AMAP {
-       u32 dw[3];
-};
-/*
- * The design of an MCC_SGE allows up to 19 elements to be embedded
- * in a WRB, supporting 64KB data transfers (assuming a 4KB page size).
- */
-struct BE_MCC_WRB_PAYLOAD_AMAP {
-       union {
-               struct BE_MCC_SGE_AMAP sgl[19];
-               u8 embedded[59][32];    /* DWORD 0 */
-       };
-} __packed;
-struct MCC_WRB_PAYLOAD_AMAP {
-       u32 dw[59];
-};
-
-/*
- * This is the structure of the MCC Command WRB for commands
- * sent to the Management Processing Unit (MPU). See section
- * for usage in embedded and non-embedded modes.
- */
-struct BE_MCC_WRB_AMAP {
-       u8 embedded;    /* DWORD 0 */
-       u8 rsvd0[2];    /* DWORD 0 */
-       u8 sge_count[5];        /* DWORD 0 */
-       u8 rsvd1[16];   /* DWORD 0 */
-       u8 special[8];  /* DWORD 0 */
-       u8 payload_length[32];  /* DWORD 1 */
-       u8 tag[2][32];  /* DWORD 2 */
-       u8 rsvd2[32];   /* DWORD 4 */
-       struct BE_MCC_WRB_PAYLOAD_AMAP payload;
-} __packed;
-struct MCC_WRB_AMAP {
-       u32 dw[64];
-};
-
-/*  This is the structure of the MCC Completion queue entry  */
-struct BE_MCC_CQ_ENTRY_AMAP {
-       u8 completion_status[16];       /* DWORD 0 */
-       u8 extended_status[16]; /* DWORD 0 */
-       u8 mcc_tag[2][32];      /* DWORD 1 */
-       u8 rsvd0[27];   /* DWORD 3 */
-       u8 consumed;    /* DWORD 3 */
-       u8 completed;   /* DWORD 3 */
-       u8 hpi_buffer_completion;       /* DWORD 3 */
-       u8 async_event; /* DWORD 3 */
-       u8 valid;               /* DWORD 3 */
-} __packed;
-struct MCC_CQ_ENTRY_AMAP {
-       u32 dw[4];
-};
-
-/* Mailbox structures used by the MPU during bootstrap */
-struct BE_MCC_MAILBOX_AMAP {
-       struct BE_MCC_WRB_AMAP wrb;
-       struct BE_MCC_CQ_ENTRY_AMAP cq;
-} __packed;
-struct MCC_MAILBOX_AMAP {
-       u32 dw[68];
-};
-
-#endif /* __fwcmd_mcc_amap_h__ */
diff --git a/drivers/staging/benet/fwcmd_opcodes.h b/drivers/staging/benet/fwcmd_opcodes.h
deleted file mode 100644 (file)
index 23d5693..0000000
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-/*
- * Autogenerated by srcgen version: 0127
- */
-#ifndef __fwcmd_opcodes_amap_h__
-#define __fwcmd_opcodes_amap_h__
-
-/*
- * --- FWCMD_SUBSYSTEMS ---
- * The commands are grouped into the following subsystems. The subsystem
- * code along with the opcode uniquely identify a particular fwcmd.
- */
-#define FWCMD_SUBSYSTEM_RSVD  (0)      /* This subsystem is reserved. It is */
-                                                 /* never used. */
-#define FWCMD_SUBSYSTEM_COMMON (1)     /* CMDs in this group are common to
-                                       * all subsystems. See
-                                       * COMMON_SUBSYSTEM_OPCODES for opcodes
-                                       * and Common Host Configuration CMDs
-                                       * for the FWCMD descriptions.
-                                       */
-#define FWCMD_SUBSYSTEM_COMMON_ISCSI    (2) /* CMDs in this group are */
-                                       /*
-                                       * common to Initiator and Target. See
-                                       * COMMON_ISCSI_SUBSYSTEM_OPCODES and
-                                       * Common iSCSI Initiator and Target
-                                       * CMDs for the command descriptions.
-                                       */
-#define FWCMD_SUBSYSTEM_ETH             (3)    /* This subsystem is used to
-                                               execute  Ethernet commands.  */
-
-#define FWCMD_SUBSYSTEM_TPM             (4)    /* This subsystem is used
-                                                to execute TPM  commands.  */
-#define FWCMD_SUBSYSTEM_PXE_UNDI        (5)    /* This subsystem is used
-                                               * to execute PXE
-                                               * and UNDI specific commands.
-                                               */
-
-#define FWCMD_SUBSYSTEM_ISCSI_INI       (6)    /* This subsystem is used to
-                                               execute ISCSI Initiator
-                                               specific commands.
-                                               */
-#define FWCMD_SUBSYSTEM_ISCSI_TGT       (7)    /* This subsystem is used
-                                               to execute iSCSI Target
-                                               specific commands.between
-                                               PTL and ARM firmware.
-                                               */
-#define FWCMD_SUBSYSTEM_MILI_PTL        (8)    /* This subsystem is used to
-                                               execute iSCSI Target specific
-                                               commands.between MILI
-                                               and PTL.  */
-#define FWCMD_SUBSYSTEM_MILI_TMD        (9)    /* This subsystem is used to
-                                               execute iSCSI Target specific
-                                               commands between MILI
-                                               and TMD.  */
-#define FWCMD_SUBSYSTEM_PROXY           (11)   /* This subsystem is used
-                                               to execute proxied commands
-                                               within the host at the
-                                               explicit request of a
-                                               non priviledged domain.
-                                               This 'subsystem' is entirely
-                                               virtual from the controller
-                                               and firmware perspective as
-                                               it is implemented in host
-                                               drivers.
-                                               */
-
-/*
- * --- COMMON_SUBSYSTEM_OPCODES ---
- * These opcodes are common to both networking and storage PCI
- * functions. They are used to reserve resources and configure
- * BladeEngine. These opcodes all use the FWCMD_SUBSYSTEM_COMMON
- * subsystem code.
- */
-#define OPCODE_COMMON_NTWK_MAC_QUERY    (1)
-#define SUBSYSTEM_COMMON_NTWK_MAC_QUERY (1)
-#define SUBSYSTEM_COMMON_NTWK_MAC_SET   (1)
-#define SUBSYSTEM_COMMON_NTWK_MULTICAST_SET (1)
-#define SUBSYSTEM_COMMON_NTWK_VLAN_CONFIG (1)
-#define SUBSYSTEM_COMMON_NTWK_LINK_STATUS_QUERY (1)
-#define SUBSYSTEM_COMMON_READ_FLASHROM  (1)
-#define SUBSYSTEM_COMMON_WRITE_FLASHROM (1)
-#define SUBSYSTEM_COMMON_QUERY_MAX_FWCMD_BUFFER_SIZE (1)
-#define SUBSYSTEM_COMMON_ADD_PAGE_TABLES (1)
-#define SUBSYSTEM_COMMON_REMOVE_PAGE_TABLES (1)
-#define SUBSYSTEM_COMMON_RING_DESTROY   (1)
-#define SUBSYSTEM_COMMON_CQ_CREATE      (1)
-#define SUBSYSTEM_COMMON_EQ_CREATE      (1)
-#define SUBSYSTEM_COMMON_ETH_RX_CREATE  (1)
-#define SUBSYSTEM_COMMON_ETH_TX_CREATE  (1)
-#define SUBSYSTEM_COMMON_ISCSI_DEFQ_CREATE (1)
-#define SUBSYSTEM_COMMON_ISCSI_WRBQ_CREATE (1)
-#define SUBSYSTEM_COMMON_MCC_CREATE     (1)
-#define SUBSYSTEM_COMMON_JELL_CONFIG    (1)
-#define SUBSYSTEM_COMMON_FORCE_FAILOVER (1)
-#define SUBSYSTEM_COMMON_ADD_TEMPLATE_HEADER_BUFFERS (1)
-#define SUBSYSTEM_COMMON_REMOVE_TEMPLATE_HEADER_BUFFERS (1)
-#define SUBSYSTEM_COMMON_POST_ZERO_BUFFER (1)
-#define SUBSYSTEM_COMMON_GET_QOS        (1)
-#define SUBSYSTEM_COMMON_SET_QOS        (1)
-#define SUBSYSTEM_COMMON_TCP_GET_STATISTICS (1)
-#define SUBSYSTEM_COMMON_SEEPROM_READ   (1)
-#define SUBSYSTEM_COMMON_TCP_STATE_QUERY (1)
-#define SUBSYSTEM_COMMON_GET_CNTL_ATTRIBUTES (1)
-#define SUBSYSTEM_COMMON_NOP            (1)
-#define SUBSYSTEM_COMMON_NTWK_RX_FILTER (1)
-#define SUBSYSTEM_COMMON_GET_FW_VERSION (1)
-#define SUBSYSTEM_COMMON_SET_FLOW_CONTROL (1)
-#define SUBSYSTEM_COMMON_GET_FLOW_CONTROL (1)
-#define SUBSYSTEM_COMMON_SET_TCP_PARAMETERS (1)
-#define SUBSYSTEM_COMMON_SET_FRAME_SIZE (1)
-#define SUBSYSTEM_COMMON_GET_FAT        (1)
-#define SUBSYSTEM_COMMON_MODIFY_EQ_DELAY (1)
-#define SUBSYSTEM_COMMON_FIRMWARE_CONFIG (1)
-#define SUBSYSTEM_COMMON_ENABLE_DISABLE_DOMAINS (1)
-#define SUBSYSTEM_COMMON_GET_DOMAIN_CONFIG (1)
-#define SUBSYSTEM_COMMON_SET_VLD_CONFIG (1)
-#define SUBSYSTEM_COMMON_GET_VLD_CONFIG (1)
-#define SUBSYSTEM_COMMON_GET_PORT_EQUALIZATION (1)
-#define SUBSYSTEM_COMMON_SET_PORT_EQUALIZATION (1)
-#define SUBSYSTEM_COMMON_RED_CONFIG     (1)
-#define OPCODE_COMMON_NTWK_MAC_SET      (2)
-#define OPCODE_COMMON_NTWK_MULTICAST_SET (3)
-#define OPCODE_COMMON_NTWK_VLAN_CONFIG  (4)
-#define OPCODE_COMMON_NTWK_LINK_STATUS_QUERY (5)
-#define OPCODE_COMMON_READ_FLASHROM     (6)
-#define OPCODE_COMMON_WRITE_FLASHROM    (7)
-#define OPCODE_COMMON_QUERY_MAX_FWCMD_BUFFER_SIZE (8)
-#define OPCODE_COMMON_ADD_PAGE_TABLES   (9)
-#define OPCODE_COMMON_REMOVE_PAGE_TABLES (10)
-#define OPCODE_COMMON_RING_DESTROY      (11)
-#define OPCODE_COMMON_CQ_CREATE         (12)
-#define OPCODE_COMMON_EQ_CREATE         (13)
-#define OPCODE_COMMON_ETH_RX_CREATE     (14)
-#define OPCODE_COMMON_ETH_TX_CREATE     (15)
-#define OPCODE_COMMON_NET_RESERVED0     (16)   /* Reserved */
-#define OPCODE_COMMON_NET_RESERVED1     (17)   /* Reserved */
-#define OPCODE_COMMON_NET_RESERVED2     (18)   /* Reserved */
-#define OPCODE_COMMON_ISCSI_DEFQ_CREATE (19)
-#define OPCODE_COMMON_ISCSI_WRBQ_CREATE (20)
-#define OPCODE_COMMON_MCC_CREATE        (21)
-#define OPCODE_COMMON_JELL_CONFIG       (22)
-#define OPCODE_COMMON_FORCE_FAILOVER    (23)
-#define OPCODE_COMMON_ADD_TEMPLATE_HEADER_BUFFERS (24)
-#define OPCODE_COMMON_REMOVE_TEMPLATE_HEADER_BUFFERS (25)
-#define OPCODE_COMMON_POST_ZERO_BUFFER  (26)
-#define OPCODE_COMMON_GET_QOS           (27)
-#define OPCODE_COMMON_SET_QOS           (28)
-#define OPCODE_COMMON_TCP_GET_STATISTICS (29)
-#define OPCODE_COMMON_SEEPROM_READ      (30)
-#define OPCODE_COMMON_TCP_STATE_QUERY   (31)
-#define OPCODE_COMMON_GET_CNTL_ATTRIBUTES (32)
-#define OPCODE_COMMON_NOP               (33)
-#define OPCODE_COMMON_NTWK_RX_FILTER    (34)
-#define OPCODE_COMMON_GET_FW_VERSION    (35)
-#define OPCODE_COMMON_SET_FLOW_CONTROL  (36)
-#define OPCODE_COMMON_GET_FLOW_CONTROL  (37)
-#define OPCODE_COMMON_SET_TCP_PARAMETERS (38)
-#define OPCODE_COMMON_SET_FRAME_SIZE    (39)
-#define OPCODE_COMMON_GET_FAT           (40)
-#define OPCODE_COMMON_MODIFY_EQ_DELAY   (41)
-#define OPCODE_COMMON_FIRMWARE_CONFIG   (42)
-#define OPCODE_COMMON_ENABLE_DISABLE_DOMAINS (43)
-#define OPCODE_COMMON_GET_DOMAIN_CONFIG (44)
-#define OPCODE_COMMON_SET_VLD_CONFIG    (45)
-#define OPCODE_COMMON_GET_VLD_CONFIG    (46)
-#define OPCODE_COMMON_GET_PORT_EQUALIZATION (47)
-#define OPCODE_COMMON_SET_PORT_EQUALIZATION (48)
-#define OPCODE_COMMON_RED_CONFIG        (49)
-
-
-
-/*
- * --- ETH_SUBSYSTEM_OPCODES ---
- * These opcodes are used for configuring the Ethernet interfaces. These
- * opcodes all use the FWCMD_SUBSYSTEM_ETH subsystem code.
- */
-#define OPCODE_ETH_RSS_CONFIG           (1)
-#define OPCODE_ETH_ACPI_CONFIG          (2)
-#define SUBSYSTEM_ETH_RSS_CONFIG        (3)
-#define SUBSYSTEM_ETH_ACPI_CONFIG       (3)
-#define OPCODE_ETH_PROMISCUOUS          (3)
-#define SUBSYSTEM_ETH_PROMISCUOUS       (3)
-#define SUBSYSTEM_ETH_GET_STATISTICS    (3)
-#define SUBSYSTEM_ETH_GET_RX_FRAG_SIZE  (3)
-#define SUBSYSTEM_ETH_SET_RX_FRAG_SIZE  (3)
-#define OPCODE_ETH_GET_STATISTICS       (4)
-#define OPCODE_ETH_GET_RX_FRAG_SIZE     (5)
-#define OPCODE_ETH_SET_RX_FRAG_SIZE     (6)
-
-
-
-
-
-/*
- * --- MCC_STATUS_CODE ---
- * These are the global status codes used by all subsystems
- */
-#define MCC_STATUS_SUCCESS              (0)    /* Indicates a successful
-                                               completion of  the command */
-#define MCC_STATUS_INSUFFICIENT_PRIVILEGES (1) /* The client does not have
-                                               sufficient privileges to
-                                               execute the command */
-#define MCC_STATUS_INVALID_PARAMETER    (2)    /* A parameter in the command
-                                               was invalid. The extended
-                                               status contains the index
-                                               of the parameter */
-#define MCC_STATUS_INSUFFICIENT_RESOURCES (3)  /* There are insufficient
-                                               chip resources to execute
-                                               the command */
-#define MCC_STATUS_QUEUE_FLUSHING       (4)    /* The command is completing
-                                               because the queue was
-                                               getting flushed */
-#define MCC_STATUS_DMA_FAILED           (5)    /* The command is completing
-                                               with a DMA error */
-
-/*
- * --- MGMT_ERROR_CODES ---
- * Error Codes returned in the status field of the FWCMD response header
- */
-#define MGMT_STATUS_SUCCESS             (0)    /* The FWCMD completed
-                                               without errors */
-#define MGMT_STATUS_FAILED              (1)    /* Error status in the Status
-                                               field of  the
-                                               struct FWCMD_RESPONSE_HEADER */
-#define MGMT_STATUS_ILLEGAL_REQUEST     (2)    /* Invalid FWCMD opcode */
-#define MGMT_STATUS_ILLEGAL_FIELD       (3)    /* Invalid parameter in
-                                               the FWCMD  payload */
-
-#endif /* __fwcmd_opcodes_amap_h__ */
diff --git a/drivers/staging/benet/fwcmd_types_bmap.h b/drivers/staging/benet/fwcmd_types_bmap.h
deleted file mode 100644 (file)
index 92217af..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-/*
- * Autogenerated by srcgen version: 0127
- */
-#ifndef __fwcmd_types_bmap_h__
-#define __fwcmd_types_bmap_h__
-
-/* MAC address format  */
-struct MAC_ADDRESS_FORMAT {
-       u16 SizeOfStructure;
-       u8 MACAddress[6];
-} __packed;
-
-#endif /* __fwcmd_types_bmap_h__ */
diff --git a/drivers/staging/benet/host_struct.h b/drivers/staging/benet/host_struct.h
deleted file mode 100644 (file)
index 3de6722..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-/*
- * Autogenerated by srcgen version: 0127
- */
-#ifndef __host_struct_amap_h__
-#define __host_struct_amap_h__
-#include "be_cm.h"
-#include "be_common.h"
-#include "descriptors.h"
-
-/* --- EQ_COMPLETION_MAJOR_CODE_ENUM --- */
-#define EQ_MAJOR_CODE_COMPLETION        (0)    /* Completion event on a */
-                                                 /* qcompletion ueue. */
-#define EQ_MAJOR_CODE_ETH               (1)    /* Affiliated Ethernet Event. */
-#define EQ_MAJOR_CODE_RESERVED          (2)    /* Reserved */
-#define EQ_MAJOR_CODE_RDMA              (3)    /* Affiliated RDMA Event. */
-#define EQ_MAJOR_CODE_ISCSI             (4)    /* Affiliated ISCSI Event */
-#define EQ_MAJOR_CODE_UNAFFILIATED      (5)    /* Unaffiliated Event */
-
-/* --- EQ_COMPLETION_MINOR_CODE_ENUM --- */
-#define EQ_MINOR_CODE_COMPLETION        (0)    /* Completion event on a */
-                                                 /* completion queue. */
-#define EQ_MINOR_CODE_OTHER             (1)    /* Other Event (TBD). */
-
-/* Queue Entry Definition for all 4 byte event queue types. */
-struct BE_EQ_ENTRY_AMAP {
-       u8 Valid;               /* DWORD 0 */
-       u8 MajorCode[3];        /* DWORD 0 */
-       u8 MinorCode[12];       /* DWORD 0 */
-       u8 ResourceID[16];      /* DWORD 0 */
-} __packed;
-struct EQ_ENTRY_AMAP {
-       u32 dw[1];
-};
-
-/*
- * --- ETH_EVENT_CODE ---
- * These codes are returned by the MPU when one of these events has occurred,
- * and the event is configured to report to an Event Queue when an event
- * is detected.
- */
-#define ETH_EQ_LINK_STATUS              (0)    /* Link status change event */
-                                                 /* detected. */
-#define ETH_EQ_WATERMARK                (1)    /* watermark event detected. */
-#define ETH_EQ_MAGIC_PKT                (2)    /* magic pkt event detected. */
-#define ETH_EQ_ACPI_PKT0                (3)    /* ACPI interesting packet */
-                                                 /* detected. */
-#define ETH_EQ_ACPI_PKT1                (3)    /* ACPI interesting packet */
-                                                 /* detected. */
-#define ETH_EQ_ACPI_PKT2                (3)    /* ACPI interesting packet */
-                                                 /* detected. */
-#define ETH_EQ_ACPI_PKT3                (3)    /* ACPI interesting packet */
-                                                 /* detected. */
-
-/*
- * --- ETH_TX_COMPL_STATUS_ENUM ---
- * Status codes contained in Ethernet TX completion descriptors.
- */
-#define ETH_COMP_VALID                  (0)
-#define ETH_COMP_ERROR                  (1)
-#define ETH_COMP_INVALID                (15)
-
-/*
- * --- ETH_TX_COMPL_PORT_ENUM ---
- * Port indicator contained in Ethernet TX completion descriptors.
- */
-#define ETH_COMP_PORT0                  (0)
-#define ETH_COMP_PORT1                  (1)
-#define ETH_COMP_MGMT                   (2)
-
-/*
- * --- ETH_TX_COMPL_CT_ENUM ---
- * Completion type indicator contained in Ethernet TX completion descriptors.
- */
-#define ETH_COMP_ETH                    (0)
-
-/*
- * Work request block that the driver issues to the chip for
- * Ethernet transmissions. All control fields must be valid in each WRB for
- * a message. The controller, as specified by the flags, optionally writes
- * an entry to the Completion Ring and generate an event.
- */
-struct BE_ETH_WRB_AMAP {
-       u8 frag_pa_hi[32];      /* DWORD 0 */
-       u8 frag_pa_lo[32];      /* DWORD 1 */
-       u8 complete;    /* DWORD 2 */
-       u8 event;               /* DWORD 2 */
-       u8 crc;         /* DWORD 2 */
-       u8 forward;             /* DWORD 2 */
-       u8 ipsec;               /* DWORD 2 */
-       u8 mgmt;                /* DWORD 2 */
-       u8 ipcs;                /* DWORD 2 */
-       u8 udpcs;               /* DWORD 2 */
-       u8 tcpcs;               /* DWORD 2 */
-       u8 lso;         /* DWORD 2 */
-       u8 last;                /* DWORD 2 */
-       u8 vlan;                /* DWORD 2 */
-       u8 dbg[3];              /* DWORD 2 */
-       u8 hash_val[3]; /* DWORD 2 */
-       u8 lso_mss[14]; /* DWORD 2 */
-       u8 frag_len[16];        /* DWORD 3 */
-       u8 vlan_tag[16];        /* DWORD 3 */
-} __packed;
-struct ETH_WRB_AMAP {
-       u32 dw[4];
-};
-
-/* This is an Ethernet transmit completion descriptor */
-struct BE_ETH_TX_COMPL_AMAP {
-       u8 user_bytes[16];      /* DWORD 0 */
-       u8 nwh_bytes[8];        /* DWORD 0 */
-       u8 lso;         /* DWORD 0 */
-       u8 rsvd0[7];    /* DWORD 0 */
-       u8 wrb_index[16];       /* DWORD 1 */
-       u8 ct[2];               /* DWORD 1 */
-       u8 port[2];             /* DWORD 1 */
-       u8 rsvd1[8];    /* DWORD 1 */
-       u8 status[4];   /* DWORD 1 */
-       u8 rsvd2[16];   /* DWORD 2 */
-       u8 ringid[11];  /* DWORD 2 */
-       u8 hash_val[4]; /* DWORD 2 */
-       u8 valid;               /* DWORD 2 */
-       u8 rsvd3[32];   /* DWORD 3 */
-} __packed;
-struct ETH_TX_COMPL_AMAP {
-       u32 dw[4];
-};
-
-/* Ethernet Receive Buffer descriptor */
-struct BE_ETH_RX_D_AMAP {
-       u8 fragpa_hi[32];       /* DWORD 0 */
-       u8 fragpa_lo[32];       /* DWORD 1 */
-} __packed;
-struct ETH_RX_D_AMAP {
-       u32 dw[2];
-};
-
-/* This is an Ethernet Receive Completion Descriptor */
-struct BE_ETH_RX_COMPL_AMAP {
-       u8 vlan_tag[16];        /* DWORD 0 */
-       u8 pktsize[14]; /* DWORD 0 */
-       u8 port;                /* DWORD 0 */
-       u8 rsvd0;               /* DWORD 0 */
-       u8 err;         /* DWORD 1 */
-       u8 rsshp;               /* DWORD 1 */
-       u8 ipf;         /* DWORD 1 */
-       u8 tcpf;                /* DWORD 1 */
-       u8 udpf;                /* DWORD 1 */
-       u8 ipcksm;              /* DWORD 1 */
-       u8 tcpcksm;             /* DWORD 1 */
-       u8 udpcksm;             /* DWORD 1 */
-       u8 macdst[6];   /* DWORD 1 */
-       u8 vtp;         /* DWORD 1 */
-       u8 vtm;         /* DWORD 1 */
-       u8 fragndx[10]; /* DWORD 1 */
-       u8 ct[2];               /* DWORD 1 */
-       u8 ipsec;               /* DWORD 1 */
-       u8 numfrags[3]; /* DWORD 1 */
-       u8 rsvd1[31];   /* DWORD 2 */
-       u8 valid;               /* DWORD 2 */
-       u8 rsshash[32]; /* DWORD 3 */
-} __packed;
-struct ETH_RX_COMPL_AMAP {
-       u32 dw[4];
-};
-
-#endif /* __host_struct_amap_h__ */
diff --git a/drivers/staging/benet/hwlib.h b/drivers/staging/benet/hwlib.h
deleted file mode 100644 (file)
index afedf4d..0000000
+++ /dev/null
@@ -1,830 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-#ifndef __hwlib_h__
-#define __hwlib_h__
-
-#include <linux/module.h>
-#include <linux/io.h>
-#include <linux/list.h>
-#include <linux/spinlock.h>
-
-#include "regmap.h"            /* srcgen array map output */
-
-#include "asyncmesg.h"
-#include "fwcmd_opcodes.h"
-#include "post_codes.h"
-#include "fwcmd_mcc.h"
-
-#include "fwcmd_types_bmap.h"
-#include "fwcmd_common_bmap.h"
-#include "fwcmd_eth_bmap.h"
-#include "bestatus.h"
-/*
- *
- * Macros for reading/writing a protection domain or CSR registers
- * in BladeEngine.
- */
-#define PD_READ(fo, field)     ioread32((fo)->db_va + \
-               offsetof(struct BE_PROTECTION_DOMAIN_DBMAP_AMAP, field)/8)
-
-#define PD_WRITE(fo, field, val) iowrite32(val, (fo)->db_va + \
-               offsetof(struct BE_PROTECTION_DOMAIN_DBMAP_AMAP, field)/8)
-
-#define CSR_READ(fo, field)    ioread32((fo)->csr_va + \
-               offsetof(struct BE_BLADE_ENGINE_CSRMAP_AMAP, field)/8)
-
-#define CSR_WRITE(fo, field, val)      iowrite32(val, (fo)->csr_va + \
-               offsetof(struct BE_BLADE_ENGINE_CSRMAP_AMAP, field)/8)
-
-#define PCICFG0_READ(fo, field)        ioread32((fo)->pci_va + \
-               offsetof(struct BE_PCICFG0_CSRMAP_AMAP, field)/8)
-
-#define PCICFG0_WRITE(fo, field, val)  iowrite32(val, (fo)->pci_va + \
-               offsetof(struct BE_PCICFG0_CSRMAP_AMAP, field)/8)
-
-#define PCICFG1_READ(fo, field)        ioread32((fo)->pci_va + \
-               offsetof(struct BE_PCICFG1_CSRMAP_AMAP, field)/8)
-
-#define PCICFG1_WRITE(fo, field, val)  iowrite32(val, (fo)->pci_va + \
-               offsetof(struct BE_PCICFG1_CSRMAP_AMAP, field)/8)
-
-#ifdef BE_DEBUG
-#define ASSERT(c)       BUG_ON(!(c));
-#else
-#define ASSERT(c)
-#endif
-
-/* debug levels */
-enum BE_DEBUG_LEVELS {
-       DL_ALWAYS = 0,          /* cannot be masked */
-       DL_ERR = 0x1,           /* errors that should never happen */
-       DL_WARN = 0x2,          /* something questionable.
-                                  recoverable errors */
-       DL_NOTE = 0x4,          /* infrequent, important debug info */
-       DL_INFO = 0x8,          /* debug information */
-       DL_VERBOSE = 0x10,      /* detailed info, such as buffer traces */
-       BE_DL_MIN_VALUE = 0x1,  /* this is the min value used */
-       BE_DL_MAX_VALUE = 0x80  /* this is the higheset value used */
-} ;
-
-extern unsigned int trace_level;
-
-#define TRACE(lm, fmt, args...)  {                             \
-               if (trace_level & lm) {                         \
-                       printk(KERN_NOTICE "BE: %s:%d \n" fmt,  \
-                       __FILE__ , __LINE__ , ## args);         \
-               }                                               \
-       }
-
-static inline unsigned int be_trace_set_level(unsigned int level)
-{
-       unsigned int old_level = trace_level;
-       trace_level = level;
-       return old_level;
-}
-
-#define be_trace_get_level()   trace_level
-/*
- * Returns number of pages spanned by the size of data
- * starting at the given address.
- */
-#define PAGES_SPANNED(_address, _size) \
-   ((u32)((((size_t)(_address) & (PAGE_SIZE - 1)) + \
-               (_size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
-/* Byte offset into the page corresponding to given address */
-#define OFFSET_IN_PAGE(_addr_) ((size_t)(_addr_) & (PAGE_SIZE-1))
-
-/*
- * circular subtract.
- * Returns a - b assuming a circular number system, where a and b are
- * in range (0, maxValue-1). If a==b, zero is returned so the
- * highest value possible with this subtraction is maxValue-1.
- */
-static inline u32 be_subc(u32 a, u32 b, u32 max)
-{
-       ASSERT(a <= max && b <= max);
-       ASSERT(max > 0);
-       return a >= b ? (a - b) : (max - b + a);
-}
-
-static inline u32 be_addc(u32 a, u32 b, u32 max)
-{
-       ASSERT(a < max);
-       ASSERT(max > 0);
-       return (max - a > b) ? (a + b) : (b + a - max);
-}
-
-/* descriptor for a physically contiguous memory used for ring */
-struct ring_desc {
-       u32 length;     /* length in bytes */
-       void *va;       /* virtual address */
-       u64 pa;         /* bus address */
-} ;
-
-/*
- * This structure stores information about a ring shared between hardware
- * and software.  Each ring is allocated by the driver in the uncached
- * extension and mapped into BladeEngine's unified table.
- */
-struct mp_ring {
-       u32 pages;              /* queue size in pages */
-       u32 id;                 /* queue id assigned by beklib */
-       u32 num;                /* number of elements in queue */
-       u32 cidx;               /* consumer index */
-       u32 pidx;               /* producer index -- not used by most rings */
-       u32 itemSize;           /* size in bytes of one object */
-
-       void *va;               /* The virtual address of the ring.
-                                  This should be last to allow 32 & 64
-                                  bit debugger extensions to work. */
-} ;
-
-/*-----------  amap bit filed get / set macros and functions -----*/
-/*
- * Structures defined in the map header files (under fw/amap/) with names
- * in the format BE_<name>_AMAP are pseudo structures with members
- * of type u8. These structures are templates that are used in
- * conjuntion with the structures with names in the format
- * <name>_AMAP to calculate the bit masks and bit offsets to get or set
- * bit fields in structures. The structures <name>_AMAP are arrays
- * of 32 bits words and have the correct size.  The following macros
- * provide convenient ways to get and set the various members
- * in the structures without using strucctures with bit fields.
- * Always use the macros AMAP_GET_BITS_PTR and AMAP_SET_BITS_PTR
- * macros to extract and set various members.
- */
-
-/*
- * Returns the a bit mask for the register that is NOT shifted into location.
- * That means return values always look like: 0x1, 0xFF, 0x7FF, etc...
- */
-static inline u32 amap_mask(u32 bit_size)
-{
-       return bit_size == 32 ? 0xFFFFFFFF : (1 << bit_size) - 1;
-}
-
-#define AMAP_BIT_MASK(_struct_, field)       \
-       amap_mask(AMAP_BIT_SIZE(_struct_, field))
-
-/*
- * non-optimized set bits function. First clears the bits and then assigns them.
- * This does not require knowledge of the particular DWORD you are setting.
- * e.g. AMAP_SET_BITS_PTR (struct, field1, &contextMemory, 123);
- */
-static inline void
-amap_set(void *ptr, u32 dw_offset, u32 mask, u32 offset, u32 value)
-{
-       u32 *dw = (u32 *)ptr;
-       *(dw + dw_offset) &= ~(mask << offset);
-       *(dw + dw_offset) |= (mask & value) << offset;
-}
-
-#define AMAP_SET_BITS_PTR(_struct_, field, _structPtr_, val)   \
-       amap_set(_structPtr_, AMAP_WORD_OFFSET(_struct_, field),\
-               AMAP_BIT_MASK(_struct_, field),                 \
-               AMAP_BIT_OFFSET(_struct_, field), val)
-/*
- * Non-optimized routine that gets the bits without knowing the correct DWORD.
- * e.g. fieldValue = AMAP_GET_BITS_PTR (struct, field1, &contextMemory);
- */
-static inline u32
-amap_get(void *ptr, u32 dw_offset, u32 mask, u32 offset)
-{
-       u32 *dw = (u32 *)ptr;
-       return mask & (*(dw + dw_offset) >> offset);
-}
-#define AMAP_GET_BITS_PTR(_struct_, field, _structPtr_)                        \
-       amap_get(_structPtr_, AMAP_WORD_OFFSET(_struct_, field),        \
-               AMAP_BIT_MASK(_struct_, field),                         \
-               AMAP_BIT_OFFSET(_struct_, field))
-
-/* Returns 0-31 representing bit offset within a DWORD of a bitfield. */
-#define AMAP_BIT_OFFSET(_struct_, field)                  \
-       (offsetof(struct BE_ ## _struct_ ## _AMAP, field) % 32)
-
-/* Returns 0-n representing DWORD offset of bitfield within the structure. */
-#define AMAP_WORD_OFFSET(_struct_, field)  \
-                 (offsetof(struct BE_ ## _struct_ ## _AMAP, field)/32)
-
-/* Returns size of bitfield in bits. */
-#define AMAP_BIT_SIZE(_struct_, field) \
-               sizeof(((struct BE_ ## _struct_ ## _AMAP*)0)->field)
-
-struct be_mcc_wrb_response_copy {
-       u16 length;             /* bytes in response */
-       u16 fwcmd_offset;       /* offset within the wrb of the response */
-       void *va;               /* user's va to copy response into */
-
-} ;
-typedef void (*mcc_wrb_cqe_callback) (void *context, int status,
-                               struct MCC_WRB_AMAP *optional_wrb);
-struct be_mcc_wrb_context {
-
-       mcc_wrb_cqe_callback internal_cb;       /* Function to call on
-                                               completion */
-       void *internal_cb_context;      /* Parameter to pass
-                                                  to completion function */
-
-       mcc_wrb_cqe_callback cb;        /* Function to call on completion */
-       void *cb_context;       /* Parameter to pass to completion function */
-
-       int *users_final_status;        /* pointer to a local
-                                               variable for synchronous
-                                               commands */
-       struct MCC_WRB_AMAP *wrb;       /* pointer to original wrb for embedded
-                                               commands only */
-       struct list_head next;  /* links context structs together in
-                                  free list */
-
-       struct be_mcc_wrb_response_copy copy;   /* Optional parameters to copy
-                                          embedded response to user's va */
-
-#if defined(BE_DEBUG)
-       u16 subsystem, opcode;  /* Track this FWCMD for debug builds. */
-       struct MCC_WRB_AMAP *ring_wrb;
-       u32 consumed_count;
-#endif
-} ;
-
-/*
-    Represents a function object for network or storage.  This
-    is used to manage per-function resources like MCC CQs, etc.
-*/
-struct be_function_object {
-
-       u32 magic;              /*!< magic for detecting memory corruption. */
-
-       /* PCI BAR mapped addresses */
-       u8 __iomem *csr_va;     /* CSR */
-       u8 __iomem *db_va;      /* Door Bell */
-       u8 __iomem *pci_va;     /* PCI config space */
-       u32 emulate;            /* if set, MPU is not available.
-                                 Emulate everything.     */
-       u32 pend_queue_driving; /* if set, drive the queued WRBs
-                                  after releasing the WRB lock */
-
-       spinlock_t post_lock;   /* lock for verifying one thread posting wrbs */
-       spinlock_t cq_lock;     /* lock for verifying one thread
-                                  processing cq */
-       spinlock_t mcc_context_lock;    /* lock for protecting mcc
-                                          context free list */
-       unsigned long post_irq;
-       unsigned long cq_irq;
-
-       u32 type;
-       u32 pci_function_number;
-
-       struct be_mcc_object *mcc;      /* mcc rings. */
-
-       struct {
-               struct MCC_MAILBOX_AMAP *va;    /* VA to the mailbox */
-               u64 pa; /* PA to the mailbox */
-               u32 length;     /* byte length of mailbox */
-
-               /* One default context struct used for posting at
-                * least one MCC_WRB
-                */
-               struct be_mcc_wrb_context default_context;
-               bool default_context_allocated;
-       } mailbox;
-
-       struct {
-
-               /* Wake on lans configured. */
-               u32 wol_bitmask;        /* bits 0,1,2,3 are set if
-                                          corresponding index is enabled */
-       } config;
-
-
-       struct BE_FIRMWARE_CONFIG fw_config;
-} ;
-
-/*
-      Represents an Event Queue
-*/
-struct be_eq_object {
-       u32 magic;
-       atomic_t ref_count;
-
-       struct be_function_object *parent_function;
-
-       struct list_head eq_list;
-       struct list_head cq_list_head;
-
-       u32 eq_id;
-       void *cb_context;
-
-} ;
-
-/*
-    Manages a completion queue
-*/
-struct be_cq_object {
-       u32 magic;
-       atomic_t ref_count;
-
-       struct be_function_object *parent_function;
-       struct be_eq_object *eq_object;
-
-       struct list_head cq_list;
-       struct list_head cqlist_for_eq;
-
-       void *va;
-       u32 num_entries;
-
-       void *cb_context;
-
-       u32 cq_id;
-
-} ;
-
-/*
-    Manages an ethernet send queue
-*/
-struct be_ethsq_object {
-       u32 magic;
-
-       struct list_head list;
-
-       struct be_function_object *parent_function;
-       struct be_cq_object *cq_object;
-       u32 bid;
-
-} ;
-
-/*
-@brief
-    Manages an ethernet receive queue
-*/
-struct be_ethrq_object {
-       u32 magic;
-       struct list_head list;
-       struct be_function_object *parent_function;
-       u32 rid;
-       struct be_cq_object *cq_object;
-       struct be_cq_object *rss_cq_object[4];
-
-} ;
-
-/*
-    Manages an MCC
-*/
-typedef void (*mcc_async_event_callback) (void *context, u32 event_code,
-                               void *event);
-struct be_mcc_object {
-       u32 magic;
-
-       struct be_function_object *parent_function;
-       struct list_head mcc_list;
-
-       struct be_cq_object *cq_object;
-
-       /* Async event callback for MCC CQ. */
-       mcc_async_event_callback async_cb;
-       void *async_context;
-
-       struct {
-               struct be_mcc_wrb_context *base;
-               u32 num;
-               struct list_head list_head;
-       } wrb_context;
-
-       struct {
-               struct ring_desc *rd;
-               struct mp_ring ring;
-       } sq;
-
-       struct {
-               struct mp_ring ring;
-       } cq;
-
-       u32 processing;         /* flag indicating that one thread
-                                  is processing CQ */
-       u32 rearm;              /* doorbell rearm setting to make
-                                  sure the active processing thread */
-       /* rearms the CQ if any of the threads requested it. */
-
-       struct list_head backlog;
-       u32 backlog_length;
-       u32 driving_backlog;
-       u32 consumed_index;
-
-} ;
-
-
-/* Queue context header -- the required software information for
- * queueing a WRB.
- */
-struct be_queue_driver_context {
-       mcc_wrb_cqe_callback internal_cb;       /* Function to call on
-                                                  completion */
-       void *internal_cb_context;      /* Parameter to pass
-                                                  to completion function */
-
-       mcc_wrb_cqe_callback cb;        /* Function to call on completion */
-       void *cb_context;       /* Parameter to pass to completion function */
-
-       struct be_mcc_wrb_response_copy copy;   /* Optional parameters to copy
-                                          embedded response to user's va */
-       void *optional_fwcmd_va;
-       struct list_head list;
-       u32 bytes;
-} ;
-
-/*
- * Common MCC WRB header that all commands require.
- */
-struct be_mcc_wrb_header {
-       u8 rsvd[offsetof(struct BE_MCC_WRB_AMAP, payload)/8];
-} ;
-
-/*
- * All non embedded commands supported by hwlib functions only allow
- * 1 SGE.  This queue context handles them all.
- */
-struct be_nonembedded_q_ctxt {
-       struct be_queue_driver_context context;
-       struct be_mcc_wrb_header wrb_header;
-       struct MCC_SGE_AMAP sge[1];
-} ;
-
-/*
- * ------------------------------------------------------------------------
- *  This section contains the specific queue struct for each command.
- *  The user could always provide a be_generic_q_ctxt but this is a
- *  rather large struct.  By using the specific struct, memory consumption
- *  can be reduced.
- * ------------------------------------------------------------------------
- */
-
-struct be_link_status_q_ctxt {
-       struct be_queue_driver_context context;
-       struct be_mcc_wrb_header wrb_header;
-       struct FWCMD_COMMON_NTWK_LINK_STATUS_QUERY fwcmd;
-} ;
-
-struct be_multicast_q_ctxt {
-       struct be_queue_driver_context context;
-       struct be_mcc_wrb_header wrb_header;
-       struct FWCMD_COMMON_NTWK_MULTICAST_SET fwcmd;
-} ;
-
-
-struct be_vlan_q_ctxt {
-       struct be_queue_driver_context context;
-       struct be_mcc_wrb_header wrb_header;
-       struct FWCMD_COMMON_NTWK_VLAN_CONFIG fwcmd;
-} ;
-
-struct be_promiscuous_q_ctxt {
-       struct be_queue_driver_context context;
-       struct be_mcc_wrb_header wrb_header;
-       struct FWCMD_ETH_PROMISCUOUS fwcmd;
-} ;
-
-struct be_force_failover_q_ctxt {
-       struct be_queue_driver_context context;
-       struct be_mcc_wrb_header wrb_header;
-       struct FWCMD_COMMON_FORCE_FAILOVER fwcmd;
-} ;
-
-
-struct be_rxf_filter_q_ctxt {
-       struct be_queue_driver_context context;
-       struct be_mcc_wrb_header wrb_header;
-       struct FWCMD_COMMON_NTWK_RX_FILTER fwcmd;
-} ;
-
-struct be_eq_modify_delay_q_ctxt {
-       struct be_queue_driver_context context;
-       struct be_mcc_wrb_header wrb_header;
-       struct FWCMD_COMMON_MODIFY_EQ_DELAY fwcmd;
-} ;
-
-/*
- * The generic context is the largest size that would be required.
- * It is the software context plus an entire WRB.
- */
-struct be_generic_q_ctxt {
-       struct be_queue_driver_context context;
-       struct be_mcc_wrb_header wrb_header;
-       struct MCC_WRB_PAYLOAD_AMAP payload;
-} ;
-
-/*
- * Types for the BE_QUEUE_CONTEXT object.
- */
-#define BE_QUEUE_INVALID       (0)
-#define BE_QUEUE_LINK_STATUS   (0xA006)
-#define BE_QUEUE_ETH_STATS     (0xA007)
-#define BE_QUEUE_TPM_STATS     (0xA008)
-#define BE_QUEUE_TCP_STATS     (0xA009)
-#define BE_QUEUE_MULTICAST     (0xA00A)
-#define BE_QUEUE_VLAN          (0xA00B)
-#define BE_QUEUE_RSS           (0xA00C)
-#define BE_QUEUE_FORCE_FAILOVER        (0xA00D)
-#define BE_QUEUE_PROMISCUOUS   (0xA00E)
-#define BE_QUEUE_WAKE_ON_LAN   (0xA00F)
-#define BE_QUEUE_NOP           (0xA010)
-
-/* --- BE_FUNCTION_ENUM --- */
-#define BE_FUNCTION_TYPE_ISCSI          (0)
-#define BE_FUNCTION_TYPE_NETWORK        (1)
-#define BE_FUNCTION_TYPE_ARM            (2)
-
-/* --- BE_ETH_TX_RING_TYPE_ENUM --- */
-#define BE_ETH_TX_RING_TYPE_FORWARDING  (1)    /* Ether ring for forwarding */
-#define BE_ETH_TX_RING_TYPE_STANDARD    (2)    /* Ether ring for sending */
-                                               /* network packets. */
-#define BE_ETH_TX_RING_TYPE_BOUND       (3)    /* Ethernet ring for sending */
-                                               /* network packets, bound */
-                                               /* to a physical port. */
-/*
- * ----------------------------------------------------------------------
- *   API MACROS
- * ----------------------------------------------------------------------
- */
-#define BE_FWCMD_NAME(_short_name_)     struct FWCMD_##_short_name_
-#define BE_OPCODE_NAME(_short_name_)    OPCODE_##_short_name_
-#define BE_SUBSYSTEM_NAME(_short_name_) SUBSYSTEM_##_short_name_
-
-
-#define BE_PREPARE_EMBEDDED_FWCMD(_pfob_, _wrb_, _short_name_) \
-       ((BE_FWCMD_NAME(_short_name_) *)                                \
-       be_function_prepare_embedded_fwcmd(_pfob_, _wrb_,       \
-               sizeof(BE_FWCMD_NAME(_short_name_)),            \
-               FIELD_SIZEOF(BE_FWCMD_NAME(_short_name_), params.request), \
-               FIELD_SIZEOF(BE_FWCMD_NAME(_short_name_), params.response), \
-               BE_OPCODE_NAME(_short_name_),                           \
-               BE_SUBSYSTEM_NAME(_short_name_)));
-
-#define BE_PREPARE_NONEMBEDDED_FWCMD(_pfob_, _wrb_, _iva_, _ipa_, _short_name_)\
-       ((BE_FWCMD_NAME(_short_name_) *)                                \
-       be_function_prepare_nonembedded_fwcmd(_pfob_, _wrb_, (_iva_), (_ipa_), \
-               sizeof(BE_FWCMD_NAME(_short_name_)),            \
-               FIELD_SIZEOF(BE_FWCMD_NAME(_short_name_), params.request), \
-               FIELD_SIZEOF(BE_FWCMD_NAME(_short_name_), params.response), \
-               BE_OPCODE_NAME(_short_name_),                           \
-               BE_SUBSYSTEM_NAME(_short_name_)));
-
-int be_function_object_create(u8 __iomem *csr_va, u8 __iomem *db_va,
-       u8 __iomem *pci_va, u32 function_type, struct ring_desc *mailbox_rd,
-         struct be_function_object *pfob);
-
-int be_function_object_destroy(struct be_function_object *pfob);
-int be_function_cleanup(struct be_function_object *pfob);
-
-
-int be_function_get_fw_version(struct be_function_object *pfob,
-       struct FWCMD_COMMON_GET_FW_VERSION_RESPONSE_PAYLOAD *fw_version,
-       mcc_wrb_cqe_callback cb, void *cb_context);
-
-
-int be_eq_modify_delay(struct be_function_object *pfob,
-                  u32 num_eq, struct be_eq_object **eq_array,
-                  u32 *eq_delay_array, mcc_wrb_cqe_callback cb,
-                  void *cb_context,
-                  struct be_eq_modify_delay_q_ctxt *q_ctxt);
-
-
-
-int be_eq_create(struct be_function_object *pfob,
-            struct ring_desc *rd, u32 eqe_size, u32 num_entries,
-            u32 watermark, u32 timer_delay, struct be_eq_object *eq_object);
-
-int be_eq_destroy(struct be_eq_object *eq);
-
-int be_cq_create(struct be_function_object *pfob,
-       struct ring_desc *rd, u32 length,
-       bool solicited_eventable, bool no_delay,
-       u32 wm_thresh, struct be_eq_object *eq_object,
-       struct be_cq_object *cq_object);
-
-int be_cq_destroy(struct be_cq_object *cq);
-
-int be_mcc_ring_create(struct be_function_object *pfob,
-                  struct ring_desc *rd, u32 length,
-                  struct be_mcc_wrb_context *context_array,
-                  u32 num_context_entries,
-                  struct be_cq_object *cq, struct be_mcc_object *mcc);
-int be_mcc_ring_destroy(struct be_mcc_object *mcc_object);
-
-int be_mcc_process_cq(struct be_mcc_object *mcc_object, bool rearm);
-
-int be_mcc_add_async_event_callback(struct be_mcc_object *mcc_object,
-               mcc_async_event_callback cb, void *cb_context);
-
-int be_pci_soft_reset(struct be_function_object *pfob);
-
-
-int be_drive_POST(struct be_function_object *pfob);
-
-
-int be_eth_sq_create(struct be_function_object *pfob,
-               struct ring_desc *rd, u32 length_in_bytes,
-               u32 type, u32 ulp, struct be_cq_object *cq_object,
-               struct be_ethsq_object *eth_sq);
-
-struct be_eth_sq_parameters {
-       u32 port;
-       u32 rsvd0[2];
-} ;
-
-int be_eth_sq_create_ex(struct be_function_object *pfob,
-                   struct ring_desc *rd, u32 length_in_bytes,
-                   u32 type, u32 ulp, struct be_cq_object *cq_object,
-                   struct be_eth_sq_parameters *ex_parameters,
-                   struct be_ethsq_object *eth_sq);
-int be_eth_sq_destroy(struct be_ethsq_object *eth_sq);
-
-int be_eth_set_flow_control(struct be_function_object *pfob,
-                       bool txfc_enable, bool rxfc_enable);
-
-int be_eth_get_flow_control(struct be_function_object *pfob,
-                       bool *txfc_enable, bool *rxfc_enable);
-int be_eth_set_qos(struct be_function_object *pfob, u32 max_bps, u32 max_pps);
-
-int be_eth_get_qos(struct be_function_object *pfob, u32 *max_bps, u32 *max_pps);
-
-int be_eth_set_frame_size(struct be_function_object *pfob,
-                     u32 *tx_frame_size, u32 *rx_frame_size);
-
-int be_eth_rq_create(struct be_function_object *pfob,
-                struct ring_desc *rd, struct be_cq_object *cq_object,
-                struct be_cq_object *bcmc_cq_object,
-                struct be_ethrq_object *eth_rq);
-
-int be_eth_rq_destroy(struct be_ethrq_object *eth_rq);
-
-int be_eth_rq_destroy_options(struct be_ethrq_object *eth_rq, bool flush,
-               mcc_wrb_cqe_callback cb, void *cb_context);
-int be_eth_rq_set_frag_size(struct be_function_object *pfob,
-               u32 new_frag_size_bytes, u32 *actual_frag_size_bytes);
-int be_eth_rq_get_frag_size(struct be_function_object *pfob,
-                                               u32 *frag_size_bytes);
-
-void *be_function_prepare_embedded_fwcmd(struct be_function_object *pfob,
-                  struct MCC_WRB_AMAP *wrb,
-                  u32 payload_length, u32 request_length,
-                  u32 response_length, u32 opcode, u32 subsystem);
-void *be_function_prepare_nonembedded_fwcmd(struct be_function_object *pfob,
-       struct MCC_WRB_AMAP *wrb, void *fwcmd_header_va, u64 fwcmd_header_pa,
-       u32 payload_length, u32 request_length, u32 response_length,
-       u32 opcode, u32 subsystem);
-
-
-struct MCC_WRB_AMAP *
-be_function_peek_mcc_wrb(struct be_function_object *pfob);
-
-int be_rxf_mac_address_read_write(struct be_function_object *pfob,
-             bool port1, bool mac1, bool mgmt,
-             bool write, bool permanent, u8 *mac_address,
-             mcc_wrb_cqe_callback cb,
-             void *cb_context);
-
-int be_rxf_multicast_config(struct be_function_object *pfob,
-                       bool promiscuous, u32 num, u8 *mac_table,
-                       mcc_wrb_cqe_callback cb,
-                       void *cb_context,
-                       struct be_multicast_q_ctxt *q_ctxt);
-
-int be_rxf_vlan_config(struct be_function_object *pfob,
-          bool promiscuous, u32 num, u16 *vlan_tag_array,
-          mcc_wrb_cqe_callback cb, void *cb_context,
-          struct be_vlan_q_ctxt *q_ctxt);
-
-
-int be_rxf_link_status(struct be_function_object *pfob,
-                  struct BE_LINK_STATUS *link_status,
-                  mcc_wrb_cqe_callback cb,
-                  void *cb_context,
-                  struct be_link_status_q_ctxt *q_ctxt);
-
-
-int be_rxf_query_eth_statistics(struct be_function_object *pfob,
-               struct FWCMD_ETH_GET_STATISTICS *va_for_fwcmd,
-               u64 pa_for_fwcmd, mcc_wrb_cqe_callback cb,
-               void *cb_context,
-               struct be_nonembedded_q_ctxt *q_ctxt);
-
-int be_rxf_promiscuous(struct be_function_object *pfob,
-                  bool enable_port0, bool enable_port1,
-                  mcc_wrb_cqe_callback cb, void *cb_context,
-                  struct be_promiscuous_q_ctxt *q_ctxt);
-
-
-int be_rxf_filter_config(struct be_function_object *pfob,
-                    struct NTWK_RX_FILTER_SETTINGS *settings,
-                    mcc_wrb_cqe_callback cb,
-                    void *cb_context,
-                    struct be_rxf_filter_q_ctxt *q_ctxt);
-
-/*
- * ------------------------------------------------------
- *  internal functions used by hwlib
- * ------------------------------------------------------
- */
-
-
-int be_function_ring_destroy(struct be_function_object *pfob,
-                      u32 id, u32 ring_type, mcc_wrb_cqe_callback cb,
-                      void *cb_context,
-                      mcc_wrb_cqe_callback internal_cb,
-                      void *internal_callback_context);
-
-int be_function_post_mcc_wrb(struct be_function_object *pfob,
-               struct MCC_WRB_AMAP *wrb,
-               struct be_generic_q_ctxt *q_ctxt,
-               mcc_wrb_cqe_callback cb, void *cb_context,
-               mcc_wrb_cqe_callback internal_cb,
-               void *internal_cb_context, void *optional_fwcmd_va,
-               struct be_mcc_wrb_response_copy *response_copy);
-
-int be_function_queue_mcc_wrb(struct be_function_object *pfob,
-                         struct be_generic_q_ctxt *q_ctxt);
-
-/*
- * ------------------------------------------------------
- *  MCC QUEUE
- * ------------------------------------------------------
- */
-
-int be_mpu_init_mailbox(struct be_function_object *pfob, struct ring_desc *rd);
-
-
-struct MCC_WRB_AMAP *
-_be_mpu_peek_ring_wrb(struct be_mcc_object *mcc, bool driving_queue);
-
-struct be_mcc_wrb_context *
-_be_mcc_allocate_wrb_context(struct be_function_object *pfob);
-
-void _be_mcc_free_wrb_context(struct be_function_object *pfob,
-                        struct be_mcc_wrb_context *context);
-
-int _be_mpu_post_wrb_mailbox(struct be_function_object *pfob,
-        struct MCC_WRB_AMAP *wrb, struct be_mcc_wrb_context *wrb_context);
-
-int _be_mpu_post_wrb_ring(struct be_mcc_object *mcc,
-       struct MCC_WRB_AMAP *wrb, struct be_mcc_wrb_context *wrb_context);
-
-void be_drive_mcc_wrb_queue(struct be_mcc_object *mcc);
-
-
-/*
- * ------------------------------------------------------
- *  Ring Sizes
- * ------------------------------------------------------
- */
-static inline u32 be_ring_encoding_to_length(u32 encoding, u32 object_size)
-{
-
-       ASSERT(encoding != 1);  /* 1 is rsvd */
-       ASSERT(encoding < 16);
-       ASSERT(object_size > 0);
-
-       if (encoding == 0)      /* 32k deep */
-               encoding = 16;
-
-       return (1 << (encoding - 1)) * object_size;
-}
-
-static inline
-u32 be_ring_length_to_encoding(u32 length_in_bytes, u32 object_size)
-{
-
-       u32 count, encoding;
-
-       ASSERT(object_size > 0);
-       ASSERT(length_in_bytes % object_size == 0);
-
-       count = length_in_bytes / object_size;
-
-       ASSERT(count > 1);
-       ASSERT(count <= 32 * 1024);
-       ASSERT(length_in_bytes <= 8 * PAGE_SIZE); /* max ring size in UT */
-
-       encoding = __ilog2_u32(count) + 1;
-
-       if (encoding == 16)
-               encoding = 0;   /* 32k deep */
-
-       return encoding;
-}
-
-void be_rd_to_pa_list(struct ring_desc *rd, struct PHYS_ADDR *pa_list,
-                                               u32 max_num);
-#endif /* __hwlib_h__ */
diff --git a/drivers/staging/benet/mpu.c b/drivers/staging/benet/mpu.c
deleted file mode 100644 (file)
index 269cc11..0000000
+++ /dev/null
@@ -1,1364 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-#include <linux/delay.h>
-#include "hwlib.h"
-#include "bestatus.h"
-
-static
-inline void mp_ring_create(struct mp_ring *ring, u32 num, u32 size, void *va)
-{
-       ASSERT(ring);
-       memset(ring, 0, sizeof(struct mp_ring));
-       ring->num = num;
-       ring->pages = DIV_ROUND_UP(num * size, PAGE_SIZE);
-       ring->itemSize = size;
-       ring->va = va;
-}
-
-/*
- * -----------------------------------------------------------------------
- * Interface for 2 index rings. i.e. consumer/producer rings
- * --------------------------------------------------------------------------
- */
-
-/* Returns number items pending on ring. */
-static inline u32 mp_ring_num_pending(struct mp_ring *ring)
-{
-       ASSERT(ring);
-       if (ring->num == 0)
-               return 0;
-       return be_subc(ring->pidx, ring->cidx, ring->num);
-}
-
-/* Returns number items free on ring. */
-static inline u32 mp_ring_num_empty(struct mp_ring *ring)
-{
-       ASSERT(ring);
-       return ring->num - 1 - mp_ring_num_pending(ring);
-}
-
-/* Consume 1 item */
-static inline void mp_ring_consume(struct mp_ring *ring)
-{
-       ASSERT(ring);
-       ASSERT(ring->pidx != ring->cidx);
-
-       ring->cidx = be_addc(ring->cidx, 1, ring->num);
-}
-
-/* Produce 1 item */
-static inline void mp_ring_produce(struct mp_ring *ring)
-{
-       ASSERT(ring);
-       ring->pidx = be_addc(ring->pidx, 1, ring->num);
-}
-
-/* Consume count items */
-static inline void mp_ring_consume_multiple(struct mp_ring *ring, u32 count)
-{
-       ASSERT(ring);
-       ASSERT(mp_ring_num_pending(ring) >= count);
-       ring->cidx = be_addc(ring->cidx, count, ring->num);
-}
-
-static inline void *mp_ring_item(struct mp_ring *ring, u32 index)
-{
-       ASSERT(ring);
-       ASSERT(index < ring->num);
-       ASSERT(ring->itemSize > 0);
-       return (u8 *) ring->va + index * ring->itemSize;
-}
-
-/* Ptr to produce item */
-static inline void *mp_ring_producer_ptr(struct mp_ring *ring)
-{
-       ASSERT(ring);
-       return mp_ring_item(ring, ring->pidx);
-}
-
-/*
- * Returns a pointer to the current location in the ring.
- * This is used for rings with 1 index.
- */
-static inline void *mp_ring_current(struct mp_ring *ring)
-{
-       ASSERT(ring);
-       ASSERT(ring->pidx == 0);        /* not used */
-
-       return mp_ring_item(ring, ring->cidx);
-}
-
-/*
- * Increment index for rings with only 1 index.
- * This is used for rings with 1 index.
- */
-static inline void *mp_ring_next(struct mp_ring *ring)
-{
-       ASSERT(ring);
-       ASSERT(ring->num > 0);
-       ASSERT(ring->pidx == 0);        /* not used */
-
-       ring->cidx = be_addc(ring->cidx, 1, ring->num);
-       return mp_ring_current(ring);
-}
-
-/*
-    This routine waits for a previously posted mailbox WRB to be completed.
-    Specifically it waits for the mailbox to say that it's ready to accept
-    more data by setting the LSB of the mailbox pd register to 1.
-
-    pcontroller      - The function object to post this data to
-
-    IRQL < DISPATCH_LEVEL
-*/
-static void be_mcc_mailbox_wait(struct be_function_object *pfob)
-{
-       struct MPU_MAILBOX_DB_AMAP mailbox_db;
-       u32 i = 0;
-       u32 ready;
-
-       if (pfob->emulate) {
-               /* No waiting for mailbox in emulated mode. */
-               return;
-       }
-
-       mailbox_db.dw[0] = PD_READ(pfob, mcc_bootstrap_db);
-       ready = AMAP_GET_BITS_PTR(MPU_MAILBOX_DB, ready, &mailbox_db);
-
-       while (ready == false) {
-               if ((++i & 0x3FFFF) == 0) {
-                       TRACE(DL_WARN, "Waiting for mailbox ready - %dk polls",
-                                                               i / 1000);
-               }
-               udelay(1);
-               mailbox_db.dw[0] = PD_READ(pfob, mcc_bootstrap_db);
-               ready = AMAP_GET_BITS_PTR(MPU_MAILBOX_DB, ready, &mailbox_db);
-       }
-}
-
-/*
-    This routine tells the MCC mailbox that there is data to processed
-    in the mailbox. It does this by setting the physical address for the
-    mailbox location and clearing the LSB.  This routine returns immediately
-    and does not wait for the WRB to be processed.
-
-    pcontroller      - The function object to post this data to
-
-    IRQL < DISPATCH_LEVEL
-
-*/
-static void be_mcc_mailbox_notify(struct be_function_object *pfob)
-{
-       struct MPU_MAILBOX_DB_AMAP mailbox_db;
-       u32 pa;
-
-       ASSERT(pfob->mailbox.pa);
-       ASSERT(pfob->mailbox.va);
-
-       /* If emulated, do not ring the mailbox */
-       if (pfob->emulate) {
-               TRACE(DL_WARN, "MPU disabled. Skipping mailbox notify.");
-               return;
-       }
-
-       /* form the higher bits in the address */
-       mailbox_db.dw[0] = 0;   /* init */
-       AMAP_SET_BITS_PTR(MPU_MAILBOX_DB, hi, &mailbox_db, 1);
-       AMAP_SET_BITS_PTR(MPU_MAILBOX_DB, ready, &mailbox_db, 0);
-
-       /* bits 34 to 63 */
-       pa = (u32) (pfob->mailbox.pa >> 34);
-       AMAP_SET_BITS_PTR(MPU_MAILBOX_DB, address, &mailbox_db, pa);
-
-       /* Wait for the MPU to be ready */
-       be_mcc_mailbox_wait(pfob);
-
-       /* Ring doorbell 1st time */
-       PD_WRITE(pfob, mcc_bootstrap_db, mailbox_db.dw[0]);
-
-       /* Wait for 1st write to be acknowledged. */
-       be_mcc_mailbox_wait(pfob);
-
-       /* lower bits 30 bits from 4th bit (bits 4 to 33)*/
-       pa = (u32) (pfob->mailbox.pa >> 4) & 0x3FFFFFFF;
-
-       AMAP_SET_BITS_PTR(MPU_MAILBOX_DB, hi, &mailbox_db, 0);
-       AMAP_SET_BITS_PTR(MPU_MAILBOX_DB, ready, &mailbox_db, 0);
-       AMAP_SET_BITS_PTR(MPU_MAILBOX_DB, address, &mailbox_db, pa);
-
-       /* Ring doorbell 2nd time */
-       PD_WRITE(pfob, mcc_bootstrap_db, mailbox_db.dw[0]);
-}
-
-/*
-    This routine tells the MCC mailbox that there is data to processed
-    in the mailbox. It does this by setting the physical address for the
-    mailbox location and clearing the LSB.  This routine spins until the
-    MPU writes a 1 into the LSB indicating that the data has been received
-    and is ready to be processed.
-
-    pcontroller      - The function object to post this data to
-
-    IRQL < DISPATCH_LEVEL
-*/
-static void
-be_mcc_mailbox_notify_and_wait(struct be_function_object *pfob)
-{
-       /*
-        * Notify it
-        */
-       be_mcc_mailbox_notify(pfob);
-       /*
-        * Now wait for completion of WRB
-        */
-       be_mcc_mailbox_wait(pfob);
-}
-
-void
-be_mcc_process_cqe(struct be_function_object *pfob,
-                               struct MCC_CQ_ENTRY_AMAP *cqe)
-{
-       struct be_mcc_wrb_context *wrb_context = NULL;
-       u32 offset, status;
-       u8 *p;
-
-       ASSERT(cqe);
-       /*
-        * A command completed.  Commands complete out-of-order.
-        * Determine which command completed from the TAG.
-        */
-       offset = offsetof(struct BE_MCC_CQ_ENTRY_AMAP, mcc_tag)/8;
-       p = (u8 *) cqe + offset;
-       wrb_context = (struct be_mcc_wrb_context *)(void *)(size_t)(*(u64 *)p);
-       ASSERT(wrb_context);
-
-       /*
-        * Perform a response copy if requested.
-        * Only copy data if the FWCMD is successful.
-        */
-       status = AMAP_GET_BITS_PTR(MCC_CQ_ENTRY, completion_status, cqe);
-       if (status == MGMT_STATUS_SUCCESS && wrb_context->copy.length > 0) {
-               ASSERT(wrb_context->wrb);
-               ASSERT(wrb_context->copy.va);
-               p = (u8 *)wrb_context->wrb +
-                               offsetof(struct BE_MCC_WRB_AMAP, payload)/8;
-               memcpy(wrb_context->copy.va,
-                         (u8 *)p + wrb_context->copy.fwcmd_offset,
-                         wrb_context->copy.length);
-       }
-
-       if (status)
-               status = BE_NOT_OK;
-       /* internal callback */
-       if (wrb_context->internal_cb) {
-               wrb_context->internal_cb(wrb_context->internal_cb_context,
-                                               status, wrb_context->wrb);
-       }
-
-       /* callback */
-       if (wrb_context->cb) {
-               wrb_context->cb(wrb_context->cb_context,
-                                             status, wrb_context->wrb);
-       }
-       /* Free the context structure */
-       _be_mcc_free_wrb_context(pfob, wrb_context);
-}
-
-void be_drive_mcc_wrb_queue(struct be_mcc_object *mcc)
-{
-       struct be_function_object *pfob = NULL;
-       int status = BE_PENDING;
-       struct be_generic_q_ctxt *q_ctxt;
-       struct MCC_WRB_AMAP *wrb;
-       struct MCC_WRB_AMAP *queue_wrb;
-       u32 length, payload_length, sge_count, embedded;
-       unsigned long irql;
-
-       BUILD_BUG_ON((sizeof(struct be_generic_q_ctxt) <
-                         sizeof(struct be_queue_driver_context) +
-                                       sizeof(struct MCC_WRB_AMAP)));
-       pfob = mcc->parent_function;
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       if (mcc->driving_backlog) {
-               spin_unlock_irqrestore(&pfob->post_lock, irql);
-               if (pfob->pend_queue_driving && pfob->mcc) {
-                       pfob->pend_queue_driving = 0;
-                       be_drive_mcc_wrb_queue(pfob->mcc);
-               }
-               return;
-       }
-       /* Acquire the flag to limit 1 thread to redrive posts. */
-       mcc->driving_backlog = 1;
-
-       while (!list_empty(&mcc->backlog)) {
-               wrb = _be_mpu_peek_ring_wrb(mcc, true); /* Driving the queue */
-               if (!wrb)
-                       break;  /* No space in the ring yet. */
-               /* Get the next queued entry to process. */
-               q_ctxt = list_first_entry(&mcc->backlog,
-                               struct be_generic_q_ctxt, context.list);
-               list_del(&q_ctxt->context.list);
-               pfob->mcc->backlog_length--;
-               /*
-                * Compute the required length of the WRB.
-                * Since the queue element may be smaller than
-                * the complete WRB, copy only the required number of bytes.
-                */
-               queue_wrb = (struct MCC_WRB_AMAP *) &q_ctxt->wrb_header;
-               embedded = AMAP_GET_BITS_PTR(MCC_WRB, embedded, queue_wrb);
-               if (embedded) {
-                       payload_length = AMAP_GET_BITS_PTR(MCC_WRB,
-                                               payload_length, queue_wrb);
-                       length = sizeof(struct be_mcc_wrb_header) +
-                                                               payload_length;
-               } else {
-                       sge_count = AMAP_GET_BITS_PTR(MCC_WRB, sge_count,
-                                                               queue_wrb);
-                       ASSERT(sge_count == 1); /* only 1 frag. */
-                       length = sizeof(struct be_mcc_wrb_header) +
-                           sge_count * sizeof(struct MCC_SGE_AMAP);
-               }
-
-               /*
-                * Truncate the length based on the size of the
-                * queue element.  Some elements that have output parameters
-                * can be smaller than the payload_length field would
-                * indicate.  We really only need to copy the request
-                * parameters, not the response.
-                */
-               length = min(length, (u32) (q_ctxt->context.bytes -
-                       offsetof(struct be_generic_q_ctxt, wrb_header)));
-
-               /* Copy the queue element WRB into the ring. */
-               memcpy(wrb, &q_ctxt->wrb_header, length);
-
-               /* Post the wrb.  This should not fail assuming we have
-                * enough context structs. */
-               status = be_function_post_mcc_wrb(pfob, wrb, NULL,
-                          q_ctxt->context.cb, q_ctxt->context.cb_context,
-                          q_ctxt->context.internal_cb,
-                          q_ctxt->context.internal_cb_context,
-                          q_ctxt->context.optional_fwcmd_va,
-                          &q_ctxt->context.copy);
-
-               if (status == BE_SUCCESS) {
-                       /*
-                        * Synchronous completion. Since it was queued,
-                        * we will invoke the callback.
-                        * To the user, this is an asynchronous request.
-                        */
-                       spin_unlock_irqrestore(&pfob->post_lock, irql);
-                       if (pfob->pend_queue_driving && pfob->mcc) {
-                               pfob->pend_queue_driving = 0;
-                               be_drive_mcc_wrb_queue(pfob->mcc);
-                       }
-
-                       ASSERT(q_ctxt->context.cb);
-
-                       q_ctxt->context.cb(
-                               q_ctxt->context.cb_context,
-                                               BE_SUCCESS, NULL);
-
-                       spin_lock_irqsave(&pfob->post_lock, irql);
-
-               } else if (status != BE_PENDING) {
-                       /*
-                        * Another resource failed.  Should never happen
-                        * if we have sufficient MCC_WRB_CONTEXT structs.
-                        * Return to head of the queue.
-                        */
-                       TRACE(DL_WARN, "Failed to post a queued WRB. 0x%x",
-                             status);
-                       list_add(&q_ctxt->context.list, &mcc->backlog);
-                       pfob->mcc->backlog_length++;
-                       break;
-               }
-       }
-
-       /* Free the flag to limit 1 thread to redrive posts. */
-       mcc->driving_backlog = 0;
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-}
-
-/* This function asserts that the WRB was consumed in order. */
-#ifdef BE_DEBUG
-u32 be_mcc_wrb_consumed_in_order(struct be_mcc_object *mcc,
-                                       struct MCC_CQ_ENTRY_AMAP *cqe)
-{
-       struct be_mcc_wrb_context *wrb_context = NULL;
-       u32 wrb_index;
-       u32 wrb_consumed_in_order;
-       u32 offset;
-       u8 *p;
-
-       ASSERT(cqe);
-       /*
-        * A command completed.  Commands complete out-of-order.
-        * Determine which command completed from the TAG.
-        */
-       offset = offsetof(struct BE_MCC_CQ_ENTRY_AMAP, mcc_tag)/8;
-       p = (u8 *) cqe + offset;
-       wrb_context = (struct be_mcc_wrb_context *)(void *)(size_t)(*(u64 *)p);
-
-       ASSERT(wrb_context);
-
-       wrb_index = (u32) (((u64)(size_t)wrb_context->ring_wrb -
-               (u64)(size_t)mcc->sq.ring.va) / sizeof(struct MCC_WRB_AMAP));
-
-       ASSERT(wrb_index < mcc->sq.ring.num);
-
-       wrb_consumed_in_order = (u32) (wrb_index == mcc->consumed_index);
-       mcc->consumed_index = be_addc(mcc->consumed_index, 1, mcc->sq.ring.num);
-       return wrb_consumed_in_order;
-}
-#endif
-
-int be_mcc_process_cq(struct be_mcc_object *mcc, bool rearm)
-{
-       struct be_function_object *pfob = NULL;
-       struct MCC_CQ_ENTRY_AMAP *cqe;
-       struct CQ_DB_AMAP db;
-       struct mp_ring *cq_ring = &mcc->cq.ring;
-       struct mp_ring *mp_ring = &mcc->sq.ring;
-       u32 num_processed = 0;
-       u32 consumed = 0, valid, completed, cqe_consumed, async_event;
-
-       pfob = mcc->parent_function;
-
-       spin_lock_irqsave(&pfob->cq_lock, pfob->cq_irq);
-
-       /*
-        * Verify that only one thread is processing the CQ at once.
-        * We cannot hold the lock while processing the CQ due to
-        * the callbacks into the OS.  Therefore, this flag is used
-        * to control it.  If any of the threads want to
-        * rearm the CQ, we need to honor that.
-        */
-       if (mcc->processing != 0) {
-               mcc->rearm = mcc->rearm || rearm;
-               goto Error;
-       } else {
-               mcc->processing = 1;    /* lock processing for this thread. */
-               mcc->rearm = rearm;     /* set our rearm setting */
-       }
-
-       spin_unlock_irqrestore(&pfob->cq_lock, pfob->cq_irq);
-
-       cqe = mp_ring_current(cq_ring);
-       valid = AMAP_GET_BITS_PTR(MCC_CQ_ENTRY, valid, cqe);
-       while (valid) {
-
-               if (num_processed >= 8) {
-                       /* coalesce doorbells, but free space in cq
-                        * ring while processing. */
-                       db.dw[0] = 0;   /* clear */
-                       AMAP_SET_BITS_PTR(CQ_DB, qid, &db, cq_ring->id);
-                       AMAP_SET_BITS_PTR(CQ_DB, rearm, &db, false);
-                       AMAP_SET_BITS_PTR(CQ_DB, event, &db, false);
-                       AMAP_SET_BITS_PTR(CQ_DB, num_popped, &db,
-                                                       num_processed);
-                       num_processed = 0;
-
-                       PD_WRITE(pfob, cq_db, db.dw[0]);
-               }
-
-               async_event = AMAP_GET_BITS_PTR(MCC_CQ_ENTRY, async_event, cqe);
-               if (async_event) {
-                       /* This is an asynchronous event. */
-                       struct ASYNC_EVENT_TRAILER_AMAP *async_trailer =
-                           (struct ASYNC_EVENT_TRAILER_AMAP *)
-                           ((u8 *) cqe + sizeof(struct MCC_CQ_ENTRY_AMAP) -
-                            sizeof(struct ASYNC_EVENT_TRAILER_AMAP));
-                       u32 event_code;
-                       async_event = AMAP_GET_BITS_PTR(ASYNC_EVENT_TRAILER,
-                                               async_event, async_trailer);
-                       ASSERT(async_event == 1);
-
-
-                       valid = AMAP_GET_BITS_PTR(ASYNC_EVENT_TRAILER,
-                                               valid, async_trailer);
-                       ASSERT(valid == 1);
-
-                       /* Call the async event handler if it is installed. */
-                       if (mcc->async_cb) {
-                               event_code =
-                                       AMAP_GET_BITS_PTR(ASYNC_EVENT_TRAILER,
-                                               event_code, async_trailer);
-                               mcc->async_cb(mcc->async_context,
-                                           (u32) event_code, (void *) cqe);
-                       }
-
-               } else {
-                       /* This is a completion entry. */
-
-                       /* No vm forwarding in this driver. */
-
-                       cqe_consumed = AMAP_GET_BITS_PTR(MCC_CQ_ENTRY,
-                                               consumed, cqe);
-                       if (cqe_consumed) {
-                               /*
-                                * A command on the MCC ring was consumed.
-                                * Update the consumer index.
-                                * These occur in order.
-                                */
-                               ASSERT(be_mcc_wrb_consumed_in_order(mcc, cqe));
-                               consumed++;
-                       }
-
-                       completed = AMAP_GET_BITS_PTR(MCC_CQ_ENTRY,
-                                       completed, cqe);
-                       if (completed) {
-                               /* A command completed.  Use tag to
-                                * determine which command.  */
-                               be_mcc_process_cqe(pfob, cqe);
-                       }
-               }
-
-               /* Reset the CQE */
-               AMAP_SET_BITS_PTR(MCC_CQ_ENTRY, valid, cqe, false);
-               num_processed++;
-
-               /* Update our tracking for the CQ ring. */
-               cqe = mp_ring_next(cq_ring);
-               valid = AMAP_GET_BITS_PTR(MCC_CQ_ENTRY, valid, cqe);
-       }
-
-       TRACE(DL_INFO, "num_processed:0x%x, and consumed:0x%x",
-             num_processed, consumed);
-       /*
-        * Grab the CQ lock to synchronize the "rearm" setting for
-        * the doorbell, and for clearing the "processing" flag.
-        */
-       spin_lock_irqsave(&pfob->cq_lock, pfob->cq_irq);
-
-       /*
-        * Rearm the cq.  This is done based on the global mcc->rearm
-        * flag which combines the rearm parameter from the current
-        * call to process_cq and any other threads
-        * that tried to process the CQ while this one was active.
-        * This handles the situation where a sync. fwcmd was processing
-        * the CQ while the interrupt/dpc tries to process it.
-        * The sync process gets to continue -- but it is now
-        * responsible for the rearming.
-        */
-       if (num_processed > 0 || mcc->rearm == true) {
-               db.dw[0] = 0;   /* clear */
-               AMAP_SET_BITS_PTR(CQ_DB, qid, &db, cq_ring->id);
-               AMAP_SET_BITS_PTR(CQ_DB, rearm, &db, mcc->rearm);
-               AMAP_SET_BITS_PTR(CQ_DB, event, &db, false);
-               AMAP_SET_BITS_PTR(CQ_DB, num_popped, &db, num_processed);
-
-               PD_WRITE(pfob, cq_db, db.dw[0]);
-       }
-       /*
-        * Update the consumer index after ringing the CQ doorbell.
-        * We don't want another thread to post more WRBs before we
-        * have CQ space available.
-        */
-       mp_ring_consume_multiple(mp_ring, consumed);
-
-       /* Clear the processing flag. */
-       mcc->processing = 0;
-
-Error:
-       spin_unlock_irqrestore(&pfob->cq_lock, pfob->cq_irq);
-       /*
-        * Use the local variable to detect if the current thread
-        * holds the WRB post lock.  If rearm is false, this is
-        * either a synchronous command, or the upper layer driver is polling
-        * from a thread.  We do not drive the queue from that
-        * context since the driver may hold the
-        * wrb post lock already.
-        */
-       if (rearm)
-               be_drive_mcc_wrb_queue(mcc);
-       else
-               pfob->pend_queue_driving = 1;
-
-       return BE_SUCCESS;
-}
-
-/*
- *============================================================================
- *                  P U B L I C  R O U T I N E S
- *============================================================================
- */
-
-/*
-    This routine creates an MCC object.  This object contains an MCC send queue
-    and a CQ private to the MCC.
-
-    pcontroller      - Handle to a function object
-
-    EqObject            - EQ object that will be used to dispatch this MCC
-
-    ppMccObject         - Pointer to an internal Mcc Object returned.
-
-    Returns BE_SUCCESS if successfull,, otherwise a useful error code
-       is returned.
-
-    IRQL < DISPATCH_LEVEL
-
-*/
-int
-be_mcc_ring_create(struct be_function_object *pfob,
-                  struct ring_desc *rd, u32 length,
-                  struct be_mcc_wrb_context *context_array,
-                  u32 num_context_entries,
-                  struct be_cq_object *cq, struct be_mcc_object *mcc)
-{
-       int status = 0;
-
-       struct FWCMD_COMMON_MCC_CREATE *fwcmd = NULL;
-       struct MCC_WRB_AMAP *wrb = NULL;
-       u32 num_entries_encoded, n, i;
-       void *va = NULL;
-       unsigned long irql;
-
-       if (length < sizeof(struct MCC_WRB_AMAP) * 2) {
-               TRACE(DL_ERR, "Invalid MCC ring length:%d", length);
-               return BE_NOT_OK;
-       }
-       /*
-        * Reduce the actual ring size to be less than the number
-        * of context entries.  This ensures that we run out of
-        * ring WRBs first so the queuing works correctly.  We never
-        * queue based on context structs.
-        */
-       if (num_context_entries + 1 <
-                       length / sizeof(struct MCC_WRB_AMAP) - 1) {
-
-               u32 max_length =
-                   (num_context_entries + 2) * sizeof(struct MCC_WRB_AMAP);
-
-               if (is_power_of_2(max_length))
-                       length = __roundup_pow_of_two(max_length+1) / 2;
-               else
-                       length = __roundup_pow_of_two(max_length) / 2;
-
-               ASSERT(length <= max_length);
-
-               TRACE(DL_WARN,
-                       "MCC ring length reduced based on context entries."
-                       " length:%d wrbs:%d context_entries:%d", length,
-                       (int) (length / sizeof(struct MCC_WRB_AMAP)),
-                       num_context_entries);
-       }
-
-       spin_lock_irqsave(&pfob->post_lock, irql);
-
-       num_entries_encoded =
-           be_ring_length_to_encoding(length, sizeof(struct MCC_WRB_AMAP));
-
-       /* Init MCC object. */
-       memset(mcc, 0, sizeof(*mcc));
-       mcc->parent_function = pfob;
-       mcc->cq_object = cq;
-
-       INIT_LIST_HEAD(&mcc->backlog);
-
-       wrb = be_function_peek_mcc_wrb(pfob);
-       if (!wrb) {
-               ASSERT(wrb);
-               TRACE(DL_ERR, "No free MCC WRBs in create EQ.");
-               status = BE_STATUS_NO_MCC_WRB;
-               goto error;
-       }
-       /* Prepares an embedded fwcmd, including request/response sizes. */
-       fwcmd = BE_PREPARE_EMBEDDED_FWCMD(pfob, wrb, COMMON_MCC_CREATE);
-
-       fwcmd->params.request.num_pages = DIV_ROUND_UP(length, PAGE_SIZE);
-       /*
-        * Program MCC ring context
-        */
-       AMAP_SET_BITS_PTR(MCC_RING_CONTEXT, pdid,
-                       &fwcmd->params.request.context, 0);
-       AMAP_SET_BITS_PTR(MCC_RING_CONTEXT, invalid,
-                       &fwcmd->params.request.context, false);
-       AMAP_SET_BITS_PTR(MCC_RING_CONTEXT, ring_size,
-                       &fwcmd->params.request.context, num_entries_encoded);
-
-       n = cq->cq_id;
-       AMAP_SET_BITS_PTR(MCC_RING_CONTEXT,
-                               cq_id, &fwcmd->params.request.context, n);
-       be_rd_to_pa_list(rd, fwcmd->params.request.pages,
-                               ARRAY_SIZE(fwcmd->params.request.pages));
-       /* Post the f/w command */
-       status = be_function_post_mcc_wrb(pfob, wrb, NULL, NULL, NULL,
-                                               NULL, NULL, fwcmd, NULL);
-       if (status != BE_SUCCESS) {
-               TRACE(DL_ERR, "MCC to create CQ failed.");
-               goto error;
-       }
-       /*
-        * Create a linked list of context structures
-        */
-       mcc->wrb_context.base = context_array;
-       mcc->wrb_context.num = num_context_entries;
-       INIT_LIST_HEAD(&mcc->wrb_context.list_head);
-       memset(context_array, 0,
-                   sizeof(struct be_mcc_wrb_context) * num_context_entries);
-       for (i = 0; i < mcc->wrb_context.num; i++) {
-               list_add_tail(&context_array[i].next,
-                                       &mcc->wrb_context.list_head);
-       }
-
-       /*
-        *
-        * Create an mcc_ring for tracking WRB hw ring
-        */
-       va = rd->va;
-       ASSERT(va);
-       mp_ring_create(&mcc->sq.ring, length / sizeof(struct MCC_WRB_AMAP),
-                               sizeof(struct MCC_WRB_AMAP), va);
-       mcc->sq.ring.id = fwcmd->params.response.id;
-       /*
-        * Init a mcc_ring for tracking the MCC CQ.
-        */
-       ASSERT(cq->va);
-       mp_ring_create(&mcc->cq.ring, cq->num_entries,
-                      sizeof(struct MCC_CQ_ENTRY_AMAP), cq->va);
-       mcc->cq.ring.id = cq->cq_id;
-
-       /* Force zeroing of CQ. */
-       memset(cq->va, 0, cq->num_entries * sizeof(struct MCC_CQ_ENTRY_AMAP));
-
-       /* Initialize debug index. */
-       mcc->consumed_index = 0;
-
-       atomic_inc(&cq->ref_count);
-       pfob->mcc = mcc;
-
-       TRACE(DL_INFO, "MCC ring created. id:%d bytes:%d cq_id:%d cq_entries:%d"
-             " num_context:%d", mcc->sq.ring.id, length,
-             cq->cq_id, cq->num_entries, num_context_entries);
-
-error:
-       spin_unlock_irqrestore(&pfob->post_lock, irql);
-       if (pfob->pend_queue_driving && pfob->mcc) {
-               pfob->pend_queue_driving = 0;
-               be_drive_mcc_wrb_queue(pfob->mcc);
-       }
-       return status;
-}
-
-/*
-    This routine destroys an MCC send queue
-
-    MccObject         - Internal Mcc Object to be destroyed.
-
-    Returns BE_SUCCESS if successfull, otherwise an error code is returned.
-
-    IRQL < DISPATCH_LEVEL
-
-    The caller of this routine must ensure that no other WRB may be posted
-    until this routine returns.
-
-*/
-int be_mcc_ring_destroy(struct be_mcc_object *mcc)
-{
-       int status = 0;
-       struct be_function_object *pfob = mcc->parent_function;
-
-
-       ASSERT(mcc->processing == 0);
-
-       /*
-        * Remove the ring from the function object.
-        * This transitions back to mailbox mode.
-        */
-       pfob->mcc = NULL;
-
-       /* Send fwcmd to destroy the queue.  (Using the mailbox.) */
-       status = be_function_ring_destroy(mcc->parent_function, mcc->sq.ring.id,
-                            FWCMD_RING_TYPE_MCC, NULL, NULL, NULL, NULL);
-       ASSERT(status == 0);
-
-       /* Release the SQ reference to the CQ */
-       atomic_dec(&mcc->cq_object->ref_count);
-
-       return status;
-}
-
-static void
-mcc_wrb_sync_cb(void *context, int staus, struct MCC_WRB_AMAP *wrb)
-{
-       struct be_mcc_wrb_context *wrb_context =
-                               (struct be_mcc_wrb_context *) context;
-       ASSERT(wrb_context);
-       *wrb_context->users_final_status = staus;
-}
-
-/*
-    This routine posts a command to the MCC send queue
-
-    mcc       - Internal Mcc Object to be destroyed.
-
-    wrb             - wrb to post.
-
-    Returns BE_SUCCESS if successfull, otherwise an error code is returned.
-
-    IRQL < DISPATCH_LEVEL if CompletionCallback is not NULL
-    IRQL <=DISPATCH_LEVEL if CompletionCallback is  NULL
-
-    If this routine is called with CompletionCallback != NULL the
-    call is considered to be asynchronous and will return as soon
-    as the WRB is posted to the MCC with BE_PENDING.
-
-    If CompletionCallback is NULL, then this routine will not return until
-    a completion for this MCC command has been processed.
-    If called at DISPATCH_LEVEL the CompletionCallback must be NULL.
-
-    This routine should only be called if the MPU has been boostraped past
-    mailbox mode.
-
-
-*/
-int
-_be_mpu_post_wrb_ring(struct be_mcc_object *mcc, struct MCC_WRB_AMAP *wrb,
-                               struct be_mcc_wrb_context *wrb_context)
-{
-
-       struct MCC_WRB_AMAP *ring_wrb = NULL;
-       int status = BE_PENDING;
-       int final_status = BE_PENDING;
-       mcc_wrb_cqe_callback cb = NULL;
-       struct MCC_DB_AMAP mcc_db;
-       u32 embedded;
-
-       ASSERT(mp_ring_num_empty(&mcc->sq.ring) > 0);
-       /*
-        * Input wrb is most likely the next wrb in the ring, since the client
-        * can peek at the address.
-        */
-       ring_wrb = mp_ring_producer_ptr(&mcc->sq.ring);
-       if (wrb != ring_wrb) {
-               /* If not equal, copy it into the ring. */
-               memcpy(ring_wrb, wrb, sizeof(struct MCC_WRB_AMAP));
-       }
-#ifdef BE_DEBUG
-       wrb_context->ring_wrb = ring_wrb;
-#endif
-       embedded = AMAP_GET_BITS_PTR(MCC_WRB, embedded, ring_wrb);
-       if (embedded) {
-               /* embedded commands will have the response within the WRB. */
-               wrb_context->wrb = ring_wrb;
-       } else {
-               /*
-                * non-embedded commands will not have the response
-                * within the WRB, and they may complete out-of-order.
-                * The WRB will not be valid to inspect
-                * during the completion.
-                */
-               wrb_context->wrb = NULL;
-       }
-       cb = wrb_context->cb;
-
-       if (cb == NULL) {
-               /* Assign our internal callback if this is a
-                * synchronous call. */
-               wrb_context->cb = mcc_wrb_sync_cb;
-               wrb_context->cb_context = wrb_context;
-               wrb_context->users_final_status = &final_status;
-       }
-       /* Increment producer index */
-
-       mcc_db.dw[0] = 0;               /* initialize */
-       AMAP_SET_BITS_PTR(MCC_DB, rid, &mcc_db, mcc->sq.ring.id);
-       AMAP_SET_BITS_PTR(MCC_DB, numPosted, &mcc_db, 1);
-
-       mp_ring_produce(&mcc->sq.ring);
-       PD_WRITE(mcc->parent_function, mpu_mcc_db, mcc_db.dw[0]);
-       TRACE(DL_INFO, "pidx: %x and cidx: %x.", mcc->sq.ring.pidx,
-             mcc->sq.ring.cidx);
-
-       if (cb == NULL) {
-               int polls = 0;  /* At >= 1 us per poll   */
-               /* Wait until this command completes, polling the CQ. */
-               do {
-                       TRACE(DL_INFO, "FWCMD submitted in the poll mode.");
-                       /* Do not rearm CQ in this context. */
-                       be_mcc_process_cq(mcc, false);
-
-                       if (final_status == BE_PENDING) {
-                               if ((++polls & 0x7FFFF) == 0) {
-                                       TRACE(DL_WARN,
-                                             "Warning : polling MCC CQ for %d"
-                                             "ms.", polls / 1000);
-                               }
-
-                               udelay(1);
-                       }
-
-                       /* final_status changed when the command completes */
-               } while (final_status == BE_PENDING);
-
-               status = final_status;
-       }
-
-       return status;
-}
-
-struct MCC_WRB_AMAP *
-_be_mpu_peek_ring_wrb(struct be_mcc_object *mcc, bool driving_queue)
-{
-       /* If we have queued items, do not allow a post to bypass the queue. */
-       if (!driving_queue && !list_empty(&mcc->backlog))
-               return NULL;
-
-       if (mp_ring_num_empty(&mcc->sq.ring) <= 0)
-               return NULL;
-       return (struct MCC_WRB_AMAP *) mp_ring_producer_ptr(&mcc->sq.ring);
-}
-
-int
-be_mpu_init_mailbox(struct be_function_object *pfob, struct ring_desc *mailbox)
-{
-       ASSERT(mailbox);
-       pfob->mailbox.va = mailbox->va;
-       pfob->mailbox.pa =  cpu_to_le64(mailbox->pa);
-       pfob->mailbox.length = mailbox->length;
-
-       ASSERT(((u32)(size_t)pfob->mailbox.va & 0xf) == 0);
-       ASSERT(((u32)(size_t)pfob->mailbox.pa & 0xf) == 0);
-       /*
-        * Issue the WRB to set MPU endianness
-        */
-       {
-               u64 *endian_check = (u64 *) (pfob->mailbox.va +
-                               offsetof(struct BE_MCC_MAILBOX_AMAP, wrb)/8);
-               *endian_check = 0xFF1234FFFF5678FFULL;
-       }
-
-       be_mcc_mailbox_notify_and_wait(pfob);
-
-       return BE_SUCCESS;
-}
-
-
-/*
-    This routine posts a command to the MCC mailbox.
-
-    FuncObj         - Function Object to post the WRB on behalf of.
-    wrb             - wrb to post.
-    CompletionCallback  - Address of a callback routine to invoke once the WRB
-                               is completed.
-    CompletionCallbackContext - Opaque context to be passed during the call to
-                               the CompletionCallback.
-    Returns BE_SUCCESS if successfull, otherwise an error code is returned.
-
-    IRQL <=DISPATCH_LEVEL if CompletionCallback is  NULL
-
-    This routine will block until a completion for this MCC command has been
-    processed. If called at DISPATCH_LEVEL the CompletionCallback must be NULL.
-
-    This routine should only be called if the MPU has not been boostraped past
-    mailbox mode.
-*/
-int
-_be_mpu_post_wrb_mailbox(struct be_function_object *pfob,
-        struct MCC_WRB_AMAP *wrb, struct be_mcc_wrb_context *wrb_context)
-{
-       struct MCC_MAILBOX_AMAP *mailbox = NULL;
-       struct MCC_WRB_AMAP *mb_wrb;
-       struct MCC_CQ_ENTRY_AMAP *mb_cq;
-       u32 offset, status;
-
-       ASSERT(pfob->mcc == NULL);
-       mailbox = pfob->mailbox.va;
-       ASSERT(mailbox);
-
-       offset = offsetof(struct BE_MCC_MAILBOX_AMAP, wrb)/8;
-       mb_wrb = (struct MCC_WRB_AMAP *) (u8 *)mailbox + offset;
-       if (mb_wrb != wrb) {
-               memset(mailbox, 0, sizeof(*mailbox));
-               memcpy(mb_wrb, wrb, sizeof(struct MCC_WRB_AMAP));
-       }
-       /* The callback can inspect the final WRB to get output parameters. */
-       wrb_context->wrb = mb_wrb;
-
-       be_mcc_mailbox_notify_and_wait(pfob);
-
-       /* A command completed.  Use tag to determine which command. */
-       offset = offsetof(struct BE_MCC_MAILBOX_AMAP, cq)/8;
-       mb_cq = (struct MCC_CQ_ENTRY_AMAP *) ((u8 *)mailbox + offset);
-       be_mcc_process_cqe(pfob, mb_cq);
-
-       status = AMAP_GET_BITS_PTR(MCC_CQ_ENTRY, completion_status, mb_cq);
-       if (status)
-               status = BE_NOT_OK;
-       return status;
-}
-
-struct be_mcc_wrb_context *
-_be_mcc_allocate_wrb_context(struct be_function_object *pfob)
-{
-       struct be_mcc_wrb_context *context = NULL;
-       unsigned long irq;
-
-       spin_lock_irqsave(&pfob->mcc_context_lock, irq);
-
-       if (!pfob->mailbox.default_context_allocated) {
-               /* Use the single default context that we
-                * always have allocated. */
-               pfob->mailbox.default_context_allocated = true;
-               context = &pfob->mailbox.default_context;
-       } else if (pfob->mcc) {
-               /* Get a context from the free list. If any are available. */
-               if (!list_empty(&pfob->mcc->wrb_context.list_head)) {
-                       context = list_first_entry(
-                               &pfob->mcc->wrb_context.list_head,
-                                        struct be_mcc_wrb_context, next);
-               }
-       }
-
-       spin_unlock_irqrestore(&pfob->mcc_context_lock, irq);
-
-       return context;
-}
-
-void
-_be_mcc_free_wrb_context(struct be_function_object *pfob,
-                        struct be_mcc_wrb_context *context)
-{
-       unsigned long irq;
-
-       ASSERT(context);
-       /*
-        * Zero during free to try and catch any bugs where the context
-        * is accessed after a free.
-        */
-       memset(context, 0, sizeof(context));
-
-       spin_lock_irqsave(&pfob->mcc_context_lock, irq);
-
-       if (context == &pfob->mailbox.default_context) {
-               /* Free the default context. */
-               ASSERT(pfob->mailbox.default_context_allocated);
-               pfob->mailbox.default_context_allocated = false;
-       } else {
-               /* Add to free list. */
-               ASSERT(pfob->mcc);
-               list_add_tail(&context->next,
-                               &pfob->mcc->wrb_context.list_head);
-       }
-
-       spin_unlock_irqrestore(&pfob->mcc_context_lock, irq);
-}
-
-int
-be_mcc_add_async_event_callback(struct be_mcc_object *mcc_object,
-               mcc_async_event_callback cb, void *cb_context)
-{
-       /* Lock against anyone trying to change the callback/context pointers
-        * while being used. */
-       spin_lock_irqsave(&mcc_object->parent_function->cq_lock,
-               mcc_object->parent_function->cq_irq);
-
-       /* Assign the async callback. */
-       mcc_object->async_context = cb_context;
-       mcc_object->async_cb = cb;
-
-       spin_unlock_irqrestore(&mcc_object->parent_function->cq_lock,
-                                       mcc_object->parent_function->cq_irq);
-
-       return BE_SUCCESS;
-}
-
-#define MPU_EP_CONTROL 0
-#define MPU_EP_SEMAPHORE 0xac
-
-/*
- *-------------------------------------------------------------------
- * Function: be_wait_for_POST_complete
- *   Waits until the BladeEngine POST completes (either in error or success).
- * pfob -
- * return status   - BE_SUCCESS (0) on success. Negative error code on failure.
- *-------------------------------------------------------------------
- */
-static int be_wait_for_POST_complete(struct be_function_object *pfob)
-{
-       struct MGMT_HBA_POST_STATUS_STRUCT_AMAP status;
-       int s;
-       u32 post_error, post_stage;
-
-       const u32 us_per_loop = 1000;   /* 1000us */
-       const u32 print_frequency_loops = 1000000 / us_per_loop;
-       const u32 max_loops = 60 * print_frequency_loops;
-       u32 loops = 0;
-
-       /*
-        * Wait for arm fw indicating it is done or a fatal error happened.
-        * Note: POST can take some time to complete depending on configuration
-        * settings (consider ARM attempts to acquire an IP address
-        * over DHCP!!!).
-        *
-        */
-       do {
-               status.dw[0] = ioread32(pfob->csr_va + MPU_EP_SEMAPHORE);
-               post_error = AMAP_GET_BITS_PTR(MGMT_HBA_POST_STATUS_STRUCT,
-                                               error, &status);
-               post_stage = AMAP_GET_BITS_PTR(MGMT_HBA_POST_STATUS_STRUCT,
-                                               stage, &status);
-               if (0 == (loops % print_frequency_loops)) {
-                       /* Print current status */
-                       TRACE(DL_INFO, "POST status = 0x%x (stage = 0x%x)",
-                               status.dw[0], post_stage);
-               }
-               udelay(us_per_loop);
-       } while ((post_error != 1) &&
-                (post_stage != POST_STAGE_ARMFW_READY) &&
-                (++loops < max_loops));
-
-       if (post_error == 1) {
-               TRACE(DL_ERR, "POST error! Status = 0x%x (stage = 0x%x)",
-                     status.dw[0], post_stage);
-               s = BE_NOT_OK;
-       } else if (post_stage != POST_STAGE_ARMFW_READY) {
-               TRACE(DL_ERR, "POST time-out! Status = 0x%x (stage = 0x%x)",
-                     status.dw[0], post_stage);
-               s = BE_NOT_OK;
-       } else {
-               s = BE_SUCCESS;
-       }
-       return s;
-}
-
-/*
- *-------------------------------------------------------------------
- * Function: be_kickoff_and_wait_for_POST
- *   Interacts with the BladeEngine management processor to initiate POST, and
- *   subsequently waits until POST completes (either in error or success).
- *   The caller must acquire the reset semaphore before initiating POST
- *   to prevent multiple drivers interacting with the management processor.
- *   Once POST is complete the caller must release the reset semaphore.
- *   Callers who only want to wait for POST complete may call
- *   be_wait_for_POST_complete.
- * pfob -
- * return status   - BE_SUCCESS (0) on success. Negative error code on failure.
- *-------------------------------------------------------------------
- */
-static int
-be_kickoff_and_wait_for_POST(struct be_function_object *pfob)
-{
-       struct MGMT_HBA_POST_STATUS_STRUCT_AMAP status;
-       int s;
-
-       const u32 us_per_loop = 1000;   /* 1000us */
-       const u32 print_frequency_loops = 1000000 / us_per_loop;
-       const u32 max_loops = 5 * print_frequency_loops;
-       u32 loops = 0;
-       u32 post_error, post_stage;
-
-       /* Wait for arm fw awaiting host ready or a fatal error happened. */
-       TRACE(DL_INFO, "Wait for BladeEngine ready to POST");
-       do {
-               status.dw[0] = ioread32(pfob->csr_va + MPU_EP_SEMAPHORE);
-               post_error = AMAP_GET_BITS_PTR(MGMT_HBA_POST_STATUS_STRUCT,
-                                               error, &status);
-               post_stage = AMAP_GET_BITS_PTR(MGMT_HBA_POST_STATUS_STRUCT,
-                                               stage, &status);
-               if (0 == (loops % print_frequency_loops)) {
-                       /* Print current status */
-                       TRACE(DL_INFO, "POST status = 0x%x (stage = 0x%x)",
-                             status.dw[0], post_stage);
-               }
-               udelay(us_per_loop);
-       } while ((post_error != 1) &&
-                (post_stage < POST_STAGE_AWAITING_HOST_RDY) &&
-                (++loops < max_loops));
-
-       if (post_error == 1) {
-               TRACE(DL_ERR, "Pre-POST error! Status = 0x%x (stage = 0x%x)",
-                     status.dw[0], post_stage);
-               s = BE_NOT_OK;
-       } else if (post_stage == POST_STAGE_AWAITING_HOST_RDY) {
-               iowrite32(POST_STAGE_HOST_RDY, pfob->csr_va + MPU_EP_SEMAPHORE);
-
-               /* Wait for POST to complete */
-               s = be_wait_for_POST_complete(pfob);
-       } else {
-               /*
-                * Either a timeout waiting for host ready signal or POST has
-                * moved ahead without requiring a host ready signal.
-                * Might as well give POST a chance to complete
-                * (or timeout again).
-                */
-               s = be_wait_for_POST_complete(pfob);
-       }
-       return s;
-}
-
-/*
- *-------------------------------------------------------------------
- * Function: be_pci_soft_reset
- *   This function is called to issue a BladeEngine soft reset.
- *   Callers should acquire the soft reset semaphore before calling this
- *   function. Additionaly, callers should ensure they cannot be pre-empted
- *   while the routine executes. Upon completion of this routine, callers
- *   should release the reset semaphore. This routine implicitly waits
- *   for BladeEngine POST to complete.
- * pfob -
- * return status   - BE_SUCCESS (0) on success. Negative error code on failure.
- *-------------------------------------------------------------------
- */
-int be_pci_soft_reset(struct be_function_object *pfob)
-{
-       struct PCICFG_SOFT_RESET_CSR_AMAP soft_reset;
-       struct PCICFG_ONLINE0_CSR_AMAP pciOnline0;
-       struct PCICFG_ONLINE1_CSR_AMAP pciOnline1;
-       struct EP_CONTROL_CSR_AMAP epControlCsr;
-       int status = BE_SUCCESS;
-       u32 i, soft_reset_bit;
-
-       TRACE(DL_NOTE, "PCI reset...");
-
-       /* Issue soft reset #1 to get BladeEngine into a known state. */
-       soft_reset.dw[0] = PCICFG0_READ(pfob, soft_reset);
-       AMAP_SET_BITS_PTR(PCICFG_SOFT_RESET_CSR, softreset, soft_reset.dw, 1);
-       PCICFG0_WRITE(pfob, host_timer_int_ctrl, soft_reset.dw[0]);
-       /*
-        * wait til soft reset is deasserted - hardware
-        * deasserts after some time.
-        */
-       i = 0;
-       do {
-               udelay(50);
-               soft_reset.dw[0] = PCICFG0_READ(pfob, soft_reset);
-               soft_reset_bit = AMAP_GET_BITS_PTR(PCICFG_SOFT_RESET_CSR,
-                                       softreset, soft_reset.dw);
-       } while (soft_reset_bit  && (i++ < 1024));
-       if (soft_reset_bit != 0) {
-               TRACE(DL_ERR, "Soft-reset #1 did not deassert as expected.");
-               status = BE_NOT_OK;
-               goto Error_label;
-       }
-       /* Mask everything  */
-       PCICFG0_WRITE(pfob, ue_status_low_mask, 0xFFFFFFFF);
-       PCICFG0_WRITE(pfob, ue_status_hi_mask, 0xFFFFFFFF);
-       /*
-        * Set everything offline except MPU IRAM (it is offline with
-        * the soft-reset, but soft-reset does not reset the PCICFG registers!)
-        */
-       pciOnline0.dw[0] = 0;
-       pciOnline1.dw[0] = 0;
-       AMAP_SET_BITS_PTR(PCICFG_ONLINE1_CSR, mpu_iram_online,
-                               pciOnline1.dw, 1);
-       PCICFG0_WRITE(pfob, online0, pciOnline0.dw[0]);
-       PCICFG0_WRITE(pfob, online1, pciOnline1.dw[0]);
-
-       udelay(20000);
-
-       /* Issue soft reset #2. */
-       AMAP_SET_BITS_PTR(PCICFG_SOFT_RESET_CSR, softreset, soft_reset.dw, 1);
-       PCICFG0_WRITE(pfob, host_timer_int_ctrl, soft_reset.dw[0]);
-       /*
-        * wait til soft reset is deasserted - hardware
-        * deasserts after some time.
-        */
-       i = 0;
-       do {
-               udelay(50);
-               soft_reset.dw[0] = PCICFG0_READ(pfob, soft_reset);
-               soft_reset_bit = AMAP_GET_BITS_PTR(PCICFG_SOFT_RESET_CSR,
-                                       softreset, soft_reset.dw);
-       } while (soft_reset_bit  && (i++ < 1024));
-       if (soft_reset_bit != 0) {
-               TRACE(DL_ERR, "Soft-reset #1 did not deassert as expected.");
-               status = BE_NOT_OK;
-               goto Error_label;
-       }
-
-
-       udelay(20000);
-
-       /* Take MPU out of reset. */
-
-       epControlCsr.dw[0] = ioread32(pfob->csr_va + MPU_EP_CONTROL);
-       AMAP_SET_BITS_PTR(EP_CONTROL_CSR, CPU_reset, &epControlCsr, 0);
-       iowrite32((u32)epControlCsr.dw[0], pfob->csr_va + MPU_EP_CONTROL);
-
-       /* Kickoff BE POST and wait for completion */
-       status = be_kickoff_and_wait_for_POST(pfob);
-
-Error_label:
-       return status;
-}
-
-
-/*
- *-------------------------------------------------------------------
- * Function: be_pci_reset_required
- *   This private function is called to detect if a host entity is
- *   required to issue a PCI soft reset and subsequently drive
- *   BladeEngine POST. Scenarios where this is required:
- *   1) BIOS-less configuration
- *   2) Hot-swap/plug/power-on
- * pfob -
- * return   true if a reset is required, false otherwise
- *-------------------------------------------------------------------
- */
-static bool be_pci_reset_required(struct be_function_object *pfob)
-{
-       struct MGMT_HBA_POST_STATUS_STRUCT_AMAP status;
-       bool do_reset = false;
-       u32 post_error, post_stage;
-
-       /*
-        * Read the POST status register
-        */
-       status.dw[0] = ioread32(pfob->csr_va + MPU_EP_SEMAPHORE);
-       post_error = AMAP_GET_BITS_PTR(MGMT_HBA_POST_STATUS_STRUCT, error,
-                                                               &status);
-       post_stage = AMAP_GET_BITS_PTR(MGMT_HBA_POST_STATUS_STRUCT, stage,
-                                                               &status);
-       if (post_stage <= POST_STAGE_AWAITING_HOST_RDY) {
-               /*
-                * If BladeEngine is waiting for host ready indication,
-                * we want to do a PCI reset.
-                */
-               do_reset = true;
-       }
-
-       return do_reset;
-}
-
-/*
- *-------------------------------------------------------------------
- * Function: be_drive_POST
- *   This function is called to drive BladeEngine POST. The
- *   caller should ensure they cannot be pre-empted while this routine executes.
- * pfob -
- * return status   - BE_SUCCESS (0) on success. Negative error code on failure.
- *-------------------------------------------------------------------
- */
-int be_drive_POST(struct be_function_object *pfob)
-{
-       int status;
-
-       if (false != be_pci_reset_required(pfob)) {
-               /* PCI reset is needed (implicitly starts and waits for POST) */
-               status = be_pci_soft_reset(pfob);
-       } else {
-               /* No PCI reset is needed, start POST */
-               status = be_kickoff_and_wait_for_POST(pfob);
-       }
-
-       return status;
-}
diff --git a/drivers/staging/benet/mpu.h b/drivers/staging/benet/mpu.h
deleted file mode 100644 (file)
index 41f3f87..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-/*
- * Autogenerated by srcgen version: 0127
- */
-#ifndef __mpu_amap_h__
-#define __mpu_amap_h__
-#include "ep.h"
-
-/* Provide control parameters for the Managment Processor Unit. */
-struct BE_MPU_CSRMAP_AMAP {
-       struct BE_EP_CSRMAP_AMAP ep;
-       u8 rsvd0[128];  /* DWORD 64 */
-       u8 rsvd1[32];   /* DWORD 68 */
-       u8 rsvd2[192];  /* DWORD 69 */
-       u8 rsvd3[192];  /* DWORD 75 */
-       u8 rsvd4[32];   /* DWORD 81 */
-       u8 rsvd5[32];   /* DWORD 82 */
-       u8 rsvd6[32];   /* DWORD 83 */
-       u8 rsvd7[32];   /* DWORD 84 */
-       u8 rsvd8[32];   /* DWORD 85 */
-       u8 rsvd9[32];   /* DWORD 86 */
-       u8 rsvd10[32];  /* DWORD 87 */
-       u8 rsvd11[32];  /* DWORD 88 */
-       u8 rsvd12[32];  /* DWORD 89 */
-       u8 rsvd13[32];  /* DWORD 90 */
-       u8 rsvd14[32];  /* DWORD 91 */
-       u8 rsvd15[32];  /* DWORD 92 */
-       u8 rsvd16[32];  /* DWORD 93 */
-       u8 rsvd17[32];  /* DWORD 94 */
-       u8 rsvd18[32];  /* DWORD 95 */
-       u8 rsvd19[32];  /* DWORD 96 */
-       u8 rsvd20[32];  /* DWORD 97 */
-       u8 rsvd21[32];  /* DWORD 98 */
-       u8 rsvd22[32];  /* DWORD 99 */
-       u8 rsvd23[32];  /* DWORD 100 */
-       u8 rsvd24[32];  /* DWORD 101 */
-       u8 rsvd25[32];  /* DWORD 102 */
-       u8 rsvd26[32];  /* DWORD 103 */
-       u8 rsvd27[32];  /* DWORD 104 */
-       u8 rsvd28[96];  /* DWORD 105 */
-       u8 rsvd29[32];  /* DWORD 108 */
-       u8 rsvd30[32];  /* DWORD 109 */
-       u8 rsvd31[32];  /* DWORD 110 */
-       u8 rsvd32[32];  /* DWORD 111 */
-       u8 rsvd33[32];  /* DWORD 112 */
-       u8 rsvd34[96];  /* DWORD 113 */
-       u8 rsvd35[32];  /* DWORD 116 */
-       u8 rsvd36[32];  /* DWORD 117 */
-       u8 rsvd37[32];  /* DWORD 118 */
-       u8 rsvd38[32];  /* DWORD 119 */
-       u8 rsvd39[32];  /* DWORD 120 */
-       u8 rsvd40[32];  /* DWORD 121 */
-       u8 rsvd41[134][32];     /* DWORD 122 */
-} __packed;
-struct MPU_CSRMAP_AMAP {
-       u32 dw[256];
-};
-
-#endif /* __mpu_amap_h__ */
diff --git a/drivers/staging/benet/mpu_context.h b/drivers/staging/benet/mpu_context.h
deleted file mode 100644 (file)
index 8ce90f9..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-/*
- * Autogenerated by srcgen version: 0127
- */
-#ifndef __mpu_context_amap_h__
-#define __mpu_context_amap_h__
-
-/*
- * Management command and control ring context. The MPUs BTLR_CTRL1 CSR
- * controls the writeback behavior of the producer and consumer index values.
- */
-struct BE_MCC_RING_CONTEXT_AMAP {
-       u8 con_index[16];       /* DWORD 0 */
-       u8 ring_size[4];        /* DWORD 0 */
-       u8 cq_id[11];   /* DWORD 0 */
-       u8 rsvd0;               /* DWORD 0 */
-       u8 prod_index[16];      /* DWORD 1 */
-       u8 pdid[15];    /* DWORD 1 */
-       u8 invalid;             /* DWORD 1 */
-       u8 cmd_pending_current[7];      /* DWORD 2 */
-       u8 rsvd1[25];   /* DWORD 2 */
-       u8 hpi_port_cq_id[11];  /* DWORD 3 */
-       u8 rsvd2[5];    /* DWORD 3 */
-       u8 cmd_pending_max[7];  /* DWORD 3 */
-       u8 rsvd3[9];    /* DWORD 3 */
-} __packed;
-struct MCC_RING_CONTEXT_AMAP {
-       u32 dw[4];
-};
-
-#endif /* __mpu_context_amap_h__ */
diff --git a/drivers/staging/benet/pcicfg.h b/drivers/staging/benet/pcicfg.h
deleted file mode 100644 (file)
index 7c15684..0000000
+++ /dev/null
@@ -1,825 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-/*
- * Autogenerated by srcgen version: 0127
- */
-#ifndef __pcicfg_amap_h__
-#define __pcicfg_amap_h__
-
-/* Vendor and Device ID Register. */
-struct BE_PCICFG_ID_CSR_AMAP {
-       u8 vendorid[16];        /* DWORD 0 */
-       u8 deviceid[16];        /* DWORD 0 */
-} __packed;
-struct PCICFG_ID_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* IO Bar Register. */
-struct BE_PCICFG_IOBAR_CSR_AMAP {
-       u8 iospace;             /* DWORD 0 */
-       u8 rsvd0[7];    /* DWORD 0 */
-       u8 iobar[24];   /* DWORD 0 */
-} __packed;
-struct PCICFG_IOBAR_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* Memory BAR 0 Register. */
-struct BE_PCICFG_MEMBAR0_CSR_AMAP {
-       u8 memspace;    /* DWORD 0 */
-       u8 type[2];             /* DWORD 0 */
-       u8 pf;          /* DWORD 0 */
-       u8 rsvd0[10];   /* DWORD 0 */
-       u8 membar0[18]; /* DWORD 0 */
-} __packed;
-struct PCICFG_MEMBAR0_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* Memory BAR 1 - Low Address Register. */
-struct BE_PCICFG_MEMBAR1_LO_CSR_AMAP {
-       u8 memspace;    /* DWORD 0 */
-       u8 type[2];             /* DWORD 0 */
-       u8 pf;          /* DWORD 0 */
-       u8 rsvd0[13];   /* DWORD 0 */
-       u8 membar1lo[15];       /* DWORD 0 */
-} __packed;
-struct PCICFG_MEMBAR1_LO_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* Memory BAR 1 - High Address Register. */
-struct BE_PCICFG_MEMBAR1_HI_CSR_AMAP {
-       u8 membar1hi[32];       /* DWORD 0 */
-} __packed;
-struct PCICFG_MEMBAR1_HI_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* Memory BAR 2 - Low Address Register. */
-struct BE_PCICFG_MEMBAR2_LO_CSR_AMAP {
-       u8 memspace;    /* DWORD 0 */
-       u8 type[2];             /* DWORD 0 */
-       u8 pf;          /* DWORD 0 */
-       u8 rsvd0[17];   /* DWORD 0 */
-       u8 membar2lo[11];       /* DWORD 0 */
-} __packed;
-struct PCICFG_MEMBAR2_LO_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* Memory BAR 2 - High Address Register. */
-struct BE_PCICFG_MEMBAR2_HI_CSR_AMAP {
-       u8 membar2hi[32];       /* DWORD 0 */
-} __packed;
-struct PCICFG_MEMBAR2_HI_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* Subsystem Vendor and ID (Function 0) Register. */
-struct BE_PCICFG_SUBSYSTEM_ID_F0_CSR_AMAP {
-       u8 subsys_vendor_id[16];        /* DWORD 0 */
-       u8 subsys_id[16];       /* DWORD 0 */
-} __packed;
-struct PCICFG_SUBSYSTEM_ID_F0_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* Subsystem Vendor and ID (Function 1) Register. */
-struct BE_PCICFG_SUBSYSTEM_ID_F1_CSR_AMAP {
-       u8 subsys_vendor_id[16];        /* DWORD 0 */
-       u8 subsys_id[16];       /* DWORD 0 */
-} __packed;
-struct PCICFG_SUBSYSTEM_ID_F1_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* Semaphore Register. */
-struct BE_PCICFG_SEMAPHORE_CSR_AMAP {
-       u8 locked;              /* DWORD 0 */
-       u8 rsvd0[31];   /* DWORD 0 */
-} __packed;
-struct PCICFG_SEMAPHORE_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* Soft Reset Register. */
-struct BE_PCICFG_SOFT_RESET_CSR_AMAP {
-       u8 rsvd0[7];    /* DWORD 0 */
-       u8 softreset;   /* DWORD 0 */
-       u8 rsvd1[16];   /* DWORD 0 */
-       u8 nec_ll_rcvdetect_i[8];       /* DWORD 0 */
-} __packed;
-struct PCICFG_SOFT_RESET_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* Unrecoverable Error Status (Low) Register. Each bit corresponds to
- * an internal Unrecoverable Error.  These are set by hardware and may be
- * cleared by writing a one to the respective bit(s) to be cleared.  Any
- * bit being set that is also unmasked will result in Unrecoverable Error
- * interrupt notification to the host CPU and/or Server Management chip
- * and the transitioning of BladeEngine to an Offline state.
- */
-struct BE_PCICFG_UE_STATUS_LOW_CSR_AMAP {
-       u8 cev_ue_status;       /* DWORD 0 */
-       u8 ctx_ue_status;       /* DWORD 0 */
-       u8 dbuf_ue_status;      /* DWORD 0 */
-       u8 erx_ue_status;       /* DWORD 0 */
-       u8 host_ue_status;      /* DWORD 0 */
-       u8 mpu_ue_status;       /* DWORD 0 */
-       u8 ndma_ue_status;      /* DWORD 0 */
-       u8 ptc_ue_status;       /* DWORD 0 */
-       u8 rdma_ue_status;      /* DWORD 0 */
-       u8 rxf_ue_status;       /* DWORD 0 */
-       u8 rxips_ue_status;     /* DWORD 0 */
-       u8 rxulp0_ue_status;    /* DWORD 0 */
-       u8 rxulp1_ue_status;    /* DWORD 0 */
-       u8 rxulp2_ue_status;    /* DWORD 0 */
-       u8 tim_ue_status;       /* DWORD 0 */
-       u8 tpost_ue_status;     /* DWORD 0 */
-       u8 tpre_ue_status;      /* DWORD 0 */
-       u8 txips_ue_status;     /* DWORD 0 */
-       u8 txulp0_ue_status;    /* DWORD 0 */
-       u8 txulp1_ue_status;    /* DWORD 0 */
-       u8 uc_ue_status;        /* DWORD 0 */
-       u8 wdma_ue_status;      /* DWORD 0 */
-       u8 txulp2_ue_status;    /* DWORD 0 */
-       u8 host1_ue_status;     /* DWORD 0 */
-       u8 p0_ob_link_ue_status;        /* DWORD 0 */
-       u8 p1_ob_link_ue_status;        /* DWORD 0 */
-       u8 host_gpio_ue_status; /* DWORD 0 */
-       u8 mbox_netw_ue_status; /* DWORD 0 */
-       u8 mbox_stor_ue_status; /* DWORD 0 */
-       u8 axgmac0_ue_status;   /* DWORD 0 */
-       u8 axgmac1_ue_status;   /* DWORD 0 */
-       u8 mpu_intpend_ue_status;       /* DWORD 0 */
-} __packed;
-struct PCICFG_UE_STATUS_LOW_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* Unrecoverable Error Status (High) Register. Each bit corresponds to
- * an internal Unrecoverable Error.  These are set by hardware and may be
- * cleared by writing a one to the respective bit(s) to be cleared.  Any
- * bit being set that is also unmasked will result in Unrecoverable Error
- * interrupt notification to the host CPU and/or Server Management chip;
- * and the transitioning of BladeEngine to an Offline state.
- */
-struct BE_PCICFG_UE_STATUS_HI_CSR_AMAP {
-       u8 jtag_ue_status;      /* DWORD 0 */
-       u8 lpcmemhost_ue_status;        /* DWORD 0 */
-       u8 mgmt_mac_ue_status;  /* DWORD 0 */
-       u8 mpu_iram_ue_status;  /* DWORD 0 */
-       u8 pcs0online_ue_status;        /* DWORD 0 */
-       u8 pcs1online_ue_status;        /* DWORD 0 */
-       u8 pctl0_ue_status;     /* DWORD 0 */
-       u8 pctl1_ue_status;     /* DWORD 0 */
-       u8 pmem_ue_status;      /* DWORD 0 */
-       u8 rr_ue_status;        /* DWORD 0 */
-       u8 rxpp_ue_status;      /* DWORD 0 */
-       u8 txpb_ue_status;      /* DWORD 0 */
-       u8 txp_ue_status;       /* DWORD 0 */
-       u8 xaui_ue_status;      /* DWORD 0 */
-       u8 arm_ue_status;       /* DWORD 0 */
-       u8 ipc_ue_status;       /* DWORD 0 */
-       u8 rsvd0[16];   /* DWORD 0 */
-} __packed;
-struct PCICFG_UE_STATUS_HI_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* Unrecoverable Error Mask (Low) Register. Each bit, when set to one,
- * will mask the associated Unrecoverable  Error status bit from notification
- * of Unrecoverable Error to the host CPU and/or Server Managment chip and the
- * transitioning of all BladeEngine units to an Offline state.
- */
-struct BE_PCICFG_UE_STATUS_LOW_MASK_CSR_AMAP {
-       u8 cev_ue_mask; /* DWORD 0 */
-       u8 ctx_ue_mask; /* DWORD 0 */
-       u8 dbuf_ue_mask;        /* DWORD 0 */
-       u8 erx_ue_mask; /* DWORD 0 */
-       u8 host_ue_mask;        /* DWORD 0 */
-       u8 mpu_ue_mask; /* DWORD 0 */
-       u8 ndma_ue_mask;        /* DWORD 0 */
-       u8 ptc_ue_mask; /* DWORD 0 */
-       u8 rdma_ue_mask;        /* DWORD 0 */
-       u8 rxf_ue_mask; /* DWORD 0 */
-       u8 rxips_ue_mask;       /* DWORD 0 */
-       u8 rxulp0_ue_mask;      /* DWORD 0 */
-       u8 rxulp1_ue_mask;      /* DWORD 0 */
-       u8 rxulp2_ue_mask;      /* DWORD 0 */
-       u8 tim_ue_mask; /* DWORD 0 */
-       u8 tpost_ue_mask;       /* DWORD 0 */
-       u8 tpre_ue_mask;        /* DWORD 0 */
-       u8 txips_ue_mask;       /* DWORD 0 */
-       u8 txulp0_ue_mask;      /* DWORD 0 */
-       u8 txulp1_ue_mask;      /* DWORD 0 */
-       u8 uc_ue_mask;  /* DWORD 0 */
-       u8 wdma_ue_mask;        /* DWORD 0 */
-       u8 txulp2_ue_mask;      /* DWORD 0 */
-       u8 host1_ue_mask;       /* DWORD 0 */
-       u8 p0_ob_link_ue_mask;  /* DWORD 0 */
-       u8 p1_ob_link_ue_mask;  /* DWORD 0 */
-       u8 host_gpio_ue_mask;   /* DWORD 0 */
-       u8 mbox_netw_ue_mask;   /* DWORD 0 */
-       u8 mbox_stor_ue_mask;   /* DWORD 0 */
-       u8 axgmac0_ue_mask;     /* DWORD 0 */
-       u8 axgmac1_ue_mask;     /* DWORD 0 */
-       u8 mpu_intpend_ue_mask; /* DWORD 0 */
-} __packed;
-struct PCICFG_UE_STATUS_LOW_MASK_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* Unrecoverable Error Mask (High) Register. Each bit, when set to one,
- * will mask the associated Unrecoverable Error status bit from notification
- * of Unrecoverable Error to the host CPU and/or Server Managment chip and the
- * transitioning of all BladeEngine units to an Offline state.
- */
-struct BE_PCICFG_UE_STATUS_HI_MASK_CSR_AMAP {
-       u8 jtag_ue_mask;        /* DWORD 0 */
-       u8 lpcmemhost_ue_mask;  /* DWORD 0 */
-       u8 mgmt_mac_ue_mask;    /* DWORD 0 */
-       u8 mpu_iram_ue_mask;    /* DWORD 0 */
-       u8 pcs0online_ue_mask;  /* DWORD 0 */
-       u8 pcs1online_ue_mask;  /* DWORD 0 */
-       u8 pctl0_ue_mask;       /* DWORD 0 */
-       u8 pctl1_ue_mask;       /* DWORD 0 */
-       u8 pmem_ue_mask;        /* DWORD 0 */
-       u8 rr_ue_mask;  /* DWORD 0 */
-       u8 rxpp_ue_mask;        /* DWORD 0 */
-       u8 txpb_ue_mask;        /* DWORD 0 */
-       u8 txp_ue_mask; /* DWORD 0 */
-       u8 xaui_ue_mask;        /* DWORD 0 */
-       u8 arm_ue_mask; /* DWORD 0 */
-       u8 ipc_ue_mask; /* DWORD 0 */
-       u8 rsvd0[16];   /* DWORD 0 */
-} __packed;
-struct PCICFG_UE_STATUS_HI_MASK_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* Online Control Register 0. This register controls various units within
- * BladeEngine being in an Online or Offline state.
- */
-struct BE_PCICFG_ONLINE0_CSR_AMAP {
-       u8 cev_online;  /* DWORD 0 */
-       u8 ctx_online;  /* DWORD 0 */
-       u8 dbuf_online; /* DWORD 0 */
-       u8 erx_online;  /* DWORD 0 */
-       u8 host_online; /* DWORD 0 */
-       u8 mpu_online;  /* DWORD 0 */
-       u8 ndma_online; /* DWORD 0 */
-       u8 ptc_online;  /* DWORD 0 */
-       u8 rdma_online; /* DWORD 0 */
-       u8 rxf_online;  /* DWORD 0 */
-       u8 rxips_online;        /* DWORD 0 */
-       u8 rxulp0_online;       /* DWORD 0 */
-       u8 rxulp1_online;       /* DWORD 0 */
-       u8 rxulp2_online;       /* DWORD 0 */
-       u8 tim_online;  /* DWORD 0 */
-       u8 tpost_online;        /* DWORD 0 */
-       u8 tpre_online; /* DWORD 0 */
-       u8 txips_online;        /* DWORD 0 */
-       u8 txulp0_online;       /* DWORD 0 */
-       u8 txulp1_online;       /* DWORD 0 */
-       u8 uc_online;   /* DWORD 0 */
-       u8 wdma_online; /* DWORD 0 */
-       u8 txulp2_online;       /* DWORD 0 */
-       u8 host1_online;        /* DWORD 0 */
-       u8 p0_ob_link_online;   /* DWORD 0 */
-       u8 p1_ob_link_online;   /* DWORD 0 */
-       u8 host_gpio_online;    /* DWORD 0 */
-       u8 mbox_netw_online;    /* DWORD 0 */
-       u8 mbox_stor_online;    /* DWORD 0 */
-       u8 axgmac0_online;      /* DWORD 0 */
-       u8 axgmac1_online;      /* DWORD 0 */
-       u8 mpu_intpend_online;  /* DWORD 0 */
-} __packed;
-struct PCICFG_ONLINE0_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* Online Control Register 1. This register controls various units within
- * BladeEngine being in an Online or Offline state.
- */
-struct BE_PCICFG_ONLINE1_CSR_AMAP {
-       u8 jtag_online; /* DWORD 0 */
-       u8 lpcmemhost_online;   /* DWORD 0 */
-       u8 mgmt_mac_online;     /* DWORD 0 */
-       u8 mpu_iram_online;     /* DWORD 0 */
-       u8 pcs0online_online;   /* DWORD 0 */
-       u8 pcs1online_online;   /* DWORD 0 */
-       u8 pctl0_online;        /* DWORD 0 */
-       u8 pctl1_online;        /* DWORD 0 */
-       u8 pmem_online; /* DWORD 0 */
-       u8 rr_online;   /* DWORD 0 */
-       u8 rxpp_online; /* DWORD 0 */
-       u8 txpb_online; /* DWORD 0 */
-       u8 txp_online;  /* DWORD 0 */
-       u8 xaui_online; /* DWORD 0 */
-       u8 arm_online;  /* DWORD 0 */
-       u8 ipc_online;  /* DWORD 0 */
-       u8 rsvd0[16];   /* DWORD 0 */
-} __packed;
-struct PCICFG_ONLINE1_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* Host Timer Register. */
-struct BE_PCICFG_HOST_TIMER_INT_CTRL_CSR_AMAP {
-       u8 hosttimer[24];       /* DWORD 0 */
-       u8 hostintr;    /* DWORD 0 */
-       u8 rsvd0[7];    /* DWORD 0 */
-} __packed;
-struct PCICFG_HOST_TIMER_INT_CTRL_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* Scratchpad Register (for software use). */
-struct BE_PCICFG_SCRATCHPAD_CSR_AMAP {
-       u8 scratchpad[32];      /* DWORD 0 */
-} __packed;
-struct PCICFG_SCRATCHPAD_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* PCI Express Capabilities Register. */
-struct BE_PCICFG_PCIE_CAP_CSR_AMAP {
-       u8 capid[8];    /* DWORD 0 */
-       u8 nextcap[8];  /* DWORD 0 */
-       u8 capver[4];   /* DWORD 0 */
-       u8 devport[4];  /* DWORD 0 */
-       u8 rsvd0[6];    /* DWORD 0 */
-       u8 rsvd1[2];    /* DWORD 0 */
-} __packed;
-struct PCICFG_PCIE_CAP_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* PCI Express Device Capabilities Register. */
-struct BE_PCICFG_PCIE_DEVCAP_CSR_AMAP {
-       u8 payload[3];  /* DWORD 0 */
-       u8 rsvd0[3];    /* DWORD 0 */
-       u8 lo_lat[3];   /* DWORD 0 */
-       u8 l1_lat[3];   /* DWORD 0 */
-       u8 rsvd1[3];    /* DWORD 0 */
-       u8 rsvd2[3];    /* DWORD 0 */
-       u8 pwr_value[8];        /* DWORD 0 */
-       u8 pwr_scale[2];        /* DWORD 0 */
-       u8 rsvd3[4];    /* DWORD 0 */
-} __packed;
-struct PCICFG_PCIE_DEVCAP_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* PCI Express Device Control/Status Registers. */
-struct BE_PCICFG_PCIE_CONTROL_STATUS_CSR_AMAP {
-       u8 CorrErrReportEn;     /* DWORD 0 */
-       u8 NonFatalErrReportEn; /* DWORD 0 */
-       u8 FatalErrReportEn;    /* DWORD 0 */
-       u8 UnsuppReqReportEn;   /* DWORD 0 */
-       u8 EnableRelaxOrder;    /* DWORD 0 */
-       u8 Max_Payload_Size[3]; /* DWORD 0 */
-       u8 ExtendTagFieldEnable;        /* DWORD 0 */
-       u8 PhantomFnEnable;     /* DWORD 0 */
-       u8 AuxPwrPMEnable;      /* DWORD 0 */
-       u8 EnableNoSnoop;       /* DWORD 0 */
-       u8 Max_Read_Req_Size[3];        /* DWORD 0 */
-       u8 rsvd0;               /* DWORD 0 */
-       u8 CorrErrDetect;       /* DWORD 0 */
-       u8 NonFatalErrDetect;   /* DWORD 0 */
-       u8 FatalErrDetect;      /* DWORD 0 */
-       u8 UnsuppReqDetect;     /* DWORD 0 */
-       u8 AuxPwrDetect;        /* DWORD 0 */
-       u8 TransPending;        /* DWORD 0 */
-       u8 rsvd1[10];   /* DWORD 0 */
-} __packed;
-struct PCICFG_PCIE_CONTROL_STATUS_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* PCI Express Link Capabilities Register. */
-struct BE_PCICFG_PCIE_LINK_CAP_CSR_AMAP {
-       u8 MaxLinkSpeed[4];     /* DWORD 0 */
-       u8 MaxLinkWidth[6];     /* DWORD 0 */
-       u8 ASPMSupport[2];      /* DWORD 0 */
-       u8 L0sExitLat[3];       /* DWORD 0 */
-       u8 L1ExitLat[3];        /* DWORD 0 */
-       u8 rsvd0[6];    /* DWORD 0 */
-       u8 PortNum[8];  /* DWORD 0 */
-} __packed;
-struct PCICFG_PCIE_LINK_CAP_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* PCI Express Link Status Register. */
-struct BE_PCICFG_PCIE_LINK_STATUS_CSR_AMAP {
-       u8 ASPMCtl[2];  /* DWORD 0 */
-       u8 rsvd0;               /* DWORD 0 */
-       u8 ReadCmplBndry;       /* DWORD 0 */
-       u8 LinkDisable; /* DWORD 0 */
-       u8 RetrainLink; /* DWORD 0 */
-       u8 CommonClkConfig;     /* DWORD 0 */
-       u8 ExtendSync;  /* DWORD 0 */
-       u8 rsvd1[8];    /* DWORD 0 */
-       u8 LinkSpeed[4];        /* DWORD 0 */
-       u8 NegLinkWidth[6];     /* DWORD 0 */
-       u8 LinkTrainErr;        /* DWORD 0 */
-       u8 LinkTrain;   /* DWORD 0 */
-       u8 SlotClkConfig;       /* DWORD 0 */
-       u8 rsvd2[3];    /* DWORD 0 */
-} __packed;
-struct PCICFG_PCIE_LINK_STATUS_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* PCI Express MSI Configuration Register. */
-struct BE_PCICFG_MSI_CSR_AMAP {
-       u8 capid[8];    /* DWORD 0 */
-       u8 nextptr[8];  /* DWORD 0 */
-       u8 tablesize[11];       /* DWORD 0 */
-       u8 rsvd0[3];    /* DWORD 0 */
-       u8 funcmask;    /* DWORD 0 */
-       u8 en;          /* DWORD 0 */
-} __packed;
-struct PCICFG_MSI_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* MSI-X Table Offset Register. */
-struct BE_PCICFG_MSIX_TABLE_CSR_AMAP {
-       u8 tablebir[3]; /* DWORD 0 */
-       u8 offset[29];  /* DWORD 0 */
-} __packed;
-struct PCICFG_MSIX_TABLE_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* MSI-X PBA Offset Register. */
-struct BE_PCICFG_MSIX_PBA_CSR_AMAP {
-       u8 pbabir[3];   /* DWORD 0 */
-       u8 offset[29];  /* DWORD 0 */
-} __packed;
-struct PCICFG_MSIX_PBA_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* PCI Express MSI-X Message Vector Control Register. */
-struct BE_PCICFG_MSIX_VECTOR_CONTROL_CSR_AMAP {
-       u8 vector_control;      /* DWORD 0 */
-       u8 rsvd0[31];   /* DWORD 0 */
-} __packed;
-struct PCICFG_MSIX_VECTOR_CONTROL_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* PCI Express MSI-X Message Data Register. */
-struct BE_PCICFG_MSIX_MSG_DATA_CSR_AMAP {
-       u8 data[16];    /* DWORD 0 */
-       u8 rsvd0[16];   /* DWORD 0 */
-} __packed;
-struct PCICFG_MSIX_MSG_DATA_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* PCI Express MSI-X Message Address Register - High Part. */
-struct BE_PCICFG_MSIX_MSG_ADDR_HI_CSR_AMAP {
-       u8 addr[32];    /* DWORD 0 */
-} __packed;
-struct PCICFG_MSIX_MSG_ADDR_HI_CSR_AMAP {
-       u32 dw[1];
-};
-
-/* PCI Express MSI-X Message Address Register - Low Part. */
-struct BE_PCICFG_MSIX_MSG_ADDR_LO_CSR_AMAP {
-       u8 rsvd0[2];    /* DWORD 0 */
-       u8 addr[30];    /* DWORD 0 */
-} __packed;
-struct PCICFG_MSIX_MSG_ADDR_LO_CSR_AMAP {
-       u32 dw[1];
-};
-
-struct BE_PCICFG_ANON_18_RSVD_AMAP {
-       u8 rsvd0[32];   /* DWORD 0 */
-} __packed;
-struct PCICFG_ANON_18_RSVD_AMAP {
-       u32 dw[1];
-};
-
-struct BE_PCICFG_ANON_19_RSVD_AMAP {
-       u8 rsvd0[32];   /* DWORD 0 */
-} __packed;
-struct PCICFG_ANON_19_RSVD_AMAP {
-       u32 dw[1];
-};
-
-struct BE_PCICFG_ANON_20_RSVD_AMAP {
-       u8 rsvd0[32];   /* DWORD 0 */
-       u8 rsvd1[25][32];       /* DWORD 1 */
-} __packed;
-struct PCICFG_ANON_20_RSVD_AMAP {
-       u32 dw[26];
-};
-
-struct BE_PCICFG_ANON_21_RSVD_AMAP {
-       u8 rsvd0[32];   /* DWORD 0 */
-       u8 rsvd1[1919][32];     /* DWORD 1 */
-} __packed;
-struct PCICFG_ANON_21_RSVD_AMAP {
-       u32 dw[1920];
-};
-
-struct BE_PCICFG_ANON_22_MESSAGE_AMAP {
-       struct BE_PCICFG_MSIX_VECTOR_CONTROL_CSR_AMAP vec_ctrl;
-       struct BE_PCICFG_MSIX_MSG_DATA_CSR_AMAP msg_data;
-       struct BE_PCICFG_MSIX_MSG_ADDR_HI_CSR_AMAP addr_hi;
-       struct BE_PCICFG_MSIX_MSG_ADDR_LO_CSR_AMAP addr_low;
-} __packed;
-struct PCICFG_ANON_22_MESSAGE_AMAP {
-       u32 dw[4];
-};
-
-struct BE_PCICFG_ANON_23_RSVD_AMAP {
-       u8 rsvd0[32];   /* DWORD 0 */
-       u8 rsvd1[895][32];      /* DWORD 1 */
-} __packed;
-struct PCICFG_ANON_23_RSVD_AMAP {
-       u32 dw[896];
-};
-
-/* These PCI Configuration Space registers are for the Storage  Function of
- * BladeEngine (Function 0). In the memory map of the registers below their
- * table,
- */
-struct BE_PCICFG0_CSRMAP_AMAP {
-       struct BE_PCICFG_ID_CSR_AMAP id;
-       u8 rsvd0[32];   /* DWORD 1 */
-       u8 rsvd1[32];   /* DWORD 2 */
-       u8 rsvd2[32];   /* DWORD 3 */
-       struct BE_PCICFG_IOBAR_CSR_AMAP iobar;
-       struct BE_PCICFG_MEMBAR0_CSR_AMAP membar0;
-       struct BE_PCICFG_MEMBAR1_LO_CSR_AMAP membar1_lo;
-       struct BE_PCICFG_MEMBAR1_HI_CSR_AMAP membar1_hi;
-       struct BE_PCICFG_MEMBAR2_LO_CSR_AMAP membar2_lo;
-       struct BE_PCICFG_MEMBAR2_HI_CSR_AMAP membar2_hi;
-       u8 rsvd3[32];   /* DWORD 10 */
-       struct BE_PCICFG_SUBSYSTEM_ID_F0_CSR_AMAP subsystem_id;
-       u8 rsvd4[32];   /* DWORD 12 */
-       u8 rsvd5[32];   /* DWORD 13 */
-       u8 rsvd6[32];   /* DWORD 14 */
-       u8 rsvd7[32];   /* DWORD 15 */
-       struct BE_PCICFG_SEMAPHORE_CSR_AMAP semaphore[4];
-       struct BE_PCICFG_SOFT_RESET_CSR_AMAP soft_reset;
-       u8 rsvd8[32];   /* DWORD 21 */
-       struct BE_PCICFG_SCRATCHPAD_CSR_AMAP scratchpad;
-       u8 rsvd9[32];   /* DWORD 23 */
-       u8 rsvd10[32];  /* DWORD 24 */
-       u8 rsvd11[32];  /* DWORD 25 */
-       u8 rsvd12[32];  /* DWORD 26 */
-       u8 rsvd13[32];  /* DWORD 27 */
-       u8 rsvd14[2][32];       /* DWORD 28 */
-       u8 rsvd15[32];  /* DWORD 30 */
-       u8 rsvd16[32];  /* DWORD 31 */
-       u8 rsvd17[8][32];       /* DWORD 32 */
-       struct BE_PCICFG_UE_STATUS_LOW_CSR_AMAP ue_status_low;
-       struct BE_PCICFG_UE_STATUS_HI_CSR_AMAP ue_status_hi;
-       struct BE_PCICFG_UE_STATUS_LOW_MASK_CSR_AMAP ue_status_low_mask;
-       struct BE_PCICFG_UE_STATUS_HI_MASK_CSR_AMAP ue_status_hi_mask;
-       struct BE_PCICFG_ONLINE0_CSR_AMAP online0;
-       struct BE_PCICFG_ONLINE1_CSR_AMAP online1;
-       u8 rsvd18[32];  /* DWORD 46 */
-       u8 rsvd19[32];  /* DWORD 47 */
-       u8 rsvd20[32];  /* DWORD 48 */
-       u8 rsvd21[32];  /* DWORD 49 */
-       struct BE_PCICFG_HOST_TIMER_INT_CTRL_CSR_AMAP host_timer_int_ctrl;
-       u8 rsvd22[32];  /* DWORD 51 */
-       struct BE_PCICFG_PCIE_CAP_CSR_AMAP pcie_cap;
-       struct BE_PCICFG_PCIE_DEVCAP_CSR_AMAP pcie_devcap;
-       struct BE_PCICFG_PCIE_CONTROL_STATUS_CSR_AMAP pcie_control_status;
-       struct BE_PCICFG_PCIE_LINK_CAP_CSR_AMAP pcie_link_cap;
-       struct BE_PCICFG_PCIE_LINK_STATUS_CSR_AMAP pcie_link_status;
-       struct BE_PCICFG_MSI_CSR_AMAP msi;
-       struct BE_PCICFG_MSIX_TABLE_CSR_AMAP msix_table_offset;
-       struct BE_PCICFG_MSIX_PBA_CSR_AMAP msix_pba_offset;
-       u8 rsvd23[32];  /* DWORD 60 */
-       u8 rsvd24[32];  /* DWORD 61 */
-       u8 rsvd25[32];  /* DWORD 62 */
-       u8 rsvd26[32];  /* DWORD 63 */
-       u8 rsvd27[32];  /* DWORD 64 */
-       u8 rsvd28[32];  /* DWORD 65 */
-       u8 rsvd29[32];  /* DWORD 66 */
-       u8 rsvd30[32];  /* DWORD 67 */
-       u8 rsvd31[32];  /* DWORD 68 */
-       u8 rsvd32[32];  /* DWORD 69 */
-       u8 rsvd33[32];  /* DWORD 70 */
-       u8 rsvd34[32];  /* DWORD 71 */
-       u8 rsvd35[32];  /* DWORD 72 */
-       u8 rsvd36[32];  /* DWORD 73 */
-       u8 rsvd37[32];  /* DWORD 74 */
-       u8 rsvd38[32];  /* DWORD 75 */
-       u8 rsvd39[32];  /* DWORD 76 */
-       u8 rsvd40[32];  /* DWORD 77 */
-       u8 rsvd41[32];  /* DWORD 78 */
-       u8 rsvd42[32];  /* DWORD 79 */
-       u8 rsvd43[32];  /* DWORD 80 */
-       u8 rsvd44[32];  /* DWORD 81 */
-       u8 rsvd45[32];  /* DWORD 82 */
-       u8 rsvd46[32];  /* DWORD 83 */
-       u8 rsvd47[32];  /* DWORD 84 */
-       u8 rsvd48[32];  /* DWORD 85 */
-       u8 rsvd49[32];  /* DWORD 86 */
-       u8 rsvd50[32];  /* DWORD 87 */
-       u8 rsvd51[32];  /* DWORD 88 */
-       u8 rsvd52[32];  /* DWORD 89 */
-       u8 rsvd53[32];  /* DWORD 90 */
-       u8 rsvd54[32];  /* DWORD 91 */
-       u8 rsvd55[32];  /* DWORD 92 */
-       u8 rsvd56[832]; /* DWORD 93 */
-       u8 rsvd57[32];  /* DWORD 119 */
-       u8 rsvd58[32];  /* DWORD 120 */
-       u8 rsvd59[32];  /* DWORD 121 */
-       u8 rsvd60[32];  /* DWORD 122 */
-       u8 rsvd61[32];  /* DWORD 123 */
-       u8 rsvd62[32];  /* DWORD 124 */
-       u8 rsvd63[32];  /* DWORD 125 */
-       u8 rsvd64[32];  /* DWORD 126 */
-       u8 rsvd65[32];  /* DWORD 127 */
-       u8 rsvd66[61440];       /* DWORD 128 */
-       struct BE_PCICFG_ANON_22_MESSAGE_AMAP message[32];
-       u8 rsvd67[28672];       /* DWORD 2176 */
-       u8 rsvd68[32];  /* DWORD 3072 */
-       u8 rsvd69[1023][32];    /* DWORD 3073 */
-} __packed;
-struct PCICFG0_CSRMAP_AMAP {
-       u32 dw[4096];
-};
-
-struct BE_PCICFG_ANON_24_RSVD_AMAP {
-       u8 rsvd0[32];   /* DWORD 0 */
-} __packed;
-struct PCICFG_ANON_24_RSVD_AMAP {
-       u32 dw[1];
-};
-
-struct BE_PCICFG_ANON_25_RSVD_AMAP {
-       u8 rsvd0[32];   /* DWORD 0 */
-} __packed;
-struct PCICFG_ANON_25_RSVD_AMAP {
-       u32 dw[1];
-};
-
-struct BE_PCICFG_ANON_26_RSVD_AMAP {
-       u8 rsvd0[32];   /* DWORD 0 */
-} __packed;
-struct PCICFG_ANON_26_RSVD_AMAP {
-       u32 dw[1];
-};
-
-struct BE_PCICFG_ANON_27_RSVD_AMAP {
-       u8 rsvd0[32];   /* DWORD 0 */
-       u8 rsvd1[32];   /* DWORD 1 */
-} __packed;
-struct PCICFG_ANON_27_RSVD_AMAP {
-       u32 dw[2];
-};
-
-struct BE_PCICFG_ANON_28_RSVD_AMAP {
-       u8 rsvd0[32];   /* DWORD 0 */
-       u8 rsvd1[3][32];        /* DWORD 1 */
-} __packed;
-struct PCICFG_ANON_28_RSVD_AMAP {
-       u32 dw[4];
-};
-
-struct BE_PCICFG_ANON_29_RSVD_AMAP {
-       u8 rsvd0[32];   /* DWORD 0 */
-       u8 rsvd1[36][32];       /* DWORD 1 */
-} __packed;
-struct PCICFG_ANON_29_RSVD_AMAP {
-       u32 dw[37];
-};
-
-struct BE_PCICFG_ANON_30_RSVD_AMAP {
-       u8 rsvd0[32];   /* DWORD 0 */
-       u8 rsvd1[1930][32];     /* DWORD 1 */
-} __packed;
-struct PCICFG_ANON_30_RSVD_AMAP {
-       u32 dw[1931];
-};
-
-struct BE_PCICFG_ANON_31_MESSAGE_AMAP {
-       struct BE_PCICFG_MSIX_VECTOR_CONTROL_CSR_AMAP vec_ctrl;
-       struct BE_PCICFG_MSIX_MSG_DATA_CSR_AMAP msg_data;
-       struct BE_PCICFG_MSIX_MSG_ADDR_HI_CSR_AMAP addr_hi;
-       struct BE_PCICFG_MSIX_MSG_ADDR_LO_CSR_AMAP addr_low;
-} __packed;
-struct PCICFG_ANON_31_MESSAGE_AMAP {
-       u32 dw[4];
-};
-
-struct BE_PCICFG_ANON_32_RSVD_AMAP {
-       u8 rsvd0[32];   /* DWORD 0 */
-       u8 rsvd1[895][32];      /* DWORD 1 */
-} __packed;
-struct PCICFG_ANON_32_RSVD_AMAP {
-       u32 dw[896];
-};
-
-/* This PCI configuration space register map is for the  Networking Function of
- * BladeEngine (Function 1).
- */
-struct BE_PCICFG1_CSRMAP_AMAP {
-       struct BE_PCICFG_ID_CSR_AMAP id;
-       u8 rsvd0[32];   /* DWORD 1 */
-       u8 rsvd1[32];   /* DWORD 2 */
-       u8 rsvd2[32];   /* DWORD 3 */
-       struct BE_PCICFG_IOBAR_CSR_AMAP iobar;
-       struct BE_PCICFG_MEMBAR0_CSR_AMAP membar0;
-       struct BE_PCICFG_MEMBAR1_LO_CSR_AMAP membar1_lo;
-       struct BE_PCICFG_MEMBAR1_HI_CSR_AMAP membar1_hi;
-       struct BE_PCICFG_MEMBAR2_LO_CSR_AMAP membar2_lo;
-       struct BE_PCICFG_MEMBAR2_HI_CSR_AMAP membar2_hi;
-       u8 rsvd3[32];   /* DWORD 10 */
-       struct BE_PCICFG_SUBSYSTEM_ID_F1_CSR_AMAP subsystem_id;
-       u8 rsvd4[32];   /* DWORD 12 */
-       u8 rsvd5[32];   /* DWORD 13 */
-       u8 rsvd6[32];   /* DWORD 14 */
-       u8 rsvd7[32];   /* DWORD 15 */
-       struct BE_PCICFG_SEMAPHORE_CSR_AMAP semaphore[4];
-       struct BE_PCICFG_SOFT_RESET_CSR_AMAP soft_reset;
-       u8 rsvd8[32];   /* DWORD 21 */
-       struct BE_PCICFG_SCRATCHPAD_CSR_AMAP scratchpad;
-       u8 rsvd9[32];   /* DWORD 23 */
-       u8 rsvd10[32];  /* DWORD 24 */
-       u8 rsvd11[32];  /* DWORD 25 */
-       u8 rsvd12[32];  /* DWORD 26 */
-       u8 rsvd13[32];  /* DWORD 27 */
-       u8 rsvd14[2][32];       /* DWORD 28 */
-       u8 rsvd15[32];  /* DWORD 30 */
-       u8 rsvd16[32];  /* DWORD 31 */
-       u8 rsvd17[8][32];       /* DWORD 32 */
-       struct BE_PCICFG_UE_STATUS_LOW_CSR_AMAP ue_status_low;
-       struct BE_PCICFG_UE_STATUS_HI_CSR_AMAP ue_status_hi;
-       struct BE_PCICFG_UE_STATUS_LOW_MASK_CSR_AMAP ue_status_low_mask;
-       struct BE_PCICFG_UE_STATUS_HI_MASK_CSR_AMAP ue_status_hi_mask;
-       struct BE_PCICFG_ONLINE0_CSR_AMAP online0;
-       struct BE_PCICFG_ONLINE1_CSR_AMAP online1;
-       u8 rsvd18[32];  /* DWORD 46 */
-       u8 rsvd19[32];  /* DWORD 47 */
-       u8 rsvd20[32];  /* DWORD 48 */
-       u8 rsvd21[32];  /* DWORD 49 */
-       struct BE_PCICFG_HOST_TIMER_INT_CTRL_CSR_AMAP host_timer_int_ctrl;
-       u8 rsvd22[32];  /* DWORD 51 */
-       struct BE_PCICFG_PCIE_CAP_CSR_AMAP pcie_cap;
-       struct BE_PCICFG_PCIE_DEVCAP_CSR_AMAP pcie_devcap;
-       struct BE_PCICFG_PCIE_CONTROL_STATUS_CSR_AMAP pcie_control_status;
-       struct BE_PCICFG_PCIE_LINK_CAP_CSR_AMAP pcie_link_cap;
-       struct BE_PCICFG_PCIE_LINK_STATUS_CSR_AMAP pcie_link_status;
-       struct BE_PCICFG_MSI_CSR_AMAP msi;
-       struct BE_PCICFG_MSIX_TABLE_CSR_AMAP msix_table_offset;
-       struct BE_PCICFG_MSIX_PBA_CSR_AMAP msix_pba_offset;
-       u8 rsvd23[64];  /* DWORD 60 */
-       u8 rsvd24[32];  /* DWORD 62 */
-       u8 rsvd25[32];  /* DWORD 63 */
-       u8 rsvd26[32];  /* DWORD 64 */
-       u8 rsvd27[32];  /* DWORD 65 */
-       u8 rsvd28[32];  /* DWORD 66 */
-       u8 rsvd29[32];  /* DWORD 67 */
-       u8 rsvd30[32];  /* DWORD 68 */
-       u8 rsvd31[32];  /* DWORD 69 */
-       u8 rsvd32[32];  /* DWORD 70 */
-       u8 rsvd33[32];  /* DWORD 71 */
-       u8 rsvd34[32];  /* DWORD 72 */
-       u8 rsvd35[32];  /* DWORD 73 */
-       u8 rsvd36[32];  /* DWORD 74 */
-       u8 rsvd37[128]; /* DWORD 75 */
-       u8 rsvd38[32];  /* DWORD 79 */
-       u8 rsvd39[1184];        /* DWORD 80 */
-       u8 rsvd40[61792];       /* DWORD 117 */
-       struct BE_PCICFG_ANON_31_MESSAGE_AMAP message[32];
-       u8 rsvd41[28672];       /* DWORD 2176 */
-       u8 rsvd42[32];  /* DWORD 3072 */
-       u8 rsvd43[1023][32];    /* DWORD 3073 */
-} __packed;
-struct PCICFG1_CSRMAP_AMAP {
-       u32 dw[4096];
-};
-
-#endif /* __pcicfg_amap_h__ */
diff --git a/drivers/staging/benet/post_codes.h b/drivers/staging/benet/post_codes.h
deleted file mode 100644 (file)
index 6d1621f..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-/*
- * Autogenerated by srcgen version: 0127
- */
-#ifndef __post_codes_amap_h__
-#define __post_codes_amap_h__
-
-/* --- MGMT_HBA_POST_STAGE_ENUM --- */
-#define POST_STAGE_POWER_ON_RESET   (0)        /* State after a cold or warm boot. */
-#define POST_STAGE_AWAITING_HOST_RDY (1)       /* ARM boot code awaiting a
-                                               go-ahed from  the host. */
-#define POST_STAGE_HOST_RDY (2)        /* Host has given go-ahed to ARM. */
-#define POST_STAGE_BE_RESET (3)        /* Host wants to reset chip, this is a  chip
-                                               workaround  */
-#define POST_STAGE_SEEPROM_CS_START (256)      /* SEEPROM checksum
-                                               test start. */
-#define POST_STAGE_SEEPROM_CS_DONE  (257)      /* SEEPROM checksum test
-                                                       done. */
-#define POST_STAGE_DDR_CONFIG_START (512)      /* DDR configuration start. */
-#define POST_STAGE_DDR_CONFIG_DONE  (513)      /* DDR configuration done. */
-#define POST_STAGE_DDR_CALIBRATE_START  (768)  /* DDR calibration start. */
-#define POST_STAGE_DDR_CALIBRATE_DONE   (769)  /* DDR calibration done. */
-#define POST_STAGE_DDR_TEST_START   (1024)     /* DDR memory test start. */
-#define POST_STAGE_DDR_TEST_DONE    (1025)     /* DDR memory test done. */
-#define POST_STAGE_REDBOOT_INIT_START   (1536) /* Redboot starts execution. */
-#define POST_STAGE_REDBOOT_INIT_DONE (1537)    /* Redboot done execution. */
-#define POST_STAGE_FW_IMAGE_LOAD_START (1792)  /* Firmware image load to
-                                                       DDR start. */
-#define POST_STAGE_FW_IMAGE_LOAD_DONE   (1793) /* Firmware image load
-                                                       to DDR done. */
-#define POST_STAGE_ARMFW_START          (2048) /* ARMfw runtime code
-                                               starts execution. */
-#define POST_STAGE_DHCP_QUERY_START     (2304) /* DHCP server query start. */
-#define POST_STAGE_DHCP_QUERY_DONE      (2305) /* DHCP server query done. */
-#define POST_STAGE_BOOT_TARGET_DISCOVERY_START (2560)  /* Boot Target
-                                               Discovery Start. */
-#define POST_STAGE_BOOT_TARGET_DISCOVERY_DONE (2561)   /* Boot Target
-                                               Discovery Done. */
-#define POST_STAGE_RC_OPTION_SET        (2816) /* Remote configuration
-                                               option is set in  SEEPROM  */
-#define POST_STAGE_SWITCH_LINK          (2817) /* Wait for link up on switch */
-#define POST_STAGE_SEND_ICDS_MESSAGE    (2818) /* Send the ICDS message
-                                               to switch */
-#define POST_STAGE_PERFROM_TFTP         (2819) /* Download xml using TFTP */
-#define POST_STAGE_PARSE_XML            (2820) /* Parse XML file */
-#define POST_STAGE_DOWNLOAD_IMAGE       (2821) /* Download IMAGE from
-                                               TFTP server */
-#define POST_STAGE_FLASH_IMAGE          (2822) /* Flash the IMAGE */
-#define POST_STAGE_RC_DONE              (2823) /* Remote configuration
-                                               complete */
-#define POST_STAGE_REBOOT_SYSTEM        (2824) /* Upgrade IMAGE done,
-                                               reboot required */
-#define POST_STAGE_MAC_ADDRESS          (3072) /* MAC Address Check */
-#define POST_STAGE_ARMFW_READY          (49152)        /* ARMfw is done with POST
-                                               and ready. */
-#define POST_STAGE_ARMFW_UE             (61440)        /* ARMfw has asserted an
-                                               unrecoverable error. The
-                                               lower 3 hex digits of the
-                                               stage code identify the
-                                               unique error code.
-                                               */
-
-/* This structure defines the format of the MPU semaphore
- * register when used for POST.
- */
-struct BE_MGMT_HBA_POST_STATUS_STRUCT_AMAP {
-       u8 stage[16];   /* DWORD 0 */
-       u8 rsvd0[10];   /* DWORD 0 */
-       u8 iscsi_driver_loaded; /* DWORD 0 */
-       u8 option_rom_installed;        /* DWORD 0 */
-       u8 iscsi_ip_conflict;   /* DWORD 0 */
-       u8 iscsi_no_ip; /* DWORD 0 */
-       u8 backup_fw;   /* DWORD 0 */
-       u8 error;               /* DWORD 0 */
-} __packed;
-struct MGMT_HBA_POST_STATUS_STRUCT_AMAP {
-       u32 dw[1];
-};
-
-/* --- MGMT_HBA_POST_DUMMY_BITS_ENUM --- */
-#define POST_BIT_ISCSI_LOADED           (26)
-#define POST_BIT_OPTROM_INST            (27)
-#define POST_BIT_BAD_IP_ADDR            (28)
-#define POST_BIT_NO_IP_ADDR             (29)
-#define POST_BIT_BACKUP_FW              (30)
-#define POST_BIT_ERROR                  (31)
-
-/* --- MGMT_HBA_POST_DUMMY_VALUES_ENUM --- */
-#define POST_ISCSI_DRIVER_LOADED        (67108864)
-#define POST_OPTROM_INSTALLED           (134217728)
-#define POST_ISCSI_IP_ADDRESS_CONFLICT  (268435456)
-#define POST_ISCSI_NO_IP_ADDRESS        (536870912)
-#define POST_BACKUP_FW_LOADED           (1073741824)
-#define POST_FATAL_ERROR                (2147483648)
-
-#endif /* __post_codes_amap_h__ */
diff --git a/drivers/staging/benet/regmap.h b/drivers/staging/benet/regmap.h
deleted file mode 100644 (file)
index e816ba2..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2005 - 2008 ServerEngines
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.  The full GNU General
- * Public License is included in this distribution in the file called COPYING.
- *
- * Contact Information:
- * linux-drivers@serverengines.com
- *
- * ServerEngines
- * 209 N. Fair Oaks Ave
- * Sunnyvale, CA 94085
- */
-/*
- * Autogenerated by srcgen version: 0127
- */
-#ifndef __regmap_amap_h__
-#define __regmap_amap_h__
-#include "pcicfg.h"
-#include "ep.h"
-#include "cev.h"
-#include "mpu.h"
-#include "doorbells.h"
-
-/*
- * This is the control and status register map for BladeEngine, showing
- * the relative size and offset of each sub-module. The CSR registers
- * are identical for the network and storage PCI functions. The
- * CSR map is shown below, followed by details of each block,
- * in sub-sections.  The sub-sections begin with a description
- * of CSRs that are instantiated in multiple blocks.
- */
-struct BE_BLADE_ENGINE_CSRMAP_AMAP {
-       struct BE_MPU_CSRMAP_AMAP mpu;
-       u8 rsvd0[8192]; /* DWORD 256 */
-       u8 rsvd1[8192]; /* DWORD 512 */
-       struct BE_CEV_CSRMAP_AMAP cev;
-       u8 rsvd2[8192]; /* DWORD 1024 */
-       u8 rsvd3[8192]; /* DWORD 1280 */
-       u8 rsvd4[8192]; /* DWORD 1536 */
-       u8 rsvd5[8192]; /* DWORD 1792 */
-       u8 rsvd6[8192]; /* DWORD 2048 */
-       u8 rsvd7[8192]; /* DWORD 2304 */
-       u8 rsvd8[8192]; /* DWORD 2560 */
-       u8 rsvd9[8192]; /* DWORD 2816 */
-       u8 rsvd10[8192];        /* DWORD 3072 */
-       u8 rsvd11[8192];        /* DWORD 3328 */
-       u8 rsvd12[8192];        /* DWORD 3584 */
-       u8 rsvd13[8192];        /* DWORD 3840 */
-       u8 rsvd14[8192];        /* DWORD 4096 */
-       u8 rsvd15[8192];        /* DWORD 4352 */
-       u8 rsvd16[8192];        /* DWORD 4608 */
-       u8 rsvd17[8192];        /* DWORD 4864 */
-       u8 rsvd18[8192];        /* DWORD 5120 */
-       u8 rsvd19[8192];        /* DWORD 5376 */
-       u8 rsvd20[8192];        /* DWORD 5632 */
-       u8 rsvd21[8192];        /* DWORD 5888 */
-       u8 rsvd22[8192];        /* DWORD 6144 */
-       u8 rsvd23[17152][32];   /* DWORD 6400 */
-} __packed;
-struct BLADE_ENGINE_CSRMAP_AMAP {
-       u32 dw[23552];
-};
-
-#endif /* __regmap_amap_h__ */
index 5ed4ae0..6789089 100644 (file)
@@ -485,7 +485,7 @@ static int cxacru_cm(struct cxacru_data *instance, enum cxacru_cm_request cm,
                        usb_err(instance->usbatm, "requested transfer size too large (%d, %d)\n",
                                wbuflen, rbuflen);
                ret = -ENOMEM;
-               goto fail;
+               goto err;
        }
 
        mutex_lock(&instance->cm_serialize);
@@ -565,6 +565,7 @@ static int cxacru_cm(struct cxacru_data *instance, enum cxacru_cm_request cm,
        dbg("cm %#x", cm);
 fail:
        mutex_unlock(&instance->cm_serialize);
+err:
        return ret;
 }
 
index 0f5c05f..c40a9b2 100644 (file)
@@ -50,6 +50,7 @@
 
 static struct usb_device_id usbtmc_devices[] = {
        { USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 0), },
+       { USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 1), },
        { 0, } /* terminating entry */
 };
 MODULE_DEVICE_TABLE(usb, usbtmc_devices);
@@ -106,12 +107,13 @@ static int usbtmc_open(struct inode *inode, struct file *filp)
 {
        struct usb_interface *intf;
        struct usbtmc_device_data *data;
-       int retval = -ENODEV;
+       int retval = 0;
 
        intf = usb_find_interface(&usbtmc_driver, iminor(inode));
        if (!intf) {
                printk(KERN_ERR KBUILD_MODNAME
                       ": can not find device for minor %d", iminor(inode));
+               retval = -ENODEV;
                goto exit;
        }
 
index 7513bb0..6585f52 100644 (file)
@@ -359,11 +359,6 @@ static void destroy_async(struct dev_state *ps, struct list_head *list)
                spin_lock_irqsave(&ps->lock, flags);
        }
        spin_unlock_irqrestore(&ps->lock, flags);
-       as = async_getcompleted(ps);
-       while (as) {
-               free_async(as);
-               as = async_getcompleted(ps);
-       }
 }
 
 static void destroy_async_on_interface(struct dev_state *ps,
@@ -643,6 +638,7 @@ static int usbdev_release(struct inode *inode, struct file *file)
        struct dev_state *ps = file->private_data;
        struct usb_device *dev = ps->dev;
        unsigned int ifnum;
+       struct async *as;
 
        usb_lock_device(dev);
 
@@ -661,6 +657,12 @@ static int usbdev_release(struct inode *inode, struct file *file)
        usb_unlock_device(dev);
        usb_put_dev(dev);
        put_pid(ps->disc_pid);
+
+       as = async_getcompleted(ps);
+       while (as) {
+               free_async(as);
+               as = async_getcompleted(ps);
+       }
        kfree(ps);
        return 0;
 }
index 3712b92..ecc9b66 100644 (file)
@@ -1095,7 +1095,8 @@ static void start_unlink_async (struct ehci_hcd *ehci, struct ehci_qh *qh)
        prev->qh_next = qh->qh_next;
        wmb ();
 
-       if (unlikely (ehci_to_hcd(ehci)->state == HC_STATE_HALT)) {
+       /* If the controller isn't running, we don't have to wait for it */
+       if (unlikely(!HC_IS_RUNNING(ehci_to_hcd(ehci)->state))) {
                /* if (unlikely (qh->reclaim != 0))
                 *      this will recurse, probably not much
                 */
index 07bcb93..1d0b49e 100644 (file)
@@ -1536,7 +1536,7 @@ itd_link_urb (
                                        struct ehci_itd, itd_list);
                        list_move_tail (&itd->itd_list, &stream->td_list);
                        itd->stream = iso_stream_get (stream);
-                       itd->urb = usb_get_urb (urb);
+                       itd->urb = urb;
                        itd_init (ehci, stream, itd);
                }
 
@@ -1645,7 +1645,7 @@ itd_complete (
        (void) disable_periodic(ehci);
        ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--;
 
-       if (unlikely (list_empty (&stream->td_list))) {
+       if (unlikely(list_is_singular(&stream->td_list))) {
                ehci_to_hcd(ehci)->self.bandwidth_allocated
                                -= stream->bandwidth;
                ehci_vdbg (ehci,
@@ -1656,7 +1656,6 @@ itd_complete (
        iso_stream_put (ehci, stream);
 
 done:
-       usb_put_urb(urb);
        itd->urb = NULL;
        if (ehci->clock_frame != itd->frame || itd->index[7] != -1) {
                /* OK to recycle this ITD now. */
@@ -1949,7 +1948,7 @@ sitd_link_urb (
                                struct ehci_sitd, sitd_list);
                list_move_tail (&sitd->sitd_list, &stream->td_list);
                sitd->stream = iso_stream_get (stream);
-               sitd->urb = usb_get_urb (urb);
+               sitd->urb = urb;
 
                sitd_patch(ehci, stream, sitd, sched, packet);
                sitd_link (ehci, (next_uframe >> 3) % ehci->periodic_size,
@@ -2034,7 +2033,7 @@ sitd_complete (
        (void) disable_periodic(ehci);
        ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--;
 
-       if (list_empty (&stream->td_list)) {
+       if (list_is_singular(&stream->td_list)) {
                ehci_to_hcd(ehci)->self.bandwidth_allocated
                                -= stream->bandwidth;
                ehci_vdbg (ehci,
@@ -2045,7 +2044,6 @@ sitd_complete (
        iso_stream_put (ehci, stream);
        /* OK to recycle this SITD now that its completion callback ran. */
 done:
-       usb_put_urb(urb);
        sitd->urb = NULL;
        sitd->stream = NULL;
        list_move(&sitd->sitd_list, &stream->free_list);
index 878c77c..972f20b 100644 (file)
@@ -499,6 +499,7 @@ static int mdc800_usb_probe (struct usb_interface *intf,
        retval = usb_register_dev(intf, &mdc800_class);
        if (retval) {
                dev_err(&intf->dev, "Not able to get a minor for this device.\n");
+               mutex_unlock(&mdc800->io_lock);
                return -ENODEV;
        }
 
index 7b6922e..2035265 100644 (file)
@@ -376,7 +376,7 @@ static int adu_release(struct inode *inode, struct file *file)
        if (dev->open_count <= 0) {
                dbg(1," %s : device not opened", __func__);
                retval = -ENODEV;
-               goto exit;
+               goto unlock;
        }
 
        adu_release_internal(dev);
@@ -385,9 +385,9 @@ static int adu_release(struct inode *inode, struct file *file)
                if (!dev->open_count)   /* ... and we're the last user */
                        adu_delete(dev);
        }
-
-exit:
+unlock:
        mutex_unlock(&adutux_mutex);
+exit:
        dbg(2," %s : leave, return value %d", __func__, retval);
        return retval;
 }
index 63dff9b..f26ea8d 100644 (file)
@@ -401,6 +401,7 @@ static ssize_t vstusb_write(struct file *file, const char __user *buffer,
        }
 
        if (copy_from_user(buf, buffer, count)) {
+               mutex_unlock(&vstdev->lock);
                dev_err(&dev->dev, "%s: can't copy_from_user\n", __func__);
                retval = -EFAULT;
                goto exit;
index 027f4b7..9b4082b 100644 (file)
@@ -79,6 +79,7 @@ static struct usb_device_id id_table [] = {
        { USB_DEVICE(0x10C4, 0x814A) }, /* West Mountain Radio RIGblaster P&P */
        { USB_DEVICE(0x10C4, 0x814B) }, /* West Mountain Radio RIGtalk */
        { USB_DEVICE(0x10C4, 0x815E) }, /* Helicomm IP-Link 1220-DVM */
+       { USB_DEVICE(0x10C4, 0x819F) }, /* MJS USB Toslink Switcher */
        { USB_DEVICE(0x10C4, 0x81A6) }, /* ThinkOptics WavIt */
        { USB_DEVICE(0x10C4, 0x81AC) }, /* MSD Dash Hawk */
        { USB_DEVICE(0x10C4, 0x81C8) }, /* Lipowsky Industrie Elektronik GmbH, Baby-JTAG */
index f92f4d7..ae84c32 100644 (file)
@@ -663,6 +663,11 @@ static struct usb_device_id id_table_combined [] = {
        { USB_DEVICE(ALTI2_VID, ALTI2_N3_PID) },
        { USB_DEVICE(FTDI_VID, DIEBOLD_BCS_SE923_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_NDI_HUC_PID) },
+       { USB_DEVICE(ATMEL_VID, STK541_PID) },
+       { USB_DEVICE(DE_VID, STB_PID) },
+       { USB_DEVICE(DE_VID, WHT_PID) },
+       { USB_DEVICE(ADI_VID, ADI_GNICE_PID),
+               .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
        { },                                    /* Optional parameter entry */
        { }                                     /* Terminating entry */
 };
index e300c84..daaf63d 100644 (file)
 #define DIEBOLD_BCS_SE923_PID  0xfb99
 
 /*
+ * Atmel STK541
+ */
+#define ATMEL_VID              0x03eb /* Vendor ID */
+#define STK541_PID             0x2109 /* Zigbee Controller */
+
+/*
+ * Dresden Elektronic Sensor Terminal Board
+ */
+#define DE_VID                 0x1cf1 /* Vendor ID */
+#define STB_PID                        0x0001 /* Sensor Terminal Board */
+#define WHT_PID                        0x0004 /* Wireless Handheld Terminal */
+
+/*
+ * Blackfin gnICE JTAG
+ * http://docs.blackfin.uclinux.org/doku.php?id=hw:jtag:gnice
+ */
+#define ADI_VID                0x0456
+#define ADI_GNICE_PID          0xF000
+
+/*
  *   BmRequestType:  1100 0000b
  *   bRequest:       FTDI_E2_READ
  *   wValue:         0
index b7c132b..61ebddc 100644 (file)
@@ -89,6 +89,7 @@ static int  option_send_setup(struct tty_struct *tty, struct usb_serial_port *po
 #define OPTION_PRODUCT_ETNA_MODEM_GT           0x7041
 #define OPTION_PRODUCT_ETNA_MODEM_EX           0x7061
 #define OPTION_PRODUCT_ETNA_KOI_MODEM          0x7100
+#define OPTION_PRODUCT_GTM380_MODEM            0x7201
 
 #define HUAWEI_VENDOR_ID                       0x12D1
 #define HUAWEI_PRODUCT_E600                    0x1001
@@ -197,6 +198,7 @@ static int  option_send_setup(struct tty_struct *tty, struct usb_serial_port *po
 /* OVATION PRODUCTS */
 #define NOVATELWIRELESS_PRODUCT_MC727          0x4100
 #define NOVATELWIRELESS_PRODUCT_MC950D         0x4400
+#define NOVATELWIRELESS_PRODUCT_U727           0x5010
 
 /* FUTURE NOVATEL PRODUCTS */
 #define NOVATELWIRELESS_PRODUCT_EVDO_FULLSPEED 0X6000
@@ -288,15 +290,11 @@ static int  option_send_setup(struct tty_struct *tty, struct usb_serial_port *po
 
 /* ZTE PRODUCTS */
 #define ZTE_VENDOR_ID                          0x19d2
+#define ZTE_PRODUCT_MF622                      0x0001
 #define ZTE_PRODUCT_MF628                      0x0015
 #define ZTE_PRODUCT_MF626                      0x0031
 #define ZTE_PRODUCT_CDMA_TECH                  0xfffe
 
-/* Ericsson products */
-#define ERICSSON_VENDOR_ID                     0x0bdb
-#define ERICSSON_PRODUCT_F3507G_1              0x1900
-#define ERICSSON_PRODUCT_F3507G_2              0x1902
-
 #define BENQ_VENDOR_ID                         0x04a5
 #define BENQ_PRODUCT_H10                       0x4068
 
@@ -325,6 +323,7 @@ static struct usb_device_id option_ids[] = {
        { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_GT) },
        { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_EX) },
        { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_MODEM) },
+       { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_GTM380_MODEM) },
        { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_Q101) },
        { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_Q111) },
        { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLX) },
@@ -415,6 +414,7 @@ static struct usb_device_id option_ids[] = {
        { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU870D) }, /* Novatel EU850D/EU860D/EU870D */
        { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC950D) }, /* Novatel MC930D/MC950D */
        { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC727) }, /* Novatel MC727/U727/USB727 */
+       { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U727) }, /* Novatel MC727/U727/USB727 */
        { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_FULLSPEED) }, /* Novatel EVDO product */
        { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_FULLSPEED) }, /* Novatel HSPA product */
        { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_FULLSPEED) }, /* Novatel EVDO Embedded product */
@@ -442,7 +442,6 @@ static struct usb_device_id option_ids[] = {
        { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_CINGULAR) },    /* Dell Wireless HSDPA 5520 == Novatel Expedite EU860D */
        { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_GENERIC_L) },   /* Dell Wireless HSDPA 5520 */
        { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_GENERIC_I) },   /* Dell Wireless 5520 Voda I Mobile Broadband (3G HSDPA) Minicard */
-       { USB_DEVICE(DELL_VENDOR_ID, 0x8147) },                                 /* Dell Wireless 5530 Mobile Broadband (3G HSPA) Mini-Card */
        { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_SPRINT) },      /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
        { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_TELUS) },       /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
        { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_VZW) },         /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
@@ -510,11 +509,10 @@ static struct usb_device_id option_ids[] = {
        { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */
        { USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */
        { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) },
+       { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622) },
        { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF626) },
        { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) },
        { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) },
-       { USB_DEVICE(ERICSSON_VENDOR_ID, ERICSSON_PRODUCT_F3507G_1) },
-       { USB_DEVICE(ERICSSON_VENDOR_ID, ERICSSON_PRODUCT_F3507G_2) },
        { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) },
        { USB_DEVICE(0x1da5, 0x4515) }, /* BenQ H20 */
        { } /* Terminating entry */
index 6f59c8e..cfde74a 100644 (file)
@@ -226,7 +226,7 @@ UNUSUAL_DEV(  0x0421, 0x047c, 0x0370, 0x0610,
                US_FL_MAX_SECTORS_64 ),
 
 /* Reported by Manuel Osdoba <manuel.osdoba@tu-ilmenau.de> */
-UNUSUAL_DEV( 0x0421, 0x0492, 0x0452, 0x0452,
+UNUSUAL_DEV( 0x0421, 0x0492, 0x0452, 0x9999,
                "Nokia",
                "Nokia 6233",
                US_SC_DEVICE, US_PR_DEVICE, NULL,
@@ -951,7 +951,9 @@ UNUSUAL_DEV( 0x066f, 0x8000, 0x0001, 0x0001,
                US_FL_FIX_CAPACITY ),
 
 /* Reported by Richard -=[]=- <micro_flyer@hotmail.com> */
-UNUSUAL_DEV( 0x067b, 0x2507, 0x0100, 0x0100,
+/* Change to bcdDeviceMin (0x0100 to 0x0001) reported by
+ * Thomas Bartosik <tbartdev@gmx-topmail.de> */
+UNUSUAL_DEV( 0x067b, 0x2507, 0x0001, 0x0100,
                "Prolific Technology Inc.",
                "Mass Storage Device",
                US_SC_DEVICE, US_PR_DEVICE, NULL,
@@ -1390,6 +1392,16 @@ UNUSUAL_DEV( 0x0af0, 0x7401, 0x0000, 0x0000,
                US_SC_DEVICE, US_PR_DEVICE, NULL,
                0 ),
 
+/* Reported by Jan Dumon <j.dumon@option.com>
+ * This device (wrongly) has a vendor-specific device descriptor.
+ * The entry is needed so usb-storage can bind to it's mass-storage
+ * interface as an interface driver */
+UNUSUAL_DEV( 0x0af0, 0x7501, 0x0000, 0x0000,
+               "Option",
+               "GI 0431 SD-Card",
+               US_SC_DEVICE, US_PR_DEVICE, NULL,
+               0 ),
+
 /* Reported by Ben Efros <ben@pc-doctor.com> */
 UNUSUAL_DEV( 0x0bc2, 0x3010, 0x0000, 0x0000,
                "Seagate",
index 238a96a..613a5fc 100644 (file)
@@ -921,8 +921,10 @@ static void wa_urb_enqueue_b(struct wa_xfer *xfer)
        result = -ENODEV;
        /* FIXME: segmentation broken -- kills DWA */
        mutex_lock(&wusbhc->mutex);             /* get a WUSB dev */
-       if (urb->dev == NULL)
+       if (urb->dev == NULL) {
+               mutex_unlock(&wusbhc->mutex);
                goto error_dev_gone;
+       }
        wusb_dev = __wusb_dev_get_by_usb_dev(wusbhc, urb->dev);
        if (wusb_dev == NULL) {
                mutex_unlock(&wusbhc->mutex);
index 81603f8..c6d7cc7 100644 (file)
@@ -2507,6 +2507,25 @@ static void radeon_reinitialize_QW(struct radeonfb_info *rinfo)
 
 #endif /* CONFIG_PPC_OF */
 
+static void radeonfb_whack_power_state(struct radeonfb_info *rinfo, pci_power_t state)
+{
+       u16 pwr_cmd;
+
+       for (;;) {
+               pci_read_config_word(rinfo->pdev,
+                                    rinfo->pm_reg+PCI_PM_CTRL,
+                                    &pwr_cmd);
+               if (pwr_cmd & 2)
+                       break;
+               pwr_cmd = (pwr_cmd & ~PCI_PM_CTRL_STATE_MASK) | 2;
+               pci_write_config_word(rinfo->pdev,
+                                     rinfo->pm_reg+PCI_PM_CTRL,
+                                     pwr_cmd);
+               msleep(500);
+       }
+       rinfo->pdev->current_state = state;
+}
+
 static void radeon_set_suspend(struct radeonfb_info *rinfo, int suspend)
 {
        u32 tmp;
@@ -2558,6 +2577,11 @@ static void radeon_set_suspend(struct radeonfb_info *rinfo, int suspend)
                /* Switch PCI power management to D2. */
                pci_disable_device(rinfo->pdev);
                pci_save_state(rinfo->pdev);
+               /* The chip seems to need us to whack the PM register
+                * repeatedly until it sticks. We do that -prior- to
+                * calling pci_set_power_state()
+                */
+               radeonfb_whack_power_state(rinfo, PCI_D2);
                pci_set_power_state(rinfo->pdev, PCI_D2);
        } else {
                printk(KERN_DEBUG "radeonfb (%s): switching to D0 state...\n",
index 3c14e43..de93ff3 100644 (file)
 P3
-# Standard 224-color Linux logo
-80 80
+145 113
 255
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  6   6   6   6   6   6  10  10  10  10  10  10
- 10  10  10   6   6   6   6   6   6   6   6   6
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   6   6   6  10  10  10  14  14  14
- 22  22  22  26  26  26  30  30  30  34  34  34
- 30  30  30  30  30  30  26  26  26  18  18  18
- 14  14  14  10  10  10   6   6   6   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   1   0   0   1   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  6   6   6  14  14  14  26  26  26  42  42  42
- 54  54  54  66  66  66  78  78  78  78  78  78
- 78  78  78  74  74  74  66  66  66  54  54  54
- 42  42  42  26  26  26  18  18  18  10  10  10
-  6   6   6   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   1   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  10  10  10
- 22  22  22  42  42  42  66  66  66  86  86  86
- 66  66  66  38  38  38  38  38  38  22  22  22
- 26  26  26  34  34  34  54  54  54  66  66  66
- 86  86  86  70  70  70  46  46  46  26  26  26
- 14  14  14   6   6   6   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   1   0   0   1   0   0   1   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0  10  10  10  26  26  26
- 50  50  50  82  82  82  58  58  58   6   6   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  6   6   6  54  54  54  86  86  86  66  66  66
- 38  38  38  18  18  18   6   6   6   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   6   6   6  22  22  22  50  50  50
- 78  78  78  34  34  34   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   6   6   6  70  70  70
- 78  78  78  46  46  46  22  22  22   6   6   6
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   1   0   0   1   0   0   1   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  6   6   6  18  18  18  42  42  42  82  82  82
- 26  26  26   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6  14  14  14
- 46  46  46  34  34  34   6   6   6   2   2   6
- 42  42  42  78  78  78  42  42  42  18  18  18
-  6   6   6   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   1   0   0   0   0   0   1   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 10  10  10  30  30  30  66  66  66  58  58  58
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6  26  26  26
- 86  86  86 101 101 101  46  46  46  10  10  10
-  2   2   6  58  58  58  70  70  70  34  34  34
- 10  10  10   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   1   0   0   1   0   0   1   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 14  14  14  42  42  42  86  86  86  10  10  10
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6  30  30  30
- 94  94  94  94  94  94  58  58  58  26  26  26
-  2   2   6   6   6   6  78  78  78  54  54  54
- 22  22  22   6   6   6   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   6   6   6
- 22  22  22  62  62  62  62  62  62   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6  26  26  26
- 54  54  54  38  38  38  18  18  18  10  10  10
-  2   2   6   2   2   6  34  34  34  82  82  82
- 38  38  38  14  14  14   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   1   0   0   1   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   6   6   6
- 30  30  30  78  78  78  30  30  30   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6  10  10  10
- 10  10  10   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6  78  78  78
- 50  50  50  18  18  18   6   6   6   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   1   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  10  10  10
- 38  38  38  86  86  86  14  14  14   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6  54  54  54
- 66  66  66  26  26  26   6   6   6   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   1   0   0   1   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  14  14  14
- 42  42  42  82  82  82   2   2   6   2   2   6
-  2   2   6   6   6   6  10  10  10   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   6   6   6
- 14  14  14  10  10  10   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6  18  18  18
- 82  82  82  34  34  34  10  10  10   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   1   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  14  14  14
- 46  46  46  86  86  86   2   2   6   2   2   6
-  6   6   6   6   6   6  22  22  22  34  34  34
-  6   6   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6  18  18  18  34  34  34
- 10  10  10  50  50  50  22  22  22   2   2   6
-  2   2   6   2   2   6   2   2   6  10  10  10
- 86  86  86  42  42  42  14  14  14   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   1   0   0   1   0   0   1   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  14  14  14
- 46  46  46  86  86  86   2   2   6   2   2   6
- 38  38  38 116 116 116  94  94  94  22  22  22
- 22  22  22   2   2   6   2   2   6   2   2   6
- 14  14  14  86  86  86 138 138 138 162 162 162
-154 154 154  38  38  38  26  26  26   6   6   6
-  2   2   6   2   2   6   2   2   6   2   2   6
- 86  86  86  46  46  46  14  14  14   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  14  14  14
- 46  46  46  86  86  86   2   2   6  14  14  14
-134 134 134 198 198 198 195 195 195 116 116 116
- 10  10  10   2   2   6   2   2   6   6   6   6
-101  98  89 187 187 187 210 210 210 218 218 218
-214 214 214 134 134 134  14  14  14   6   6   6
-  2   2   6   2   2   6   2   2   6   2   2   6
- 86  86  86  50  50  50  18  18  18   6   6   6
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   1   0   0   0
-  0   0   1   0   0   1   0   0   1   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  14  14  14
- 46  46  46  86  86  86   2   2   6  54  54  54
-218 218 218 195 195 195 226 226 226 246 246 246
- 58  58  58   2   2   6   2   2   6  30  30  30
-210 210 210 253 253 253 174 174 174 123 123 123
-221 221 221 234 234 234  74  74  74   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
- 70  70  70  58  58  58  22  22  22   6   6   6
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  14  14  14
- 46  46  46  82  82  82   2   2   6 106 106 106
-170 170 170  26  26  26  86  86  86 226 226 226
-123 123 123  10  10  10  14  14  14  46  46  46
-231 231 231 190 190 190   6   6   6  70  70  70
- 90  90  90 238 238 238 158 158 158   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
- 70  70  70  58  58  58  22  22  22   6   6   6
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   1   0   0   0
-  0   0   1   0   0   1   0   0   1   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  14  14  14
- 42  42  42  86  86  86   6   6   6 116 116 116
-106 106 106   6   6   6  70  70  70 149 149 149
-128 128 128  18  18  18  38  38  38  54  54  54
-221 221 221 106 106 106   2   2   6  14  14  14
- 46  46  46 190 190 190 198 198 198   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
- 74  74  74  62  62  62  22  22  22   6   6   6
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   1   0   0   0
-  0   0   1   0   0   0   0   0   1   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  14  14  14
- 42  42  42  94  94  94  14  14  14 101 101 101
-128 128 128   2   2   6  18  18  18 116 116 116
-118  98  46 121  92   8 121  92   8  98  78  10
-162 162 162 106 106 106   2   2   6   2   2   6
-  2   2   6 195 195 195 195 195 195   6   6   6
-  2   2   6   2   2   6   2   2   6   2   2   6
- 74  74  74  62  62  62  22  22  22   6   6   6
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   1   0   0   1
-  0   0   1   0   0   0   0   0   1   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  10  10  10
- 38  38  38  90  90  90  14  14  14  58  58  58
-210 210 210  26  26  26  54  38   6 154 114  10
-226 170  11 236 186  11 225 175  15 184 144  12
-215 174  15 175 146  61  37  26   9   2   2   6
- 70  70  70 246 246 246 138 138 138   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
- 70  70  70  66  66  66  26  26  26   6   6   6
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  10  10  10
- 38  38  38  86  86  86  14  14  14  10  10  10
-195 195 195 188 164 115 192 133   9 225 175  15
-239 182  13 234 190  10 232 195  16 232 200  30
-245 207  45 241 208  19 232 195  16 184 144  12
-218 194 134 211 206 186  42  42  42   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
- 50  50  50  74  74  74  30  30  30   6   6   6
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  10  10  10
- 34  34  34  86  86  86  14  14  14   2   2   6
-121  87  25 192 133   9 219 162  10 239 182  13
-236 186  11 232 195  16 241 208  19 244 214  54
-246 218  60 246 218  38 246 215  20 241 208  19
-241 208  19 226 184  13 121  87  25   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
- 50  50  50  82  82  82  34  34  34  10  10  10
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  10  10  10
- 34  34  34  82  82  82  30  30  30  61  42   6
-180 123   7 206 145  10 230 174  11 239 182  13
-234 190  10 238 202  15 241 208  19 246 218  74
-246 218  38 246 215  20 246 215  20 246 215  20
-226 184  13 215 174  15 184 144  12   6   6   6
-  2   2   6   2   2   6   2   2   6   2   2   6
- 26  26  26  94  94  94  42  42  42  14  14  14
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  10  10  10
- 30  30  30  78  78  78  50  50  50 104  69   6
-192 133   9 216 158  10 236 178  12 236 186  11
-232 195  16 241 208  19 244 214  54 245 215  43
-246 215  20 246 215  20 241 208  19 198 155  10
-200 144  11 216 158  10 156 118  10   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  6   6   6  90  90  90  54  54  54  18  18  18
-  6   6   6   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  10  10  10
- 30  30  30  78  78  78  46  46  46  22  22  22
-137  92   6 210 162  10 239 182  13 238 190  10
-238 202  15 241 208  19 246 215  20 246 215  20
-241 208  19 203 166  17 185 133  11 210 150  10
-216 158  10 210 150  10 102  78  10   2   2   6
-  6   6   6  54  54  54  14  14  14   2   2   6
-  2   2   6  62  62  62  74  74  74  30  30  30
- 10  10  10   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  10  10  10
- 34  34  34  78  78  78  50  50  50   6   6   6
- 94  70  30 139 102  15 190 146  13 226 184  13
-232 200  30 232 195  16 215 174  15 190 146  13
-168 122  10 192 133   9 210 150  10 213 154  11
-202 150  34 182 157 106 101  98  89   2   2   6
-  2   2   6  78  78  78 116 116 116  58  58  58
-  2   2   6  22  22  22  90  90  90  46  46  46
- 18  18  18   6   6   6   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  10  10  10
- 38  38  38  86  86  86  50  50  50   6   6   6
-128 128 128 174 154 114 156 107  11 168 122  10
-198 155  10 184 144  12 197 138  11 200 144  11
-206 145  10 206 145  10 197 138  11 188 164 115
-195 195 195 198 198 198 174 174 174  14  14  14
-  2   2   6  22  22  22 116 116 116 116 116 116
- 22  22  22   2   2   6  74  74  74  70  70  70
- 30  30  30  10  10  10   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   6   6   6  18  18  18
- 50  50  50 101 101 101  26  26  26  10  10  10
-138 138 138 190 190 190 174 154 114 156 107  11
-197 138  11 200 144  11 197 138  11 192 133   9
-180 123   7 190 142  34 190 178 144 187 187 187
-202 202 202 221 221 221 214 214 214  66  66  66
-  2   2   6   2   2   6  50  50  50  62  62  62
-  6   6   6   2   2   6  10  10  10  90  90  90
- 50  50  50  18  18  18   6   6   6   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0  10  10  10  34  34  34
- 74  74  74  74  74  74   2   2   6   6   6   6
-144 144 144 198 198 198 190 190 190 178 166 146
-154 121  60 156 107  11 156 107  11 168 124  44
-174 154 114 187 187 187 190 190 190 210 210 210
-246 246 246 253 253 253 253 253 253 182 182 182
-  6   6   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6  62  62  62
- 74  74  74  34  34  34  14  14  14   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  10  10  10  22  22  22  54  54  54
- 94  94  94  18  18  18   2   2   6  46  46  46
-234 234 234 221 221 221 190 190 190 190 190 190
-190 190 190 187 187 187 187 187 187 190 190 190
-190 190 190 195 195 195 214 214 214 242 242 242
-253 253 253 253 253 253 253 253 253 253 253 253
- 82  82  82   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6  14  14  14
- 86  86  86  54  54  54  22  22  22   6   6   6
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  6   6   6  18  18  18  46  46  46  90  90  90
- 46  46  46  18  18  18   6   6   6 182 182 182
-253 253 253 246 246 246 206 206 206 190 190 190
-190 190 190 190 190 190 190 190 190 190 190 190
-206 206 206 231 231 231 250 250 250 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-202 202 202  14  14  14   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
- 42  42  42  86  86  86  42  42  42  18  18  18
-  6   6   6   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   6   6   6
- 14  14  14  38  38  38  74  74  74  66  66  66
-  2   2   6   6   6   6  90  90  90 250 250 250
-253 253 253 253 253 253 238 238 238 198 198 198
-190 190 190 190 190 190 195 195 195 221 221 221
-246 246 246 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253  82  82  82   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6  78  78  78  70  70  70  34  34  34
- 14  14  14   6   6   6   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  14  14  14
- 34  34  34  66  66  66  78  78  78   6   6   6
-  2   2   6  18  18  18 218 218 218 253 253 253
-253 253 253 253 253 253 253 253 253 246 246 246
-226 226 226 231 231 231 246 246 246 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 178 178 178   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6  18  18  18  90  90  90  62  62  62
- 30  30  30  10  10  10   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0  10  10  10  26  26  26
- 58  58  58  90  90  90  18  18  18   2   2   6
-  2   2   6 110 110 110 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-250 250 250 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 231 231 231  18  18  18   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6  18  18  18  94  94  94
- 54  54  54  26  26  26  10  10  10   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   6   6   6  22  22  22  50  50  50
- 90  90  90  26  26  26   2   2   6   2   2   6
- 14  14  14 195 195 195 250 250 250 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-250 250 250 242 242 242  54  54  54   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6  38  38  38
- 86  86  86  50  50  50  22  22  22   6   6   6
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  6   6   6  14  14  14  38  38  38  82  82  82
- 34  34  34   2   2   6   2   2   6   2   2   6
- 42  42  42 195 195 195 246 246 246 253 253 253
-253 253 253 253 253 253 253 253 253 250 250 250
-242 242 242 242 242 242 250 250 250 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 250 250 250 246 246 246 238 238 238
-226 226 226 231 231 231 101 101 101   6   6   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
- 38  38  38  82  82  82  42  42  42  14  14  14
-  6   6   6   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 10  10  10  26  26  26  62  62  62  66  66  66
-  2   2   6   2   2   6   2   2   6   6   6   6
- 70  70  70 170 170 170 206 206 206 234 234 234
-246 246 246 250 250 250 250 250 250 238 238 238
-226 226 226 231 231 231 238 238 238 250 250 250
-250 250 250 250 250 250 246 246 246 231 231 231
-214 214 214 206 206 206 202 202 202 202 202 202
-198 198 198 202 202 202 182 182 182  18  18  18
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6  62  62  62  66  66  66  30  30  30
- 10  10  10   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 14  14  14  42  42  42  82  82  82  18  18  18
-  2   2   6   2   2   6   2   2   6  10  10  10
- 94  94  94 182 182 182 218 218 218 242 242 242
-250 250 250 253 253 253 253 253 253 250 250 250
-234 234 234 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 246 246 246
-238 238 238 226 226 226 210 210 210 202 202 202
-195 195 195 195 195 195 210 210 210 158 158 158
-  6   6   6  14  14  14  50  50  50  14  14  14
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   6   6   6  86  86  86  46  46  46
- 18  18  18   6   6   6   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   6   6   6
- 22  22  22  54  54  54  70  70  70   2   2   6
-  2   2   6  10  10  10   2   2   6  22  22  22
-166 166 166 231 231 231 250 250 250 253 253 253
-253 253 253 253 253 253 253 253 253 250 250 250
-242 242 242 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 246 246 246
-231 231 231 206 206 206 198 198 198 226 226 226
- 94  94  94   2   2   6   6   6   6  38  38  38
- 30  30  30   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6  62  62  62  66  66  66
- 26  26  26  10  10  10   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  10  10  10
- 30  30  30  74  74  74  50  50  50   2   2   6
- 26  26  26  26  26  26   2   2   6 106 106 106
-238 238 238 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 246 246 246 218 218 218 202 202 202
-210 210 210  14  14  14   2   2   6   2   2   6
- 30  30  30  22  22  22   2   2   6   2   2   6
-  2   2   6   2   2   6  18  18  18  86  86  86
- 42  42  42  14  14  14   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  14  14  14
- 42  42  42  90  90  90  22  22  22   2   2   6
- 42  42  42   2   2   6  18  18  18 218 218 218
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 250 250 250 221 221 221
-218 218 218 101 101 101   2   2   6  14  14  14
- 18  18  18  38  38  38  10  10  10   2   2   6
-  2   2   6   2   2   6   2   2   6  78  78  78
- 58  58  58  22  22  22   6   6   6   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   6   6   6  18  18  18
- 54  54  54  82  82  82   2   2   6  26  26  26
- 22  22  22   2   2   6 123 123 123 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 250 250 250
-238 238 238 198 198 198   6   6   6  38  38  38
- 58  58  58  26  26  26  38  38  38   2   2   6
-  2   2   6   2   2   6   2   2   6  46  46  46
- 78  78  78  30  30  30  10  10  10   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0  10  10  10  30  30  30
- 74  74  74  58  58  58   2   2   6  42  42  42
-  2   2   6  22  22  22 231 231 231 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 250 250 250
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 246 246 246  46  46  46  38  38  38
- 42  42  42  14  14  14  38  38  38  14  14  14
-  2   2   6   2   2   6   2   2   6   6   6   6
- 86  86  86  46  46  46  14  14  14   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   6   6   6  14  14  14  42  42  42
- 90  90  90  18  18  18  18  18  18  26  26  26
-  2   2   6 116 116 116 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 250 250 250 238 238 238
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253  94  94  94   6   6   6
-  2   2   6   2   2   6  10  10  10  34  34  34
-  2   2   6   2   2   6   2   2   6   2   2   6
- 74  74  74  58  58  58  22  22  22   6   6   6
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  10  10  10  26  26  26  66  66  66
- 82  82  82   2   2   6  38  38  38   6   6   6
- 14  14  14 210 210 210 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 246 246 246 242 242 242
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 144 144 144   2   2   6
-  2   2   6   2   2   6   2   2   6  46  46  46
-  2   2   6   2   2   6   2   2   6   2   2   6
- 42  42  42  74  74  74  30  30  30  10  10  10
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  6   6   6  14  14  14  42  42  42  90  90  90
- 26  26  26   6   6   6  42  42  42   2   2   6
- 74  74  74 250 250 250 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 242 242 242 242 242 242
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 182 182 182   2   2   6
-  2   2   6   2   2   6   2   2   6  46  46  46
-  2   2   6   2   2   6   2   2   6   2   2   6
- 10  10  10  86  86  86  38  38  38  10  10  10
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 10  10  10  26  26  26  66  66  66  82  82  82
-  2   2   6  22  22  22  18  18  18   2   2   6
-149 149 149 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 234 234 234 242 242 242
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 206 206 206   2   2   6
-  2   2   6   2   2   6   2   2   6  38  38  38
-  2   2   6   2   2   6   2   2   6   2   2   6
-  6   6   6  86  86  86  46  46  46  14  14  14
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   6   6   6
- 18  18  18  46  46  46  86  86  86  18  18  18
-  2   2   6  34  34  34  10  10  10   6   6   6
-210 210 210 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 234 234 234 242 242 242
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 221 221 221   6   6   6
-  2   2   6   2   2   6   6   6   6  30  30  30
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6  82  82  82  54  54  54  18  18  18
-  6   6   6   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  10  10  10
- 26  26  26  66  66  66  62  62  62   2   2   6
-  2   2   6  38  38  38  10  10  10  26  26  26
-238 238 238 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 231 231 231 238 238 238
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 231 231 231   6   6   6
-  2   2   6   2   2   6  10  10  10  30  30  30
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6  66  66  66  58  58  58  22  22  22
-  6   6   6   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  10  10  10
- 38  38  38  78  78  78   6   6   6   2   2   6
-  2   2   6  46  46  46  14  14  14  42  42  42
-246 246 246 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 231 231 231 242 242 242
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 234 234 234  10  10  10
-  2   2   6   2   2   6  22  22  22  14  14  14
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6  66  66  66  62  62  62  22  22  22
-  6   6   6   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   6   6   6  18  18  18
- 50  50  50  74  74  74   2   2   6   2   2   6
- 14  14  14  70  70  70  34  34  34  62  62  62
-250 250 250 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 231 231 231 246 246 246
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 234 234 234  14  14  14
-  2   2   6   2   2   6  30  30  30   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6  66  66  66  62  62  62  22  22  22
-  6   6   6   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   6   6   6  18  18  18
- 54  54  54  62  62  62   2   2   6   2   2   6
-  2   2   6  30  30  30  46  46  46  70  70  70
-250 250 250 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 231 231 231 246 246 246
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 226 226 226  10  10  10
-  2   2   6   6   6   6  30  30  30   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6  66  66  66  58  58  58  22  22  22
-  6   6   6   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   6   6   6  22  22  22
- 58  58  58  62  62  62   2   2   6   2   2   6
-  2   2   6   2   2   6  30  30  30  78  78  78
-250 250 250 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 231 231 231 246 246 246
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 206 206 206   2   2   6
- 22  22  22  34  34  34  18  14   6  22  22  22
- 26  26  26  18  18  18   6   6   6   2   2   6
-  2   2   6  82  82  82  54  54  54  18  18  18
-  6   6   6   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   6   6   6  26  26  26
- 62  62  62 106 106 106  74  54  14 185 133  11
-210 162  10 121  92   8   6   6   6  62  62  62
-238 238 238 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 231 231 231 246 246 246
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 158 158 158  18  18  18
- 14  14  14   2   2   6   2   2   6   2   2   6
-  6   6   6  18  18  18  66  66  66  38  38  38
-  6   6   6  94  94  94  50  50  50  18  18  18
-  6   6   6   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   6   6   6
- 10  10  10  10  10  10  18  18  18  38  38  38
- 78  78  78 142 134 106 216 158  10 242 186  14
-246 190  14 246 190  14 156 118  10  10  10  10
- 90  90  90 238 238 238 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 231 231 231 250 250 250
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 246 230 190
-238 204  91 238 204  91 181 142  44  37  26   9
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6  38  38  38  46  46  46
- 26  26  26 106 106 106  54  54  54  18  18  18
-  6   6   6   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   6   6   6  14  14  14  22  22  22
- 30  30  30  38  38  38  50  50  50  70  70  70
-106 106 106 190 142  34 226 170  11 242 186  14
-246 190  14 246 190  14 246 190  14 154 114  10
-  6   6   6  74  74  74 226 226 226 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 231 231 231 250 250 250
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 228 184  62
-241 196  14 241 208  19 232 195  16  38  30  10
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   6   6   6  30  30  30  26  26  26
-203 166  17 154 142  90  66  66  66  26  26  26
-  6   6   6   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  6   6   6  18  18  18  38  38  38  58  58  58
- 78  78  78  86  86  86 101 101 101 123 123 123
-175 146  61 210 150  10 234 174  13 246 186  14
-246 190  14 246 190  14 246 190  14 238 190  10
-102  78  10   2   2   6  46  46  46 198 198 198
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 234 234 234 242 242 242
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 224 178  62
-242 186  14 241 196  14 210 166  10  22  18   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   6   6   6 121  92   8
-238 202  15 232 195  16  82  82  82  34  34  34
- 10  10  10   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 14  14  14  38  38  38  70  70  70 154 122  46
-190 142  34 200 144  11 197 138  11 197 138  11
-213 154  11 226 170  11 242 186  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-225 175  15  46  32   6   2   2   6  22  22  22
-158 158 158 250 250 250 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 250 250 250 242 242 242 224 178  62
-239 182  13 236 186  11 213 154  11  46  32   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6  61  42   6 225 175  15
-238 190  10 236 186  11 112 100  78  42  42  42
- 14  14  14   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   6   6   6
- 22  22  22  54  54  54 154 122  46 213 154  11
-226 170  11 230 174  11 226 170  11 226 170  11
-236 178  12 242 186  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-241 196  14 184 144  12  10  10  10   2   2   6
-  6   6   6 116 116 116 242 242 242 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 231 231 231 198 198 198 214 170  54
-236 178  12 236 178  12 210 150  10 137  92   6
- 18  14   6   2   2   6   2   2   6   2   2   6
-  6   6   6  70  47   6 200 144  11 236 178  12
-239 182  13 239 182  13 124 112  88  58  58  58
- 22  22  22   6   6   6   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  10  10  10
- 30  30  30  70  70  70 180 133  36 226 170  11
-239 182  13 242 186  14 242 186  14 246 186  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 232 195  16  98  70   6   2   2   6
-  2   2   6   2   2   6  66  66  66 221 221 221
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 206 206 206 198 198 198 214 166  58
-230 174  11 230 174  11 216 158  10 192 133   9
-163 110   8 116  81   8 102  78  10 116  81   8
-167 114   7 197 138  11 226 170  11 239 182  13
-242 186  14 242 186  14 162 146  94  78  78  78
- 34  34  34  14  14  14   6   6   6   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   6   6   6
- 30  30  30  78  78  78 190 142  34 226 170  11
-239 182  13 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 241 196  14 203 166  17  22  18   6
-  2   2   6   2   2   6   2   2   6  38  38  38
-218 218 218 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-250 250 250 206 206 206 198 198 198 202 162  69
-226 170  11 236 178  12 224 166  10 210 150  10
-200 144  11 197 138  11 192 133   9 197 138  11
-210 150  10 226 170  11 242 186  14 246 190  14
-246 190  14 246 186  14 225 175  15 124 112  88
- 62  62  62  30  30  30  14  14  14   6   6   6
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  10  10  10
- 30  30  30  78  78  78 174 135  50 224 166  10
-239 182  13 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 241 196  14 139 102  15
-  2   2   6   2   2   6   2   2   6   2   2   6
- 78  78  78 250 250 250 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-250 250 250 214 214 214 198 198 198 190 150  46
-219 162  10 236 178  12 234 174  13 224 166  10
-216 158  10 213 154  11 213 154  11 216 158  10
-226 170  11 239 182  13 246 190  14 246 190  14
-246 190  14 246 190  14 242 186  14 206 162  42
-101 101 101  58  58  58  30  30  30  14  14  14
-  6   6   6   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  10  10  10
- 30  30  30  74  74  74 174 135  50 216 158  10
-236 178  12 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 241 196  14 226 184  13
- 61  42   6   2   2   6   2   2   6   2   2   6
- 22  22  22 238 238 238 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 226 226 226 187 187 187 180 133  36
-216 158  10 236 178  12 239 182  13 236 178  12
-230 174  11 226 170  11 226 170  11 230 174  11
-236 178  12 242 186  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 186  14 239 182  13
-206 162  42 106 106 106  66  66  66  34  34  34
- 14  14  14   6   6   6   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   6   6   6
- 26  26  26  70  70  70 163 133  67 213 154  11
-236 178  12 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 241 196  14
-190 146  13  18  14   6   2   2   6   2   2   6
- 46  46  46 246 246 246 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 221 221 221  86  86  86 156 107  11
-216 158  10 236 178  12 242 186  14 246 186  14
-242 186  14 239 182  13 239 182  13 242 186  14
-242 186  14 246 186  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-242 186  14 225 175  15 142 122  72  66  66  66
- 30  30  30  10  10  10   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   6   6   6
- 26  26  26  70  70  70 163 133  67 210 150  10
-236 178  12 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-232 195  16 121  92   8  34  34  34 106 106 106
-221 221 221 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-242 242 242  82  82  82  18  14   6 163 110   8
-216 158  10 236 178  12 242 186  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 242 186  14 163 133  67
- 46  46  46  18  18  18   6   6   6   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  10  10  10
- 30  30  30  78  78  78 163 133  67 210 150  10
-236 178  12 246 186  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-241 196  14 215 174  15 190 178 144 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 218 218 218
- 58  58  58   2   2   6  22  18   6 167 114   7
-216 158  10 236 178  12 246 186  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 186  14 242 186  14 190 150  46
- 54  54  54  22  22  22   6   6   6   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  14  14  14
- 38  38  38  86  86  86 180 133  36 213 154  11
-236 178  12 246 186  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 232 195  16 190 146  13 214 214 214
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 250 250 250 170 170 170  26  26  26
-  2   2   6   2   2   6  37  26   9 163 110   8
-219 162  10 239 182  13 246 186  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 186  14 236 178  12 224 166  10 142 122  72
- 46  46  46  18  18  18   6   6   6   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   6   6   6  18  18  18
- 50  50  50 109 106  95 192 133   9 224 166  10
-242 186  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-242 186  14 226 184  13 210 162  10 142 110  46
-226 226 226 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-253 253 253 253 253 253 253 253 253 253 253 253
-198 198 198  66  66  66   2   2   6   2   2   6
-  2   2   6   2   2   6  50  34   6 156 107  11
-219 162  10 239 182  13 246 186  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 242 186  14
-234 174  13 213 154  11 154 122  46  66  66  66
- 30  30  30  10  10  10   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   6   6   6  22  22  22
- 58  58  58 154 121  60 206 145  10 234 174  13
-242 186  14 246 186  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 186  14 236 178  12 210 162  10 163 110   8
- 61  42   6 138 138 138 218 218 218 250 250 250
-253 253 253 253 253 253 253 253 253 250 250 250
-242 242 242 210 210 210 144 144 144  66  66  66
-  6   6   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6  61  42   6 163 110   8
-216 158  10 236 178  12 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 239 182  13 230 174  11 216 158  10
-190 142  34 124 112  88  70  70  70  38  38  38
- 18  18  18   6   6   6   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   6   6   6  22  22  22
- 62  62  62 168 124  44 206 145  10 224 166  10
-236 178  12 239 182  13 242 186  14 242 186  14
-246 186  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 236 178  12 216 158  10 175 118   6
- 80  54   7   2   2   6   6   6   6  30  30  30
- 54  54  54  62  62  62  50  50  50  38  38  38
- 14  14  14   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   6   6   6  80  54   7 167 114   7
-213 154  11 236 178  12 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 190  14 242 186  14 239 182  13 239 182  13
-230 174  11 210 150  10 174 135  50 124 112  88
- 82  82  82  54  54  54  34  34  34  18  18  18
-  6   6   6   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   6   6   6  18  18  18
- 50  50  50 158 118  36 192 133   9 200 144  11
-216 158  10 219 162  10 224 166  10 226 170  11
-230 174  11 236 178  12 239 182  13 239 182  13
-242 186  14 246 186  14 246 190  14 246 190  14
-246 190  14 246 190  14 246 190  14 246 190  14
-246 186  14 230 174  11 210 150  10 163 110   8
-104  69   6  10  10  10   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   6   6   6  91  60   6 167 114   7
-206 145  10 230 174  11 242 186  14 246 190  14
-246 190  14 246 190  14 246 186  14 242 186  14
-239 182  13 230 174  11 224 166  10 213 154  11
-180 133  36 124 112  88  86  86  86  58  58  58
- 38  38  38  22  22  22  10  10  10   6   6   6
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  14  14  14
- 34  34  34  70  70  70 138 110  50 158 118  36
-167 114   7 180 123   7 192 133   9 197 138  11
-200 144  11 206 145  10 213 154  11 219 162  10
-224 166  10 230 174  11 239 182  13 242 186  14
-246 186  14 246 186  14 246 186  14 246 186  14
-239 182  13 216 158  10 185 133  11 152  99   6
-104  69   6  18  14   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   2   2   6   2   2   6   2   2   6
-  2   2   6   6   6   6  80  54   7 152  99   6
-192 133   9 219 162  10 236 178  12 239 182  13
-246 186  14 242 186  14 239 182  13 236 178  12
-224 166  10 206 145  10 192 133   9 154 121  60
- 94  94  94  62  62  62  42  42  42  22  22  22
- 14  14  14   6   6   6   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   6   6   6
- 18  18  18  34  34  34  58  58  58  78  78  78
-101  98  89 124 112  88 142 110  46 156 107  11
-163 110   8 167 114   7 175 118   6 180 123   7
-185 133  11 197 138  11 210 150  10 219 162  10
-226 170  11 236 178  12 236 178  12 234 174  13
-219 162  10 197 138  11 163 110   8 130  83   6
- 91  60   6  10  10  10   2   2   6   2   2   6
- 18  18  18  38  38  38  38  38  38  38  38  38
- 38  38  38  38  38  38  38  38  38  38  38  38
- 38  38  38  38  38  38  26  26  26   2   2   6
-  2   2   6   6   6   6  70  47   6 137  92   6
-175 118   6 200 144  11 219 162  10 230 174  11
-234 174  13 230 174  11 219 162  10 210 150  10
-192 133   9 163 110   8 124 112  88  82  82  82
- 50  50  50  30  30  30  14  14  14   6   6   6
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  6   6   6  14  14  14  22  22  22  34  34  34
- 42  42  42  58  58  58  74  74  74  86  86  86
-101  98  89 122 102  70 130  98  46 121  87  25
-137  92   6 152  99   6 163 110   8 180 123   7
-185 133  11 197 138  11 206 145  10 200 144  11
-180 123   7 156 107  11 130  83   6 104  69   6
- 50  34   6  54  54  54 110 110 110 101  98  89
- 86  86  86  82  82  82  78  78  78  78  78  78
- 78  78  78  78  78  78  78  78  78  78  78  78
- 78  78  78  82  82  82  86  86  86  94  94  94
-106 106 106 101 101 101  86  66  34 124  80   6
-156 107  11 180 123   7 192 133   9 200 144  11
-206 145  10 200 144  11 192 133   9 175 118   6
-139 102  15 109 106  95  70  70  70  42  42  42
- 22  22  22  10  10  10   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   6   6   6  10  10  10
- 14  14  14  22  22  22  30  30  30  38  38  38
- 50  50  50  62  62  62  74  74  74  90  90  90
-101  98  89 112 100  78 121  87  25 124  80   6
-137  92   6 152  99   6 152  99   6 152  99   6
-138  86   6 124  80   6  98  70   6  86  66  30
-101  98  89  82  82  82  58  58  58  46  46  46
- 38  38  38  34  34  34  34  34  34  34  34  34
- 34  34  34  34  34  34  34  34  34  34  34  34
- 34  34  34  34  34  34  38  38  38  42  42  42
- 54  54  54  82  82  82  94  86  76  91  60   6
-134  86   6 156 107  11 167 114   7 175 118   6
-175 118   6 167 114   7 152  99   6 121  87  25
-101  98  89  62  62  62  34  34  34  18  18  18
-  6   6   6   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   6   6   6   6   6   6  10  10  10
- 18  18  18  22  22  22  30  30  30  42  42  42
- 50  50  50  66  66  66  86  86  86 101  98  89
-106  86  58  98  70   6 104  69   6 104  69   6
-104  69   6  91  60   6  82  62  34  90  90  90
- 62  62  62  38  38  38  22  22  22  14  14  14
- 10  10  10  10  10  10  10  10  10  10  10  10
- 10  10  10  10  10  10   6   6   6  10  10  10
- 10  10  10  10  10  10  10  10  10  14  14  14
- 22  22  22  42  42  42  70  70  70  89  81  66
- 80  54   7 104  69   6 124  80   6 137  92   6
-134  86   6 116  81   8 100  82  52  86  86  86
- 58  58  58  30  30  30  14  14  14   6   6   6
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   6   6   6  10  10  10  14  14  14
- 18  18  18  26  26  26  38  38  38  54  54  54
- 70  70  70  86  86  86  94  86  76  89  81  66
- 89  81  66  86  86  86  74  74  74  50  50  50
- 30  30  30  14  14  14   6   6   6   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  6   6   6  18  18  18  34  34  34  58  58  58
- 82  82  82  89  81  66  89  81  66  89  81  66
- 94  86  66  94  86  76  74  74  74  50  50  50
- 26  26  26  14  14  14   6   6   6   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  6   6   6   6   6   6  14  14  14  18  18  18
- 30  30  30  38  38  38  46  46  46  54  54  54
- 50  50  50  42  42  42  30  30  30  18  18  18
- 10  10  10   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   6   6   6  14  14  14  26  26  26
- 38  38  38  50  50  50  58  58  58  58  58  58
- 54  54  54  42  42  42  30  30  30  18  18  18
- 10  10  10   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   6   6   6
-  6   6   6  10  10  10  14  14  14  18  18  18
- 18  18  18  14  14  14  10  10  10   6   6   6
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   6   6   6
- 14  14  14  18  18  18  22  22  22  22  22  22
- 18  18  18  14  14  14  10  10  10   6   6   6
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  3 4 4  6 7 7
+8 10 10  8 10 10  6 8 8  6 7 7  3 4 4  2 2 2
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  4 5 5  17 18 17
+27 29 28  35 37 36  40 43 41  43 45 43  40 43 41  37 39 37
+32 34 33  27 30 29  23 25 24  17 21 21  15 18 18  12 15 15
+11 13 13  8 10 10  6 7 7  3 4 4  1 1 1  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  13 13 13  32 34 33  49 51 48  60 60 56  58 59 55
+55 57 54  55 56 53  49 51 48  43 45 43  39 40 39  33 37 35
+28 31 30  23 27 26  20 23 23  17 20 20  14 17 17  13 16 16
+11 14 14  10 13 13  10 12 12  9 11 11  8 10 10  6 7 7
+2 3 3  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  6 7 7  12 15 15
+12 15 15  8 9 9  2 3 3  0 0 0  1 1 1  25 27 26
+55 56 53  68 70 65  65 66 61  65 66 61  63 64 60  63 64 60
+58 59 55  51 52 50  47 48 46  41 42 42  35 37 36  30 32 31
+26 28 27  20 24 24  18 22 22  16 19 19  14 17 17  13 16 16
+12 15 15  11 14 14  10 13 13  10 12 12  9 11 11  8 10 10
+8 9 9  6 8 8  3 3 3  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  6 7 7  20 24 24  23 27 26
+23 27 26  18 22 22  11 13 13  23 24 24  61 63 57  72 73 67
+72 73 67  68 70 65  68 70 65  68 70 65  63 64 60  58 59 55
+55 56 53  47 48 46  41 42 42  35 37 36  30 32 31  26 28 27
+20 24 24  18 22 22  16 20 20  15 19 19  14 17 17  13 16 16
+12 15 15  12 15 15  11 14 14  10 13 13  10 12 12  9 11 11
+8 10 10  8 9 9  7 9 9  6 7 7  1 2 2  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  1 1 1  4 5 5  5 6 5  4 5 5
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  15 19 19  40 41 39  53 55 47
+33 36 34  27 30 29  51 52 50  72 73 67  72 73 67  72 73 67
+72 73 67  68 70 65  68 70 65  63 64 60  58 59 55  51 52 50
+47 48 46  40 43 41  33 37 35  30 32 31  26 28 27  20 24 24
+18 22 22  17 21 21  16 19 19  14 18 18  14 17 17  13 17 17
+13 16 16  12 15 15  12 15 15  11 14 14  10 13 13  10 12 12
+9 11 11  8 10 10  8 9 9  7 9 9  6 8 8  3 4 4
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+2 2 2  6 8 8  10 12 12  10 12 12  10 12 12  10 12 12
+6 8 8  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  20 23 23  71 71 57  131 127 93
+115 113 82  63 64 60  72 73 67  72 73 67  72 73 67  72 73 67
+68 70 65  65 66 61  61 63 57  55 57 54  49 51 48  43 45 43
+39 40 39  33 36 34  28 31 30  23 27 26  20 24 24  20 23 23
+17 21 21  16 20 20  15 19 19  15 18 18  14 18 18  14 17 17
+13 17 17  13 16 16  12 15 15  12 15 15  11 14 14  10 13 13
+10 12 12  9 11 11  8 10 10  7 9 9  7 9 9  6 8 8
+4 5 5  0 0 0  0 0 0  0 0 0  1 1 1  6 7 7
+10 12 12  10 12 12  10 12 12  10 12 12  10 12 12  10 12 12
+10 12 12  3 4 4  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  18 22 22  71 71 57  144 139 99
+84 83 72  68 70 65  72 73 67  72 73 67  68 70 65  65 66 61
+63 64 60  55 57 54  51 52 50  47 48 46  40 43 41  35 37 36
+30 32 31  27 29 28  23 27 26  20 24 24  18 22 22  17 21 21
+16 20 20  15 19 19  15 19 19  15 19 19  15 18 18  14 18 18
+14 17 17  13 17 17  13 16 16  12 15 15  12 15 15  11 14 14
+10 13 13  9 12 12  9 11 11  8 10 10  7 9 9  6 8 8
+6 8 8  3 4 4  0 0 0  2 2 2  8 10 10  10 12 12
+10 12 12  10 12 12  11 13 13  36 38 35  61 61 53  48 49 45
+10 12 12  7 9 9  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  15 19 19  61 61 53  84 83 72
+68 70 65  72 73 67  68 70 65  68 70 65  63 64 60  58 59 55
+51 52 50  47 48 46  41 42 42  37 39 37  32 35 33  28 31 30
+23 27 26  20 24 24  20 23 23  18 22 22  17 21 21  17 21 21
+17 21 21  17 21 21  17 20 20  16 20 20  16 20 20  16 19 19
+15 18 18  14 18 18  13 17 17  13 16 16  12 15 15  12 15 15
+11 14 14  10 13 13  9 12 12  9 11 11  8 10 10  7 9 9
+6 8 8  6 8 8  5 6 5  9 11 11  10 12 12  10 12 12
+19 20 18  82 81 62  149 145 103  160 154 106  142 137 94  96 95 69
+10 12 12  10 12 12  1 1 1  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  10 12 12  44 46 43  68 70 65
+72 73 67  68 70 65  68 70 65  63 64 60  55 57 54  49 51 48
+43 45 43  39 40 39  33 37 35  30 32 31  26 28 27  23 27 26
+20 24 24  18 22 22  18 22 22  18 22 22  18 22 22  20 23 23
+20 24 24  23 25 24  23 25 24  22 24 23  20 23 23  18 22 22
+17 20 20  15 19 19  15 18 18  14 17 17  13 16 16  12 15 15
+11 14 14  11 13 13  10 12 12  9 11 11  8 10 10  8 9 9
+7 9 9  7 9 9  10 12 12  10 12 12  10 12 12  71 71 57
+164 159 111  186 182 128  186 182 128  171 165 117  151 147 98  96 95 69
+10 12 12  10 12 12  3 3 3  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  8 10 10  63 64 60  68 70 65
+72 73 67  68 70 65  63 64 60  55 57 54  47 48 46  40 43 41
+33 37 35  30 32 31  27 29 28  23 27 26  20 24 24  20 23 23
+18 22 22  18 22 22  20 23 22  21 25 23  23 27 26  27 29 28
+28 31 30  31 33 31  31 33 31  31 33 31  28 31 30  26 28 27
+23 25 24  20 23 22  16 20 20  15 18 18  14 17 17  13 16 16
+12 15 15  11 14 14  10 13 13  10 12 12  9 11 11  8 10 10
+10 12 12  10 13 13  10 12 12  12 14 14  96 95 69  165 161 109
+186 182 128  192 187 134  192 187 134  176 171 126  160 154 106  103 101 77
+10 12 12  10 12 12  5 6 5  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  35 37 36  68 70 65  72 73 67
+68 70 65  65 66 61  58 59 55  49 51 48  40 43 41  33 37 35
+28 31 30  23 27 26  20 24 24  20 23 23  18 22 22  18 22 22
+18 22 22  20 23 23  23 27 26  27 30 29  32 35 33  37 39 37
+40 43 41  44 46 43  46 47 43  44 46 43  40 43 41  36 38 35
+31 33 31  27 29 28  22 24 23  17 21 21  15 18 18  14 17 17
+13 16 16  12 15 15  11 14 14  11 14 14  11 13 13  13 16 16
+13 16 16  11 14 14  10 12 12  79 78 62  142 137 94  164 159 111
+178 174 128  192 187 134  192 187 134  176 171 126  160 154 106  96 95 69
+10 12 12  10 12 12  6 7 7  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  55 57 54  68 70 65  72 73 67
+68 70 65  63 64 60  55 56 53  43 45 43  35 37 36  28 31 30
+23 27 26  20 24 24  18 22 22  17 21 21  17 21 21  17 21 21
+20 24 24  25 27 26  31 33 31  38 39 37  46 47 43  53 55 47
+61 61 53  66 65 55  66 65 55  66 65 55  61 61 53  53 55 47
+46 47 43  37 39 37  30 33 30  24 26 24  17 21 21  15 18 18
+13 17 17  12 15 15  12 15 15  13 16 16  14 18 18  14 18 18
+14 17 17  12 15 15  30 31 28  118 116 76  134 131 96  160 154 106
+174 170 121  178 174 128  178 174 128  171 165 117  151 147 98  96 95 69
+10 12 12  10 12 12  6 8 8  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  63 64 60  68 70 65  68 70 65
+65 66 61  58 59 55  49 51 48  39 40 39  30 32 31  23 27 26
+20 24 24  18 22 22  17 21 21  16 20 20  17 21 21  20 23 23
+25 27 26  32 35 33  43 44 41  53 55 47  66 65 55  75 75 61
+82 81 62  84 83 72  87 86 72  87 86 72  82 81 62  75 75 61
+66 65 55  53 55 47  40 41 39  31 33 31  23 25 24  17 20 20
+14 18 18  13 16 16  12 15 15  12 15 15  13 17 17  14 18 18
+14 18 18  13 16 16  46 47 43  96 95 69  125 122 87  142 137 94
+160 154 106  165 161 109  164 159 111  155 149 109  142 137 94  75 75 61
+10 12 12  10 12 12  6 8 8  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  60 60 56  68 70 65  68 70 65
+63 64 60  55 57 54  46 47 45  35 37 36  27 30 29  23 25 24
+18 22 22  17 21 21  16 20 20  17 21 21  18 22 22  23 27 26
+31 33 31  43 44 41  55 56 53  71 71 57  84 83 72  92 91 72
+103 101 77  92 91 72  82 81 62  82 81 62  87 86 72  92 91 72
+84 83 72  71 71 57  55 56 53  43 44 41  30 33 30  22 24 23
+16 19 19  14 17 17  12 15 15  12 15 15  13 16 16  14 18 18
+14 18 18  14 17 17  43 44 41  82 81 62  118 116 76  125 122 87
+142 137 94  144 139 99  144 139 99  134 131 96  118 116 76  53 55 47
+10 12 12  10 12 12  6 8 8  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  47 48 46  63 64 60  63 64 60
+55 57 54  49 51 48  40 43 41  32 34 33  26 28 27  20 24 24
+18 22 22  16 20 20  16 20 20  17 21 21  20 24 24  28 31 30
+40 41 39  53 55 47  75 75 61  90 89 73  87 86 72  48 49 45
+14 14 13  2 2 2  1 2 2  1 1 1  1 1 1  2 2 2
+19 20 18  43 44 41  66 65 55  53 55 47  38 39 37  26 28 27
+18 22 22  14 18 18  13 16 16  12 15 15  12 15 15  13 17 17
+14 18 18  14 18 18  30 31 28  66 65 55  96 95 69  103 101 77
+118 116 76  118 116 76  118 116 76  118 116 76  103 101 77  36 38 35
+10 12 12  10 12 12  6 7 7  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  28 31 30  55 57 54  51 52 50
+49 51 48  41 42 42  35 37 36  28 31 30  23 27 26  20 23 23
+17 21 21  16 20 20  16 20 20  18 22 22  23 27 26  33 36 34
+48 49 45  71 71 57  82 81 62  43 44 41  8 9 9  6 7 7
+6 7 7  6 7 7  6 7 7  5 6 5  4 5 5  3 4 4
+2 3 3  1 2 2  4 5 4  36 38 35  48 49 45  32 35 33
+21 25 23  16 19 19  13 17 17  12 15 15  12 15 15  13 16 16
+14 18 18  14 18 18  16 18 16  36 38 35  61 61 53  82 81 62
+96 95 69  96 95 69  96 95 69  96 95 69  79 78 62  19 20 18
+10 12 12  10 12 12  4 5 5  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  13 13 13  46 47 45  43 45 43
+40 43 41  35 37 36  30 32 31  23 27 26  20 24 24  18 22 22
+17 21 21  16 20 20  17 21 21  20 23 23  27 30 29  40 41 39
+61 61 53  53 55 47  16 17 16  9 11 11  10 12 12  10 12 12
+10 12 12  10 12 12  10 12 12  9 11 11  8 10 10  8 9 9
+6 8 8  5 6 5  4 5 5  2 3 3  19 20 18  38 39 37
+26 28 27  17 21 21  14 17 17  13 16 16  12 15 15  12 15 15
+13 17 17  14 18 18  12 15 15  13 12 7  30 31 28  46 47 43
+53 55 47  66 65 55  66 65 55  53 55 47  36 38 35  10 12 12
+10 12 12  10 12 12  2 3 3  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  1 1 1  33 37 35  35 37 36
+32 35 33  28 31 30  23 27 26  20 24 24  18 22 22  17 21 21
+16 20 20  16 20 20  17 21 21  21 25 23  31 33 31  44 46 43
+31 33 31  11 13 13  12 14 14  12 15 15  13 16 16  14 17 17
+14 17 17  14 17 17  14 17 17  13 16 16  12 15 15  12 14 14
+11 13 13  9 11 11  8 10 10  6 8 8  4 5 5  17 18 17
+30 33 30  20 23 22  15 18 18  13 16 16  12 15 15  12 14 14
+13 16 16  14 17 17  14 18 18  11 12 11  7 7 5  16 17 12
+21 22 20  30 31 28  25 27 25  21 22 20  14 14 13  10 12 12
+10 12 12  9 11 11  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  18 22 22  27 30 29
+27 29 28  40 41 39  53 55 47  53 55 47  53 55 47  46 47 43
+25 27 25  16 20 20  17 21 21  23 25 24  31 33 31  20 20 20
+12 15 15  14 17 17  15 19 19  16 20 20  17 21 21  18 22 22
+18 22 22  18 22 22  18 22 22  17 21 21  17 21 21  16 19 19
+15 18 18  13 16 16  12 15 15  10 12 12  8 10 10  6 8 8
+21 22 21  22 24 23  15 19 19  13 17 17  13 16 16  12 15 15
+12 15 15  13 17 17  14 18 18  14 18 18  13 15 14  10 9 6
+7 7 5  7 7 5  7 7 5  9 11 11  10 12 12  10 12 12
+10 12 12  6 7 7  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  16 17 12  82 81 62
+118 116 76  118 116 76  161 156 96  161 156 96  161 156 96  118 116 76
+118 116 76  96 95 69  53 55 47  22 24 23  14 17 17  13 16 16
+15 19 19  17 21 21  18 22 22  20 24 24  20 24 24  23 27 26
+23 27 26  23 27 26  23 27 26  23 27 26  23 27 26  20 24 24
+20 23 23  17 21 21  16 19 19  14 17 17  12 15 15  10 12 12
+9 11 11  20 23 22  16 19 19  14 17 17  13 16 16  12 15 15
+11 14 14  13 16 16  14 17 17  14 18 18  14 17 17  12 15 15
+10 12 12  10 12 12  10 12 12  10 12 12  10 12 12  10 12 12
+9 11 11  1 1 1  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  53 55 47  161 156 96
+161 156 96  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  161 156 96  118 116 76  96 95 69  21 22 20  16 19 19
+18 22 22  20 24 24  23 27 26  23 27 26  26 28 27  27 30 29
+27 30 29  18 22 22  12 14 14  8 10 10  9 11 11  17 21 21
+23 27 26  23 27 26  20 24 24  18 22 22  16 20 20  14 17 17
+12 14 14  14 17 17  16 20 20  14 17 17  13 17 17  13 16 16
+12 15 15  12 15 15  13 17 17  14 18 18  14 17 17  13 16 16
+11 13 13  10 12 12  10 12 12  10 12 12  10 12 12  10 12 12
+4 5 5  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  13 12 7  118 116 76  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  161 156 96  118 116 76  30 31 28
+20 24 24  23 27 26  27 30 29  28 31 30  30 32 31  23 27 26
+16 19 19  17 21 21  12 15 15  9 11 11  10 12 12  9 11 11
+20 24 24  28 31 30  26 28 27  23 27 26  20 24 24  17 21 21
+15 19 19  13 16 16  16 19 19  14 18 18  14 17 17  13 16 16
+12 15 15  11 14 14  13 16 16  14 17 17  14 18 18  14 17 17
+12 15 15  10 12 12  10 12 12  10 12 12  10 12 12  8 9 9
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  82 81 62  161 156 96  230 229 82
+230 229 82  233 233 100  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  161 156 96  118 116 76
+27 29 28  27 30 29  30 32 31  30 32 31  23 27 26  20 24 24
+26 28 27  17 21 21  6 7 7  72 73 67  145 141 105  15 15 15
+14 17 17  33 37 35  30 32 31  28 31 30  26 28 27  23 27 26
+20 23 23  16 20 20  15 19 19  14 18 18  14 17 17  13 16 16
+12 15 15  11 14 14  12 15 15  13 17 17  14 18 18  14 17 17
+13 16 16  11 13 13  10 12 12  10 12 12  9 11 11  1 1 1
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  16 17 12  161 156 96  230 229 82  230 229 82
+243 242 120  235 234 117  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  161 156 96
+82 81 62  28 31 30  28 31 30  27 30 29  28 31 30  30 32 31
+33 37 35  13 16 16  3 3 3  105 104 92  210 208 158  12 14 14
+17 21 21  33 37 35  33 37 35  32 35 33  30 32 31  27 30 29
+23 27 26  20 23 23  17 20 20  15 18 18  14 18 18  13 17 17
+13 16 16  12 15 15  11 14 14  13 16 16  14 17 17  14 18 18
+13 17 17  12 15 15  10 12 12  10 12 12  3 4 4  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  96 95 69  230 229 82  230 229 82  244 244 132
+241 241 143  243 242 120  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+161 156 96  46 47 43  32 35 33  33 37 35  33 37 35  33 37 35
+40 43 41  23 27 26  1 1 1  2 2 2  24 26 24  14 17 17
+23 27 26  33 37 35  33 37 35  33 37 35  33 37 35  30 32 31
+27 30 29  23 27 26  20 23 23  15 18 18  14 18 18  14 17 17
+13 16 16  12 15 15  11 14 14  12 15 15  13 17 17  14 17 17
+14 17 17  13 16 16  11 13 13  6 8 8  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  16 17 12  161 156 96  230 229 82  235 234 117  239 239 170
+239 239 170  236 236 101  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  118 116 76  33 37 35  33 37 35  37 39 37  37 39 37
+43 45 43  49 51 48  20 24 24  8 10 10  17 20 20  35 37 36
+33 37 35  40 43 41  37 39 37  35 37 36  33 37 35  33 37 35
+30 32 31  27 30 29  23 27 26  15 19 19  14 18 18  14 17 17
+13 17 17  13 16 16  12 15 15  11 14 14  13 16 16  14 17 17
+14 17 17  13 17 17  11 14 14  4 5 5  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  96 95 69  230 229 82  230 229 82  239 239 170  251 251 187
+241 241 143  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  161 156 96  36 38 35  33 37 35  33 37 35  33 37 35
+37 39 37  47 48 46  55 57 54  55 57 54  49 51 48  43 45 43
+43 45 43  43 45 43  40 43 41  40 43 41  37 39 37  33 37 35
+33 37 35  28 31 30  26 28 27  16 20 20  15 18 18  14 18 18
+14 17 17  13 16 16  12 15 15  11 14 14  12 15 15  13 17 17
+14 17 17  14 17 17  8 10 10  5 7 7  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+16 17 12  230 229 82  230 229 82  243 242 120  251 251 187  251 251 187
+246 246 123  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  66 65 55  30 32 31  32 35 33  33 37 35
+33 37 35  37 39 37  40 43 41  47 48 46  49 51 48  51 52 50
+55 57 54  55 57 54  51 52 50  47 48 46  43 45 43  39 40 39
+33 37 35  30 32 31  26 28 27  17 21 21  15 19 19  14 18 18
+14 17 17  13 16 16  12 15 15  12 14 14  11 14 14  13 16 16
+14 17 17  12 15 15  7 9 9  6 8 8  1 1 1  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+96 95 69  230 229 82  230 229 82  239 239 170  251 251 187  239 239 170
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  96 95 69  27 30 29  28 31 30  30 32 31
+33 37 35  40 43 41  46 47 45  55 57 54  63 64 60  72 73 67
+72 73 67  72 73 67  72 73 67  65 66 61  55 57 54  47 48 46
+39 40 39  32 35 33  27 30 29  17 21 21  15 19 19  15 18 18
+14 18 18  13 17 17  13 16 16  12 15 15  11 14 14  12 14 14
+13 16 16  9 11 11  7 9 9  9 11 11  66 65 55  115 113 82
+21 22 20  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  13 12 7
+230 229 82  230 229 82  236 236 101  251 251 187  251 251 187  246 246 123
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  118 116 76  23 27 26  26 28 27  32 35 33
+51 52 50  90 89 73  110 109 94  145 141 105  168 163 120  177 172 135
+177 172 135  188 184 146  188 184 146  181 176 137  194 191 148  188 184 146
+184 179 149  188 184 146  188 184 146  156 151 111  177 172 135  181 176 137
+177 172 135  168 163 120  168 163 120  158 153 112  156 151 111  158 153 112
+156 151 111  158 153 112  177 172 135  188 184 146  188 184 146  194 189 146
+36 38 35  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  82 81 62
+230 229 82  230 229 82  244 244 132  251 251 187  244 244 132  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  161 156 96  82 81 62
+96 95 69  230 229 82  181 178 103  110 109 94  156 151 111  188 184 146
+188 184 146  197 193 154  188 184 146  184 181 136  188 184 146  168 163 120
+168 163 120  178 174 128  156 151 111  158 153 112  174 170 121  156 151 111
+156 151 111  158 153 112  156 151 111  168 163 120  178 174 128  181 176 137
+176 171 126  178 174 128  184 181 136  176 171 126  178 174 128  184 181 136
+176 171 126  178 174 128  184 181 136  164 159 111  155 149 109  96 95 69
+1 1 1  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  2 2 1  161 156 96
+230 229 82  230 229 82  244 244 132  244 244 132  236 236 101  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  46 47 43  82 81 62
+158 153 112  197 193 154  194 189 146  184 181 136  188 184 146  168 163 120
+156 151 111  137 133 100  131 127 93  137 133 100  137 133 100  158 153 112
+121 119 87  137 133 100  156 151 111  145 141 105  99 98 80  84 83 72
+63 64 60  52 53 49  40 43 41  33 36 34  36 38 35  36 38 35
+38 39 37  43 44 41  43 44 41  46 47 43  48 49 45  48 49 45
+46 47 43  36 38 35  30 31 28  19 20 18  6 7 7  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  36 38 35  230 229 82
+230 229 82  230 229 82  246 246 123  236 236 101  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  53 55 47  121 119 87
+176 171 126  171 165 117  161 156 96  82 81 62  53 55 47  33 37 35
+39 40 39  63 64 60  99 98 80  121 119 87  137 133 100  177 172 135
+176 171 126  184 181 136  131 127 93  131 127 93  110 109 94  84 83 72
+51 52 50  39 40 39  27 29 28  18 22 22  16 19 19  15 19 19
+15 19 19  14 18 18  14 17 17  13 16 16  12 15 15  11 14 14
+10 13 13  9 12 12  9 11 11  8 9 9  7 9 9  1 1 1
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  118 116 76  230 229 82
+230 229 82  230 229 82  236 236 101  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  96 95 69  71 71 57
+36 38 35  118 116 76  118 116 76  12 15 15  15 18 18  20 24 24
+33 37 35  55 56 53  84 83 72  110 109 94  145 141 105  110 109 94
+168 163 120  121 119 87  156 151 111  131 127 93  87 86 72  61 63 57
+47 48 46  28 31 30  18 22 22  15 19 19  15 18 18  15 19 19
+15 19 19  14 18 18  14 17 17  13 17 17  13 16 16  12 15 15
+11 13 13  10 12 12  9 11 11  8 10 10  7 9 9  3 3 3
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  1 1 0  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  161 156 96
+161 156 96  230 229 82  118 116 76  11 14 14  14 17 17  18 22 22
+27 30 29  40 43 41  60 60 56  84 83 72  105 104 92  110 109 94
+110 109 94  110 109 94  99 98 80  90 89 73  68 70 65  47 48 46
+32 34 33  23 25 24  20 23 23  17 21 21  15 19 19  14 17 17
+15 19 19  15 18 18  14 18 18  13 17 17  13 16 16  12 15 15
+11 14 14  10 12 12  9 11 11  8 10 10  7 9 9  4 5 5
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  16 17 12  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  161 156 96  118 116 76  11 13 13  13 16 16  15 19 19
+20 24 24  30 32 31  40 43 41  51 52 50  63 64 60  72 73 67
+65 66 61  65 66 61  65 66 61  55 57 54  46 47 45  33 37 35
+27 29 28  20 24 24  17 21 21  16 20 20  16 20 20  15 19 19
+15 19 19  15 19 19  14 18 18  14 17 17  13 16 16  12 15 15
+11 14 14  10 13 13  9 12 12  8 10 10  7 9 9  6 7 7
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  53 55 47  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+161 156 96  118 116 76  53 55 47  10 13 13  12 15 15  14 17 17
+17 20 20  20 24 24  27 29 28  32 34 33  37 39 37  40 43 41
+43 45 43  41 42 42  35 37 36  30 32 31  28 31 30  23 27 26
+20 23 23  17 21 21  16 20 20  16 20 20  16 20 20  16 19 19
+15 19 19  15 19 19  14 18 18  14 17 17  13 16 16  12 15 15
+11 14 14  10 13 13  9 12 12  9 11 11  8 10 10  10 12 12
+1 1 1  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  82 81 62  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  161 156 96  161 156 96
+118 116 76  82 81 62  13 14 12  10 13 13  12 15 15  13 17 17
+15 19 19  16 20 20  20 23 23  20 24 24  23 27 26  26 28 27
+26 28 27  26 28 27  23 27 26  18 22 22  20 23 23  17 21 21
+17 21 21  16 20 20  16 20 20  16 20 20  16 20 20  16 19 19
+15 19 19  15 19 19  15 18 18  14 17 17  13 17 17  13 16 16
+12 15 15  12 14 14  12 14 14  12 14 14  12 14 14  23 24 24
+6 8 8  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  118 116 76  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  161 156 96  161 156 96  118 116 76
+71 71 57  13 14 12  9 12 12  10 13 13  12 15 15  13 17 17
+15 18 18  15 19 19  16 20 20  17 21 21  17 21 21  18 22 22
+18 22 22  18 22 22  17 21 21  16 19 19  15 18 18  14 18 18
+16 19 19  16 20 20  16 20 20  16 20 20  16 20 20  16 20 20
+15 19 19  15 19 19  15 18 18  14 18 18  16 20 20  23 25 24
+17 21 21  25 27 26  47 48 46  47 48 46  51 52 50  72 73 67
+33 36 34  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  118 116 76  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  161 156 96  118 116 76  118 116 76  46 47 43
+9 11 11  9 11 11  10 12 12  11 13 13  12 15 15  14 17 17
+15 18 18  15 19 19  16 20 20  16 20 20  16 20 20  16 20 20
+16 20 20  16 20 20  16 20 20  16 20 20  16 20 20  16 20 20
+15 19 19  16 20 20  16 20 20  16 20 20  16 20 20  16 20 20
+15 19 19  16 20 20  20 24 24  55 56 53  32 34 33  84 83 72
+90 89 73  110 109 94  110 109 94  105 104 92  110 109 94  110 109 94
+72 73 67  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  96 95 69  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  161 156 96  118 116 76  82 81 62  16 17 12  9 11 11
+9 11 11  9 12 12  10 13 13  12 14 14  13 16 16  14 18 18
+15 19 19  16 20 20  16 20 20  16 20 20  16 20 20  16 20 20
+16 20 20  16 20 20  16 20 20  16 20 20  16 20 20  16 20 20
+16 20 20  16 20 20  16 20 20  16 20 20  16 20 20  16 20 20
+16 19 19  33 36 34  99 98 80  156 151 111  145 141 105  184 179 149
+168 163 120  184 179 149  177 172 135  156 151 111  145 141 105  110 109 94
+90 89 73  2 2 2  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  71 71 57  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  230 229 82
+230 229 82  161 156 96  230 229 82  230 229 82  230 229 82  161 156 96
+118 116 76  82 81 62  30 31 28  9 11 11  9 11 11  9 11 11
+10 12 12  10 13 13  11 14 14  13 16 16  14 17 17  15 18 18
+15 19 19  16 20 20  16 20 20  16 20 20  16 20 20  16 20 20
+16 20 20  16 20 20  16 20 20  16 20 20  16 20 20  16 20 20
+16 20 20  16 20 20  16 20 20  16 20 20  16 20 20  16 20 20
+18 22 22  58 59 55  137 133 100  197 193 154  214 212 158  210 208 158
+197 193 154  184 179 149  184 179 149  137 133 100  110 109 94  99 98 80
+84 83 72  10 10 9  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  16 17 12  230 229 82  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  230 229 82  161 156 96
+161 156 96  161 156 96  161 156 96  161 156 96  118 116 76  71 71 57
+21 22 20  12 14 14  11 13 13  10 12 12  10 12 12  10 13 13
+11 13 13  12 15 15  13 16 16  14 17 17  14 18 18  15 19 19
+16 20 20  16 20 20  16 20 20  16 20 20  16 20 20  16 20 20
+16 20 20  16 20 20  16 20 20  16 20 20  16 20 20  16 20 20
+16 20 20  16 20 20  16 20 20  16 20 20  16 20 20  17 21 21
+23 27 26  84 83 72  184 179 149  251 251 187  210 208 158  184 179 149
+184 179 149  156 151 111  110 109 94  84 83 72  63 64 60  51 52 50
+18 22 22  6 8 8  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  118 116 76  230 229 82
+230 229 82  230 229 82  230 229 82  230 229 82  161 156 96  161 156 96
+161 156 96  161 156 96  118 116 76  53 55 47  20 23 22  16 19 19
+13 16 16  12 15 15  12 14 14  11 14 14  11 14 14  11 14 14
+12 15 15  13 16 16  14 17 17  15 19 19  16 20 20  17 21 21
+23 27 26  18 22 22  20 24 24  23 27 26  30 32 31  17 21 21
+16 20 20  16 20 20  16 20 20  16 20 20  16 20 20  16 20 20
+16 20 20  16 20 20  16 20 20  16 20 20  16 20 20  16 20 20
+23 27 26  33 37 35  137 133 100  156 151 111  158 153 112  105 104 92
+105 104 92  68 70 65  39 40 39  18 22 22  12 14 14  12 15 15
+9 11 11  4 5 5  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  16 17 12  230 229 82
+230 229 82  230 229 82  230 229 82  161 156 96  118 116 76  118 116 76
+118 116 76  66 65 55  43 45 43  32 34 33  25 27 26  20 23 22
+17 20 20  15 18 18  14 17 17  15 18 18  13 16 16  14 17 17
+14 18 18  16 20 20  32 34 33  55 57 54  58 59 55  72 73 67
+105 104 92  55 57 54  65 66 61  63 64 60  40 43 41  33 37 35
+41 42 42  20 24 24  16 20 20  16 20 20  16 20 20  16 20 20
+16 20 20  16 20 20  16 20 20  16 20 20  16 20 20  16 20 20
+17 21 21  26 28 27  30 32 31  35 37 36  68 70 65  39 40 39
+23 27 26  15 18 18  13 16 16  11 14 14  9 12 12  8 10 10
+7 9 9  6 7 7  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  36 38 35
+230 229 82  230 229 82  230 229 82  96 95 69  30 31 28  49 51 48
+90 89 73  68 70 65  55 57 54  47 48 46  47 48 46  43 45 43
+32 34 33  43 45 43  43 45 43  23 27 26  25 27 26  40 43 41
+40 43 41  90 89 73  110 109 94  145 141 105  156 151 111  156 151 111
+184 179 149  184 179 149  177 172 135  184 179 149  137 133 100  84 83 72
+105 104 92  63 64 60  49 51 48  47 48 46  28 31 30  18 22 22
+16 20 20  16 20 20  16 20 20  16 20 20  16 20 20  16 20 20
+16 20 20  15 19 19  15 19 19  15 19 19  18 22 22  15 19 19
+13 16 16  12 15 15  11 14 14  10 13 13  9 12 12  9 11 11
+8 10 10  6 8 8  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+30 31 28  230 229 82  71 71 57  2 2 1  0 0 0  58 59 55
+105 104 92  84 83 72  65 66 61  84 83 72  110 109 94  110 109 94
+145 141 105  105 104 92  110 109 94  110 109 94  84 83 72  110 109 94
+158 153 112  197 193 154  197 193 154  239 239 170  251 251 187  251 251 187
+251 251 187  251 251 187  251 251 187  251 251 187  210 208 158  197 193 154
+197 193 154  184 179 149  145 141 105  137 133 100  105 104 92  47 48 46
+20 23 23  16 20 20  16 20 20  16 20 20  16 20 20  16 20 20
+16 20 20  16 19 19  15 19 19  15 19 19  14 18 18  14 17 17
+13 17 17  13 16 16  12 14 14  12 14 14  13 13 13  13 13 13
+13 13 13  12 12 12  10 10 9  6 7 7  2 2 2  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  1 1 0  0 0 0  0 0 0  65 66 61
+105 104 92  84 83 72  84 83 72  110 109 94  184 179 149  210 208 158
+210 208 158  210 208 158  214 212 158  197 193 154  214 212 158  210 208 158
+251 251 187  251 251 187  251 251 187  251 251 187  251 251 187  251 251 187
+251 251 187  251 251 187  251 251 187  251 251 187  251 251 187  251 251 187
+251 251 187  251 251 187  239 239 170  251 251 187  184 179 149  84 83 72
+26 28 27  16 20 20  16 20 20  16 20 20  16 20 20  16 20 20
+16 20 20  16 20 20  15 19 19  15 19 19  15 18 18  14 18 18
+13 17 17  13 16 16  15 15 15  14 14 13  14 14 13  14 14 13
+13 13 13  13 13 13  12 12 12  12 12 12  12 12 12  3 4 4
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  72 73 67
+105 104 92  99 98 80  84 83 72  99 98 80  177 172 135  197 193 154
+251 251 187  251 251 187  251 251 187  251 251 187  251 251 187  251 251 187
+251 251 187  251 251 187  251 251 187  251 251 187  251 251 187  251 251 187
+251 251 187  251 251 187  251 251 187  251 251 187  251 251 187  251 251 187
+251 251 187  251 251 187  251 251 187  214 212 158  197 193 154  99 98 80
+23 27 26  16 20 20  16 20 20  16 20 20  16 20 20  16 20 20
+16 20 20  16 20 20  15 19 19  15 19 19  15 18 18  14 18 18
+14 17 17  16 16 16  16 16 16  16 16 16  15 15 15  14 14 13
+14 14 13  13 13 13  13 13 13  12 12 12  12 12 12  12 12 12
+3 3 3  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  84 83 72
+110 109 94  99 98 80  72 73 67  63 64 60  99 98 80  177 172 135
+184 179 149  210 208 158  251 251 187  251 251 187  251 251 187  251 251 187
+251 251 187  251 251 187  251 251 187  251 251 187  251 251 187  251 251 187
+251 251 187  251 251 187  251 251 187  251 251 187  251 251 187  251 251 187
+251 251 187  210 208 158  184 179 149  177 172 135  110 109 94  33 37 35
+17 21 21  16 20 20  16 20 20  16 20 20  16 20 20  16 20 20
+16 20 20  16 20 20  15 19 19  15 19 19  15 19 19  14 18 18
+15 18 18  18 19 18  18 19 18  17 17 17  16 16 16  15 15 15
+14 14 13  13 13 13  13 13 13  12 12 12  12 12 12  12 12 12
+10 10 9  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  2 2 2  105 104 92
+108 107 93  99 98 80  72 73 67  63 64 60  51 52 50  87 86 72
+105 104 92  110 109 94  108 107 93  156 151 111  184 179 149  184 179 149
+197 193 154  197 193 154  197 193 154  184 179 149  184 179 149  177 172 135
+197 193 154  156 151 111  177 172 135  184 179 149  168 163 120  137 133 100
+145 141 105  110 109 94  99 98 80  47 48 46  55 57 54  15 19 19
+16 19 19  16 20 20  16 20 20  16 20 20  16 20 20  16 20 20
+17 20 20  17 21 21  16 20 20  16 19 19  15 19 19  16 19 19
+20 20 20  21 22 21  20 20 20  19 20 19  18 19 18  16 16 16
+15 15 15  14 14 13  13 13 13  13 13 13  12 12 12  12 12 12
+12 12 12  4 5 5  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  58 59 55  110 109 94
+105 104 92  90 89 73  72 73 67  55 57 54  43 45 43  39 40 39
+43 45 43  46 47 45  43 45 43  68 70 65  65 66 61  63 64 60
+108 107 93  72 73 67  105 104 92  90 89 73  72 73 67  40 43 41
+72 73 67  68 70 65  68 70 65  58 59 55  63 64 60  49 51 48
+43 45 43  33 36 34  27 30 29  20 24 24  16 20 20  15 19 19
+15 19 19  15 19 19  15 19 19  16 19 19  16 20 20  16 20 20
+17 21 21  20 24 24  20 23 22  17 21 21  17 20 20  20 20 20
+21 22 21  21 22 21  21 22 21  21 22 21  20 20 20  18 19 18
+16 16 16  15 15 15  13 13 13  13 13 13  12 12 12  12 12 12
+12 12 12  10 10 9  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  21 22 21  110 109 94  110 109 94
+105 104 92  84 83 72  68 70 65  51 52 50  41 42 42  33 37 35
+28 31 30  23 27 26  20 23 23  18 22 22  17 20 20  25 27 26
+26 28 27  27 30 29  25 27 26  20 23 23  23 27 26  30 32 31
+20 24 24  17 21 21  18 22 22  15 19 19  26 28 27  20 23 23
+14 18 18  15 19 19  15 18 18  15 19 19  15 19 19  15 19 19
+15 19 19  15 19 19  15 19 19  15 19 19  15 19 19  16 19 19
+16 20 20  22 24 23  24 26 24  22 24 23  20 23 22  22 24 23
+24 26 24  24 26 24  23 24 24  22 24 23  21 22 21  19 20 19
+17 17 17  15 15 15  14 14 13  13 13 13  12 12 12  12 12 12
+12 12 12  12 12 12  2 2 2  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  2 2 2  99 98 80  110 109 94  108 107 93
+105 104 92  84 83 72  63 64 60  49 51 48  39 40 39  32 34 33
+27 30 29  23 25 24  20 23 23  17 20 20  15 19 19  14 18 18
+14 17 17  13 17 17  13 17 17  13 17 17  13 17 17  13 17 17
+14 17 17  14 17 17  14 17 17  14 17 17  14 17 17  14 17 17
+14 18 18  14 18 18  14 18 18  14 18 18  15 18 18  15 19 19
+15 19 19  15 19 19  15 19 19  15 19 19  15 19 19  15 19 19
+15 19 19  17 21 21  27 29 28  26 28 27  25 27 26  25 27 26
+27 29 28  27 29 28  26 28 27  24 26 24  21 22 21  20 20 20
+18 19 18  16 16 16  14 14 13  13 13 13  12 12 12  12 12 12
+12 12 12  12 12 12  4 5 5  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  51 52 50  110 109 94  110 109 94  105 104 92
+90 89 73  72 73 67  55 57 54  43 45 43  35 37 36  30 32 31
+26 28 27  20 24 24  17 21 21  16 19 19  15 18 18  14 17 17
+13 16 16  13 16 16  13 16 16  13 16 16  13 16 16  13 16 16
+13 16 16  13 16 16  13 16 16  13 17 17  13 17 17  14 17 17
+14 17 17  14 17 17  14 17 17  14 18 18  14 18 18  14 18 18
+15 18 18  15 18 18  15 19 19  15 19 19  15 19 19  15 19 19
+15 19 19  15 19 19  27 29 28  32 34 33  28 31 30  27 29 28
+30 32 31  30 32 31  30 31 28  26 28 27  23 24 24  21 22 21
+19 20 19  16 16 16  14 14 13  13 13 13  12 12 12  12 12 12
+12 12 12  12 12 12  6 7 7  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  3 3 3  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  10 10 9  108 107 93  110 109 94  108 107 93  99 98 80
+84 83 72  63 64 60  49 51 48  40 43 41  33 36 34  27 30 29
+23 27 26  18 22 22  17 20 20  15 18 18  14 17 17  13 16 16
+13 16 16  13 16 16  12 15 15  12 15 15  12 15 15  12 15 15
+13 16 16  13 16 16  13 16 16  13 16 16  13 16 16  13 16 16
+13 17 17  13 17 17  14 17 17  14 17 17  14 17 17  14 18 18
+14 18 18  14 18 18  15 18 18  15 18 18  15 19 19  15 19 19
+15 19 19  15 19 19  17 21 21  33 36 34  32 34 33  31 33 31
+33 36 34  33 36 34  31 33 31  27 29 28  25 27 26  21 22 21
+19 20 19  17 17 17  15 15 15  13 13 13  12 12 12  12 12 12
+12 12 12  12 12 12  8 8 7  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  63 64 60  137 133 100  43 45 43  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  68 70 65  110 109 94  110 109 94  105 104 92  84 83 72
+68 70 65  55 57 54  43 45 43  35 37 36  30 32 31  26 28 27
+20 24 24  17 21 21  16 19 19  14 17 17  13 16 16  12 15 15
+12 15 15  12 15 15  12 15 15  12 15 15  12 15 15  12 15 15
+12 15 15  12 15 15  12 15 15  12 15 15  12 15 15  13 16 16
+13 16 16  13 16 16  13 16 16  13 17 17  13 17 17  14 17 17
+14 17 17  14 17 17  14 18 18  14 18 18  14 18 18  15 18 18
+15 19 19  15 19 19  15 19 19  20 24 24  32 34 33  35 37 36
+37 39 37  35 37 36  33 36 34  30 32 31  26 28 27  22 24 23
+20 20 20  17 17 17  15 15 15  13 13 13  12 12 12  12 12 12
+12 12 12  12 12 12  8 8 7  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+1 1 1  99 98 80  184 179 149  184 179 149  68 70 65  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+15 15 15  110 109 94  110 109 94  108 107 93  99 98 80  72 73 67
+61 63 57  49 51 48  39 40 39  33 36 34  27 30 29  23 25 24
+18 22 22  16 19 19  14 17 17  13 16 16  12 15 15  12 15 15
+11 14 14  11 14 14  11 14 14  11 14 14  11 14 14  11 14 14
+11 14 14  11 14 14  12 14 14  12 15 15  12 15 15  12 15 15
+12 15 15  13 16 16  13 16 16  13 16 16  13 16 16  13 16 16
+13 17 17  14 17 17  14 17 17  14 17 17  14 18 18  14 18 18
+14 18 18  15 18 18  15 19 19  15 19 19  30 32 31  38 39 37
+39 40 39  39 40 39  35 37 36  31 33 31  27 29 28  22 24 23
+20 20 20  17 17 17  15 15 15  13 13 13  12 12 12  12 12 12
+12 12 12  12 12 12  8 8 7  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  3 3 3
+110 109 94  197 193 154  210 208 158  184 179 149  68 70 65  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+68 70 65  110 109 94  110 109 94  105 104 92  84 83 72  65 66 61
+51 52 50  43 45 43  35 37 36  30 32 31  25 27 26  20 23 23
+17 20 20  15 18 18  13 16 16  12 15 15  12 15 15  11 14 14
+11 14 14  11 14 14  11 13 13  11 13 13  11 13 13  11 13 13
+11 14 14  11 14 14  11 14 14  11 14 14  11 14 14  11 14 14
+12 15 15  12 15 15  12 15 15  12 15 15  13 16 16  13 16 16
+13 16 16  13 16 16  13 17 17  13 17 17  14 17 17  14 17 17
+14 18 18  14 18 18  14 18 18  16 19 19  37 39 37  41 42 42
+41 42 42  41 42 42  38 39 37  32 34 33  27 29 28  23 24 24
+21 22 21  17 17 17  15 15 15  13 13 13  12 12 12  12 12 12
+12 12 12  12 12 12  8 8 7  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  11 11 11  137 133 100
+197 193 154  251 251 187  239 239 170  184 179 149  31 33 31  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  12 12 12
+110 109 94  110 109 94  105 104 92  90 89 73  72 73 67  58 59 55
+46 47 45  37 39 37  31 33 31  26 28 27  20 24 24  17 21 21
+15 18 18  13 16 16  12 15 15  12 14 14  11 13 13  11 13 13
+10 13 13  10 13 13  10 13 13  10 13 13  10 13 13  10 13 13
+10 13 13  10 13 13  11 13 13  11 13 13  11 14 14  11 14 14
+11 14 14  11 14 14  12 14 14  12 15 15  12 15 15  12 15 15
+13 16 16  13 16 16  13 16 16  13 16 16  13 17 17  13 17 17
+14 17 17  14 17 17  14 18 18  23 27 26  41 42 42  41 42 42
+43 45 43  41 42 42  39 40 39  33 36 34  27 29 28  23 24 24
+21 22 21  17 17 17  15 15 15  13 13 13  12 12 12  12 12 12
+12 12 12  12 12 12  6 7 7  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  27 29 28  168 163 120  210 208 158
+251 251 187  251 251 187  210 208 158  137 133 100  1 1 1  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  60 60 56
+110 109 94  105 104 92  105 104 92  84 83 72  65 66 61  51 52 50
+40 43 41  33 36 34  27 30 29  23 25 24  18 22 22  16 19 19
+14 17 17  12 15 15  11 14 14  11 14 14  10 13 13  10 13 13
+10 13 13  10 12 12  10 12 12  10 12 12  10 12 12  10 12 12
+10 12 12  10 12 12  10 13 13  10 13 13  10 13 13  11 13 13
+11 13 13  11 14 14  11 14 14  11 14 14  11 14 14  12 15 15
+12 15 15  12 15 15  12 15 15  13 16 16  13 16 16  13 16 16
+13 17 17  13 17 17  14 17 17  32 34 33  43 45 43  43 45 43
+43 45 43  43 45 43  39 40 39  33 36 34  27 29 28  23 24 24
+21 22 21  17 17 17  15 15 15  13 13 13  12 12 12  12 12 12
+12 12 12  12 12 12  6 7 7  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  1 1 1  68 70 65  184 179 149  210 208 158  251 251 187
+251 251 187  214 212 158  184 179 149  37 39 37  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  6 7 7  105 104 92
+105 104 92  105 104 92  99 98 80  72 73 67  58 59 55  46 47 45
+35 37 36  30 32 31  25 27 26  20 23 23  16 19 19  14 17 17
+12 15 15  12 14 14  11 13 13  10 13 13  10 12 12  10 12 12
+10 12 12  10 12 12  9 12 12  9 12 12  9 12 12  9 12 12
+10 12 12  10 12 12  10 12 12  10 12 12  10 12 12  10 13 13
+10 13 13  10 13 13  11 13 13  11 13 13  11 14 14  11 14 14
+11 14 14  12 15 15  12 15 15  12 15 15  12 15 15  13 16 16
+13 16 16  13 16 16  17 20 20  41 42 42  46 47 45  46 47 45
+46 47 45  43 45 43  40 41 39  33 36 34  27 29 28  23 24 24
+20 20 20  17 17 17  15 15 15  13 13 13  12 12 12  12 12 12
+12 12 12  12 12 12  4 5 5  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+15 15 15  110 109 94  197 193 154  214 212 158  251 251 187  251 251 187
+239 239 170  184 179 149  84 83 72  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  47 48 46  105 104 92
+105 104 92  99 98 80  84 83 72  68 70 65  51 52 50  40 43 41
+32 34 33  27 29 28  22 24 23  17 21 21  15 18 18  13 16 16
+12 15 15  11 13 13  10 13 13  10 12 12  9 12 12  9 12 12
+9 12 12  9 12 12  9 11 11  9 11 11  9 11 11  9 11 11
+9 12 12  9 12 12  9 12 12  9 12 12  10 12 12  10 12 12
+10 12 12  10 12 12  10 13 13  10 13 13  10 13 13  11 13 13
+11 14 14  11 14 14  11 14 14  12 14 14  12 15 15  12 15 15
+12 15 15  13 16 16  28 31 30  43 45 43  47 48 46  47 48 46
+47 48 46  43 45 43  40 41 39  33 36 34  27 29 28  22 24 23
+20 20 20  17 17 17  15 15 15  13 13 13  12 12 12  12 12 12
+12 12 12  12 12 12  3 4 4  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  1 1 1  60 60 56
+177 172 135  197 193 154  251 251 187  251 251 187  251 251 187  251 251 187
+184 179 149  110 109 94  3 4 4  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  1 1 1  99 98 80  105 104 92
+99 98 80  87 86 72  84 83 72  63 64 60  46 47 45  35 37 36
+30 32 31  25 27 26  18 22 22  16 19 19  14 17 17  12 15 15
+11 14 14  10 13 13  9 12 12  9 12 12  9 11 11  9 11 11
+9 11 11  9 11 11  9 11 11  9 11 11  9 11 11  9 11 11
+9 11 11  9 11 11  9 11 11  9 11 11  9 12 12  9 12 12
+9 12 12  10 12 12  10 12 12  10 12 12  10 13 13  10 13 13
+10 13 13  11 13 13  11 14 14  11 14 14  11 14 14  12 15 15
+12 15 15  14 17 17  41 42 42  47 48 46  49 51 48  51 52 50
+47 48 46  43 45 43  40 41 39  33 36 34  27 29 28  22 24 23
+19 20 19  16 16 16  14 14 13  13 13 13  12 12 12  12 12 12
+12 12 12  12 12 12  2 2 2  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  23 24 24  137 133 100  184 179 149
+210 208 158  251 251 187  251 251 187  251 251 187  251 251 187  184 179 149
+110 109 94  13 13 13  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  30 32 31  105 104 92  99 98 80
+84 83 72  84 83 72  72 73 67  55 57 54  41 42 42  32 34 33
+27 29 28  20 24 24  17 20 20  14 17 17  13 16 16  12 14 14
+10 13 13  10 12 12  9 11 11  9 11 11  9 11 11  9 11 11
+9 11 11  9 11 11  9 11 11  9 11 11  9 11 11  9 11 11
+9 11 11  9 11 11  9 11 11  9 11 11  9 11 11  9 11 11
+9 11 11  9 12 12  9 12 12  10 12 12  10 12 12  10 12 12
+10 13 13  10 13 13  10 13 13  11 13 13  11 14 14  11 14 14
+11 14 14  27 29 28  55 56 53  72 73 67  51 52 50  51 52 50
+49 51 48  43 45 43  39 40 39  32 34 33  26 28 27  21 22 21
+19 20 19  16 16 16  18 19 17  13 13 13  12 12 12  12 12 12
+12 12 12  12 12 12  1 1 1  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  8 8 7  84 83 72  184 179 149  197 193 154  251 251 187
+251 251 187  251 251 187  251 251 187  251 251 187  184 179 149  145 141 105
+19 20 19  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  14 14 13  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  72 73 67  105 104 92  84 83 72
+72 73 67  84 83 72  68 70 65  49 51 48  39 40 39  30 32 31
+25 27 26  18 22 22  15 18 18  13 16 16  12 15 15  11 13 13
+10 12 12  9 11 11  9 11 11  9 11 11  9 11 11  9 11 11
+9 11 11  9 11 11  9 11 11  9 11 11  9 11 11  9 11 11
+9 11 11  9 11 11  9 11 11  9 11 11  9 11 11  9 11 11
+9 11 11  9 11 11  9 11 11  9 12 12  9 12 12  9 12 12
+10 12 12  10 12 12  10 12 12  10 13 13  10 13 13  11 13 13
+13 16 16  41 42 42  99 98 80  158 153 112  65 66 61  51 52 50
+49 51 48  43 45 43  39 40 39  31 33 31  25 27 26  21 22 21
+21 22 21  68 70 65  55 56 53  13 13 13  12 12 12  12 12 12
+12 12 12  11 11 11  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  3 3 3
+63 64 60  158 153 112  184 179 149  210 208 158  251 251 187  251 251 187
+251 251 187  251 251 187  251 251 187  184 179 149  137 133 100  27 29 28
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+21 22 21  110 109 94  5 6 5  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  13 13 13  105 104 92  90 89 73  72 73 67
+68 70 65  84 83 72  63 64 60  46 47 45  35 37 36  27 29 28
+22 24 23  17 20 20  14 17 17  12 15 15  11 14 14  10 12 12
+10 12 12  9 11 11  9 11 11  9 11 11  9 11 11  9 11 11
+9 11 11  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  9 11 11  9 11 11  9 11 11  9 11 11  9 11 11
+9 11 11  9 11 11  9 11 11  9 11 11  9 11 11  9 11 11
+9 12 12  9 12 12  10 12 12  10 12 12  10 13 13  10 13 13
+30 32 31  47 48 46  177 172 135  210 208 158  137 133 100  55 56 53
+49 51 48  43 45 43  38 39 37  31 33 31  25 27 26  22 24 23
+110 109 94  184 179 149  63 64 60  13 13 13  12 12 12  12 12 12
+12 12 12  8 9 9  0 0 0  1 1 1  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  21 22 21  105 104 92
+184 179 149  210 208 158  251 251 187  251 251 187  251 251 187  251 251 187
+251 251 187  251 251 187  184 179 149  145 141 105  23 24 24  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+68 70 65  184 179 149  105 104 92  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  51 52 50  99 98 80  84 83 72  63 64 60
+68 70 65  72 73 67  55 57 54  41 42 42  32 34 33  25 27 26
+20 23 23  16 19 19  13 16 16  12 14 14  10 13 13  10 12 12
+9 11 11  9 11 11  9 11 11  9 11 11  9 11 11  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  9 11 11  9 11 11
+9 11 11  9 11 11  9 11 11  9 11 11  9 11 11  9 11 11
+9 11 11  9 11 11  9 12 12  9 12 12  10 12 12  17 20 20
+46 47 45  72 73 67  210 208 158  251 251 187  210 208 158  63 64 60
+49 51 48  43 45 43  37 39 37  30 32 31  24 26 24  105 104 92
+210 208 158  197 193 154  47 48 46  13 13 13  12 12 12  12 12 12
+12 12 12  6 7 7  33 36 34  48 49 45  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  8 8 7  23 24 24  55 56 53  110 109 94
+210 208 158  251 251 187  251 251 187  251 251 187  251 251 187  251 251 187
+251 251 187  184 179 149  110 109 94  20 20 20  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+110 109 94  251 251 187  210 208 158  47 48 46  0 0 0  0 0 0
+0 0 0  1 1 1  90 89 73  90 89 73  72 73 67  55 56 53
+72 73 67  68 70 65  51 52 50  37 39 37  28 31 30  23 25 24
+17 21 21  15 18 18  12 15 15  11 14 14  10 13 13  9 12 12
+9 11 11  9 11 11  9 11 11  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  9 11 11  9 11 11  9 11 11  9 11 11  9 11 11
+9 11 11  9 11 11  9 11 11  9 12 12  13 16 16  41 42 42
+49 51 48  110 109 94  251 251 187  251 251 187  251 251 187  105 104 92
+49 51 48  43 45 43  35 37 36  30 31 28  47 48 46  197 193 154
+251 251 187  197 193 154  31 33 31  12 12 12  12 12 12  12 12 12
+12 12 12  51 52 50  184 179 149  72 73 67  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  2 2 2
+11 11 11  21 22 21  30 32 31  40 41 39  60 60 56  145 141 105
+251 251 187  251 251 187  251 251 187  251 251 187  251 251 187  214 212 158
+184 179 149  110 109 94  13 13 13  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  4 5 4  61 61 53  48 49 45  3 4 3
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+156 151 111  251 251 187  251 251 187  184 179 149  11 11 11  0 0 0
+0 0 0  26 28 27  99 98 80  84 83 72  60 60 56  43 45 43
+72 73 67  65 66 61  49 51 48  35 37 36  27 29 28  20 24 24
+17 20 20  14 17 17  12 15 15  11 13 13  10 12 12  9 11 11
+9 11 11  9 11 11  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  9 11 11  9 11 11
+9 11 11  9 11 11  9 11 11  11 13 13  37 39 37  47 48 46
+51 52 50  184 179 149  251 251 187  251 251 187  251 251 187  145 141 105
+47 48 46  41 42 42  35 37 36  27 29 28  137 133 100  251 251 187
+251 251 187  197 193 154  19 20 19  12 12 12  12 12 12  12 12 12
+27 29 28  184 179 149  214 212 158  63 64 60  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  1 1 1  6 7 7  16 16 16  24 26 24
+30 32 31  38 39 37  47 48 46  55 57 54  68 70 65  110 109 94
+197 193 154  251 251 187  251 251 187  251 251 187  210 208 158  184 179 149
+105 104 92  8 8 7  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  65 66 61  184 179 149  156 151 111
+30 32 31  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+168 163 120  251 251 187  251 251 187  251 251 187  110 109 94  0 0 0
+0 0 0  60 60 56  84 83 72  68 70 65  51 52 50  38 39 37
+84 83 72  63 64 60  43 45 43  33 36 34  25 27 26  20 23 22
+15 18 18  13 16 16  12 14 14  10 13 13  9 12 12  9 11 11
+9 11 11  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+9 11 11  9 11 11  10 12 12  33 36 34  46 47 45  51 52 50
+72 73 67  210 208 158  251 251 187  251 251 187  251 251 187  177 172 135
+47 48 46  41 42 42  35 37 36  37 39 37  184 179 149  251 251 187
+251 251 187  197 193 154  13 13 13  12 12 12  12 12 12  12 12 12
+110 109 94  251 251 187  251 251 187  37 39 37  0 0 0  0 0 0
+0 0 0  21 22 20  2 2 1  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+4 5 5  12 12 12  21 22 21  25 27 26  30 32 31  38 39 37
+46 47 45  55 56 53  60 60 56  65 66 61  68 70 65  105 104 92
+110 109 94  197 193 154  210 208 158  197 193 154  184 179 149  84 83 72
+2 2 2  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  13 13 13  184 179 149  251 251 187
+197 193 154  43 44 41  0 0 0  0 0 0  0 0 0  0 0 0
+145 141 105  251 251 187  251 251 187  251 251 187  214 212 158  43 45 43
+2 2 2  84 83 72  72 73 67  58 59 55  41 42 42  38 39 37
+72 73 67  58 59 55  41 42 42  31 33 31  25 27 26  18 22 22
+14 17 17  12 15 15  12 14 14  10 12 12  9 12 12  9 11 11
+9 11 11  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  9 12 12  31 33 31  43 45 43  49 51 48  55 56 53
+110 109 94  251 251 187  251 251 187  251 251 187  251 251 187  168 163 120
+47 48 46  41 42 42  33 36 34  63 64 60  197 193 154  251 251 187
+251 251 187  184 179 149  13 13 13  12 12 12  12 12 12  16 16 16
+197 193 154  251 251 187  239 239 170  20 20 20  0 0 0  2 2 1
+108 107 93  110 109 94  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  1 1 1  4 5 5  11 11 11  18 19 18
+22 24 23  26 28 27  32 34 33  39 40 39  46 47 45  51 52 50
+55 57 54  60 60 56  63 64 60  63 64 60  63 64 60  58 59 55
+63 64 60  99 98 80  145 141 105  137 133 100  43 45 43  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  3 4 3  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  110 109 94  251 251 187
+251 251 187  184 179 149  25 27 26  0 0 0  0 0 0  0 0 0
+99 98 80  251 251 187  251 251 187  251 251 187  251 251 187  156 151 111
+25 27 26  84 83 72  65 66 61  47 48 46  32 34 33  39 40 39
+72 73 67  55 57 54  40 41 39  30 32 31  23 25 24  18 22 22
+14 17 17  12 15 15  11 13 13  10 12 12  9 11 11  9 11 11
+9 11 11  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+9 11 11  28 31 30  41 42 42  47 48 46  55 56 53  58 59 55
+137 133 100  251 251 187  251 251 187  251 251 187  210 208 158  137 133 100
+47 48 46  40 41 39  32 34 33  75 75 61  184 179 149  239 239 170
+251 251 187  177 172 135  13 13 13  12 12 12  12 12 12  43 44 41
+197 193 154  251 251 187  210 208 158  10 10 9  0 0 0  84 83 72
+251 251 187  84 83 72  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  1 1 1
+6 7 7  11 11 11  17 17 17  20 20 20  23 24 24  27 29 28
+32 34 33  38 39 37  43 45 43  47 48 46  51 52 50  55 56 53
+58 59 55  58 59 55  55 57 54  55 56 53  47 48 46  41 42 42
+35 37 36  31 33 31  47 48 46  14 14 13  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  66 65 55  99 98 80  20 20 20
+0 0 0  0 0 0  0 0 0  0 0 0  43 45 43  214 212 158
+251 251 187  251 251 187  145 141 105  3 3 3  0 0 0  0 0 0
+48 49 45  184 179 149  239 239 170  251 251 187  239 239 170  177 172 135
+84 83 72  72 73 67  55 56 53  39 40 39  26 28 27  39 40 39
+68 70 65  51 52 50  39 40 39  28 31 30  22 24 23  17 20 20
+14 17 17  12 14 14  10 13 13  9 11 11  9 11 11  9 11 11
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+27 29 28  40 41 39  46 47 45  51 52 50  55 57 54  63 64 60
+131 127 93  197 193 154  210 208 158  197 193 154  168 163 120  96 95 69
+47 48 46  40 41 39  32 34 33  71 71 57  145 141 105  184 179 149
+184 179 149  131 127 93  13 13 13  12 12 12  12 12 12  48 49 45
+168 163 120  184 179 149  156 151 111  6 7 7  14 14 13  177 172 135
+239 239 170  40 41 39  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  3 3 3  6 7 7  11 11 11  16 16 16
+18 19 18  21 22 21  23 24 24  27 29 28  32 34 33  37 39 37
+41 42 42  43 45 43  47 48 46  51 52 50  51 52 50  51 52 50
+51 52 50  49 51 48  46 47 45  40 41 39  32 34 33  25 27 26
+20 20 20  14 14 13  2 2 2  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  33 36 34  197 193 154  184 179 149
+41 42 42  0 0 0  0 0 0  0 0 0  3 3 3  184 179 149
+251 251 187  251 251 187  184 179 149  48 49 45  0 0 0  0 0 0
+16 17 12  121 119 87  177 172 135  194 189 146  188 184 146  145 141 105
+82 81 62  63 64 60  46 47 45  31 33 31  21 22 21  35 37 36
+68 70 65  51 52 50  37 39 37  27 30 29  22 24 23  17 20 20
+13 16 16  12 14 14  10 13 13  9 11 11  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  25 27 26
+38 39 37  43 45 43  51 52 50  55 56 53  60 60 56  63 64 60
+92 91 72  158 153 112  176 171 126  171 165 117  149 143 98  82 81 62
+44 46 43  38 39 37  30 32 31  71 71 57  131 127 93  160 154 106
+149 143 98  82 81 62  13 13 13  12 12 12  12 12 12  46 47 43
+121 119 87  134 131 96  96 95 69  7 7 6  38 39 37  131 127 93
+145 141 105  12 13 12  0 0 0  1 1 1  3 3 3  6 7 7
+10 10 9  12 12 12  14 14 13  16 16 16  18 19 18  21 22 21
+22 24 23  26 28 27  30 31 28  33 36 34  37 39 37  40 41 39
+41 42 42  43 45 43  46 47 45  46 47 45  46 47 45  43 45 43
+41 42 42  37 39 37  31 33 31  26 28 27  21 22 21  16 16 16
+6 7 7  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  177 172 135  251 251 187
+197 193 154  27 29 28  0 0 0  0 0 0  0 0 0  110 109 94
+239 239 170  239 239 170  184 179 149  87 86 72  2 2 1  0 0 0
+1 1 1  82 81 62  142 137 94  165 161 109  165 161 109  131 127 93
+75 75 61  55 56 53  37 39 37  25 27 26  19 20 19  32 34 33
+65 66 61  49 51 48  35 37 36  27 29 28  20 23 23  16 19 19
+13 16 16  13 13 13  10 12 12  9 11 11  8 10 10  8 10 10
+8 9 9  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  22 24 23  35 37 36
+41 42 42  47 48 46  55 56 53  58 59 55  63 64 60  65 66 61
+71 71 57  131 127 93  160 154 106  160 154 106  142 137 94  82 81 62
+46 47 43  40 41 39  33 36 34  66 65 55  125 122 87  149 143 98
+142 137 94  82 81 62  17 17 17  18 19 17  14 14 13  46 47 43
+118 116 76  125 122 87  96 95 69  16 17 12  71 71 57  103 101 77
+82 81 62  11 11 11  11 11 11  13 13 13  14 14 13  14 14 13
+15 15 15  16 16 16  17 17 17  19 20 19  21 22 21  23 24 24
+26 28 27  27 29 28  31 33 31  33 36 34  35 37 36  38 39 37
+39 40 39  39 40 39  38 39 37  37 39 37  35 37 36  31 33 31
+27 29 28  24 26 24  21 22 21  17 17 17  12 12 12  2 2 2
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  68 70 65  251 251 187
+251 251 187  156 151 111  2 2 1  0 0 0  0 0 0  43 44 41
+177 172 135  184 179 149  158 153 112  103 101 77  19 20 18  0 0 0
+0 0 0  46 47 43  131 127 93  160 154 106  160 154 106  131 127 93
+71 71 57  43 45 43  30 32 31  21 22 21  16 16 16  26 28 27
+63 64 60  47 48 46  35 37 36  26 28 27  20 23 23  16 19 19
+13 16 16  13 13 13  10 12 12  9 11 11  8 10 10  8 10 10
+7 9 9  7 9 9  8 9 9  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  20 20 20  33 36 34  40 41 39
+46 47 45  51 52 50  55 57 54  60 60 56  63 64 60  65 66 61
+66 65 55  118 116 76  151 147 98  165 161 109  151 147 98  121 119 87
+96 95 69  96 95 69  96 95 69  103 101 77  142 137 94  151 147 98
+142 137 94  103 101 77  82 81 62  82 81 62  82 81 62  96 95 69
+131 127 93  142 137 94  103 101 77  46 47 43  96 95 69  118 116 76
+71 71 57  14 14 13  14 14 13  15 15 15  15 15 15  16 16 16
+16 16 16  17 17 17  18 19 18  20 20 20  21 22 21  23 24 24
+25 27 26  27 29 28  30 31 28  30 32 31  31 33 31  31 33 31
+31 33 31  31 33 31  30 31 28  27 29 28  25 27 26  22 24 23
+20 20 20  16 16 16  13 13 13  6 7 7  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+58 59 55  68 70 65  8 8 7  0 0 0  10 10 9  210 208 158
+251 251 187  184 179 149  38 39 37  0 0 0  0 0 0  8 8 7
+103 101 77  149 143 98  149 143 98  118 116 76  40 41 39  25 27 25
+53 55 47  82 81 62  144 139 99  165 161 109  165 161 109  142 137 94
+71 71 57  35 37 36  24 26 24  18 19 18  15 15 15  22 24 23
+63 64 60  46 47 45  33 36 34  26 28 27  20 23 22  17 18 17
+12 15 15  11 13 13  10 12 12  9 11 11  8 10 10  8 10 10
+7 9 9  7 9 9  7 9 9  7 9 9  8 9 9  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  16 16 16  30 31 28  35 37 36  41 42 42
+47 48 46  55 56 53  58 59 55  63 64 60  65 66 61  65 66 61
+61 61 53  103 101 77  151 147 98  171 165 117  171 165 117  168 163 120
+158 153 112  158 153 112  155 149 109  151 147 98  151 147 98  160 154 106
+151 147 98  149 143 98  142 137 94  149 143 98  149 143 98  149 143 98
+155 149 109  151 147 98  131 127 93  103 101 77  125 122 87  118 116 76
+71 71 57  16 16 16  16 16 16  16 16 16  17 17 17  17 17 17
+17 17 17  17 17 17  18 19 18  19 20 19  20 20 20  21 22 21
+23 24 24  24 26 24  25 27 26  26 28 27  26 28 27  26 28 27
+25 27 26  24 26 24  22 24 23  21 22 21  19 20 19  16 16 16
+14 14 13  8 8 7  1 1 1  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+20 20 20  184 179 149  168 163 120  21 22 21  0 0 0  105 104 92
+177 172 135  145 141 105  71 71 57  0 0 0  0 0 0  0 0 0
+66 65 55  131 127 93  151 147 98  142 137 94  118 116 76  121 119 87
+145 141 105  158 153 112  176 171 126  178 174 128  176 171 126  149 145 103
+96 95 69  31 33 31  21 22 21  16 16 16  14 14 13  18 19 18
+60 60 56  46 47 45  33 36 34  25 27 26  21 22 21  15 18 18
+12 15 15  11 13 13  9 11 11  8 10 10  8 10 10  8 9 9
+7 9 9  7 9 9  7 9 9  7 9 9  7 9 9  8 9 9
+8 9 9  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  10 12 12  26 28 27  31 33 31  38 39 37  43 45 43
+51 52 50  55 56 53  60 60 56  63 64 60  65 66 61  68 70 65
+63 64 60  96 95 69  158 153 112  178 174 128  188 184 146  194 189 146
+194 189 146  188 184 146  184 181 136  176 171 126  171 165 117  173 167 111
+173 167 111  165 161 109  171 165 117  174 170 121  176 171 126  178 174 128
+178 174 128  174 170 121  160 154 106  149 143 98  149 143 98  125 122 87
+71 71 57  16 16 16  16 16 16  17 17 17  17 17 17  17 17 17
+17 17 17  17 17 17  17 17 17  18 19 18  19 20 19  20 20 20
+21 22 21  21 22 21  21 22 21  22 24 23  21 22 21  21 22 21
+21 22 21  19 20 19  18 19 18  16 16 16  14 14 13  11 11 11
+3 3 3  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  105 104 92  197 193 154  110 109 94  9 9 8  36 38 35
+121 119 87  131 127 93  96 95 69  18 19 17  30 31 28  66 65 55
+96 95 69  142 137 94  160 154 106  160 154 106  160 154 106  168 163 120
+184 181 136  194 191 148  197 193 154  197 193 154  194 189 146  168 163 120
+125 122 87  46 47 43  18 19 18  15 15 15  13 13 13  14 14 13
+55 57 54  43 45 43  32 34 33  25 27 26  18 22 22  17 17 17
+12 14 14  10 12 12  9 11 11  8 10 10  8 9 9  7 9 9
+6 8 8  7 9 9  7 9 9  7 9 9  7 9 9  7 9 9
+7 9 9  8 9 9  8 9 9  8 10 10  8 10 10  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  32 34 33  41 42 42  35 37 36  39 40 39  37 39 37
+35 37 36  55 57 54  60 60 56  63 64 60  65 66 61  65 66 61
+61 63 57  115 113 82  168 163 120  194 191 148  204 201 155  210 208 158
+210 208 158  210 208 158  197 193 154  194 189 146  186 182 128  176 171 126
+174 170 121  176 171 126  186 182 128  190 186 136  194 191 148  197 193 154
+197 193 154  188 184 146  181 176 137  174 170 121  165 161 109  142 137 94
+82 81 62  24 26 24  16 16 16  16 16 16  16 16 16  16 16 16
+17 17 17  17 17 17  17 17 17  17 17 17  18 19 18  19 20 19
+19 20 19  19 20 19  20 20 20  19 20 19  19 20 19  18 19 18
+17 17 17  15 15 15  13 13 13  12 12 12  6 7 7  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  17 18 17  137 133 100  115 113 82  53 55 47  19 20 18
+103 101 77  144 139 99  137 133 100  115 113 82  137 133 100  156 151 111
+158 153 112  164 159 111  171 165 117  174 170 121  178 174 128  194 189 146
+204 201 155  214 212 158  214 212 158  214 212 158  210 208 158  188 184 146
+158 153 112  87 86 72  17 17 17  13 13 13  13 13 13  15 15 15
+55 56 53  43 45 43  32 34 33  24 26 24  17 20 20  16 16 16
+12 14 14  10 12 12  8 10 10  8 10 10  7 9 9  6 8 8
+6 8 8  6 8 8  6 8 8  7 9 9  7 9 9  7 9 9
+7 9 9  7 9 9  7 9 9  7 9 9  8 9 9  8 10 10
+8 10 10  8 10 10  8 10 10  8 10 10  8 10 10  8 10 10
+8 10 10  110 109 94  84 83 72  49 51 48  26 28 27  8 10 10
+8 9 9  51 52 50  58 59 55  63 64 60  63 64 60  63 64 60
+66 65 55  134 131 96  181 176 137  210 208 158  214 212 158  239 239 170
+239 239 170  224 223 159  210 208 158  204 201 155  194 189 146  186 182 128
+186 182 128  184 181 136  194 189 146  204 201 155  210 208 158  210 208 158
+210 208 158  210 208 158  197 193 154  190 186 136  176 171 126  155 149 109
+118 116 76  36 38 35  15 15 15  16 16 16  16 16 16  16 16 16
+16 16 16  16 16 16  16 16 16  16 16 16  16 16 16  17 17 17
+17 17 17  17 17 17  17 17 17  16 16 16  16 16 16  15 15 15
+13 13 13  12 12 12  8 8 7  2 2 2  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  53 55 47  103 101 77  96 95 69  53 55 47
+103 101 77  158 153 112  177 172 135  184 179 149  188 184 146  197 193 154
+194 189 146  190 186 136  184 181 136  184 181 136  194 189 146  210 208 158
+214 212 158  239 239 170  251 251 187  251 251 187  224 223 159  204 201 155
+177 172 135  121 119 87  30 31 28  13 13 13  12 12 12  39 40 39
+60 60 56  43 45 43  32 34 33  23 25 24  18 19 18  13 16 16
+13 13 13  9 11 11  8 10 10  8 9 9  6 8 8  6 8 8
+6 8 8  6 8 8  6 8 8  6 8 8  6 8 8  7 9 9
+7 9 9  7 9 9  7 9 9  7 9 9  7 9 9  7 9 9
+7 9 9  8 9 9  8 9 9  8 10 10  8 10 10  8 10 10
+14 17 17  197 193 154  158 153 112  55 57 54  7 9 9  7 9 9
+8 10 10  51 52 50  58 59 55  60 60 56  63 64 60  63 64 60
+71 71 57  155 149 109  194 191 148  214 212 158  251 251 187  251 251 187
+251 251 187  251 251 187  239 239 170  210 208 158  197 193 154  190 186 136
+190 186 136  194 189 146  204 201 155  210 208 158  224 223 159  239 239 170
+239 239 170  224 223 159  210 208 158  204 201 155  190 186 136  164 159 111
+125 122 87  40 41 39  15 15 15  15 15 15  15 15 15  15 15 15
+16 16 16  16 16 16  16 16 16  16 16 16  16 16 16  16 16 16
+16 16 16  16 16 16  15 15 15  14 14 13  13 13 13  12 12 12
+8 9 9  3 3 3  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  21 22 20  96 95 69  125 122 87  121 119 87
+144 139 99  177 172 135  197 193 154  210 208 158  214 212 158  214 212 158
+210 208 158  204 201 155  194 191 148  194 189 146  204 201 155  214 212 158
+239 239 170  251 251 187  251 251 187  251 251 187  251 251 187  214 212 158
+188 184 146  145 141 105  53 55 47  12 12 12  15 15 15  63 64 60
+63 64 60  41 42 42  31 33 31  23 24 24  17 18 17  12 15 15
+11 13 13  9 11 11  8 9 9  7 9 9  6 8 8  6 8 8
+6 7 7  6 7 7  6 8 8  6 8 8  6 8 8  6 8 8
+6 8 8  7 9 9  7 9 9  7 9 9  7 9 9  7 9 9
+7 9 9  7 9 9  7 9 9  7 9 9  7 9 9  8 8 7
+43 45 43  251 251 187  156 151 111  8 10 10  7 9 9  7 9 9
+21 22 21  51 52 50  55 56 53  55 57 54  58 59 55  58 59 55
+75 75 61  158 153 112  197 193 154  224 223 159  251 251 187  251 251 187
+251 251 187  251 251 187  251 251 187  214 212 158  204 201 155  194 189 146
+190 186 136  197 193 154  210 208 158  224 223 159  251 251 187  251 251 187
+251 251 187  251 251 187  239 239 170  210 208 158  197 193 154  176 171 126
+125 122 87  36 38 35  14 14 13  14 14 13  15 15 15  15 15 15
+15 15 15  15 15 15  15 15 15  15 15 15  15 15 15  15 15 15
+15 15 15  14 14 13  13 13 13  12 12 12  10 10 9  3 4 4
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  7 7 5  71 71 57  131 127 93  158 153 112
+177 172 135  197 193 154  214 212 158  239 239 170  251 251 187  251 251 187
+238 237 168  210 208 158  204 201 155  197 193 154  204 201 155  214 212 158
+251 251 187  251 251 187  251 251 187  251 251 187  251 251 187  214 212 158
+197 193 154  156 151 111  66 65 55  12 12 12  37 39 37  58 59 55
+58 59 55  41 42 42  31 33 31  22 24 23  17 17 17  12 14 14
+10 12 12  8 10 10  6 8 8  6 8 8  6 7 7  6 7 7
+6 7 7  5 7 7  6 7 7  6 7 7  6 8 8  6 8 8
+6 8 8  6 8 8  6 8 8  7 9 9  7 9 9  7 9 9
+7 9 9  6 8 8  6 8 8  6 8 8  6 8 8  6 8 8
+61 63 57  197 193 154  16 19 19  6 8 8  6 8 8  8 9 9
+41 42 42  47 48 46  51 52 50  51 52 50  55 56 53  55 56 53
+71 71 57  158 153 112  197 193 154  224 223 159  251 251 187  251 251 187
+251 251 187  251 251 187  239 239 170  214 212 158  204 201 155  194 189 146
+190 186 136  197 193 154  210 208 158  239 239 170  251 251 187  251 251 187
+251 251 187  251 251 187  251 251 187  224 223 159  204 201 155  177 172 135
+121 119 87  30 31 28  13 13 13  14 14 13  14 14 13  14 14 13
+14 14 13  14 14 13  15 15 15  15 15 15  14 14 13  13 13 13
+12 12 12  12 12 12  10 10 9  4 5 5  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  48 49 45  131 127 93  174 170 121
+194 189 146  210 208 158  239 239 170  251 251 187  251 251 187  251 251 187
+251 251 187  214 212 158  204 201 155  197 193 154  204 201 155  210 208 158
+239 239 170  251 251 187  251 251 187  251 251 187  239 239 170  214 212 158
+194 191 148  156 151 111  71 71 57  19 20 19  51 52 50  51 52 50
+51 52 50  41 42 42  30 32 31  21 22 21  17 17 17  13 13 13
+9 11 11  8 9 9  6 8 8  6 7 7  6 7 7  5 7 7
+5 6 5  5 6 5  5 7 7  5 7 7  6 7 7  6 7 7
+6 8 8  6 8 8  6 8 8  6 7 7  6 7 7  6 7 7
+6 7 7  6 8 8  6 8 8  6 8 8  6 8 8  6 8 8
+55 56 53  43 45 43  6 8 8  6 8 8  6 8 8  47 48 46
+60 60 56  47 48 46  46 47 45  47 48 46  38 39 37  10 12 12
+66 65 55  145 141 105  197 193 154  214 212 158  251 251 187  251 251 187
+251 251 187  251 251 187  224 223 159  210 208 158  194 191 148  184 181 136
+184 181 136  194 189 146  204 201 155  224 223 159  251 251 187  251 251 187
+251 251 187  251 251 187  251 251 187  239 239 170  210 208 158  181 176 137
+115 113 82  21 22 20  13 13 13  13 13 13  13 13 13  13 13 13
+14 14 13  13 13 13  13 13 13  13 13 13  12 12 12  11 11 11
+10 10 9  6 7 7  1 1 1  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  2 2 1  66 65 55  144 139 99  178 174 128
+204 201 155  214 212 158  251 251 187  251 251 187  251 251 187  251 251 187
+251 251 187  214 212 158  204 201 155  194 191 148  197 193 154  204 201 155
+214 212 158  239 239 170  239 239 170  239 239 170  214 212 158  210 208 158
+184 181 136  149 145 103  66 65 55  41 42 42  47 48 46  46 47 45
+43 45 43  39 40 39  28 31 30  21 22 21  16 16 16  10 12 12
+8 10 10  6 8 8  6 7 7  6 7 7  5 6 5  5 6 5
+5 6 5  5 6 5  5 6 5  5 6 5  5 7 7  5 7 7
+6 7 7  6 7 7  6 7 7  5 7 7  5 7 7  5 7 7
+5 7 7  6 7 7  6 7 7  6 7 7  6 7 7  6 8 8
+6 8 8  6 8 8  6 7 7  6 7 7  46 47 45  156 151 111
+105 104 92  58 59 55  43 45 43  32 34 33  6 8 8  6 8 8
+49 51 48  125 122 87  181 176 137  204 201 155  214 212 158  239 239 170
+239 239 170  214 212 158  210 208 158  197 193 154  181 176 137  176 171 126
+176 171 126  184 181 136  197 193 154  210 208 158  239 239 170  251 251 187
+251 251 187  251 251 187  251 251 187  251 251 187  210 208 158  177 172 135
+99 98 80  13 13 13  12 12 12  12 12 12  13 13 13  12 12 12
+12 12 12  12 12 12  11 11 11  11 11 11  8 9 9  4 5 5
+1 1 1  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  1 1 0  61 61 53  142 137 94  181 176 137
+204 201 155  224 223 159  251 251 187  251 251 187  251 251 187  251 251 187
+251 251 187  214 212 158  197 193 154  190 186 136  184 181 136  188 184 146
+197 193 154  204 201 155  210 208 158  210 208 158  204 201 155  194 189 146
+176 171 126  134 131 96  66 65 55  43 45 43  41 42 42  39 40 39
+35 37 36  33 36 34  27 29 28  20 20 20  15 15 15  9 11 11
+8 9 9  6 7 7  5 6 5  5 6 5  4 5 5  4 5 5
+4 5 5  4 5 5  4 5 5  4 5 5  5 6 5  4 5 5
+4 5 5  5 6 5  4 5 5  5 6 5  5 6 5  5 6 5
+5 7 7  5 7 7  5 7 7  5 7 7  5 7 7  5 7 7
+6 7 7  6 7 7  6 7 7  28 31 30  184 179 149  184 179 149
+145 141 105  84 83 72  27 29 28  5 7 7  5 6 5  16 16 16
+43 44 41  96 95 69  158 153 112  188 184 146  204 201 155  210 208 158
+204 201 155  197 193 154  184 179 149  177 172 135  168 163 120  164 159 111
+164 159 111  174 170 121  184 181 136  197 193 154  214 212 158  251 251 187
+251 251 187  251 251 187  251 251 187  251 251 187  210 208 158  177 172 135
+71 71 57  11 11 11  12 12 12  11 11 11  11 11 11  11 11 11
+10 10 9  10 10 9  8 8 7  3 4 4  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  31 33 31  121 119 87  176 171 126
+197 193 154  214 212 158  251 251 187  251 251 187  251 251 187  251 251 187
+239 239 170  210 208 158  194 189 146  178 174 128  174 170 121  176 171 126
+177 172 135  181 176 137  184 179 149  184 179 149  181 176 137  178 174 128
+158 153 112  121 119 87  53 55 47  37 39 37  33 36 34  30 32 31
+27 29 28  25 27 26  24 26 24  19 20 19  13 13 13  8 10 10
+6 8 8  6 7 7  5 6 5  4 5 5  4 5 5  4 5 5
+4 5 5  4 5 5  4 5 5  3 4 4  3 4 4  4 5 5
+4 5 5  4 5 5  4 5 5  4 5 5  4 5 5  4 5 5
+5 6 5  5 6 5  5 6 5  5 6 5  5 6 5  5 6 5
+5 6 5  5 6 5  12 14 14  145 141 105  184 179 149  177 172 135
+90 89 73  21 22 21  5 6 5  5 6 5  4 5 5  37 39 37
+38 39 37  61 61 53  134 131 96  168 163 120  184 181 136  188 184 146
+184 179 149  177 172 135  168 163 120  164 159 111  155 149 109  151 147 98
+151 147 98  164 159 111  176 171 126  184 179 149  210 208 158  239 239 170
+251 251 187  251 251 187  251 251 187  239 239 170  210 208 158  158 153 112
+46 47 43  10 10 9  10 10 9  10 10 9  8 9 9  8 9 9
+6 7 7  3 3 3  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  13 12 7  82 81 62  158 153 112
+188 184 146  210 208 158  239 239 170  251 251 187  251 251 187  251 251 187
+224 223 159  204 201 155  184 181 136  171 165 117  164 159 111  160 154 106
+158 153 112  164 159 111  168 163 120  168 163 120  168 163 120  164 159 111
+142 137 94  96 95 69  43 44 41  27 29 28  26 28 27  23 24 24
+21 22 21  18 19 18  17 17 17  18 19 18  13 13 13  8 8 7
+6 7 7  5 6 5  4 5 5  3 4 4  3 4 4  3 4 4
+3 4 4  3 4 4  3 3 3  3 3 3  3 4 4  3 4 4
+3 4 4  3 4 4  4 5 5  4 5 5  4 5 5  4 5 5
+4 5 5  4 5 5  4 5 5  4 5 5  4 5 5  4 5 5
+4 5 5  4 5 5  4 5 5  4 5 5  4 5 5  4 5 5
+4 5 5  4 5 5  4 5 5  4 5 5  31 33 31  65 66 61
+37 39 37  38 39 37  96 95 69  144 139 99  168 163 120  174 170 121
+168 163 120  164 159 111  155 149 109  149 145 103  149 143 98  142 137 94
+149 143 98  151 147 98  164 159 111  177 172 135  197 193 154  210 208 158
+251 251 187  251 251 187  251 251 187  239 239 170  197 193 154  137 133 100
+24 26 24  8 9 9  8 9 9  8 8 7  6 7 7  2 2 2
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  46 47 43  125 122 87
+176 171 126  197 193 154  210 208 158  239 239 170  251 251 187  239 239 170
+214 212 158  197 193 154  181 176 137  164 159 111  151 147 98  149 143 98
+149 143 98  149 143 98  149 145 103  155 149 109  160 154 106  149 143 98
+118 116 76  82 81 62  30 31 28  21 22 21  19 20 19  17 17 17
+14 14 13  12 12 12  10 10 9  12 12 12  10 12 12  6 8 8
+4 5 5  3 4 4  3 4 4  3 4 4  3 3 3  3 3 3
+3 3 3  3 3 3  3 3 3  3 3 3  2 3 3  2 3 3
+3 4 4  3 4 4  3 4 4  3 4 4  3 4 4  4 5 5
+4 5 5  3 4 4  3 4 4  3 4 4  3 4 4  3 4 4
+4 5 5  4 5 5  4 5 5  4 5 5  4 5 5  4 5 5
+4 5 5  3 4 4  3 4 4  23 24 24  110 109 94  72 73 67
+39 40 39  22 24 23  46 47 43  103 101 77  142 137 94  155 149 109
+160 154 106  155 149 109  149 143 98  142 137 94  142 137 94  142 137 94
+142 137 94  149 143 98  155 149 109  176 171 126  184 179 149  210 208 158
+239 239 170  251 251 187  251 251 187  214 212 158  184 179 149  105 104 92
+10 10 9  6 7 7  3 4 4  1 1 1  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  12 12 9  82 81 62
+149 145 103  181 176 137  197 193 154  210 208 158  214 212 158  214 212 158
+210 208 158  197 193 154  177 172 135  158 153 112  149 143 98  142 137 94
+142 137 94  142 137 94  149 143 98  151 147 98  151 147 98  131 127 93
+103 101 77  71 71 57  22 24 23  15 15 15  13 13 13  11 11 11
+8 9 9  6 7 7  6 7 7  4 5 5  8 9 9  6 7 7
+4 5 5  3 3 3  3 3 3  3 3 3  3 3 3  2 2 2
+2 2 2  2 2 2  2 2 2  2 2 2  2 2 2  2 3 3
+2 3 3  2 3 3  2 3 3  3 4 4  3 4 4  3 4 4
+3 4 4  3 4 4  3 3 3  3 4 4  3 4 4  3 4 4
+3 4 4  3 4 4  3 4 4  3 4 4  3 4 4  3 4 4
+3 4 4  3 4 4  21 22 21  145 141 105  145 141 105  72 73 67
+17 18 17  3 4 4  21 22 20  66 65 55  118 116 76  142 137 94
+149 143 98  151 147 98  149 143 98  142 137 94  142 137 94  142 137 94
+142 137 94  149 143 98  155 149 109  168 163 120  184 179 149  210 208 158
+239 239 170  251 251 187  251 251 187  210 208 158  177 172 135  71 71 57
+3 3 3  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  36 38 35
+115 113 82  158 153 112  181 176 137  197 193 154  204 201 155  210 208 158
+204 201 155  188 184 146  177 172 135  164 159 111  149 145 103  142 137 94
+142 137 94  142 137 94  149 143 98  151 147 98  149 143 98  125 122 87
+96 95 69  61 61 53  16 17 12  8 9 9  8 8 7  6 7 7
+4 5 5  3 4 4  3 3 3  3 3 3  3 3 3  5 6 5
+3 4 4  2 3 3  2 2 2  2 2 2  2 2 2  2 2 2
+2 2 2  2 2 2  2 2 2  2 2 2  2 2 2  1 2 2
+2 2 2  2 2 2  2 3 3  2 3 3  2 3 3  2 3 3
+3 3 3  3 3 3  3 3 3  3 3 3  3 3 3  3 3 3
+3 3 3  2 3 3  2 3 3  3 4 4  3 4 4  3 4 4
+3 4 4  3 4 4  3 4 4  8 9 9  8 8 7  3 3 3
+3 3 3  3 3 3  9 9 8  36 38 35  82 81 62  118 116 76
+142 137 94  151 147 98  151 147 98  151 147 98  149 143 98  149 143 98
+149 143 98  151 147 98  160 154 106  176 171 126  188 184 146  210 208 158
+239 239 170  251 251 187  239 239 170  210 208 158  156 151 111  31 33 31
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  7 7 5
+66 65 55  125 122 87  158 153 112  181 176 137  194 189 146  197 193 154
+197 193 154  184 179 149  177 172 135  168 163 120  156 151 111  151 147 98
+151 147 98  151 147 98  151 147 98  161 156 96  149 143 98  118 116 76
+82 81 62  53 55 47  12 12 9  4 5 5  3 4 4  3 3 3
+3 3 3  3 3 3  2 2 2  2 2 2  1 1 1  1 2 2
+3 3 3  2 2 2  2 2 2  2 2 2  2 2 2  2 2 2
+1 1 1  1 1 1  1 1 1  1 1 1  1 2 2  1 2 2
+1 2 2  1 2 2  1 2 2  2 2 2  2 2 2  2 3 3
+2 3 3  2 3 3  2 3 3  2 3 3  2 2 2  2 2 2
+2 3 3  2 3 3  2 3 3  2 3 3  2 3 3  2 3 3
+2 3 3  2 3 3  2 3 3  2 3 3  2 3 3  3 3 3
+3 3 3  3 3 3  72 73 67  61 61 53  53 55 47  96 95 69
+131 127 93  151 147 98  161 156 96  161 156 96  151 147 98  151 147 98
+161 156 96  160 154 106  164 159 111  177 172 135  197 193 154  210 208 158
+239 239 170  251 251 187  224 223 159  197 193 154  131 127 93  9 9 8
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+24 26 24  82 81 62  131 127 93  164 159 111  178 174 128  188 184 146
+188 184 146  188 184 146  181 176 137  176 171 126  168 163 120  164 159 111
+160 154 106  160 154 106  160 154 106  160 154 106  151 147 98  125 122 87
+82 81 62  61 61 53  12 12 9  3 3 3  3 3 3  2 2 2
+2 2 2  1 1 1  1 1 1  1 1 1  0 0 0  0 0 0
+0 0 0  2 2 2  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 2 2  1 2 2  1 2 2  1 2 2
+1 2 2  2 2 2  2 2 2  2 2 2  2 2 2  2 2 2
+2 2 2  2 2 2  2 2 2  2 2 2  2 2 2  2 2 2
+2 3 3  2 3 3  2 3 3  2 3 3  2 3 3  2 3 3
+2 3 3  30 32 31  72 73 67  31 33 31  36 38 35  82 81 62
+118 116 76  149 143 98  161 156 96  161 156 96  161 156 96  160 154 106
+165 161 109  165 161 109  176 171 126  188 184 146  204 201 155  214 212 158
+239 239 170  239 239 170  214 212 158  184 179 149  82 81 62  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+2 2 2  43 44 41  96 95 69  131 127 93  160 154 106  176 171 126
+184 181 136  184 181 136  184 181 136  181 176 137  178 174 128  174 170 121
+171 165 117  173 167 111  173 167 111  173 167 111  160 154 106  131 127 93
+96 95 69  66 65 55  16 17 12  2 2 2  1 1 1  1 1 1
+1 1 1  1 1 1  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+1 2 2  1 2 2  1 2 2  1 2 2  1 2 2  2 2 2
+2 2 2  2 2 2  2 2 2  2 2 2  2 2 2  2 2 2
+2 2 2  2 2 2  2 2 2  2 2 2  2 2 2  2 2 2
+2 2 2  2 2 2  2 2 2  10 9 6  30 31 28  71 71 57
+118 116 76  149 143 98  165 161 109  165 161 109  165 161 109  173 167 111
+173 167 111  176 171 126  184 181 136  197 193 154  210 208 158  224 223 159
+251 251 187  239 239 170  210 208 158  168 163 120  40 41 39  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  13 12 7  61 61 53  96 95 69  131 127 93  160 154 106
+176 171 126  184 181 136  184 181 136  188 184 146  184 181 136  184 181 136
+184 181 136  186 182 128  186 182 128  178 174 128  174 170 121  149 145 103
+118 116 76  82 81 62  21 22 20  1 1 1  1 1 1  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 2 2
+1 2 2  1 2 2  1 2 2  1 2 2  1 2 2  2 2 2
+2 2 2  2 2 2  2 2 2  2 2 2  2 2 2  2 2 2
+2 2 2  2 2 2  2 2 2  3 3 3  30 31 28  66 65 55
+118 116 76  149 143 98  165 161 109  173 167 111  173 167 111  174 170 121
+186 182 128  190 186 136  197 193 154  210 208 158  224 223 159  251 251 187
+251 251 187  239 239 170  197 193 154  137 133 100  12 12 9  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  30 31 28  71 71 57  103 101 77  134 131 96
+164 159 111  176 171 126  184 181 136  188 184 146  194 189 146  197 193 154
+197 193 154  197 193 154  194 191 148  194 189 146  190 186 136  176 171 126
+145 141 105  103 101 77  40 41 39  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 2 2  1 2 2
+1 2 2  1 2 2  1 2 2  1 2 2  1 2 2  1 2 2
+1 2 2  1 2 2  1 2 2  1 2 2  30 31 28  71 71 57
+118 116 76  160 154 106  173 167 111  178 174 128  186 182 128  190 186 136
+194 191 148  204 201 155  210 208 158  224 223 159  251 251 187  251 251 187
+251 251 187  214 212 158  184 179 149  84 83 72  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  5 5 3  43 44 41  82 81 62  103 101 77
+142 137 94  165 161 109  178 174 128  190 186 136  197 193 154  204 201 155
+210 208 158  210 208 158  210 208 158  210 208 158  210 208 158  197 193 154
+177 172 135  145 141 105  79 78 62  5 4 3  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 2 2  1 2 2  30 31 28  82 81 62
+142 137 94  165 161 109  178 174 128  190 186 136  194 191 148  204 201 155
+210 208 158  214 212 158  239 239 170  251 251 187  251 251 187  251 251 187
+251 251 187  210 208 158  168 163 120  36 38 35  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  16 17 12  53 55 47  82 81 62
+118 116 76  151 147 98  171 165 117  184 181 136  194 191 148  210 208 158
+214 212 158  224 223 159  239 239 170  239 239 170  224 223 159  214 212 158
+197 193 154  176 171 126  115 113 82  24 26 24  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  40 41 39  103 101 77
+151 147 98  176 171 126  190 186 136  197 193 154  210 208 158  214 212 158
+239 239 170  251 251 187  251 251 187  251 251 187  251 251 187  251 251 187
+239 239 170  197 193 154  110 109 94  3 4 3  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  30 31 28  66 65 55
+96 95 69  125 122 87  160 154 106  178 174 128  194 189 146  204 201 155
+214 212 158  239 239 170  251 251 187  251 251 187  251 251 187  239 239 170
+210 208 158  188 184 146  149 145 103  61 61 53  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  61 61 53  131 127 93
+164 159 111  184 181 136  197 193 154  210 208 158  224 223 159  251 251 187
+251 251 187  251 251 187  251 251 187  251 251 187  251 251 187  251 251 187
+210 208 158  168 163 120  43 44 41  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  4 3 2  36 38 35
+71 71 57  96 95 69  142 137 94  165 161 109  184 181 136  197 193 154
+210 208 158  239 239 170  251 251 187  251 251 187  251 251 187  251 251 187
+214 212 158  197 193 154  168 163 120  103 101 77  7 7 5  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+1 1 1  0 0 0  0 0 0  0 0 0  82 81 62  142 137 94
+174 170 121  194 189 146  210 208 158  224 223 159  251 251 187  251 251 187
+251 251 187  251 251 187  251 251 187  251 251 187  251 251 187  224 223 159
+184 179 149  99 98 80  3 3 3  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  7 7 5
+43 44 41  82 81 62  118 116 76  142 137 94  171 165 117  190 186 136
+204 201 155  224 223 159  251 251 187  251 251 187  251 251 187  251 251 187
+214 212 158  197 193 154  174 170 121  125 122 87  30 31 28  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  1 1 1
+1 1 1  1 1 1  1 1 1  1 1 1  1 1 1  1 1 1
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  3 4 3  82 81 62  149 143 98
+176 171 126  194 191 148  210 208 158  239 239 170  251 251 187  251 251 187
+251 251 187  251 251 187  251 251 187  251 251 187  239 239 170  204 201 155
+145 141 105  30 31 28  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+10 9 6  46 47 43  82 81 62  118 116 76  149 143 98  174 170 121
+194 189 146  210 208 158  224 223 159  251 251 187  251 251 187  224 223 159
+210 208 158  194 191 148  174 170 121  134 131 96  53 55 47  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  7 7 5  96 95 69  149 143 98
+176 171 126  194 191 148  210 208 158  239 239 170  251 251 187  251 251 187
+251 251 187  251 251 187  251 251 187  239 239 170  210 208 158  177 172 135
+75 75 61  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  10 9 6  46 47 43  82 81 62  118 116 76  149 143 98
+176 171 126  194 191 148  210 208 158  214 212 158  214 212 158  210 208 158
+197 193 154  184 181 136  164 159 111  131 127 93  53 55 47  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  7 7 5  96 95 69  149 143 98
+174 170 121  194 189 146  204 201 155  214 212 158  239 239 170  251 251 187
+251 251 187  251 251 187  239 239 170  210 208 158  184 179 149  110 109 94
+12 12 9  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  10 9 6  43 44 41  82 81 62  115 113 82
+144 139 99  168 163 120  188 184 146  197 193 154  197 193 154  194 189 146
+184 181 136  174 170 121  151 147 98  118 116 76  36 38 35  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  4 3 2  82 81 62  142 137 94
+171 165 117  186 182 128  194 191 148  210 208 158  214 212 158  224 223 159
+239 239 170  224 223 159  210 208 158  184 179 149  137 133 100  36 38 35
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  7 7 5  36 38 35  71 71 57
+103 101 77  131 127 93  155 149 109  168 163 120  168 163 120  168 163 120
+164 159 111  149 143 98  125 122 87  82 81 62  13 12 7  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  61 61 53  125 122 87
+160 154 106  174 170 121  184 181 136  194 189 146  204 201 155  210 208 158
+210 208 158  204 201 155  184 179 149  145 141 105  61 61 53  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  3 3 2  30 31 28
+61 61 53  82 81 62  103 101 77  121 119 87  125 122 87  125 122 87
+118 116 76  103 101 77  79 78 62  24 26 24  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  25 27 25  96 95 69
+142 137 94  160 154 106  171 165 117  178 174 128  184 181 136  184 181 136
+181 176 137  177 172 135  145 141 105  75 75 61  5 5 3  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+16 17 12  40 41 39  61 61 53  71 71 57  71 71 57  71 71 57
+66 65 55  43 44 41  12 12 9  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  1 1 1  46 47 43
+96 95 69  125 122 87  142 137 94  149 145 103  155 149 109  155 149 109
+145 141 105  121 119 87  66 65 55  7 7 5  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  1 1 1  16 17 12  24 26 24  25 27 25  19 20 18
+7 7 5  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  2 2 1
+25 27 25  61 61 53  82 81 62  96 95 69  96 95 69  82 81 62
+61 61 53  25 27 25  2 2 1  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  5 6 5  13 12 7  10 9 6  3 4 3
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0
index 1850c15..12ac3a5 100644 (file)
 P3
-# Standard 16-color Linux logo
-80 80
+142 114
 255
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85  85  85  85  85  85  85  85  85  85
- 85  85  85  85  85  85  85  85  85   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0  85  85  85  85  85  85
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
- 85  85  85  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0  85  85  85  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85 170 170 170   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0  85  85  85   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-170 170 170 170 170 170  85  85  85   0   0   0
-  0   0   0   0   0   0  85  85  85   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0  85  85  85   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0  85  85  85   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0  85  85  85 170 170 170   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0 170 170 170 170 170 170
-170 170 170   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
- 85  85  85 170 170 170 170 170 170 170 170 170
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0 170 170 170 255 255 255 255 255 255
-255 255 255 170 170 170   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0  85  85  85
-170 170 170 170 170 170 255 255 255 255 255 255
-  0   0   0   0   0   0   0   0   0   0   0   0
-170 170 170 255 255 255 170 170 170 170 170 170
-255 255 255 170 170 170   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0  85  85  85
-170 170 170   0   0   0   0   0   0 255 255 255
- 85  85  85   0   0   0   0   0   0   0   0   0
-255 255 255 170 170 170   0   0   0  85  85  85
-170 170 170 255 255 255 170 170 170   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0  85  85  85
- 85  85  85   0   0   0   0   0   0 170 170 170
- 85  85  85   0   0   0   0   0   0   0   0   0
-255 255 255  85  85  85   0   0   0   0   0   0
- 85  85  85 255 255 255 170 170 170   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0  85  85  85
-170 170 170   0   0   0   0   0   0 170 170 170
- 85  85  85  85  85  85  85  85  85  85  85  85
-255 255 255  85  85  85   0   0   0   0   0   0
- 85  85  85 255 255 255 170 170 170   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-255 255 255   0   0   0   0   0   0 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0   0   0   0   0   0   0
- 85  85  85 255 255 255   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-170 170 170 170 170 170 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170 170 170 170 170 170   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85  85  85  85   0   0   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 170  85   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85  85  85  85   0   0   0
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 170  85   0
-170  85   0 170  85   0  85  85  85   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0  85  85  85   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85  85  85  85   0   0   0
- 85  85  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-170  85   0 170  85   0 170  85   0 170  85   0
-170  85   0 170  85   0  85  85  85   0   0   0
-  0   0   0  85  85  85 170 170 170  85  85  85
-  0   0   0   0   0   0  85  85  85   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85  85  85  85   0   0   0
- 85  85  85 170  85   0 170  85   0 170  85   0
-170  85   0 170  85   0 170  85   0 170  85   0
-170  85   0 170  85   0 170  85   0 170  85   0
-170 170 170 170 170 170 170 170 170   0   0   0
-  0   0   0   0   0   0 170 170 170 170 170 170
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
- 85  85  85 170 170 170 170  85   0 170  85   0
-170  85   0 170  85   0 170  85   0 170  85   0
-170  85   0 170  85   0 170 170 170 170 170 170
-170 170 170 170 170 170 170 170 170  85  85  85
-  0   0   0   0   0   0  85  85  85  85  85  85
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
- 85  85  85 170 170 170 170 170 170 170  85   0
-170  85   0 170  85   0 170  85   0 170  85   0
-170 170 170 170 170 170 170 170 170 170 170 170
-255 255 255 255 255 255 255 255 255 170 170 170
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0  85  85  85
-255 255 255 255 255 255 170 170 170 170 170 170
-170 170 170 170 170 170 170 170 170 170 170 170
-170 170 170 170 170 170 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0 170 170 170
-255 255 255 255 255 255 170 170 170 170 170 170
-170 170 170 170 170 170 170 170 170 170 170 170
-170 170 170 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-170 170 170   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0  85  85  85 255 255 255
-255 255 255 255 255 255 255 255 255 170 170 170
-170 170 170 170 170 170 170 170 170 170 170 170
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0  85  85  85   0   0   0
-  0   0   0  85  85  85 170 170 170 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0  85  85  85   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0  85  85  85 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 170 170 170   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0  85  85  85 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0   0   0   0
- 85  85  85 170 170 170 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255  85  85  85   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85 170 170 170 170 170 170 170 170 170
-255 255 255 255 255 255 255 255 255 170 170 170
-170 170 170 170 170 170 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-170 170 170 170 170 170 170 170 170 170 170 170
-170 170 170 170 170 170 170 170 170  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-170 170 170 170 170 170 170 170 170 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-170 170 170 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 170 170 170 170 170 170
-170 170 170 170 170 170 170 170 170  85  85  85
-  0   0   0   0   0   0  85  85  85   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0  85  85  85   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0  85  85  85   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-170 170 170 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 170 170 170 170 170 170 170 170 170
-  0   0   0   0   0   0   0   0   0  85  85  85
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0  85  85  85   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0  85  85  85   0   0   0
- 85  85  85   0   0   0   0   0   0  85  85  85
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 170 170 170 170 170 170
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0 170 170 170
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-170 170 170  85  85  85   0   0   0   0   0   0
-  0   0   0  85  85  85  85  85  85   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0  85  85  85
-  0   0   0   0   0   0  85  85  85 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 170 170 170   0   0   0  85  85  85
- 85  85  85   0   0   0  85  85  85   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0  85  85  85
-  0   0   0  85  85  85 170 170 170 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 170 170 170   0   0   0  85  85  85
- 85  85  85   0   0   0  85  85  85   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0  85  85  85
-  0   0   0 170 170 170 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255  85  85  85   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0  85  85  85   0   0   0
-  0   0   0 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 170 170 170   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0  85  85  85   0   0   0
- 85  85  85 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 170 170 170   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0  85  85  85   0   0   0   0   0   0
-170 170 170 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 170 170 170   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0  85  85  85   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 170 170 170 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 170 170 170 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0  85  85  85
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 170 170 170 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0  85  85  85
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 170 170 170 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0  85  85  85  85  85  85
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 170 170 170 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 170 170 170 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255   0   0   0
- 85  85  85  85  85  85  85  85  85  85  85  85
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85   0   0   0 170  85   0
-255 255  85 170  85   0   0   0   0   0   0   0
- 85  85  85 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 170 170 170 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0  85  85  85  85  85  85   0   0   0
-  0   0   0  85  85  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0   0   0   0
-  0   0   0  85  85  85 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 170 170 170 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255  85 170  85   0 255 255  85   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0  85  85  85  85  85  85
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-  0   0   0   0   0   0  85  85  85 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255  85
-170  85   0 255 255  85 170  85   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-170  85   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0   0   0   0   0   0   0  85  85  85
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 170  85   0
-255 255  85 170  85   0 255 255  85   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0 170  85   0
-255 255  85 170  85   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85   0   0   0   0   0   0   0   0   0
- 85  85  85 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255  85
-170  85   0 255 255  85 170  85   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0 255 255  85
-170  85   0 255 255  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85   0   0   0   0   0   0
-  0   0   0  85  85  85 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 170 170 170 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0 255 255  85 170  85   0
-255 255  85 170  85   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85   0   0   0
-  0   0   0   0   0   0  85  85  85 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 170 170 170 170 170 170 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 170 170 170 170 170 170 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 170 170 170 170 170 170 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0   0   0   0   0   0   0   0   0   0
-  0   0   0 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 170 170 170 170 170 170 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85   0   0   0   0   0   0   0   0   0
- 85  85  85 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 170 170 170  85  85  85 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85  85  85  85  85  85  85
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-170 170 170  85  85  85  85  85  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 170 170 170
- 85  85  85   0   0   0   0   0   0 170  85   0
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 170 170 170  85  85  85
-  0   0   0   0   0   0   0   0   0 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-170 170 170 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-170 170 170  85  85  85  85  85  85   0   0   0
-  0   0   0   0   0   0   0   0   0 170  85   0
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 170  85   0
-170  85   0 170 170 170 255 255 255 255 255 255
-255 255 255 255 255 255 255 255 255 255 255 255
-255 255 255 255 255 255 170 170 170  85  85  85
- 85  85  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0  85  85  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-170  85   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0  85  85  85 170  85   0
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 170  85   0 170  85   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 170  85   0
-170  85   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0  85  85  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-170  85   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-170  85   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0  85  85  85 170  85   0
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 170  85   0 170  85   0 170  85   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0 170  85   0 170  85   0
-170  85   0 170  85   0 170  85   0 170  85   0
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 170  85   0
-170  85   0   0   0   0   0   0   0   0   0   0
- 85  85  85  85  85  85  85  85  85  85  85  85
- 85  85  85  85  85  85  85  85  85  85  85  85
- 85  85  85  85  85  85  85  85  85   0   0   0
-  0   0   0   0   0   0   0   0   0 170  85   0
-170  85   0 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 255 255  85 170  85   0
-170  85   0 170  85   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0 170  85   0 170  85   0
-170  85   0 170  85   0 170  85   0 170  85   0
-170  85   0 170  85   0 255 255  85 170  85   0
-255 255  85 170  85   0 170  85   0 170  85   0
- 85  85  85  85  85  85  85  85  85  85  85  85
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0  85  85  85
- 85  85  85  85  85  85  85  85  85 170  85   0
-170  85   0 170  85   0 170  85   0 255 255  85
-170  85   0 255 255  85 170  85   0 170  85   0
-170  85   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0 170  85   0
-170  85   0 170  85   0 170  85   0 170  85   0
-170  85   0 170  85   0 170  85   0 170  85   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0 170  85   0
-170  85   0 170  85   0 170  85   0 170  85   0
-170  85   0 170  85   0 170  85   0 170  85   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0 170  85   0 170  85   0 170  85   0
-170  85   0 170  85   0 170  85   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-170  85   0 170  85   0 170  85   0 170  85   0
-170  85   0 170  85   0 170  85   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
-  0   0   0   0   0   0   0   0   0   0   0   0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  85 85 85  85 85 85
+85 85 85  85 85 85  0 0 0  85 85 85  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  85 85 85  85 85 85  0 0 0  85 85 85  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  85 85 85
+85 85 85  85 85 85  85 85 85  85 85 85  85 85 85  0 0 0
+85 85 85  85 85 85  0 0 0  85 85 85  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  85 85 85  85 85 85  85 85 85  85 85 85
+0 0 0  85 85 85  85 85 85  0 0 0  85 85 85  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  85 85 85
+85 85 85  85 85 85  85 85 85  85 85 85  85 85 85  85 85 85
+85 85 85  85 85 85  0 0 0  85 85 85  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  170 170 170
+85 85 85  85 85 85  85 85 85  85 85 85  0 0 0  85 85 85
+0 0 0  85 85 85  85 85 85  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  85 85 85  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  85 85 85
+85 85 85  0 0 0  85 85 85  85 85 85  85 85 85  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  85 85 85  170 170 170  170 85 0  170 170 170  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+85 85 85  85 85 85  85 85 85  85 85 85  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+170 170 170  255 255 85  170 170 170  170 170 170  170 170 170  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  85 85 85
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  170 170 170
+255 255 85  170 170 170  170 170 170  170 85 0  85 255 85  170 85 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  85 85 85
+85 85 85  85 85 85  85 85 85  85 85 85  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  0 0 0  85 85 85  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  85 85 85  170 170 170  170 85 0
+170 170 170  170 170 170  255 255 85  170 170 170  170 170 170  85 85 85
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  85 85 85  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+85 85 85  85 85 85  85 85 85  85 85 85  85 85 85  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  85 85 85  170 85 0  170 170 170
+170 170 170  170 85 0  170 170 170  170 170 170  170 85 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  85 85 85
+85 85 85  85 85 85  0 0 0  85 85 85  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  85 85 85
+85 85 85  85 85 85  85 85 85  85 85 85  85 85 85  85 85 85
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  85 85 85  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  85 85 85  85 85 85  85 255 85
+255 85 85  85 255 85  170 170 170  170 85 0  170 170 170  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  85 85 85  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  85 85 85  85 85 85  85 85 85  85 85 85  85 85 85
+85 85 85  85 85 85  85 85 85  85 85 85  85 85 85  85 85 85
+85 85 85  85 85 85  85 85 85  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  170 85 0  85 85 85  85 85 85
+170 170 170  170 85 0  170 170 170  85 85 85  170 85 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  85 85 85
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  85 85 85  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  85 85 85  85 85 85  170 85 0
+85 85 85  85 85 85  170 85 0  85 255 85  85 85 85  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+85 85 85  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  85 85 85
+0 0 0  85 85 85  85 85 85  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  85 85 85
+85 85 85  85 85 85  85 85 85  85 85 85  170 85 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  85 85 85  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  85 85 85
+85 85 85  85 85 85  85 85 85  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  0 170 0  85 85 85  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+170 85 0  85 255 85  170 85 0  170 85 0  170 85 0  85 255 85
+170 85 0  170 85 0  0 170 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 170 0  170 85 0
+255 255 85  170 85 0  255 255 85  255 255 85  255 255 85  170 85 0
+255 255 85  85 255 85  170 85 0  170 85 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  170 85 0  255 255 85
+85 255 85  255 255 85  255 255 85  170 85 0  255 255 85  255 255 85
+255 255 85  170 85 0  255 255 85  85 255 85  170 85 0  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  255 255 85  170 85 0
+255 255 85  255 255 85  255 255 85  255 255 85  255 255 85  170 85 0
+255 255 85  255 255 85  255 255 85  255 255 85  170 85 0  85 255 85
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  85 85 85  170 170 170  0 0 0
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  170 85 0  255 255 85  255 255 85
+255 255 85  255 255 85  170 85 0  255 255 85  85 255 85  255 255 85
+255 255 85  170 85 0  255 255 85  170 85 0  255 255 85  170 85 0
+170 85 0  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  0 0 0  85 85 85  170 170 170  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  170 85 0  255 255 85  85 255 85  255 255 85
+170 170 170  255 255 85  255 255 85  255 255 85  255 255 85  255 255 85
+255 255 85  255 255 85  85 255 85  255 255 85  255 255 85  255 255 85
+85 255 85  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  85 85 85  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  170 85 0  255 255 85  255 255 85  255 255 85
+255 255 255  255 255 85  255 255 85  170 85 0  255 255 85  170 85 0
+255 255 85  255 255 85  255 255 85  255 255 85  170 85 0  255 255 85
+170 85 0  170 85 0  0 170 0  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  170 85 0  85 255 85  255 255 85  170 170 170  255 255 255
+255 255 85  255 255 85  255 255 85  255 255 85  255 255 85  255 255 85
+255 255 85  255 255 85  170 85 0  255 255 85  85 255 85  255 255 85
+255 255 85  85 255 85  0 0 0  85 85 85  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  85 85 85  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  255 255 85  255 255 85  255 255 85  255 255 255  255 255 85
+255 255 85  255 255 85  85 255 85  255 255 85  255 255 85  85 255 85
+255 255 85  255 255 85  255 255 85  255 255 85  255 255 85  170 85 0
+255 255 85  170 85 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  85 85 85
+85 85 85  0 0 0  85 85 85  85 85 85  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+170 85 0  170 85 0  255 255 85  255 255 85  255 255 255  170 170 170
+255 255 85  255 255 85  255 255 85  255 255 85  255 255 85  255 255 85
+170 85 0  255 255 85  255 255 85  170 85 0  255 255 85  255 255 85
+255 255 85  85 255 85  170 85 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  85 85 85
+85 85 85  85 85 85  85 85 85  85 85 85  85 85 85  0 0 0
+85 85 85  0 0 0  0 0 0  85 85 85  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+255 255 85  85 255 85  255 255 85  170 170 170  255 255 255  255 255 85
+255 255 85  255 255 85  170 85 0  255 255 85  255 255 85  255 255 85
+255 255 85  255 255 85  255 255 85  255 255 85  85 255 85  170 85 0
+255 255 85  170 85 0  170 85 0  0 0 0  85 85 85  0 0 0
+85 85 85  85 85 85  85 85 85  170 170 170  170 170 170  170 170 170
+85 255 85  170 170 170  170 170 170  170 170 170  170 170 170  170 170 170
+170 170 170  170 170 170  170 170 170  170 170 170  170 170 170  170 170 170
+170 170 170  170 170 170  170 170 170  170 170 170  170 170 170  170 170 170
+170 170 170  170 170 170  170 170 170  170 170 170  255 255 85  170 170 170
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 170 0
+170 85 0  255 255 85  255 255 85  255 255 85  255 255 85  255 255 85
+255 255 85  255 255 85  255 255 85  255 255 85  255 255 85  255 255 85
+255 255 85  255 255 85  85 255 85  255 255 85  170 85 0  170 85 0
+170 85 0  85 255 85  255 255 85  85 85 85  170 170 170  170 170 170
+170 170 170  170 170 170  170 170 170  85 255 85  170 170 170  170 170 170
+85 85 85  170 170 170  170 170 170  170 85 0  170 170 170  170 170 170
+85 255 85  170 170 170  170 85 0  170 170 170  85 255 85  255 85 85
+85 255 85  170 170 170  255 255 85  85 85 85  255 255 85  170 170 170
+85 255 85  170 170 170  255 255 85  170 170 170  170 170 170  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  255 255 85
+255 255 85  255 255 85  255 255 85  255 255 255  255 255 85  255 255 85
+255 255 85  255 255 85  255 255 85  255 255 85  255 255 85  170 85 0
+255 255 85  255 255 85  255 255 85  170 85 0  0 170 0  85 85 85
+170 170 170  170 170 170  255 255 85  170 170 170  170 170 170  85 255 85
+255 85 85  85 255 85  85 85 85  255 85 85  85 85 85  170 170 170
+170 85 0  170 170 170  85 85 85  85 255 85  85 85 85  85 85 85
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+170 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  255 255 85
+170 85 0  255 255 85  255 255 85  255 255 85  255 255 85  255 255 85
+255 255 85  255 255 85  255 255 85  255 255 85  255 255 85  255 255 85
+255 255 85  255 255 85  170 85 0  255 255 85  85 85 85  85 85 85
+255 255 85  170 170 170  85 85 85  85 85 85  0 0 0  85 85 85
+0 0 0  85 85 85  85 85 85  170 170 170  170 85 0  170 170 170
+170 170 170  255 255 85  170 170 170  85 85 85  85 85 85  85 85 85
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  170 85 0  255 255 85
+255 255 85  255 255 85  255 255 85  255 255 85  255 255 85  255 255 85
+255 255 85  255 255 85  255 255 85  255 255 85  255 255 85  255 255 85
+255 255 85  255 255 85  255 255 85  170 85 0  170 85 0  0 170 0
+0 0 0  170 85 0  170 85 0  0 170 0  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  85 85 85  170 170 170  85 85 85
+170 170 170  85 85 85  85 85 85  170 170 170  170 85 0  85 85 85
+85 85 85  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  255 255 85  170 85 0
+255 255 85  255 255 85  255 255 85  255 255 85  255 255 85  170 85 0
+255 255 85  255 255 85  255 255 85  170 85 0  255 255 85  255 255 85
+170 85 0  255 255 85  85 255 85  255 255 85  255 255 85  170 85 0
+170 85 0  255 255 85  170 85 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  85 85 85  85 85 85  85 85 85
+85 85 85  85 85 85  85 85 85  85 85 85  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  255 255 85  255 255 85
+255 255 85  255 255 85  170 85 0  255 255 85  255 255 85  255 255 85
+255 255 85  255 255 85  255 255 85  255 255 85  255 255 85  255 255 85
+255 255 85  255 255 85  255 255 85  170 85 0  255 255 85  255 255 85
+85 255 85  170 85 0  0 170 0  85 85 85  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  85 85 85  85 85 85
+85 85 85  85 85 85  85 85 85  85 85 85  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 170 0  170 85 0  255 255 85
+85 255 85  255 255 85  255 255 85  255 255 85  255 255 85  255 255 85
+255 255 85  255 255 85  255 255 85  255 255 85  255 255 85  255 255 85
+170 85 0  255 255 85  85 255 85  255 255 85  255 255 85  170 85 0
+85 255 85  170 85 0  170 85 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  170 85 0  255 255 85  255 255 85
+255 255 85  255 255 85  255 255 85  255 255 85  255 255 85  255 255 85
+255 255 85  170 85 0  255 255 85  85 255 85  255 255 85  170 85 0
+255 255 85  255 255 85  170 85 0  255 255 85  170 85 0  85 255 85
+170 85 0  170 85 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  255 255 85  170 85 0
+255 255 85  170 85 0  255 255 85  170 85 0  255 255 85  85 255 85
+255 255 85  255 255 85  255 255 85  255 255 85  255 255 85  255 255 85
+255 255 85  170 85 0  255 255 85  85 255 85  170 85 0  170 85 0
+0 170 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  85 85 85  85 85 85  85 85 85  85 85 85
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  170 85 0  255 255 85  255 255 85
+255 255 85  255 255 85  255 255 85  255 255 85  255 255 85  255 255 85
+255 255 85  255 255 85  170 85 0  255 255 85  170 85 0  85 255 85
+255 255 85  85 255 85  170 85 0  170 85 0  85 255 85  170 85 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  85 85 85
+85 85 85  85 85 85  85 85 85  85 85 85  85 85 85  85 85 85
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  255 255 85  85 255 85
+255 255 85  255 255 85  85 255 85  255 255 85  255 255 85  255 255 85
+255 255 85  170 85 0  255 255 85  85 255 85  255 255 85  255 255 85
+170 85 0  170 85 0  85 255 85  170 85 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  85 85 85  170 170 170  170 170 170  170 170 170
+170 170 170  170 170 170  170 170 170  170 170 170  170 170 170  85 85 85
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  255 255 85  255 255 85
+170 85 0  255 255 85  255 255 85  170 85 0  255 255 85  170 85 0
+255 255 85  85 255 85  170 85 0  255 255 85  170 85 0  85 255 85
+170 85 0  170 85 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  170 170 170  170 170 170  170 170 170  170 170 170
+170 170 170  170 170 170  170 170 170  85 85 85  85 85 85  85 85 85
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  170 85 0  255 255 85
+255 255 85  255 255 85  255 255 85  255 255 85  255 255 85  85 255 85
+170 85 0  255 255 85  170 85 0  85 255 85  170 85 0  170 85 0
+0 170 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  170 170 170  170 170 170  255 255 255  170 170 170
+170 170 170  170 170 170  85 85 85  85 85 85  85 85 85  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 255 85  255 255 85
+170 85 0  255 255 85  255 255 85  170 85 0  85 255 85  170 85 0
+255 255 85  170 85 0  0 170 0  170 85 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  170 170 170  170 170 170  170 170 170  85 85 85
+85 85 85  85 85 85  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  255 255 85
+255 255 85  255 255 85  255 255 85  255 255 85  170 85 0  170 85 0
+0 170 0  85 85 85  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  0 0 0  85 85 85  85 85 85
+85 85 85  85 85 85  85 85 85  85 85 85  85 85 85  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+255 255 85  255 255 85  170 85 0  0 170 0  85 85 85  85 85 85
+85 85 85  85 85 85  0 0 0  85 85 85  85 85 85  0 0 0
+85 85 85  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  85 85 85  85 85 85  170 170 170  170 170 170  85 85 85
+170 170 170  170 170 170  170 170 170  170 170 170  85 85 85  85 85 85
+85 85 85  85 85 85  85 85 85  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  170 85 0  85 85 85  0 0 0  0 0 0  0 0 0
+85 85 85  85 85 85  85 85 85  85 85 85  170 170 170  85 85 85
+85 85 85  85 85 85  85 85 85  85 85 85  85 85 85  85 85 85
+170 170 170  170 170 170  170 170 170  170 170 170  255 255 255  255 255 255
+255 255 255  255 255 255  255 255 255  170 170 170  255 255 255  170 170 170
+170 170 170  170 170 170  170 170 170  85 85 85  85 85 85  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+85 85 85  85 85 85  85 85 85  85 85 85  170 170 170  170 170 170
+255 255 255  255 255 255  255 255 255  170 170 170  255 255 255  170 170 170
+255 255 255  255 255 255  255 255 255  255 255 255  255 255 255  255 255 255
+255 255 255  255 255 255  255 255 255  255 255 255  255 255 255  255 255 255
+255 255 255  255 255 255  170 170 170  255 255 255  170 170 170  85 85 85
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+85 85 85  85 85 85  85 85 85  85 85 85  170 170 170  170 170 170
+255 255 255  170 170 170  255 255 255  255 255 255  255 255 255  255 255 255
+255 255 255  255 255 255  255 255 255  255 255 255  255 255 255  170 170 170
+255 255 255  255 255 255  170 170 170  255 255 255  255 255 255  255 255 255
+255 255 255  255 255 255  255 255 255  255 255 255  170 170 170  85 85 85
+0 0 0  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+85 85 85  85 85 85  85 85 85  85 85 85  85 85 85  170 170 170
+170 170 170  170 170 170  255 255 255  170 170 170  255 255 255  170 170 170
+255 255 255  170 170 170  255 255 255  170 170 170  255 255 255  255 255 255
+255 255 255  170 170 170  255 255 255  170 170 170  255 255 255  170 170 170
+170 170 170  170 170 170  170 170 170  170 170 170  85 85 85  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+85 85 85  85 85 85  85 85 85  0 0 0  85 85 85  85 85 85
+85 85 85  85 85 85  85 85 85  170 170 170  170 170 170  170 170 170
+170 170 170  170 170 170  170 170 170  170 170 170  170 170 170  170 170 170
+170 170 170  170 170 170  170 170 170  170 170 170  85 85 85  170 170 170
+170 170 170  170 170 170  85 85 85  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  85 85 85
+170 170 170  85 85 85  85 85 85  85 85 85  0 0 0  85 85 85
+0 0 0  85 85 85  85 85 85  85 85 85  85 85 85  85 85 85
+85 85 85  85 85 85  85 85 85  85 85 85  85 85 85  0 0 0
+85 85 85  85 85 85  85 85 85  85 85 85  85 85 85  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  170 170 170  85 85 85
+85 85 85  85 85 85  85 85 85  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  85 85 85  85 85 85
+85 85 85  85 85 85  85 85 85  85 85 85  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  85 85 85  170 170 170  85 85 85
+85 85 85  85 85 85  85 85 85  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  0 0 0  85 85 85  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  85 85 85  85 85 85  85 85 85
+85 85 85  85 85 85  0 0 0  85 85 85  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  85 85 85  170 170 170  85 85 85  85 85 85
+85 85 85  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  170 170 170  170 170 170
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  170 170 170  85 85 85  85 85 85  85 85 85
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  85 85 85  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  170 170 170  255 255 255  170 170 170
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  85 85 85  85 85 85  85 85 85  85 85 85  85 85 85
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  170 170 170
+170 170 170  255 255 255  170 170 170  170 170 170
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  170 170 170  85 85 85  85 85 85  85 85 85  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  85 85 85  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  170 170 170  170 170 170
+255 255 255  255 255 255  170 170 170  170 170 170
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+85 85 85  85 85 85  85 85 85  85 85 85  85 85 85  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  170 170 170  170 170 170  255 255 255
+255 255 255  170 170 170  170 170 170  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+170 170 170  85 85 85  85 85 85  85 85 85  85 85 85  85 85 85
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  85 85 85  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  170 170 170  255 255 255  255 255 255  255 255 255
+170 170 170  170 170 170  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  85 85 85
+85 85 85  85 85 85  85 85 85  85 85 85  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+170 170 170  170 170 170  255 255 255  255 255 255  255 255 255  170 170 170
+170 170 170  170 170 170  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  85 85 85
+85 85 85  85 85 85  85 85 85  85 85 85  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  170 170 170  170 170 170
+170 170 170  255 255 255  255 255 255  255 255 255  170 170 170  170 170 170
+170 170 170  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  85 85 85  85 85 85
+85 85 85  85 85 85  85 85 85  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  85 85 85  85 85 85  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  170 170 170  170 170 170  170 170 170
+255 255 255  255 255 255  255 255 255  255 255 255  170 170 170  170 170 170
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  85 85 85  85 85 85
+85 85 85  85 85 85  85 85 85  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  85 85 85  85 85 85  85 85 85  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+85 85 85  85 85 85  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  170 170 170  170 170 170  255 255 255  255 255 255  255 255 255
+255 255 255  255 255 255  170 170 170  170 170 170  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  85 85 85  85 85 85
+85 85 85  85 85 85  85 85 85  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  170 170 170  255 255 255  85 85 85  85 85 85
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+85 85 85  170 170 170  85 85 85  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+170 170 170  170 170 170  255 255 255  170 170 170  255 255 255  255 255 255
+255 255 255  255 255 255  170 170 170  170 170 170  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  170 170 170  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  85 85 85  85 85 85  85 85 85
+85 85 85  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  85 85 85  170 170 170  255 255 255  170 170 170  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  85 85 85
+255 255 255  170 170 170  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  85 85 85
+255 255 255  255 255 255  255 255 255  255 255 255  255 255 255  255 255 255
+170 170 170  170 170 170  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  255 255 255  170 170 170  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  85 85 85  85 85 85  0 0 0
+85 85 85  85 85 85  0 0 0  85 85 85  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  85 85 85  255 255 255  255 255 255  255 255 255  85 85 85
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  170 170 170
+255 255 255  170 170 170  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  170 170 170  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  85 85 85  170 170 170
+170 170 170  255 255 255  255 255 255  255 255 255  255 255 255  170 170 170
+170 170 170  170 170 170  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+170 170 170  255 255 255  255 255 255  170 170 170  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  85 85 85  85 85 85  0 0 0
+85 85 85  85 85 85  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  85 85 85
+85 85 85  170 170 170  255 255 255  255 255 255  255 255 255  85 85 85
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  255 255 255
+255 255 255  170 170 170  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  170 170 170  170 170 170  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  85 85 85  85 85 85  85 85 85
+170 170 170  255 255 255  255 255 255  255 255 255  170 170 170  170 170 170
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  170 170 170  170 170 170
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+170 170 170  255 255 255  255 255 255  255 255 255  85 85 85  0 0 0
+0 0 0  85 85 85  85 85 85  85 85 85  85 85 85  0 0 0
+85 85 85  85 85 85  0 0 0  85 85 85  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+85 85 85  170 170 170  255 255 255  255 255 255  255 255 255  170 170 170
+0 0 0  85 85 85  0 0 0  85 85 85  170 170 170  255 255 255
+255 255 255  170 170 170  85 85 85  0 0 0  0 0 0  0 0 0
+85 85 85  255 255 255  255 255 255  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  85 85 85
+0 0 0  85 85 85  85 85 85  0 0 0  85 85 85  85 85 85
+170 170 170  170 170 170  170 170 170  170 170 170  170 170 170  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  170 170 170  255 255 255
+170 170 170  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  255 255 255  255 255 255  255 255 255  255 255 255  0 0 0
+0 0 0  85 85 85  85 85 85  0 0 0  85 85 85  0 0 0
+85 85 85  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  85 85 85  85 85 85  85 85 85
+85 85 85  255 255 255  255 255 255  255 255 255  170 170 170  170 170 170
+85 85 85  0 0 0  0 0 0  85 85 85  170 170 170  255 255 255
+255 255 255  170 170 170  0 0 0  0 0 0  0 0 0  0 0 0
+170 170 170  255 255 255  170 170 170  0 0 0  0 0 0  0 0 0
+85 85 85  170 170 170  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+85 85 85  85 85 85  0 0 0  85 85 85  85 85 85  0 0 0
+85 85 85  85 85 85  170 170 170  85 85 85  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  170 170 170
+255 255 255  170 170 170  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  170 170 170  255 255 255  255 255 255  255 255 255  170 170 170
+0 0 0  85 85 85  85 85 85  85 85 85  0 0 0  0 0 0
+85 85 85  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+170 170 170  170 170 170  255 255 255  170 170 170  255 255 255  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  170 170 170  255 255 255
+170 170 170  170 170 170  0 0 0  0 0 0  0 0 0  85 85 85
+170 170 170  255 255 255  255 255 255  0 0 0  0 0 0  85 85 85
+255 255 255  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  85 85 85
+85 85 85  0 0 0  85 85 85  85 85 85  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  255 255 255
+255 255 255  255 255 255  170 170 170  0 0 0  0 0 0  0 0 0
+85 85 85  170 170 170  255 255 255  170 170 170  170 170 170  170 170 170
+85 85 85  85 85 85  0 0 0  85 85 85  0 0 0  85 85 85
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  85 85 85
+85 85 85  170 170 170  255 255 255  170 170 170  170 170 170  85 85 85
+85 85 85  0 0 0  85 85 85  85 85 85  85 85 85  170 170 170
+170 170 170  85 85 85  85 85 85  0 0 0  0 0 0  85 85 85
+170 170 170  170 170 170  85 85 85  0 0 0  0 0 0  170 170 170
+170 170 170  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  170 170 170  170 170 170
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  170 170 170
+255 255 255  170 170 170  170 170 170  85 85 85  0 0 0  0 0 0
+0 0 0  85 85 85  170 170 170  170 170 170  255 255 85  85 85 85
+85 85 85  85 85 85  85 85 85  0 0 0  0 0 0  0 0 0
+85 85 85  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  85 85 85  0 0 0  85 85 85
+85 85 85  170 170 170  170 170 170  170 170 170  170 85 0  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  170 170 170  170 85 0
+170 170 170  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+170 85 0  170 170 170  85 85 85  0 0 0  85 85 85  85 85 85
+170 170 170  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  170 170 170  255 255 255
+170 170 170  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+255 255 255  170 170 170  170 170 170  85 85 85  0 0 0  0 0 0
+0 0 0  85 85 85  170 85 0  170 170 170  170 170 170  85 85 85
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  85 85 85
+85 85 85  170 85 0  85 255 85  170 85 0  170 170 170  85 85 85
+85 85 85  0 0 0  0 0 0  85 85 85  170 85 0  85 255 85
+170 85 0  85 85 85  0 0 0  85 85 85  0 0 0  85 85 85
+85 85 85  85 85 85  170 85 0  0 0 0  85 85 85  85 85 85
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  255 255 255
+255 255 255  170 170 170  0 0 0  0 0 0  0 0 0  0 0 0
+170 170 170  170 170 170  170 170 170  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  170 170 170  170 85 0  170 170 170  170 85 0
+85 85 85  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  85 85 85  85 85 85  0 0 0
+85 85 85  85 85 85  255 85 85  170 170 170  85 255 85  170 85 0
+85 85 85  85 85 85  170 85 0  85 85 85  170 170 170  85 85 85
+170 170 170  170 85 0  85 85 85  85 85 85  85 85 85  85 85 85
+170 85 0  85 255 85  85 85 85  85 85 85  85 85 85  170 85 0
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  85 85 85  0 0 0  0 0 0  0 0 0  170 170 170
+255 255 255  170 170 170  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  170 85 0  170 170 170  170 85 0  85 85 85  0 0 0
+85 85 85  85 85 85  85 255 85  170 170 170  170 170 170  170 85 0
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  85 85 85
+0 0 0  85 85 85  85 85 85  0 0 0  85 85 85  85 85 85
+85 85 85  85 85 85  85 255 85  255 85 85  170 170 170  170 170 170
+170 170 170  85 255 85  170 170 170  170 85 0  170 170 170  170 85 0
+170 170 170  85 85 85  85 255 85  170 85 0  170 170 170  170 85 0
+170 170 170  170 170 170  170 85 0  85 85 85  85 85 85  85 255 85
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  170 170 170  170 170 170  0 0 0  0 0 0  85 85 85
+170 170 170  170 170 170  85 85 85  0 0 0  0 0 0  0 0 0
+85 85 85  85 85 85  255 255 85  85 85 85  85 85 85  85 85 85
+85 255 85  255 85 85  170 170 170  170 85 0  170 170 170  85 255 85
+85 85 85  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  85 85 85  85 85 85  0 0 0
+85 85 85  85 85 85  170 85 0  170 170 170  170 170 170  255 255 85
+170 170 170  255 85 85  170 170 170  170 170 170  255 255 85  170 170 170
+85 255 85  170 170 170  255 85 85  170 170 170  170 170 170  170 170 170
+170 170 170  170 170 170  170 170 170  170 85 0  170 170 170  170 85 0
+85 85 85  0 0 0  0 0 0  85 85 85  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  170 170 170  85 85 85  0 0 0  85 85 85
+85 85 85  170 85 0  85 85 85  0 0 0  85 85 85  85 85 85
+85 85 85  170 85 0  170 170 170  170 170 170  255 255 85  170 170 170
+170 170 170  170 170 170  255 255 85  170 170 170  170 170 170  255 85 85
+85 85 85  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+85 85 85  85 85 85  0 0 0  85 85 85  85 85 85  85 85 85
+85 85 85  85 85 85  170 170 170  255 255 85  170 170 170  170 170 170
+170 170 170  255 255 85  170 170 170  170 170 170  170 170 170  170 85 0
+170 170 170  255 255 85  170 170 170  255 255 85  170 170 170  255 255 85
+170 170 170  255 255 85  170 170 170  170 170 170  85 255 85  170 85 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  170 170 170  85 85 85  85 85 85  0 0 0
+85 85 85  85 85 85  170 170 170  85 85 85  170 170 170  170 85 0
+170 170 170  85 255 85  170 170 170  170 85 0  170 170 170  170 170 170
+255 255 85  170 170 170  170 170 170  255 255 255  255 255 85  170 170 170
+255 255 85  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  85 85 85  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+85 85 85  170 85 0  170 170 170  170 170 170  170 170 170  255 255 255
+170 170 170  255 255 255  255 255 85  170 170 170  255 255 85  170 170 170
+255 255 85  170 170 170  170 170 170  170 170 170  170 170 170  170 170 170
+170 170 170  170 170 170  170 170 170  255 85 85  170 170 170  170 170 170
+85 85 85  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  85 85 85  170 85 0  85 85 85
+85 85 85  255 255 85  170 170 170  170 170 170  170 170 170  170 170 170
+255 255 85  170 170 170  170 170 170  255 255 85  170 170 170  170 170 170
+170 170 170  255 255 255  255 255 255  170 170 170  255 255 255  170 170 170
+170 170 170  85 85 85  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  170 170 170  170 170 170  85 85 85  0 0 0  0 0 0
+0 0 0  85 85 85  85 85 85  85 85 85  85 85 85  85 85 85
+85 85 85  85 255 85  170 170 170  255 255 85  255 255 255  255 255 255
+255 255 255  170 170 170  255 255 255  170 170 170  170 170 170  170 170 170
+170 170 170  170 170 170  255 255 85  170 170 170  255 255 85  255 255 255
+255 255 85  255 255 255  255 255 85  170 170 170  170 170 170  170 85 0
+170 170 170  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  85 85 85  85 85 85
+85 85 85  170 170 170  255 255 85  170 170 170  255 255 85  170 170 170
+170 170 170  255 255 85  170 170 170  170 170 170  170 170 170  255 255 85
+255 255 255  255 255 255  255 255 85  255 255 255  255 255 255  170 170 170
+255 255 85  85 85 85  85 85 85  0 0 0  0 0 0  85 85 85
+85 85 85  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+85 85 85  170 170 170  170 170 170  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+85 85 85  170 170 170  170 170 170  170 170 170  255 255 255  170 170 170
+255 255 255  255 255 255  255 255 255  170 170 170  170 170 170  255 255 85
+170 170 170  255 255 85  170 170 170  255 255 255  170 170 170  255 255 255
+255 255 255  255 255 255  170 170 170  255 255 85  170 170 170  255 255 85
+85 85 85  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  170 85 0  170 170 170
+255 255 85  170 170 170  170 170 170  255 255 255  255 255 255  255 255 255
+170 170 170  170 170 170  170 170 170  255 255 85  170 170 170  170 170 170
+255 255 255  170 170 170  255 255 255  255 255 255  170 170 170  255 255 255
+170 170 170  170 170 170  85 85 85  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  85 85 85  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  170 170 170  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  85 85 85  85 85 85  0 0 0
+85 85 85  170 85 0  255 255 255  170 170 170  255 255 255  255 255 255
+255 255 85  255 255 255  170 170 170  255 255 85  170 170 170  170 170 170
+170 170 170  170 170 170  170 170 170  255 255 85  255 255 255  255 255 255
+170 170 170  255 255 255  255 255 255  170 170 170  170 170 170  170 170 170
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  85 255 85  170 170 170
+170 170 170  255 255 85  170 170 170  255 255 255  170 170 170  255 255 255
+255 255 255  255 255 255  255 255 85  170 170 170  170 170 170  255 255 255
+170 170 170  255 255 255  255 255 255  170 170 170  255 255 255  255 255 85
+170 170 170  170 85 0  85 85 85  0 0 0  0 0 0  85 85 85
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  85 85 85  0 0 0  0 0 0  0 0 0  85 85 85
+85 85 85  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  170 170 170  170 170 170  255 255 85  170 170 170  255 255 255
+255 255 255  170 170 170  255 255 255  170 170 170  170 170 170  255 255 85
+170 170 170  255 255 85  170 170 170  255 255 255  170 170 170  255 255 255
+255 255 255  255 255 255  255 255 255  255 255 255  170 170 170  255 255 85
+85 85 85  85 85 85  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  170 85 0  170 170 170
+170 170 170  255 255 255  255 255 255  255 255 255  255 255 255  255 255 255
+170 170 170  170 170 170  170 170 170  170 170 170  255 255 85  170 170 170
+255 255 85  255 255 255  170 170 170  255 255 255  170 170 170  170 170 170
+170 170 170  170 170 170  85 85 85  0 0 0  85 85 85  85 85 85
+0 0 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  85 85 85
+85 85 85  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+85 85 85  85 85 85  170 170 170  170 170 170  255 255 255  170 170 170
+255 255 255  170 170 170  255 255 85  170 170 170  170 170 170  170 170 170
+255 85 85  170 170 170  170 170 170  170 170 170  255 255 255  255 255 255
+170 170 170  255 255 255  255 255 255  170 170 170  255 255 255  170 170 170
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  85 85 85  170 170 170
+255 255 85  170 170 170  255 255 255  170 170 170  255 255 255  255 255 255
+255 255 85  255 255 255  170 170 170  255 255 85  170 170 170  170 170 170
+170 170 170  170 170 170  255 255 85  170 170 170  170 170 170  255 255 85
+170 170 170  170 85 0  85 85 85  0 0 0  85 85 85  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  170 170 170  170 170 170
+170 170 170  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  170 170 170  255 255 85  170 170 170  170 170 170
+255 255 85  170 170 170  170 170 170  170 170 170  170 170 170  255 85 85
+85 255 85  170 170 170  170 170 170  170 170 170  255 255 85  170 170 170
+255 255 255  255 255 255  255 255 255  255 255 85  170 170 170  170 170 170
+85 85 85  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  255 255 85
+170 170 170  170 170 170  255 255 255  255 255 255  255 255 255  170 170 170
+255 255 255  170 170 170  170 170 170  170 170 170  170 170 170  255 85 85
+170 170 170  170 170 170  170 170 170  170 170 170  170 170 170  170 170 170
+170 170 170  85 85 85  85 85 85  0 0 0  85 85 85  0 0 0
+85 85 85  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  170 170 170  170 170 170  170 170 170
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  85 85 85  170 85 0  170 170 170  170 170 170  170 170 170
+170 170 170  170 170 170  170 170 170  170 85 0  170 170 170  85 255 85
+255 85 85  170 170 170  255 255 85  170 170 170  170 170 170  255 255 255
+255 255 255  170 170 170  255 255 255  255 255 255  170 170 170  170 170 170
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  170 170 170
+170 170 170  255 255 85  170 170 170  255 255 85  255 255 255  255 255 255
+170 170 170  170 170 170  255 255 85  170 170 170  255 85 85  85 255 85
+170 170 170  170 85 0  170 170 170  170 170 170  255 255 85  170 170 170
+170 85 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  85 85 85  85 85 85  85 85 85  170 170 170  255 255 85
+170 170 170  170 85 0  170 170 170  170 170 170  170 85 0  85 85 85
+170 170 170  170 85 0  85 85 85  170 170 170  170 170 170  170 170 170
+170 170 170  255 255 255  255 255 255  255 255 85  170 170 170  170 170 170
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  170 85 0
+170 170 170  170 170 170  255 255 255  170 170 170  255 255 255  170 170 170
+255 255 255  170 170 170  170 170 170  170 85 0  170 170 170  85 85 85
+170 170 170  170 170 170  170 85 0  170 170 170  170 85 0  85 85 85
+85 255 85  85 85 85  0 0 0  0 0 0  0 0 0  85 85 85
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  85 85 85  85 85 85
+85 85 85  0 0 0  85 85 85  170 85 0  85 85 85  170 170 170
+170 85 0  170 170 170  85 255 85  170 85 0  170 170 170  85 85 85
+170 85 0  170 170 170  170 170 170  255 255 85  170 170 170  255 255 255
+255 255 85  255 255 255  170 170 170  170 170 170  170 170 170  170 85 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+170 170 170  170 170 170  170 170 170  170 170 170  170 170 170  255 255 85
+170 170 170  255 255 85  170 170 170  170 170 170  85 255 85  170 170 170
+170 85 0  170 85 0  170 170 170  85 255 85  85 85 85  170 170 170
+170 85 0  85 85 85  0 0 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  170 170 170  85 85 85
+0 0 0  0 0 0  0 0 0  85 85 85  170 85 0  85 85 85
+170 170 170  170 85 0  170 170 170  85 85 85  170 170 170  170 85 0
+170 170 170  85 255 85  170 85 0  170 170 170  170 170 170  170 170 170
+255 255 255  170 170 170  255 255 255  255 255 255  170 170 170  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+170 85 0  170 170 170  255 255 85  170 170 170  255 255 255  170 170 170
+170 170 170  170 170 170  170 170 170  170 85 0  170 170 170  170 85 0
+170 170 170  85 255 85  170 85 0  170 170 170  170 85 0  85 85 85
+85 85 85  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  85 85 85  85 85 85
+85 255 85  170 170 170  170 85 0  170 170 170  170 85 0  85 255 85
+170 170 170  170 85 0  170 170 170  170 170 170  170 170 170  255 255 85
+170 170 170  255 255 255  170 170 170  170 170 170  170 170 170  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  170 85 0  85 85 85  170 170 170  255 255 85  170 170 170
+170 170 170  255 255 85  170 170 170  170 170 170  170 170 170  170 85 0
+170 170 170  85 85 85  170 170 170  170 85 0  170 170 170  85 85 85
+170 85 0  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  0 0 0  85 85 85  170 85 0
+85 85 85  255 85 85  85 255 85  170 85 0  170 170 170  170 170 170
+170 85 0  170 170 170  85 85 85  255 255 85  170 170 170  170 170 170
+255 255 255  170 170 170  255 255 255  255 255 85  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  170 170 170  170 85 0  170 170 170  170 170 170
+170 170 170  170 170 170  170 170 170  255 255 85  85 85 85  170 170 170
+85 255 85  255 85 85  170 170 170  85 255 85  255 85 85  85 255 85
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  85 85 85  0 0 0  85 85 85
+85 85 85  85 255 85  255 85 85  170 170 170  85 255 85  170 85 0
+170 170 170  170 170 170  255 255 85  170 170 170  170 170 170  255 255 255
+170 170 170  255 255 255  170 170 170  170 170 170  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  170 170 170  85 85 85  255 255 85
+170 170 170  255 255 85  170 170 170  170 170 170  170 170 170  255 255 85
+85 85 85  255 255 85  170 170 170  170 85 0  170 170 170  85 85 85
+170 85 0  85 85 85  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+170 170 170  170 85 0  170 170 170  170 85 0  170 170 170  170 170 170
+170 85 0  170 170 170  170 170 170  170 170 170  255 255 85  170 170 170
+255 255 85  255 255 255  170 170 170  170 170 170  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  170 85 0  85 85 85  170 170 170
+170 85 0  170 170 170  170 170 170  255 255 85  170 170 170  170 170 170
+170 170 170  170 170 170  170 170 170  255 255 85  170 170 170  170 85 0
+85 85 85  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  85 85 85
+170 85 0  85 255 85  170 170 170  170 170 170  255 255 85  170 170 170
+255 255 85  170 170 170  170 170 170  170 170 170  255 255 255  255 255 255
+255 255 255  170 170 170  255 255 85  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  85 85 85  170 85 0
+170 170 170  170 170 170  170 170 170  170 170 170  170 170 170  255 255 85
+170 170 170  255 255 85  170 170 170  170 170 170  170 170 170  170 170 170
+170 170 170  85 85 85  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+85 85 85  170 85 0  170 170 170  170 85 0  170 170 170  170 170 170
+170 170 170  255 255 85  170 170 170  255 255 85  170 170 170  255 255 255
+170 170 170  255 255 255  170 170 170  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  85 85 85  85 85 85  85 85 85
+170 85 0  170 170 170  170 85 0  255 255 85  170 170 170  170 170 170
+170 170 170  170 170 170  255 255 85  170 170 170  255 255 85  170 170 170
+255 255 85  85 85 85  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  85 85 85
+85 85 85  170 170 170  255 255 85  170 170 170  255 255 85  170 170 170
+170 170 170  255 255 255  255 255 255  255 255 255  255 255 255  255 255 255
+170 170 170  170 170 170  170 170 170  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 170 0  85 85 85
+170 85 0  85 255 85  170 170 170  170 170 170  170 170 170  255 255 85
+255 255 255  170 170 170  255 255 255  170 170 170  255 255 255  170 170 170
+170 170 170  255 255 85  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+170 85 0  170 170 170  170 170 170  170 170 170  170 170 170  255 255 85
+170 170 170  255 255 255  170 170 170  255 255 255  170 170 170  255 255 255
+255 255 255  255 255 85  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+85 85 85  170 85 0  170 170 170  170 170 170  255 255 85  170 170 170
+170 170 170  255 255 255  255 255 255  255 255 255  170 170 170  255 255 255
+170 170 170  170 170 170  170 170 170  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  85 255 85
+170 170 170  255 255 85  170 170 170  255 255 85  255 255 255  255 255 255
+255 255 255  255 255 255  255 255 255  255 255 255  255 255 255  170 170 170
+170 170 170  170 170 170  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  85 85 85  85 85 85  170 85 0  170 170 170  170 170 170
+255 255 85  170 170 170  255 255 255  255 255 85  255 255 255  255 255 255
+170 170 170  255 255 85  170 170 170  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  170 85 0
+170 170 170  170 170 170  170 170 170  255 255 255  170 170 170  255 255 255
+170 170 170  255 255 255  170 170 170  255 255 255  255 255 85  255 255 255
+170 170 170  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  170 85 0  85 85 85  170 170 170  170 170 170  170 170 170
+170 170 170  255 255 255  170 170 170  255 255 255  255 255 255  170 170 170
+255 255 85  170 170 170  170 170 170  170 85 0  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  170 170 170
+255 255 85  170 170 170  255 255 85  170 170 170  255 255 255  255 255 255
+255 255 255  255 255 255  255 255 255  255 255 255  170 170 170  170 170 170
+170 170 170  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  85 85 85  85 85 85  170 85 0  170 170 170
+255 255 85  170 170 170  255 255 85  255 255 255  170 170 170  255 255 255
+170 170 170  170 170 170  170 170 170  170 170 170  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  170 170 170
+170 85 0  170 170 170  255 255 255  170 170 170  255 255 255  170 170 170
+255 255 255  255 255 255  170 170 170  255 255 255  255 255 85  170 170 170
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  85 85 85  170 85 0  85 85 85  170 170 170
+170 170 170  170 170 170  170 170 170  170 170 170  255 255 85  170 170 170
+255 255 85  170 170 170  170 85 0  85 255 85  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  170 85 0
+170 170 170  170 170 170  255 255 85  170 170 170  255 255 255  255 255 255
+255 255 85  255 255 255  170 170 170  255 255 255  170 170 170  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  85 85 85
+170 85 0  170 170 170  170 170 170  255 255 85  170 170 170  170 170 170
+170 170 170  170 170 170  170 170 170  170 85 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  85 85 85
+255 255 85  170 170 170  170 170 170  170 170 170  255 255 85  170 170 170
+255 255 255  170 170 170  255 255 85  170 170 170  85 85 85  85 85 85
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  85 85 85
+85 85 85  170 85 0  170 170 170  170 170 170  170 170 170  170 170 170
+170 85 0  170 170 170  170 85 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  85 85 85  85 85 85
+170 170 170  170 170 170  255 255 85  170 170 170  170 170 170  170 170 170
+170 170 170  255 255 255  170 170 170  170 170 170  85 85 85  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+85 85 85  85 85 85  85 85 85  170 85 0  85 85 85  170 85 0
+85 85 85  85 85 85  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  170 85 0
+85 85 85  170 85 0  170 170 170  170 170 170  170 170 170  255 255 85
+170 170 170  170 170 170  170 85 0  85 85 85  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  85 85 85  85 85 85  85 85 85  85 85 85
+85 85 85  85 85 85  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  85 85 85
+85 85 85  85 255 85  170 85 0  170 170 170  170 85 0  170 170 170
+85 85 85  85 85 85  85 85 85  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  85 85 85  85 85 85  85 85 85  85 85 85  85 85 85
+85 85 85  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
+0 0 0  0 0 0  0 0 0  0 0 0
index 8fa77e2..76da125 100644 (file)
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -443,7 +443,7 @@ static struct kiocb *__aio_get_req(struct kioctx *ctx)
        req->private = NULL;
        req->ki_iovec = NULL;
        INIT_LIST_HEAD(&req->ki_run_list);
-       req->ki_eventfd = ERR_PTR(-EINVAL);
+       req->ki_eventfd = NULL;
 
        /* Check if the completion queue has enough free space to
         * accept an event from this io.
@@ -485,8 +485,6 @@ static inline void really_put_req(struct kioctx *ctx, struct kiocb *req)
 {
        assert_spin_locked(&ctx->ctx_lock);
 
-       if (!IS_ERR(req->ki_eventfd))
-               fput(req->ki_eventfd);
        if (req->ki_dtor)
                req->ki_dtor(req);
        if (req->ki_iovec != &req->ki_inline_vec)
@@ -508,8 +506,11 @@ static void aio_fput_routine(struct work_struct *data)
                list_del(&req->ki_list);
                spin_unlock_irq(&fput_lock);
 
-               /* Complete the fput */
-               __fput(req->ki_filp);
+               /* Complete the fput(s) */
+               if (req->ki_filp != NULL)
+                       __fput(req->ki_filp);
+               if (req->ki_eventfd != NULL)
+                       __fput(req->ki_eventfd);
 
                /* Link the iocb into the context's free list */
                spin_lock_irq(&ctx->ctx_lock);
@@ -527,12 +528,14 @@ static void aio_fput_routine(struct work_struct *data)
  */
 static int __aio_put_req(struct kioctx *ctx, struct kiocb *req)
 {
+       int schedule_putreq = 0;
+
        dprintk(KERN_DEBUG "aio_put(%p): f_count=%ld\n",
                req, atomic_long_read(&req->ki_filp->f_count));
 
        assert_spin_locked(&ctx->ctx_lock);
 
-       req->ki_users --;
+       req->ki_users--;
        BUG_ON(req->ki_users < 0);
        if (likely(req->ki_users))
                return 0;
@@ -540,10 +543,23 @@ static int __aio_put_req(struct kioctx *ctx, struct kiocb *req)
        req->ki_cancel = NULL;
        req->ki_retry = NULL;
 
-       /* Must be done under the lock to serialise against cancellation.
-        * Call this aio_fput as it duplicates fput via the fput_work.
+       /*
+        * Try to optimize the aio and eventfd file* puts, by avoiding to
+        * schedule work in case it is not __fput() time. In normal cases,
+        * we would not be holding the last reference to the file*, so
+        * this function will be executed w/out any aio kthread wakeup.
         */
-       if (unlikely(atomic_long_dec_and_test(&req->ki_filp->f_count))) {
+       if (unlikely(atomic_long_dec_and_test(&req->ki_filp->f_count)))
+               schedule_putreq++;
+       else
+               req->ki_filp = NULL;
+       if (req->ki_eventfd != NULL) {
+               if (unlikely(atomic_long_dec_and_test(&req->ki_eventfd->f_count)))
+                       schedule_putreq++;
+               else
+                       req->ki_eventfd = NULL;
+       }
+       if (unlikely(schedule_putreq)) {
                get_ioctx(ctx);
                spin_lock(&fput_lock);
                list_add(&req->ki_list, &fput_head);
@@ -571,7 +587,7 @@ int aio_put_req(struct kiocb *req)
 static struct kioctx *lookup_ioctx(unsigned long ctx_id)
 {
        struct mm_struct *mm = current->mm;
-       struct kioctx *ctx = NULL;
+       struct kioctx *ctx, *ret = NULL;
        struct hlist_node *n;
 
        rcu_read_lock();
@@ -579,12 +595,13 @@ static struct kioctx *lookup_ioctx(unsigned long ctx_id)
        hlist_for_each_entry_rcu(ctx, n, &mm->ioctx_list, list) {
                if (ctx->user_id == ctx_id && !ctx->dead) {
                        get_ioctx(ctx);
+                       ret = ctx;
                        break;
                }
        }
 
        rcu_read_unlock();
-       return ctx;
+       return ret;
 }
 
 /*
@@ -1009,7 +1026,7 @@ int aio_complete(struct kiocb *iocb, long res, long res2)
         * eventfd. The eventfd_signal() function is safe to be called
         * from IRQ context.
         */
-       if (!IS_ERR(iocb->ki_eventfd))
+       if (iocb->ki_eventfd != NULL)
                eventfd_signal(iocb->ki_eventfd, 1);
 
 put_rq:
@@ -1608,6 +1625,7 @@ static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb,
                req->ki_eventfd = eventfd_fget((int) iocb->aio_resfd);
                if (IS_ERR(req->ki_eventfd)) {
                        ret = PTR_ERR(req->ki_eventfd);
+                       req->ki_eventfd = NULL;
                        goto out_put_req;
                }
        }
index 549b014..fe2b1aa 100644 (file)
@@ -685,19 +685,20 @@ EXPORT_SYMBOL(bio_integrity_split);
  * bio_integrity_clone - Callback for cloning bios with integrity metadata
  * @bio:       New bio
  * @bio_src:   Original bio
+ * @gfp_mask:  Memory allocation mask
  * @bs:                bio_set to allocate bip from
  *
  * Description:        Called to allocate a bip when cloning a bio
  */
 int bio_integrity_clone(struct bio *bio, struct bio *bio_src,
-                       struct bio_set *bs)
+                       gfp_t gfp_mask, struct bio_set *bs)
 {
        struct bio_integrity_payload *bip_src = bio_src->bi_integrity;
        struct bio_integrity_payload *bip;
 
        BUG_ON(bip_src == NULL);
 
-       bip = bio_integrity_alloc_bioset(bio, GFP_NOIO, bip_src->bip_vcnt, bs);
+       bip = bio_integrity_alloc_bioset(bio, gfp_mask, bip_src->bip_vcnt, bs);
 
        if (bip == NULL)
                return -EIO;
index 124b95c..d4f0632 100644 (file)
--- a/fs/bio.c
+++ b/fs/bio.c
@@ -463,10 +463,12 @@ struct bio *bio_clone(struct bio *bio, gfp_t gfp_mask)
        if (bio_integrity(bio)) {
                int ret;
 
-               ret = bio_integrity_clone(b, bio, fs_bio_set);
+               ret = bio_integrity_clone(b, bio, gfp_mask, fs_bio_set);
 
-               if (ret < 0)
+               if (ret < 0) {
+                       bio_put(b);
                        return NULL;
+               }
        }
 
        return b;
index 82491ba..5e1d4e3 100644 (file)
@@ -784,7 +784,14 @@ struct btrfs_fs_info {
        struct list_head dirty_cowonly_roots;
 
        struct btrfs_fs_devices *fs_devices;
+
+       /*
+        * the space_info list is almost entirely read only.  It only changes
+        * when we add a new raid type to the FS, and that happens
+        * very rarely.  RCU is used to protect it.
+        */
        struct list_head space_info;
+
        spinlock_t delalloc_lock;
        spinlock_t new_trans_lock;
        u64 delalloc_bytes;
@@ -1797,6 +1804,8 @@ int btrfs_cleanup_reloc_trees(struct btrfs_root *root);
 int btrfs_reloc_clone_csums(struct inode *inode, u64 file_pos, u64 len);
 u64 btrfs_reduce_alloc_profile(struct btrfs_root *root, u64 flags);
 void btrfs_set_inode_space_info(struct btrfs_root *root, struct inode *ionde);
+void btrfs_clear_space_info_full(struct btrfs_fs_info *info);
+
 int btrfs_check_metadata_free_space(struct btrfs_root *root);
 int btrfs_check_data_free_space(struct btrfs_root *root, struct inode *inode,
                                u64 bytes);
index 9abf81f..fefe83a 100644 (file)
@@ -20,6 +20,7 @@
 #include <linux/writeback.h>
 #include <linux/blkdev.h>
 #include <linux/sort.h>
+#include <linux/rcupdate.h>
 #include "compat.h"
 #include "hash.h"
 #include "crc32c.h"
@@ -330,13 +331,33 @@ static struct btrfs_space_info *__find_space_info(struct btrfs_fs_info *info,
 {
        struct list_head *head = &info->space_info;
        struct btrfs_space_info *found;
-       list_for_each_entry(found, head, list) {
-               if (found->flags == flags)
+
+       rcu_read_lock();
+       list_for_each_entry_rcu(found, head, list) {
+               if (found->flags == flags) {
+                       rcu_read_unlock();
                        return found;
+               }
        }
+       rcu_read_unlock();
        return NULL;
 }
 
+/*
+ * after adding space to the filesystem, we need to clear the full flags
+ * on all the space infos.
+ */
+void btrfs_clear_space_info_full(struct btrfs_fs_info *info)
+{
+       struct list_head *head = &info->space_info;
+       struct btrfs_space_info *found;
+
+       rcu_read_lock();
+       list_for_each_entry_rcu(found, head, list)
+               found->full = 0;
+       rcu_read_unlock();
+}
+
 static u64 div_factor(u64 num, int factor)
 {
        if (factor == 10)
@@ -1903,7 +1924,6 @@ static int update_space_info(struct btrfs_fs_info *info, u64 flags,
        if (!found)
                return -ENOMEM;
 
-       list_add(&found->list, &info->space_info);
        INIT_LIST_HEAD(&found->block_groups);
        init_rwsem(&found->groups_sem);
        spin_lock_init(&found->lock);
@@ -1917,6 +1937,7 @@ static int update_space_info(struct btrfs_fs_info *info, u64 flags,
        found->full = 0;
        found->force_alloc = 0;
        *space_info = found;
+       list_add_rcu(&found->list, &info->space_info);
        return 0;
 }
 
@@ -6320,6 +6341,7 @@ out:
 int btrfs_free_block_groups(struct btrfs_fs_info *info)
 {
        struct btrfs_block_group_cache *block_group;
+       struct btrfs_space_info *space_info;
        struct rb_node *n;
 
        spin_lock(&info->block_group_cache_lock);
@@ -6341,6 +6363,23 @@ int btrfs_free_block_groups(struct btrfs_fs_info *info)
                spin_lock(&info->block_group_cache_lock);
        }
        spin_unlock(&info->block_group_cache_lock);
+
+       /* now that all the block groups are freed, go through and
+        * free all the space_info structs.  This is only called during
+        * the final stages of unmount, and so we know nobody is
+        * using them.  We call synchronize_rcu() once before we start,
+        * just to be on the safe side.
+        */
+       synchronize_rcu();
+
+       while(!list_empty(&info->space_info)) {
+               space_info = list_entry(info->space_info.next,
+                                       struct btrfs_space_info,
+                                       list);
+
+               list_del(&space_info->list);
+               kfree(space_info);
+       }
        return 0;
 }
 
index 1316139..dd06e18 100644 (file)
@@ -1374,6 +1374,12 @@ int btrfs_init_new_device(struct btrfs_root *root, char *device_path)
                ret = btrfs_add_device(trans, root, device);
        }
 
+       /*
+        * we've got more storage, clear any full flags on the space
+        * infos
+        */
+       btrfs_clear_space_info_full(root->fs_info);
+
        unlock_chunks(root);
        btrfs_commit_transaction(trans, root);
 
@@ -1459,6 +1465,8 @@ static int __btrfs_grow_device(struct btrfs_trans_handle *trans,
        device->fs_devices->total_rw_bytes += diff;
 
        device->total_bytes = new_size;
+       btrfs_clear_space_info_full(device->dev_root->fs_info);
+
        return btrfs_update_device(trans, device);
 }
 
index 9f69741..891e1c7 100644 (file)
@@ -760,15 +760,9 @@ EXPORT_SYMBOL(mark_buffer_dirty_inode);
  * If warn is true, then emit a warning if the page is not uptodate and has
  * not been truncated.
  */
-static int __set_page_dirty(struct page *page,
+static void __set_page_dirty(struct page *page,
                struct address_space *mapping, int warn)
 {
-       if (unlikely(!mapping))
-               return !TestSetPageDirty(page);
-
-       if (TestSetPageDirty(page))
-               return 0;
-
        spin_lock_irq(&mapping->tree_lock);
        if (page->mapping) {    /* Race with truncate? */
                WARN_ON_ONCE(warn && !PageUptodate(page));
@@ -785,8 +779,6 @@ static int __set_page_dirty(struct page *page,
        }
        spin_unlock_irq(&mapping->tree_lock);
        __mark_inode_dirty(mapping->host, I_DIRTY_PAGES);
-
-       return 1;
 }
 
 /*
@@ -816,6 +808,7 @@ static int __set_page_dirty(struct page *page,
  */
 int __set_page_dirty_buffers(struct page *page)
 {
+       int newly_dirty;
        struct address_space *mapping = page_mapping(page);
 
        if (unlikely(!mapping))
@@ -831,9 +824,12 @@ int __set_page_dirty_buffers(struct page *page)
                        bh = bh->b_this_page;
                } while (bh != head);
        }
+       newly_dirty = !TestSetPageDirty(page);
        spin_unlock(&mapping->private_lock);
 
-       return __set_page_dirty(page, mapping, 1);
+       if (newly_dirty)
+               __set_page_dirty(page, mapping, 1);
+       return newly_dirty;
 }
 EXPORT_SYMBOL(__set_page_dirty_buffers);
 
@@ -1262,8 +1258,11 @@ void mark_buffer_dirty(struct buffer_head *bh)
                        return;
        }
 
-       if (!test_set_buffer_dirty(bh))
-               __set_page_dirty(bh->b_page, page_mapping(bh->b_page), 0);
+       if (!test_set_buffer_dirty(bh)) {
+               struct page *page = bh->b_page;
+               if (!TestSetPageDirty(page))
+                       __set_page_dirty(page, page_mapping(page), 0);
+       }
 }
 
 /*
index f6caeb1..8b65f28 100644 (file)
@@ -946,6 +946,8 @@ static int ecryptfs_copy_mount_wide_sigs_to_inode_sigs(
        list_for_each_entry(global_auth_tok,
                            &mount_crypt_stat->global_auth_tok_list,
                            mount_crypt_stat_list) {
+               if (global_auth_tok->flags & ECRYPTFS_AUTH_TOK_FNEK)
+                       continue;
                rc = ecryptfs_add_keysig(crypt_stat, global_auth_tok->sig);
                if (rc) {
                        printk(KERN_ERR "Error adding keysig; rc = [%d]\n", rc);
@@ -1322,14 +1324,13 @@ static int ecryptfs_write_headers_virt(char *page_virt, size_t max,
 }
 
 static int
-ecryptfs_write_metadata_to_contents(struct ecryptfs_crypt_stat *crypt_stat,
-                                   struct dentry *ecryptfs_dentry,
-                                   char *virt)
+ecryptfs_write_metadata_to_contents(struct dentry *ecryptfs_dentry,
+                                   char *virt, size_t virt_len)
 {
        int rc;
 
        rc = ecryptfs_write_lower(ecryptfs_dentry->d_inode, virt,
-                                 0, crypt_stat->num_header_bytes_at_front);
+                                 0, virt_len);
        if (rc)
                printk(KERN_ERR "%s: Error attempting to write header "
                       "information to lower file; rc = [%d]\n", __func__,
@@ -1339,7 +1340,6 @@ ecryptfs_write_metadata_to_contents(struct ecryptfs_crypt_stat *crypt_stat,
 
 static int
 ecryptfs_write_metadata_to_xattr(struct dentry *ecryptfs_dentry,
-                                struct ecryptfs_crypt_stat *crypt_stat,
                                 char *page_virt, size_t size)
 {
        int rc;
@@ -1349,6 +1349,17 @@ ecryptfs_write_metadata_to_xattr(struct dentry *ecryptfs_dentry,
        return rc;
 }
 
+static unsigned long ecryptfs_get_zeroed_pages(gfp_t gfp_mask,
+                                              unsigned int order)
+{
+       struct page *page;
+
+       page = alloc_pages(gfp_mask | __GFP_ZERO, order);
+       if (page)
+               return (unsigned long) page_address(page);
+       return 0;
+}
+
 /**
  * ecryptfs_write_metadata
  * @ecryptfs_dentry: The eCryptfs dentry
@@ -1365,7 +1376,9 @@ int ecryptfs_write_metadata(struct dentry *ecryptfs_dentry)
 {
        struct ecryptfs_crypt_stat *crypt_stat =
                &ecryptfs_inode_to_private(ecryptfs_dentry->d_inode)->crypt_stat;
+       unsigned int order;
        char *virt;
+       size_t virt_len;
        size_t size = 0;
        int rc = 0;
 
@@ -1381,33 +1394,35 @@ int ecryptfs_write_metadata(struct dentry *ecryptfs_dentry)
                rc = -EINVAL;
                goto out;
        }
+       virt_len = crypt_stat->num_header_bytes_at_front;
+       order = get_order(virt_len);
        /* Released in this function */
-       virt = (char *)get_zeroed_page(GFP_KERNEL);
+       virt = (char *)ecryptfs_get_zeroed_pages(GFP_KERNEL, order);
        if (!virt) {
                printk(KERN_ERR "%s: Out of memory\n", __func__);
                rc = -ENOMEM;
                goto out;
        }
-       rc = ecryptfs_write_headers_virt(virt, PAGE_CACHE_SIZE, &size,
-                                        crypt_stat, ecryptfs_dentry);
+       rc = ecryptfs_write_headers_virt(virt, virt_len, &size, crypt_stat,
+                                        ecryptfs_dentry);
        if (unlikely(rc)) {
                printk(KERN_ERR "%s: Error whilst writing headers; rc = [%d]\n",
                       __func__, rc);
                goto out_free;
        }
        if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR)
-               rc = ecryptfs_write_metadata_to_xattr(ecryptfs_dentry,
-                                                     crypt_stat, virt, size);
+               rc = ecryptfs_write_metadata_to_xattr(ecryptfs_dentry, virt,
+                                                     size);
        else
-               rc = ecryptfs_write_metadata_to_contents(crypt_stat,
-                                                        ecryptfs_dentry, virt);
+               rc = ecryptfs_write_metadata_to_contents(ecryptfs_dentry, virt,
+                                                        virt_len);
        if (rc) {
                printk(KERN_ERR "%s: Error writing metadata out to lower file; "
                       "rc = [%d]\n", __func__, rc);
                goto out_free;
        }
 out_free:
-       free_page((unsigned long)virt);
+       free_pages((unsigned long)virt, order);
 out:
        return rc;
 }
@@ -2206,17 +2221,19 @@ int ecryptfs_decode_and_decrypt_filename(char **plaintext_name,
                                         struct dentry *ecryptfs_dir_dentry,
                                         const char *name, size_t name_size)
 {
+       struct ecryptfs_mount_crypt_stat *mount_crypt_stat =
+               &ecryptfs_superblock_to_private(
+                       ecryptfs_dir_dentry->d_sb)->mount_crypt_stat;
        char *decoded_name;
        size_t decoded_name_size;
        size_t packet_size;
        int rc = 0;
 
-       if ((name_size > ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE)
+       if ((mount_crypt_stat->flags & ECRYPTFS_GLOBAL_ENCRYPT_FILENAMES)
+           && !(mount_crypt_stat->flags & ECRYPTFS_ENCRYPTED_VIEW_ENABLED)
+           && (name_size > ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE)
            && (strncmp(name, ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX,
                        ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE) == 0)) {
-               struct ecryptfs_mount_crypt_stat *mount_crypt_stat =
-                       &ecryptfs_superblock_to_private(
-                               ecryptfs_dir_dentry->d_sb)->mount_crypt_stat;
                const char *orig_name = name;
                size_t orig_name_size = name_size;
 
index c11fc95..ac749d4 100644 (file)
@@ -328,6 +328,7 @@ struct ecryptfs_dentry_info {
  */
 struct ecryptfs_global_auth_tok {
 #define ECRYPTFS_AUTH_TOK_INVALID 0x00000001
+#define ECRYPTFS_AUTH_TOK_FNEK    0x00000002
        u32 flags;
        struct list_head mount_crypt_stat_list;
        struct key *global_auth_tok_key;
@@ -619,7 +620,6 @@ int ecryptfs_interpose(struct dentry *hidden_dentry,
                       u32 flags);
 int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,
                                        struct dentry *lower_dentry,
-                                       struct ecryptfs_crypt_stat *crypt_stat,
                                        struct inode *ecryptfs_dir_inode,
                                        struct nameidata *ecryptfs_nd);
 int ecryptfs_decode_and_decrypt_filename(char **decrypted_name,
@@ -696,7 +696,7 @@ ecryptfs_write_header_metadata(char *virt,
 int ecryptfs_add_keysig(struct ecryptfs_crypt_stat *crypt_stat, char *sig);
 int
 ecryptfs_add_global_auth_tok(struct ecryptfs_mount_crypt_stat *mount_crypt_stat,
-                          char *sig);
+                          char *sig, u32 global_auth_tok_flags);
 int ecryptfs_get_global_auth_tok_for_sig(
        struct ecryptfs_global_auth_tok **global_auth_tok,
        struct ecryptfs_mount_crypt_stat *mount_crypt_stat, char *sig);
index 5697899..55b3145 100644 (file)
@@ -246,7 +246,6 @@ out:
  */
 int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,
                                        struct dentry *lower_dentry,
-                                       struct ecryptfs_crypt_stat *crypt_stat,
                                        struct inode *ecryptfs_dir_inode,
                                        struct nameidata *ecryptfs_nd)
 {
@@ -254,6 +253,7 @@ int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,
        struct vfsmount *lower_mnt;
        struct inode *lower_inode;
        struct ecryptfs_mount_crypt_stat *mount_crypt_stat;
+       struct ecryptfs_crypt_stat *crypt_stat;
        char *page_virt = NULL;
        u64 file_size;
        int rc = 0;
@@ -314,6 +314,11 @@ int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,
                        goto out_free_kmem;
                }
        }
+       crypt_stat = &ecryptfs_inode_to_private(
+                                       ecryptfs_dentry->d_inode)->crypt_stat;
+       /* TODO: lock for crypt_stat comparison */
+       if (!(crypt_stat->flags & ECRYPTFS_POLICY_APPLIED))
+                       ecryptfs_set_default_sizes(crypt_stat);
        rc = ecryptfs_read_and_validate_header_region(page_virt,
                                                      ecryptfs_dentry->d_inode);
        if (rc) {
@@ -362,9 +367,7 @@ static struct dentry *ecryptfs_lookup(struct inode *ecryptfs_dir_inode,
 {
        char *encrypted_and_encoded_name = NULL;
        size_t encrypted_and_encoded_name_size;
-       struct ecryptfs_crypt_stat *crypt_stat = NULL;
        struct ecryptfs_mount_crypt_stat *mount_crypt_stat = NULL;
-       struct ecryptfs_inode_info *inode_info;
        struct dentry *lower_dir_dentry, *lower_dentry;
        int rc = 0;
 
@@ -388,26 +391,15 @@ static struct dentry *ecryptfs_lookup(struct inode *ecryptfs_dir_inode,
        }
        if (lower_dentry->d_inode)
                goto lookup_and_interpose;
-       inode_info =  ecryptfs_inode_to_private(ecryptfs_dentry->d_inode);
-       if (inode_info) {
-               crypt_stat = &inode_info->crypt_stat;
-               /* TODO: lock for crypt_stat comparison */
-               if (!(crypt_stat->flags & ECRYPTFS_POLICY_APPLIED))
-                       ecryptfs_set_default_sizes(crypt_stat);
-       }
-       if (crypt_stat)
-               mount_crypt_stat = crypt_stat->mount_crypt_stat;
-       else
-               mount_crypt_stat = &ecryptfs_superblock_to_private(
-                       ecryptfs_dentry->d_sb)->mount_crypt_stat;
-       if (!(crypt_stat && (crypt_stat->flags & ECRYPTFS_ENCRYPT_FILENAMES))
-           && !(mount_crypt_stat && (mount_crypt_stat->flags
-                                    & ECRYPTFS_GLOBAL_ENCRYPT_FILENAMES)))
+       mount_crypt_stat = &ecryptfs_superblock_to_private(
+                               ecryptfs_dentry->d_sb)->mount_crypt_stat;
+       if (!(mount_crypt_stat
+           && (mount_crypt_stat->flags & ECRYPTFS_GLOBAL_ENCRYPT_FILENAMES)))
                goto lookup_and_interpose;
        dput(lower_dentry);
        rc = ecryptfs_encrypt_and_encode_filename(
                &encrypted_and_encoded_name, &encrypted_and_encoded_name_size,
-               crypt_stat, mount_crypt_stat, ecryptfs_dentry->d_name.name,
+               NULL, mount_crypt_stat, ecryptfs_dentry->d_name.name,
                ecryptfs_dentry->d_name.len);
        if (rc) {
                printk(KERN_ERR "%s: Error attempting to encrypt and encode "
@@ -426,7 +418,7 @@ static struct dentry *ecryptfs_lookup(struct inode *ecryptfs_dir_inode,
        }
 lookup_and_interpose:
        rc = ecryptfs_lookup_and_interpose_lower(ecryptfs_dentry, lower_dentry,
-                                                crypt_stat, ecryptfs_dir_inode,
+                                                ecryptfs_dir_inode,
                                                 ecryptfs_nd);
        goto out;
 out_d_drop:
index ff53942..e4a6223 100644 (file)
@@ -2375,7 +2375,7 @@ struct kmem_cache *ecryptfs_global_auth_tok_cache;
 
 int
 ecryptfs_add_global_auth_tok(struct ecryptfs_mount_crypt_stat *mount_crypt_stat,
-                            char *sig)
+                            char *sig, u32 global_auth_tok_flags)
 {
        struct ecryptfs_global_auth_tok *new_auth_tok;
        int rc = 0;
@@ -2389,6 +2389,7 @@ ecryptfs_add_global_auth_tok(struct ecryptfs_mount_crypt_stat *mount_crypt_stat,
                goto out;
        }
        memcpy(new_auth_tok->sig, sig, ECRYPTFS_SIG_SIZE_HEX);
+       new_auth_tok->flags = global_auth_tok_flags;
        new_auth_tok->sig[ECRYPTFS_SIG_SIZE_HEX] = '\0';
        mutex_lock(&mount_crypt_stat->global_auth_tok_list_mutex);
        list_add(&new_auth_tok->mount_crypt_stat_list,
index 789cf2e..aed56c2 100644 (file)
@@ -319,7 +319,7 @@ static int ecryptfs_parse_options(struct super_block *sb, char *options)
                case ecryptfs_opt_ecryptfs_sig:
                        sig_src = args[0].from;
                        rc = ecryptfs_add_global_auth_tok(mount_crypt_stat,
-                                                         sig_src);
+                                                         sig_src, 0);
                        if (rc) {
                                printk(KERN_ERR "Error attempting to register "
                                       "global sig; rc = [%d]\n", rc);
@@ -370,7 +370,8 @@ static int ecryptfs_parse_options(struct super_block *sb, char *options)
                                ECRYPTFS_SIG_SIZE_HEX] = '\0';
                        rc = ecryptfs_add_global_auth_tok(
                                mount_crypt_stat,
-                               mount_crypt_stat->global_default_fnek_sig);
+                               mount_crypt_stat->global_default_fnek_sig,
+                               ECRYPTFS_AUTH_TOK_FNEK);
                        if (rc) {
                                printk(KERN_ERR "Error attempting to register "
                                       "global fnek sig [%s]; rc = [%d]\n",
index e2eab19..e0aa4fe 100644 (file)
@@ -1122,7 +1122,8 @@ ext4_ext_search_right(struct inode *inode, struct ext4_ext_path *path,
        struct ext4_extent_idx *ix;
        struct ext4_extent *ex;
        ext4_fsblk_t block;
-       int depth, ee_len;
+       int depth;      /* Note, NOT eh_depth; depth from top of tree */
+       int ee_len;
 
        BUG_ON(path == NULL);
        depth = path->p_depth;
@@ -1179,7 +1180,8 @@ got_index:
                if (bh == NULL)
                        return -EIO;
                eh = ext_block_hdr(bh);
-               if (ext4_ext_check_header(inode, eh, depth)) {
+               /* subtract from p_depth to get proper eh_depth */
+               if (ext4_ext_check_header(inode, eh, path->p_depth - depth)) {
                        put_bh(bh);
                        return -EIO;
                }
index 627f8c3..2d2b358 100644 (file)
@@ -698,6 +698,7 @@ struct inode *ext4_new_inode(handle_t *handle, struct inode *dir, int mode)
        struct inode *ret;
        ext4_group_t i;
        int free = 0;
+       static int once = 1;
        ext4_group_t flex_group;
 
        /* Cannot create files in a deleted directory */
@@ -719,7 +720,8 @@ struct inode *ext4_new_inode(handle_t *handle, struct inode *dir, int mode)
                ret2 = find_group_flex(sb, dir, &group);
                if (ret2 == -1) {
                        ret2 = find_group_other(sb, dir, &group);
-                       if (ret2 == 0 && printk_ratelimit())
+                       if (ret2 == 0 && once)
+                               once = 0;
                                printk(KERN_NOTICE "ext4: find_group_flex "
                                       "failed, fallback succeeded dir %lu\n",
                                       dir->i_ino);
index 4415bee..9f61e62 100644 (file)
@@ -1447,7 +1447,7 @@ static void ext4_mb_measure_extent(struct ext4_allocation_context *ac,
        struct ext4_free_extent *gex = &ac->ac_g_ex;
 
        BUG_ON(ex->fe_len <= 0);
-       BUG_ON(ex->fe_len >= EXT4_BLOCKS_PER_GROUP(ac->ac_sb));
+       BUG_ON(ex->fe_len > EXT4_BLOCKS_PER_GROUP(ac->ac_sb));
        BUG_ON(ex->fe_start >= EXT4_BLOCKS_PER_GROUP(ac->ac_sb));
        BUG_ON(ac->ac_status != AC_STATUS_CONTINUE);
 
@@ -3292,7 +3292,7 @@ ext4_mb_normalize_request(struct ext4_allocation_context *ac,
        }
        BUG_ON(start + size <= ac->ac_o_ex.fe_logical &&
                        start > ac->ac_o_ex.fe_logical);
-       BUG_ON(size <= 0 || size >= EXT4_BLOCKS_PER_GROUP(ac->ac_sb));
+       BUG_ON(size <= 0 || size > EXT4_BLOCKS_PER_GROUP(ac->ac_sb));
 
        /* now prepare goal request */
 
@@ -3589,6 +3589,7 @@ static void ext4_mb_put_pa(struct ext4_allocation_context *ac,
                        struct super_block *sb, struct ext4_prealloc_space *pa)
 {
        ext4_group_t grp;
+       ext4_fsblk_t grp_blk;
 
        if (!atomic_dec_and_test(&pa->pa_count) || pa->pa_free != 0)
                return;
@@ -3603,8 +3604,12 @@ static void ext4_mb_put_pa(struct ext4_allocation_context *ac,
        pa->pa_deleted = 1;
        spin_unlock(&pa->pa_lock);
 
-       /* -1 is to protect from crossing allocation group */
-       ext4_get_group_no_and_offset(sb, pa->pa_pstart - 1, &grp, NULL);
+       grp_blk = pa->pa_pstart;
+       /* If linear, pa_pstart may be in the next group when pa is used up */
+       if (pa->pa_linear)
+               grp_blk--;
+
+       ext4_get_group_no_and_offset(sb, grp_blk, &grp, NULL);
 
        /*
         * possible race:
index 1f3b0fc..aedc47a 100644 (file)
@@ -139,6 +139,55 @@ int nlmclnt_block(struct nlm_wait *block, struct nlm_rqst *req, long timeout)
        return 0;
 }
 
+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
+static const struct in6_addr *nlmclnt_map_v4addr(const struct sockaddr *sap,
+                                                struct in6_addr *addr_mapped)
+{
+       const struct sockaddr_in *sin = (const struct sockaddr_in *)sap;
+
+       switch (sap->sa_family) {
+       case AF_INET6:
+               return &((const struct sockaddr_in6 *)sap)->sin6_addr;
+       case AF_INET:
+               ipv6_addr_set_v4mapped(sin->sin_addr.s_addr, addr_mapped);
+               return addr_mapped;
+       }
+
+       return NULL;
+}
+
+/*
+ * If lockd is using a PF_INET6 listener, all incoming requests appear
+ * to come from AF_INET6 remotes.  The address of AF_INET remotes are
+ * mapped to AF_INET6 automatically by the network layer.  In case the
+ * user passed an AF_INET server address at mount time, ensure both
+ * addresses are AF_INET6 before comparing them.
+ */
+static int nlmclnt_cmp_addr(const struct nlm_host *host,
+                           const struct sockaddr *sap)
+{
+       const struct in6_addr *addr1;
+       const struct in6_addr *addr2;
+       struct in6_addr addr1_mapped;
+       struct in6_addr addr2_mapped;
+
+       addr1 = nlmclnt_map_v4addr(nlm_addr(host), &addr1_mapped);
+       if (likely(addr1 != NULL)) {
+               addr2 = nlmclnt_map_v4addr(sap, &addr2_mapped);
+               if (likely(addr2 != NULL))
+                       return ipv6_addr_equal(addr1, addr2);
+       }
+
+       return 0;
+}
+#else  /* !(CONFIG_IPV6 || CONFIG_IPV6_MODULE) */
+static int nlmclnt_cmp_addr(const struct nlm_host *host,
+                           const struct sockaddr *sap)
+{
+       return nlm_cmp_addr(nlm_addr(host), sap);
+}
+#endif /* !(CONFIG_IPV6 || CONFIG_IPV6_MODULE) */
+
 /*
  * The server lockd has called us back to tell us the lock was granted
  */
@@ -166,7 +215,7 @@ __be32 nlmclnt_grant(const struct sockaddr *addr, const struct nlm_lock *lock)
                 */
                if (fl_blocked->fl_u.nfs_fl.owner->pid != lock->svid)
                        continue;
-               if (!nlm_cmp_addr(nlm_addr(block->b_host), addr))
+               if (!nlmclnt_cmp_addr(block->b_host, addr))
                        continue;
                if (nfs_compare_fh(NFS_FH(fl_blocked->fl_file->f_path.dentry->d_inode) ,fh) != 0)
                        continue;
index d1d1eb8..618865b 100644 (file)
@@ -3,7 +3,7 @@
  *
  *  Copyright (C) 1991, 1992  Linus Torvalds
  *
- *  Copyright (C) 1996  Gertjan van Wingerde    (gertjan@cs.vu.nl)
+ *  Copyright (C) 1996  Gertjan van Wingerde
  *     Minix V2 fs support.
  *
  *  Modified for 680x0 by Andreas Schwab
index 9b728f3..574158a 100644 (file)
@@ -255,6 +255,32 @@ static int nfs_sockaddr_match_ipaddr(const struct sockaddr *sa1,
        }
        return 0;
 }
+
+/*
+ * Test if two ip6 socket addresses refer to the same socket by
+ * comparing relevant fields. The padding bytes specifically, are not
+ * compared. sin6_flowinfo is not compared because it only affects QoS
+ * and sin6_scope_id is only compared if the address is "link local"
+ * because "link local" addresses need only be unique to a specific
+ * link. Conversely, ordinary unicast addresses might have different
+ * sin6_scope_id.
+ *
+ * The caller should ensure both socket addresses are AF_INET6.
+ */
+static int nfs_sockaddr_cmp_ip6(const struct sockaddr *sa1,
+                               const struct sockaddr *sa2)
+{
+       const struct sockaddr_in6 *saddr1 = (const struct sockaddr_in6 *)sa1;
+       const struct sockaddr_in6 *saddr2 = (const struct sockaddr_in6 *)sa2;
+
+       if (!ipv6_addr_equal(&saddr1->sin6_addr,
+                            &saddr1->sin6_addr))
+               return 0;
+       if (ipv6_addr_scope(&saddr1->sin6_addr) == IPV6_ADDR_SCOPE_LINKLOCAL &&
+           saddr1->sin6_scope_id != saddr2->sin6_scope_id)
+               return 0;
+       return saddr1->sin6_port == saddr2->sin6_port;
+}
 #else
 static int nfs_sockaddr_match_ipaddr4(const struct sockaddr_in *sa1,
                                 const struct sockaddr_in *sa2)
@@ -270,9 +296,52 @@ static int nfs_sockaddr_match_ipaddr(const struct sockaddr *sa1,
        return nfs_sockaddr_match_ipaddr4((const struct sockaddr_in *)sa1,
                        (const struct sockaddr_in *)sa2);
 }
+
+static int nfs_sockaddr_cmp_ip6(const struct sockaddr * sa1,
+                               const struct sockaddr * sa2)
+{
+       return 0;
+}
 #endif
 
 /*
+ * Test if two ip4 socket addresses refer to the same socket, by
+ * comparing relevant fields. The padding bytes specifically, are
+ * not compared.
+ *
+ * The caller should ensure both socket addresses are AF_INET.
+ */
+static int nfs_sockaddr_cmp_ip4(const struct sockaddr *sa1,
+                               const struct sockaddr *sa2)
+{
+       const struct sockaddr_in *saddr1 = (const struct sockaddr_in *)sa1;
+       const struct sockaddr_in *saddr2 = (const struct sockaddr_in *)sa2;
+
+       if (saddr1->sin_addr.s_addr != saddr2->sin_addr.s_addr)
+               return 0;
+       return saddr1->sin_port == saddr2->sin_port;
+}
+
+/*
+ * Test if two socket addresses represent the same actual socket,
+ * by comparing (only) relevant fields.
+ */
+static int nfs_sockaddr_cmp(const struct sockaddr *sa1,
+                           const struct sockaddr *sa2)
+{
+       if (sa1->sa_family != sa2->sa_family)
+               return 0;
+
+       switch (sa1->sa_family) {
+       case AF_INET:
+               return nfs_sockaddr_cmp_ip4(sa1, sa2);
+       case AF_INET6:
+               return nfs_sockaddr_cmp_ip6(sa1, sa2);
+       }
+       return 0;
+}
+
+/*
  * Find a client by IP address and protocol version
  * - returns NULL if no such client
  */
@@ -344,8 +413,10 @@ struct nfs_client *nfs_find_client_next(struct nfs_client *clp)
 static struct nfs_client *nfs_match_client(const struct nfs_client_initdata *data)
 {
        struct nfs_client *clp;
+       const struct sockaddr *sap = data->addr;
 
        list_for_each_entry(clp, &nfs_client_list, cl_share_link) {
+               const struct sockaddr *clap = (struct sockaddr *)&clp->cl_addr;
                /* Don't match clients that failed to initialise properly */
                if (clp->cl_cons_state < 0)
                        continue;
@@ -358,7 +429,7 @@ static struct nfs_client *nfs_match_client(const struct nfs_client_initdata *dat
                        continue;
 
                /* Match the full socket address */
-               if (memcmp(&clp->cl_addr, data->addr, sizeof(clp->cl_addr)) != 0)
+               if (!nfs_sockaddr_cmp(sap, clap))
                        continue;
 
                atomic_inc(&clp->cl_count);
index e35c819..672368f 100644 (file)
@@ -1892,8 +1892,14 @@ static int nfs_do_access(struct inode *inode, struct rpc_cred *cred, int mask)
        cache.cred = cred;
        cache.jiffies = jiffies;
        status = NFS_PROTO(inode)->access(inode, &cache);
-       if (status != 0)
+       if (status != 0) {
+               if (status == -ESTALE) {
+                       nfs_zap_caches(inode);
+                       if (!S_ISDIR(inode->i_mode))
+                               set_bit(NFS_INO_STALE, &NFS_I(inode)->flags);
+               }
                return status;
+       }
        nfs_access_add_cache(inode, &cache);
 out:
        if ((mask & ~cache.mask & (MAY_READ | MAY_WRITE | MAY_EXEC)) == 0)
index cef6255..6bbf0e6 100644 (file)
@@ -292,7 +292,7 @@ static int nfs3_proc_setacls(struct inode *inode, struct posix_acl *acl,
 {
        struct nfs_server *server = NFS_SERVER(inode);
        struct nfs_fattr fattr;
-       struct page *pages[NFSACL_MAXPAGES] = { };
+       struct page *pages[NFSACL_MAXPAGES];
        struct nfs3_setaclargs args = {
                .inode = inode,
                .mask = NFS_ACL,
@@ -303,7 +303,7 @@ static int nfs3_proc_setacls(struct inode *inode, struct posix_acl *acl,
                .rpc_argp       = &args,
                .rpc_resp       = &fattr,
        };
-       int status, count;
+       int status;
 
        status = -EOPNOTSUPP;
        if (!nfs_server_capable(inode, NFS_CAP_ACLS))
@@ -319,6 +319,20 @@ static int nfs3_proc_setacls(struct inode *inode, struct posix_acl *acl,
        if (S_ISDIR(inode->i_mode)) {
                args.mask |= NFS_DFACL;
                args.acl_default = dfacl;
+               args.len = nfsacl_size(acl, dfacl);
+       } else
+               args.len = nfsacl_size(acl, NULL);
+
+       if (args.len > NFS_ACL_INLINE_BUFSIZE) {
+               unsigned int npages = 1 + ((args.len - 1) >> PAGE_SHIFT);
+
+               status = -ENOMEM;
+               do {
+                       args.pages[args.npages] = alloc_page(GFP_KERNEL);
+                       if (args.pages[args.npages] == NULL)
+                               goto out_freepages;
+                       args.npages++;
+               } while (args.npages < npages);
        }
 
        dprintk("NFS call setacl\n");
@@ -329,10 +343,6 @@ static int nfs3_proc_setacls(struct inode *inode, struct posix_acl *acl,
        nfs_zap_acl_cache(inode);
        dprintk("NFS reply setacl: %d\n", status);
 
-       /* pages may have been allocated at the xdr layer. */
-       for (count = 0; count < NFSACL_MAXPAGES && args.pages[count]; count++)
-               __free_page(args.pages[count]);
-
        switch (status) {
                case 0:
                        status = nfs_refresh_inode(inode, &fattr);
@@ -346,6 +356,11 @@ static int nfs3_proc_setacls(struct inode *inode, struct posix_acl *acl,
                case -ENOTSUPP:
                        status = -EOPNOTSUPP;
        }
+out_freepages:
+       while (args.npages != 0) {
+               args.npages--;
+               __free_page(args.pages[args.npages]);
+       }
 out:
        return status;
 }
index 11cddde..6cdeacf 100644 (file)
 #define NFS3_commitres_sz      (1+NFS3_wcc_data_sz+2)
 
 #define ACL3_getaclargs_sz     (NFS3_fh_sz+1)
-#define ACL3_setaclargs_sz     (NFS3_fh_sz+1+2*(2+5*3))
-#define ACL3_getaclres_sz      (1+NFS3_post_op_attr_sz+1+2*(2+5*3))
+#define ACL3_setaclargs_sz     (NFS3_fh_sz+1+ \
+                               XDR_QUADLEN(NFS_ACL_INLINE_BUFSIZE))
+#define ACL3_getaclres_sz      (1+NFS3_post_op_attr_sz+1+ \
+                               XDR_QUADLEN(NFS_ACL_INLINE_BUFSIZE))
 #define ACL3_setaclres_sz      (1+NFS3_post_op_attr_sz)
 
 /*
@@ -703,28 +705,18 @@ nfs3_xdr_setaclargs(struct rpc_rqst *req, __be32 *p,
                    struct nfs3_setaclargs *args)
 {
        struct xdr_buf *buf = &req->rq_snd_buf;
-       unsigned int base, len_in_head, len = nfsacl_size(
-               (args->mask & NFS_ACL)   ? args->acl_access  : NULL,
-               (args->mask & NFS_DFACL) ? args->acl_default : NULL);
-       int count, err;
+       unsigned int base;
+       int err;
 
        p = xdr_encode_fhandle(p, NFS_FH(args->inode));
        *p++ = htonl(args->mask);
-       base = (char *)p - (char *)buf->head->iov_base;
-       /* put as much of the acls into head as possible. */
-       len_in_head = min_t(unsigned int, buf->head->iov_len - base, len);
-       len -= len_in_head;
-       req->rq_slen = xdr_adjust_iovec(req->rq_svec, p + (len_in_head >> 2));
-
-       for (count = 0; (count << PAGE_SHIFT) < len; count++) {
-               args->pages[count] = alloc_page(GFP_KERNEL);
-               if (!args->pages[count]) {
-                       while (count)
-                               __free_page(args->pages[--count]);
-                       return -ENOMEM;
-               }
-       }
-       xdr_encode_pages(buf, args->pages, 0, len);
+       req->rq_slen = xdr_adjust_iovec(req->rq_svec, p);
+       base = req->rq_slen;
+
+       if (args->npages != 0)
+               xdr_encode_pages(buf, args->pages, 0, args->len);
+       else
+               req->rq_slen += args->len;
 
        err = nfsacl_encode(buf, base, args->inode,
                            (args->mask & NFS_ACL) ?
index 30befc3..2a2a0a7 100644 (file)
@@ -21,7 +21,9 @@
 #define NFSDBG_FACILITY                NFSDBG_VFS
 
 /*
- * Check if fs_root is valid
+ * Convert the NFSv4 pathname components into a standard posix path.
+ *
+ * Note that the resulting string will be placed at the end of the buffer
  */
 static inline char *nfs4_pathname_string(const struct nfs4_pathname *pathname,
                                         char *buffer, ssize_t buflen)
@@ -99,21 +101,20 @@ static struct vfsmount *try_location(struct nfs_clone_mount *mountdata,
 {
        struct vfsmount *mnt = ERR_PTR(-ENOENT);
        char *mnt_path;
-       int page2len;
+       unsigned int maxbuflen;
        unsigned int s;
 
        mnt_path = nfs4_pathname_string(&location->rootpath, page2, PAGE_SIZE);
        if (IS_ERR(mnt_path))
                return mnt;
        mountdata->mnt_path = mnt_path;
-       page2 += strlen(mnt_path) + 1;
-       page2len = PAGE_SIZE - strlen(mnt_path) - 1;
+       maxbuflen = mnt_path - 1 - page2;
 
        for (s = 0; s < location->nservers; s++) {
                const struct nfs4_string *buf = &location->servers[s];
                struct sockaddr_storage addr;
 
-               if (buf->len <= 0 || buf->len >= PAGE_SIZE)
+               if (buf->len <= 0 || buf->len >= maxbuflen)
                        continue;
 
                mountdata->addr = (struct sockaddr *)&addr;
@@ -126,8 +127,8 @@ static struct vfsmount *try_location(struct nfs_clone_mount *mountdata,
                        continue;
                nfs_set_port(mountdata->addr, NFS_PORT);
 
-               strncpy(page2, buf->data, page2len);
-               page2[page2len] = '\0';
+               memcpy(page2, buf->data, buf->len);
+               page2[buf->len] = '\0';
                mountdata->hostname = page2;
 
                snprintf(page, PAGE_SIZE, "%s:%s",
index f65953b..9250067 100644 (file)
@@ -2596,6 +2596,7 @@ static nfsd4_enc nfsd4_enc_ops[] = {
        [OP_LOOKUPP]            = (nfsd4_enc)nfsd4_encode_noop,
        [OP_NVERIFY]            = (nfsd4_enc)nfsd4_encode_noop,
        [OP_OPEN]               = (nfsd4_enc)nfsd4_encode_open,
+       [OP_OPENATTR]           = (nfsd4_enc)nfsd4_encode_noop,
        [OP_OPEN_CONFIRM]       = (nfsd4_enc)nfsd4_encode_open_confirm,
        [OP_OPEN_DOWNGRADE]     = (nfsd4_enc)nfsd4_encode_open_downgrade,
        [OP_PUTFH]              = (nfsd4_enc)nfsd4_encode_noop,
index 3a9e5de..19e3a96 100644 (file)
@@ -176,7 +176,8 @@ static int ocfs2_dinode_insert_check(struct inode *inode,
 
        BUG_ON(OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL);
        mlog_bug_on_msg(!ocfs2_sparse_alloc(osb) &&
-                       (OCFS2_I(inode)->ip_clusters != rec->e_cpos),
+                       (OCFS2_I(inode)->ip_clusters !=
+                        le32_to_cpu(rec->e_cpos)),
                        "Device %s, asking for sparse allocation: inode %llu, "
                        "cpos %u, clusters %u\n",
                        osb->dev_str,
index a067a6c..8e1709a 100644 (file)
@@ -227,7 +227,7 @@ int ocfs2_read_inline_data(struct inode *inode, struct page *page,
        size = i_size_read(inode);
 
        if (size > PAGE_CACHE_SIZE ||
-           size > ocfs2_max_inline_data(inode->i_sb)) {
+           size > ocfs2_max_inline_data_with_xattr(inode->i_sb, di)) {
                ocfs2_error(inode->i_sb,
                            "Inode %llu has with inline data has bad size: %Lu",
                            (unsigned long long)OCFS2_I(inode)->ip_blkno,
@@ -1555,6 +1555,7 @@ static int ocfs2_try_to_write_inline_data(struct address_space *mapping,
        int ret, written = 0;
        loff_t end = pos + len;
        struct ocfs2_inode_info *oi = OCFS2_I(inode);
+       struct ocfs2_dinode *di = NULL;
 
        mlog(0, "Inode %llu, write of %u bytes at off %llu. features: 0x%x\n",
             (unsigned long long)oi->ip_blkno, len, (unsigned long long)pos,
@@ -1587,7 +1588,9 @@ static int ocfs2_try_to_write_inline_data(struct address_space *mapping,
        /*
         * Check whether the write can fit.
         */
-       if (mmap_page || end > ocfs2_max_inline_data(inode->i_sb))
+       di = (struct ocfs2_dinode *)wc->w_di_bh->b_data;
+       if (mmap_page ||
+           end > ocfs2_max_inline_data_with_xattr(inode->i_sb, di))
                return 0;
 
 do_inline_write:
index 084aba8..4b11762 100644 (file)
@@ -532,7 +532,8 @@ static int ocfs2_mknod_locked(struct ocfs2_super *osb,
 
                fe->i_dyn_features = cpu_to_le16(feat | OCFS2_INLINE_DATA_FL);
 
-               fe->id2.i_data.id_count = cpu_to_le16(ocfs2_max_inline_data(osb->sb));
+               fe->id2.i_data.id_count = cpu_to_le16(
+                               ocfs2_max_inline_data_with_xattr(osb->sb, fe));
        } else {
                fel = &fe->id2.i_list;
                fel->l_tree_depth = 0;
index c7ae45a..2332ef7 100644 (file)
@@ -1070,12 +1070,6 @@ static inline int ocfs2_fast_symlink_chars(struct super_block *sb)
                 offsetof(struct ocfs2_dinode, id2.i_symlink);
 }
 
-static inline int ocfs2_max_inline_data(struct super_block *sb)
-{
-       return sb->s_blocksize -
-               offsetof(struct ocfs2_dinode, id2.i_data.id_data);
-}
-
 static inline int ocfs2_max_inline_data_with_xattr(struct super_block *sb,
                                                   struct ocfs2_dinode *di)
 {
index 4ddd788..2563df8 100644 (file)
@@ -547,8 +547,12 @@ int ocfs2_calc_xattr_init(struct inode *dir,
         * when blocksize = 512, may reserve one more cluser for
         * xattr bucket, otherwise reserve one metadata block
         * for them is ok.
+        * If this is a new directory with inline data,
+        * we choose to reserve the entire inline area for
+        * directory contents and force an external xattr block.
         */
        if (dir->i_sb->s_blocksize == OCFS2_MIN_BLOCKSIZE ||
+           (S_ISDIR(mode) && ocfs2_supports_inline_data(osb)) ||
            (s_size + a_size) > OCFS2_XATTR_FREE_IN_IBODY) {
                ret = ocfs2_reserve_new_metadata_blocks(osb, 1, xattr_ac);
                if (ret) {
@@ -4791,19 +4795,33 @@ static int ocfs2_xattr_bucket_set_value_outside(struct inode *inode,
                                                char *val,
                                                int value_len)
 {
-       int offset;
+       int ret, offset, block_off;
        struct ocfs2_xattr_value_root *xv;
        struct ocfs2_xattr_entry *xe = xs->here;
+       struct ocfs2_xattr_header *xh = bucket_xh(xs->bucket);
+       void *base;
 
        BUG_ON(!xs->base || !xe || ocfs2_xattr_is_local(xe));
 
-       offset = le16_to_cpu(xe->xe_name_offset) +
-                OCFS2_XATTR_SIZE(xe->xe_name_len);
+       ret = ocfs2_xattr_bucket_get_name_value(inode, xh,
+                                               xe - xh->xh_entries,
+                                               &block_off,
+                                               &offset);
+       if (ret) {
+               mlog_errno(ret);
+               goto out;
+       }
 
-       xv = (struct ocfs2_xattr_value_root *)(xs->base + offset);
+       base = bucket_block(xs->bucket, block_off);
+       xv = (struct ocfs2_xattr_value_root *)(base + offset +
+                OCFS2_XATTR_SIZE(xe->xe_name_len));
 
-       return __ocfs2_xattr_set_value_outside(inode, handle,
-                                              xv, val, value_len);
+       ret = __ocfs2_xattr_set_value_outside(inode, handle,
+                                             xv, val, value_len);
+       if (ret)
+               mlog_errno(ret);
+out:
+       return ret;
 }
 
 static int ocfs2_rm_xattr_cluster(struct inode *inode,
index 0c9de19..beaa0ce 100644 (file)
@@ -3066,7 +3066,6 @@ static int proc_task_readdir(struct file * filp, void * dirent, filldir_t filldi
        int retval = -ENOENT;
        ino_t ino;
        int tid;
-       unsigned long pos = filp->f_pos;  /* avoiding "long long" filp->f_pos */
        struct pid_namespace *ns;
 
        task = get_proc_task(inode);
@@ -3083,18 +3082,18 @@ static int proc_task_readdir(struct file * filp, void * dirent, filldir_t filldi
                goto out_no_task;
        retval = 0;
 
-       switch (pos) {
+       switch ((unsigned long)filp->f_pos) {
        case 0:
                ino = inode->i_ino;
-               if (filldir(dirent, ".", 1, pos, ino, DT_DIR) < 0)
+               if (filldir(dirent, ".", 1, filp->f_pos, ino, DT_DIR) < 0)
                        goto out;
-               pos++;
+               filp->f_pos++;
                /* fall through */
        case 1:
                ino = parent_ino(dentry);
-               if (filldir(dirent, "..", 2, pos, ino, DT_DIR) < 0)
+               if (filldir(dirent, "..", 2, filp->f_pos, ino, DT_DIR) < 0)
                        goto out;
-               pos++;
+               filp->f_pos++;
                /* fall through */
        }
 
@@ -3104,9 +3103,9 @@ static int proc_task_readdir(struct file * filp, void * dirent, filldir_t filldi
        ns = filp->f_dentry->d_sb->s_fs_info;
        tid = (int)filp->f_version;
        filp->f_version = 0;
-       for (task = first_tid(leader, tid, pos - 2, ns);
+       for (task = first_tid(leader, tid, filp->f_pos - 2, ns);
             task;
-            task = next_tid(task), pos++) {
+            task = next_tid(task), filp->f_pos++) {
                tid = task_pid_nr_ns(task, ns);
                if (proc_task_fill_cache(filp, dirent, filldir, task, tid) < 0) {
                        /* returning this tgid failed, save it as the first
@@ -3117,7 +3116,6 @@ static int proc_task_readdir(struct file * filp, void * dirent, filldir_t filldi
                }
        }
 out:
-       filp->f_pos = pos;
        put_task_struct(leader);
 out_no_task:
        return retval;
index b9b567a..5d7c7ec 100644 (file)
@@ -114,6 +114,9 @@ int ramfs_nommu_expand_for_mapping(struct inode *inode, size_t newsize)
                if (!pagevec_add(&lru_pvec, page))
                        __pagevec_lru_add_file(&lru_pvec);
 
+               /* prevent the page from being discarded on memory pressure */
+               SetPageDirty(page);
+
                unlock_page(page);
        }
 
@@ -126,6 +129,7 @@ int ramfs_nommu_expand_for_mapping(struct inode *inode, size_t newsize)
        return -EFBIG;
 
  add_error:
+       pagevec_lru_add_file(&lru_pvec);
        page_cache_release(pages + loop);
        for (loop++; loop < npages; loop++)
                __free_page(pages + loop);
index e65212d..261a1c2 100644 (file)
@@ -41,7 +41,7 @@
  * Stefan Reinauer <stepan@home.culture.mipt.ru>
  *
  * Module usage counts added on 96/04/29 by
- * Gertjan van Wingerde <gertjan@cs.vu.nl>
+ * Gertjan van Wingerde <gwingerde@gmail.com>
  *
  * Clean swab support on 19970406 by
  * Francois-Rene Rideau <fare@tunes.org>
index 1b16108..d8bd43b 100644 (file)
@@ -531,7 +531,7 @@ extern void bio_integrity_endio(struct bio *, int);
 extern void bio_integrity_advance(struct bio *, unsigned int);
 extern void bio_integrity_trim(struct bio *, unsigned int, unsigned int);
 extern void bio_integrity_split(struct bio *, struct bio_pair *, int);
-extern int bio_integrity_clone(struct bio *, struct bio *, struct bio_set *);
+extern int bio_integrity_clone(struct bio *, struct bio *, gfp_t, struct bio_set *);
 extern int bioset_integrity_create(struct bio_set *, int);
 extern void bioset_integrity_free(struct bio_set *);
 extern void bio_integrity_init_slab(void);
@@ -542,7 +542,7 @@ extern void bio_integrity_init_slab(void);
 #define bioset_integrity_create(a, b)  (0)
 #define bio_integrity_prep(a)          (0)
 #define bio_integrity_enabled(a)       (0)
-#define bio_integrity_clone(a, b, c)   (0)
+#define bio_integrity_clone(a, b, c,d )        (0)
 #define bioset_integrity_free(a)       do { } while (0)
 #define bio_integrity_free(a, b)       do { } while (0)
 #define bio_integrity_endio(a, b)      do { } while (0)
index 1b98725..4864a43 100644 (file)
@@ -393,8 +393,10 @@ struct cpu_vfs_cap_data {
 # define CAP_FULL_SET     ((kernel_cap_t){{ ~0, ~0 }})
 # define CAP_INIT_EFF_SET ((kernel_cap_t){{ ~CAP_TO_MASK(CAP_SETPCAP), ~0 }})
 # define CAP_FS_SET       ((kernel_cap_t){{ CAP_FS_MASK_B0, CAP_FS_MASK_B1 } })
-# define CAP_NFSD_SET     ((kernel_cap_t){{ CAP_FS_MASK_B0|CAP_TO_MASK(CAP_SYS_RESOURCE), \
-                                       CAP_FS_MASK_B1 } })
+# define CAP_NFSD_SET     ((kernel_cap_t){{ CAP_FS_MASK_B0 \
+                                           | CAP_TO_MASK(CAP_SYS_RESOURCE) \
+                                           | CAP_TO_MASK(CAP_MKNOD), \
+                                           CAP_FS_MASK_B1 } })
 
 #endif /* _KERNEL_CAPABILITY_U32S != 2 */
 
index 1514d53..a3ed7cb 100644 (file)
 #define __deprecated                   __attribute__((deprecated))
 #define __packed                       __attribute__((packed))
 #define __weak                         __attribute__((weak))
-#define __naked                                __attribute__((naked))
+
+/*
+ * it doesn't make sense on ARM (currently the only user of __naked) to trace
+ * naked functions because then mcount is called without stack and frame pointer
+ * being set up and there is no chance to restore the lr register to the value
+ * before mcount was called.
+ */
+#define __naked                                __attribute__((naked)) notrace
+
 #define __noreturn                     __attribute__((noreturn))
 
 /*
index e0cedfe..25087ae 100644 (file)
@@ -797,6 +797,7 @@ typedef struct hwif_s {
        struct scatterlist *sg_table;
        int sg_max_nents;               /* Maximum number of entries in it */
        int sg_nents;                   /* Current number of entries in it */
+       int orig_sg_nents;
        int sg_dma_direction;           /* dma transfer direction */
 
        /* data phase of the active command (currently only valid for PIO/DMA) */
index 472f117..0c9cb63 100644 (file)
 
 typedef irqreturn_t (*irq_handler_t)(int, void *);
 
+/**
+ * struct irqaction - per interrupt action descriptor
+ * @handler:   interrupt handler function
+ * @flags:     flags (see IRQF_* above)
+ * @mask:      no comment as it is useless and about to be removed
+ * @name:      name of the device
+ * @dev_id:    cookie to identify the device
+ * @next:      pointer to the next irqaction for shared interrupts
+ * @irq:       interrupt number
+ * @dir:       pointer to the proc/irq/NN/name entry
+ */
 struct irqaction {
        irq_handler_t handler;
        unsigned long flags;
@@ -462,6 +473,12 @@ static inline void init_irq_proc(void)
 }
 #endif
 
+#if defined(CONFIG_GENERIC_HARDIRQS) && defined(CONFIG_DEBUG_SHIRQ)
+extern void debug_poll_all_shared_irqs(void);
+#else
+static inline void debug_poll_all_shared_irqs(void) { }
+#endif
+
 int show_interrupts(struct seq_file *p, void *v);
 
 struct irq_desc;
index 27a6753..873e4ac 100644 (file)
@@ -160,12 +160,10 @@ struct irq_2_iommu;
  */
 struct irq_desc {
        unsigned int            irq;
-#ifdef CONFIG_SPARSE_IRQ
        struct timer_rand_state *timer_rand_state;
        unsigned int            *kstat_irqs;
-# ifdef CONFIG_INTR_REMAP
+#ifdef CONFIG_INTR_REMAP
        struct irq_2_iommu      *irq_2_iommu;
-# endif
 #endif
        irq_flow_handler_t      handle_irq;
        struct irq_chip         *chip;
@@ -202,12 +200,6 @@ extern void arch_free_chip_data(struct irq_desc *old_desc, struct irq_desc *desc
 extern struct irq_desc irq_desc[NR_IRQS];
 #else /* CONFIG_SPARSE_IRQ */
 extern struct irq_desc *move_irq_desc(struct irq_desc *old_desc, int cpu);
-
-#define kstat_irqs_this_cpu(DESC) \
-       ((DESC)->kstat_irqs[smp_processor_id()])
-#define kstat_incr_irqs_this_cpu(irqno, DESC) \
-       ((DESC)->kstat_irqs[smp_processor_id()]++)
-
 #endif /* CONFIG_SPARSE_IRQ */
 
 extern struct irq_desc *irq_to_desc_alloc_cpu(unsigned int irq, int cpu);
@@ -226,7 +218,6 @@ irq_remap_to_desc(unsigned int irq, struct irq_desc *desc)
  * Migration helpers for obsolete names, they will go away:
  */
 #define hw_interrupt_type      irq_chip
-typedef struct irq_chip                hw_irq_controller;
 #define no_irq_type            no_irq_chip
 typedef struct irq_desc                irq_desc_t;
 
@@ -236,6 +227,7 @@ typedef struct irq_desc             irq_desc_t;
 #include <asm/hw_irq.h>
 
 extern int setup_irq(unsigned int irq, struct irqaction *new);
+extern void remove_irq(unsigned int irq, struct irqaction *act);
 
 #ifdef CONFIG_GENERIC_HARDIRQS
 
@@ -280,7 +272,7 @@ static inline int irq_balancing_disabled(unsigned int irq)
 }
 
 /* Handle irq action chains: */
-extern int handle_IRQ_event(unsigned int irq, struct irqaction *action);
+extern irqreturn_t handle_IRQ_event(unsigned int irq, struct irqaction *action);
 
 /*
  * Built-in IRQ handlers for various IRQ types,
@@ -325,7 +317,7 @@ static inline void generic_handle_irq(unsigned int irq)
 
 /* Handling of unhandled and spurious interrupts: */
 extern void note_interrupt(unsigned int irq, struct irq_desc *desc,
-                          int action_ret);
+                          irqreturn_t action_ret);
 
 /* Resending of interrupts :*/
 void check_irq_resend(struct irq_desc *desc, unsigned int irq);
index 887477b..ec87b21 100644 (file)
@@ -29,13 +29,17 @@ extern struct irq_desc *irq_to_desc(unsigned int irq);
 # define for_each_irq_desc(irq, desc)                                  \
        for (irq = 0, desc = irq_to_desc(irq); irq < nr_irqs;           \
             irq++, desc = irq_to_desc(irq))                            \
-               if (desc)
+               if (!desc)                                              \
+                       ;                                               \
+               else
 
 
 # define for_each_irq_desc_reverse(irq, desc)                          \
        for (irq = nr_irqs - 1, desc = irq_to_desc(irq); irq >= 0;      \
             irq--, desc = irq_to_desc(irq))                            \
-               if (desc)
+               if (!desc)                                              \
+                       ;                                               \
+               else
 
 #endif /* CONFIG_GENERIC_HARDIRQS */
 
index 881883c..c5584ca 100644 (file)
@@ -1,25 +1,17 @@
-/* irqreturn.h */
 #ifndef _LINUX_IRQRETURN_H
 #define _LINUX_IRQRETURN_H
 
-/*
- * For 2.4.x compatibility, 2.4.x can use
- *
- *     typedef void irqreturn_t;
- *     #define IRQ_NONE
- *     #define IRQ_HANDLED
- *     #define IRQ_RETVAL(x)
- *
- * To mix old-style and new-style irq handler returns.
- *
- * IRQ_NONE means we didn't handle it.
- * IRQ_HANDLED means that we did have a valid interrupt and handled it.
- * IRQ_RETVAL(x) selects on the two depending on x being non-zero (for handled)
+/**
+ * enum irqreturn
+ * @IRQ_NONE           interrupt was not from this device
+ * @IRQ_HANDLED                interrupt was handled by this device
  */
-typedef int irqreturn_t;
+enum irqreturn {
+       IRQ_NONE,
+       IRQ_HANDLED,
+};
 
-#define IRQ_NONE       (0)
-#define IRQ_HANDLED    (1)
-#define IRQ_RETVAL(x)  ((x) != 0)
+typedef enum irqreturn irqreturn_t;
+#define IRQ_RETVAL(x)  ((x) != IRQ_NONE)
 
 #endif
index 570d204..0c8b89f 100644 (file)
@@ -28,7 +28,7 @@ struct cpu_usage_stat {
 
 struct kernel_stat {
        struct cpu_usage_stat   cpustat;
-#ifndef CONFIG_SPARSE_IRQ
+#ifndef CONFIG_GENERIC_HARDIRQS
        unsigned int irqs[NR_IRQS];
 #endif
 };
@@ -41,7 +41,7 @@ DECLARE_PER_CPU(struct kernel_stat, kstat);
 
 extern unsigned long long nr_context_switches(void);
 
-#ifndef CONFIG_SPARSE_IRQ
+#ifndef CONFIG_GENERIC_HARDIRQS
 #define kstat_irqs_this_cpu(irq) \
        (kstat_this_cpu.irqs[irq])
 
@@ -52,16 +52,19 @@ static inline void kstat_incr_irqs_this_cpu(unsigned int irq,
 {
        kstat_this_cpu.irqs[irq]++;
 }
-#endif
-
 
-#ifndef CONFIG_SPARSE_IRQ
 static inline unsigned int kstat_irqs_cpu(unsigned int irq, int cpu)
 {
        return kstat_cpu(cpu).irqs[irq];
 }
 #else
+#include <linux/irq.h>
 extern unsigned int kstat_irqs_cpu(unsigned int irq, int cpu);
+#define kstat_irqs_this_cpu(DESC) \
+       ((DESC)->kstat_irqs[smp_processor_id()])
+#define kstat_incr_irqs_this_cpu(irqno, DESC) \
+       ((DESC)->kstat_irqs[smp_processor_id()]++)
+
 #endif
 
 /*
index aa6fe70..51855df 100644 (file)
@@ -346,6 +346,7 @@ static inline int __nlm_cmp_addr4(const struct sockaddr *sap1,
        return sin1->sin_addr.s_addr == sin2->sin_addr.s_addr;
 }
 
+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
 static inline int __nlm_cmp_addr6(const struct sockaddr *sap1,
                                  const struct sockaddr *sap2)
 {
@@ -353,6 +354,13 @@ static inline int __nlm_cmp_addr6(const struct sockaddr *sap1,
        const struct sockaddr_in6 *sin2 = (const struct sockaddr_in6 *)sap2;
        return ipv6_addr_equal(&sin1->sin6_addr, &sin2->sin6_addr);
 }
+#else  /* !(CONFIG_IPV6 || CONFIG_IPV6_MODULE) */
+static inline int __nlm_cmp_addr6(const struct sockaddr *sap1,
+                                 const struct sockaddr *sap2)
+{
+       return 0;
+}
+#endif /* !(CONFIG_IPV6 || CONFIG_IPV6_MODULE) */
 
 /*
  * Compare two host addresses
index a550b52..2e5f000 100644 (file)
@@ -406,6 +406,8 @@ struct nfs3_setaclargs {
        int                     mask;
        struct posix_acl *      acl_access;
        struct posix_acl *      acl_default;
+       size_t                  len;
+       unsigned int            npages;
        struct page **          pages;
 };
 
index 54487a9..43011b6 100644 (file)
@@ -37,6 +37,9 @@
 #define NFSACL_MAXPAGES                ((2*(8+12*NFS_ACL_MAX_ENTRIES) + PAGE_SIZE-1) \
                                 >> PAGE_SHIFT)
 
+#define NFS_ACL_MAX_ENTRIES_INLINE     (5)
+#define NFS_ACL_INLINE_BUFSIZE ((2*(2+3*NFS_ACL_MAX_ENTRIES_INLINE)) << 2)
+
 static inline unsigned int
 nfsacl_size(struct posix_acl *acl_access, struct posix_acl *acl_default)
 {
index 57aaa8f..f271d9c 100644 (file)
 #define        ETH_P_FCOE      0x8906          /* FCOE ether type */
 #endif
 
-#ifndef ETH_P_8021Q
-#define        ETH_P_8021Q     0x8100
-#endif
-
 /*
  * FC_FCOE_OUI hasn't been standardized yet.   XXX TBD.
  */
index 3e4801d..1b7af3a 100644 (file)
@@ -337,4 +337,9 @@ enum fc_pf_rjt_reason {
        FC_RJT_VENDOR =         0xff,   /* vendor specific reject */
 };
 
+/* default timeout values */
+
+#define FC_DEF_E_D_TOV 2000UL
+#define FC_DEF_R_A_TOV 10000UL
+
 #endif /* _FC_FS_H_ */
index 9f28763..a2e126b 100644 (file)
@@ -68,9 +68,6 @@
 /*
  * FC HBA status
  */
-#define FC_PAUSE                   (1 << 1)
-#define FC_LINK_UP                 (1 << 0)
-
 enum fc_lport_state {
        LPORT_ST_NONE = 0,
        LPORT_ST_FLOGI,
@@ -339,31 +336,17 @@ struct fc_exch {
 
 struct libfc_function_template {
 
-       /**
-        * Mandatory Fields
-        *
-        * These handlers must be implemented by the LLD.
-        */
-
        /*
         * Interface to send a FC frame
-        */
-       int (*frame_send)(struct fc_lport *lp, struct fc_frame *fp);
-
-       /**
-        * Optional Fields
         *
-        * The LLD may choose to implement any of the following handlers.
-        * If LLD doesn't specify hander and leaves its pointer NULL then
-        * the default libfc function will be used for that handler.
-        */
-
-       /**
-        * ELS/CT interfaces
+        * STATUS: REQUIRED
         */
+       int (*frame_send)(struct fc_lport *lp, struct fc_frame *fp);
 
        /*
-        * elsct_send - sends ELS/CT frame
+        * Interface to send ELS/CT frames
+        *
+        * STATUS: OPTIONAL
         */
        struct fc_seq *(*elsct_send)(struct fc_lport *lport,
                                     struct fc_rport *rport,
@@ -373,9 +356,6 @@ struct libfc_function_template {
                                             struct fc_frame *fp,
                                             void *arg),
                                     void *arg, u32 timer_msec);
-       /**
-        * Exhance Manager interfaces
-        */
 
        /*
         * Send the FC frame payload using a new exchange and sequence.
@@ -407,6 +387,8 @@ struct libfc_function_template {
         * timer_msec argument is specified. The timer is canceled when
         * it fires or when the exchange is done. The exchange timeout handler
         * is registered by EM layer.
+        *
+        * STATUS: OPTIONAL
         */
        struct fc_seq *(*exch_seq_send)(struct fc_lport *lp,
                                        struct fc_frame *fp,
@@ -418,14 +400,18 @@ struct libfc_function_template {
                                        void *arg, unsigned int timer_msec);
 
        /*
-        * send a frame using existing sequence and exchange.
+        * Send a frame using an existing sequence and exchange.
+        *
+        * STATUS: OPTIONAL
         */
        int (*seq_send)(struct fc_lport *lp, struct fc_seq *sp,
                        struct fc_frame *fp);
 
        /*
-        * Send ELS response using mainly infomation
-        * in exchange and sequence in EM layer.
+        * Send an ELS response using infomation from a previous
+        * exchange and sequence.
+        *
+        * STATUS: OPTIONAL
         */
        void (*seq_els_rsp_send)(struct fc_seq *sp, enum fc_els_cmd els_cmd,
                                 struct fc_seq_els_data *els_data);
@@ -437,6 +423,8 @@ struct libfc_function_template {
         * A timer_msec can be specified for abort timeout, if non-zero
         * timer_msec value is specified then exchange resp handler
         * will be called with timeout error if no response to abort.
+        *
+        * STATUS: OPTIONAL
         */
        int (*seq_exch_abort)(const struct fc_seq *req_sp,
                              unsigned int timer_msec);
@@ -444,6 +432,8 @@ struct libfc_function_template {
        /*
         * Indicate that an exchange/sequence tuple is complete and the memory
         * allocated for the related objects may be freed.
+        *
+        * STATUS: OPTIONAL
         */
        void (*exch_done)(struct fc_seq *sp);
 
@@ -451,6 +441,8 @@ struct libfc_function_template {
         * Assigns a EM and a free XID for an new exchange and then
         * allocates a new exchange and sequence pair.
         * The fp can be used to determine free XID.
+        *
+        * STATUS: OPTIONAL
         */
        struct fc_exch *(*exch_get)(struct fc_lport *lp, struct fc_frame *fp);
 
@@ -458,12 +450,16 @@ struct libfc_function_template {
         * Release previously assigned XID by exch_get API.
         * The LLD may implement this if XID is assigned by LLD
         * in exch_get().
+        *
+        * STATUS: OPTIONAL
         */
        void (*exch_put)(struct fc_lport *lp, struct fc_exch_mgr *mp,
                         u16 ex_id);
 
        /*
         * Start a new sequence on the same exchange/sequence tuple.
+        *
+        * STATUS: OPTIONAL
         */
        struct fc_seq *(*seq_start_next)(struct fc_seq *sp);
 
@@ -471,26 +467,38 @@ struct libfc_function_template {
         * Reset an exchange manager, completing all sequences and exchanges.
         * If s_id is non-zero, reset only exchanges originating from that FID.
         * If d_id is non-zero, reset only exchanges sending to that FID.
+        *
+        * STATUS: OPTIONAL
         */
-       void (*exch_mgr_reset)(struct fc_exch_mgr *,
+       void (*exch_mgr_reset)(struct fc_lport *,
                               u32 s_id, u32 d_id);
 
-       void (*rport_flush_queue)(void);
-       /**
-        * Local Port interfaces
+       /*
+        * Flush the rport work queue. Generally used before shutdown.
+        *
+        * STATUS: OPTIONAL
         */
+       void (*rport_flush_queue)(void);
 
        /*
-        * Receive a frame to a local port.
+        * Receive a frame for a local port.
+        *
+        * STATUS: OPTIONAL
         */
        void (*lport_recv)(struct fc_lport *lp, struct fc_seq *sp,
                           struct fc_frame *fp);
 
+       /*
+        * Reset the local port.
+        *
+        * STATUS: OPTIONAL
+        */
        int (*lport_reset)(struct fc_lport *);
 
-       /**
-        * Remote Port interfaces
+       /*
+        * Create a remote port
         */
+       struct fc_rport *(*rport_create)(struct fc_disc_port *);
 
        /*
         * Initiates the RP state machine. It is called from the LP module.
@@ -500,26 +508,33 @@ struct libfc_function_template {
         * - PLOGI
         * - PRLI
         * - RTV
+        *
+        * STATUS: OPTIONAL
         */
        int (*rport_login)(struct fc_rport *rport);
 
        /*
         * Logoff, and remove the rport from the transport if
         * it had been added. This will send a LOGO to the target.
+        *
+        * STATUS: OPTIONAL
         */
        int (*rport_logoff)(struct fc_rport *rport);
 
        /*
         * Recieve a request from a remote port.
+        *
+        * STATUS: OPTIONAL
         */
        void (*rport_recv_req)(struct fc_seq *, struct fc_frame *,
                               struct fc_rport *);
 
-       struct fc_rport *(*rport_lookup)(const struct fc_lport *, u32);
-
-       /**
-        * FCP interfaces
+       /*
+        * lookup an rport by it's port ID.
+        *
+        * STATUS: OPTIONAL
         */
+       struct fc_rport *(*rport_lookup)(const struct fc_lport *, u32);
 
        /*
         * Send a fcp cmd from fsp pkt.
@@ -527,30 +542,38 @@ struct libfc_function_template {
         *
         * The resp handler is called when FCP_RSP received.
         *
+        * STATUS: OPTIONAL
         */
        int (*fcp_cmd_send)(struct fc_lport *lp, struct fc_fcp_pkt *fsp,
                            void (*resp)(struct fc_seq *, struct fc_frame *fp,
                                         void *arg));
 
        /*
-        * Used at least durring linkdown and reset
+        * Cleanup the FCP layer, used durring link down and reset
+        *
+        * STATUS: OPTIONAL
         */
        void (*fcp_cleanup)(struct fc_lport *lp);
 
        /*
         * Abort all I/O on a local port
+        *
+        * STATUS: OPTIONAL
         */
        void (*fcp_abort_io)(struct fc_lport *lp);
 
-       /**
-        * Discovery interfaces
+       /*
+        * Receive a request for the discovery layer.
+        *
+        * STATUS: OPTIONAL
         */
-
        void (*disc_recv_req)(struct fc_seq *,
                              struct fc_frame *, struct fc_lport *);
 
        /*
         * Start discovery for a local port.
+        *
+        * STATUS: OPTIONAL
         */
        void (*disc_start)(void (*disc_callback)(struct fc_lport *,
                                                 enum fc_disc_event),
@@ -559,6 +582,8 @@ struct libfc_function_template {
        /*
         * Stop discovery for a given lport. This will remove
         * all discovered rports
+        *
+        * STATUS: OPTIONAL
         */
        void (*disc_stop) (struct fc_lport *);
 
@@ -566,6 +591,8 @@ struct libfc_function_template {
         * Stop discovery for a given lport. This will block
         * until all discovered rports are deleted from the
         * FC transport class
+        *
+        * STATUS: OPTIONAL
         */
        void (*disc_stop_final) (struct fc_lport *);
 };
@@ -603,7 +630,8 @@ struct fc_lport {
 
        /* Operational Information */
        struct libfc_function_template tt;
-       u16                     link_status;
+       u8                      link_up;
+       u8                      qfull;
        enum fc_lport_state     state;
        unsigned long           boot_time;
 
@@ -637,7 +665,7 @@ struct fc_lport {
        struct delayed_work     disc_work;
 };
 
-/**
+/*
  * FC_LPORT HELPER FUNCTIONS
  *****************************/
 static inline void *lport_priv(const struct fc_lport *lp)
@@ -669,7 +697,7 @@ static inline void fc_lport_state_enter(struct fc_lport *lp,
 }
 
 
-/**
+/*
  * LOCAL PORT LAYER
  *****************************/
 int fc_lport_init(struct fc_lport *lp);
@@ -704,12 +732,6 @@ void fc_linkup(struct fc_lport *);
 void fc_linkdown(struct fc_lport *);
 
 /*
- * Pause and unpause traffic.
- */
-void fc_pause(struct fc_lport *);
-void fc_unpause(struct fc_lport *);
-
-/*
  * Configure the local port.
  */
 int fc_lport_config(struct fc_lport *);
@@ -725,19 +747,19 @@ int fc_lport_reset(struct fc_lport *);
 int fc_set_mfs(struct fc_lport *lp, u32 mfs);
 
 
-/**
+/*
  * REMOTE PORT LAYER
  *****************************/
 int fc_rport_init(struct fc_lport *lp);
 void fc_rport_terminate_io(struct fc_rport *rp);
 
-/**
+/*
  * DISCOVERY LAYER
  *****************************/
 int fc_disc_init(struct fc_lport *lp);
 
 
-/**
+/*
  * SCSI LAYER
  *****************************/
 /*
@@ -798,7 +820,7 @@ int fc_change_queue_type(struct scsi_device *sdev, int tag_type);
  */
 void fc_fcp_destroy(struct fc_lport *);
 
-/**
+/*
  * ELS/CT interface
  *****************************/
 /*
@@ -807,7 +829,7 @@ void fc_fcp_destroy(struct fc_lport *);
 int fc_elsct_init(struct fc_lport *lp);
 
 
-/**
+/*
  * EXCHANGE MANAGER LAYER
  *****************************/
 /*
@@ -916,7 +938,7 @@ struct fc_seq *fc_seq_start_next(struct fc_seq *sp);
  * If s_id is non-zero, reset only exchanges originating from that FID.
  * If d_id is non-zero, reset only exchanges sending to that FID.
  */
-void fc_exch_mgr_reset(struct fc_exch_mgr *, u32 s_id, u32 d_id);
+void fc_exch_mgr_reset(struct fc_lport *, u32 s_id, u32 d_id);
 
 /*
  * Functions for fc_functions_template
index 89fdbb9..941818f 100644 (file)
@@ -46,6 +46,7 @@ struct fcoe_softc {
        struct net_device *phys_dev;            /* device with ethtool_ops */
        struct packet_type  fcoe_packet_type;
        struct sk_buff_head fcoe_pending_queue;
+       u8      fcoe_pending_queue_active;
 
        u8 dest_addr[ETH_ALEN];
        u8 ctl_src_addr[ETH_ALEN];
@@ -58,16 +59,10 @@ struct fcoe_softc {
        u8 address_mode;
 };
 
-static inline struct fcoe_softc *fcoe_softc(
-       const struct fc_lport *lp)
-{
-       return (struct fcoe_softc *)lport_priv(lp);
-}
-
 static inline struct net_device *fcoe_netdev(
        const struct fc_lport *lp)
 {
-       return fcoe_softc(lp)->real_dev;
+       return ((struct fcoe_softc *)lport_priv(lp))->real_dev;
 }
 
 static inline struct fcoe_hdr *skb_fcoe_header(const struct sk_buff *skb)
index 122fef4..c687ba4 100644 (file)
@@ -81,6 +81,7 @@ void dynamic_irq_cleanup(unsigned int irq)
        desc->handle_irq = handle_bad_irq;
        desc->chip = &no_irq_chip;
        desc->name = NULL;
+       clear_kstat_irqs(desc);
        spin_unlock_irqrestore(&desc->lock, flags);
 }
 
@@ -293,7 +294,8 @@ static inline void mask_ack_irq(struct irq_desc *desc, int irq)
                desc->chip->mask_ack(irq);
        else {
                desc->chip->mask(irq);
-               desc->chip->ack(irq);
+               if (desc->chip->ack)
+                       desc->chip->ack(irq);
        }
 }
 
@@ -479,7 +481,8 @@ handle_edge_irq(unsigned int irq, struct irq_desc *desc)
        kstat_incr_irqs_this_cpu(irq, desc);
 
        /* Start handling the irq */
-       desc->chip->ack(irq);
+       if (desc->chip->ack)
+               desc->chip->ack(irq);
        desc = irq_remap_to_desc(irq, desc);
 
        /* Mark the IRQ currently in progress.*/
index f51eaee..9ebf779 100644 (file)
@@ -82,19 +82,21 @@ static struct irq_desc irq_desc_init = {
 
 void init_kstat_irqs(struct irq_desc *desc, int cpu, int nr)
 {
-       unsigned long bytes;
-       char *ptr;
        int node;
-
-       /* Compute how many bytes we need per irq and allocate them */
-       bytes = nr * sizeof(unsigned int);
+       void *ptr;
 
        node = cpu_to_node(cpu);
-       ptr = kzalloc_node(bytes, GFP_ATOMIC, node);
-       printk(KERN_DEBUG "  alloc kstat_irqs on cpu %d node %d\n", cpu, node);
+       ptr = kzalloc_node(nr * sizeof(*desc->kstat_irqs), GFP_ATOMIC, node);
 
-       if (ptr)
-               desc->kstat_irqs = (unsigned int *)ptr;
+       /*
+        * don't overwite if can not get new one
+        * init_copy_kstat_irqs() could still use old one
+        */
+       if (ptr) {
+               printk(KERN_DEBUG "  alloc kstat_irqs on cpu %d node %d\n",
+                        cpu, node);
+               desc->kstat_irqs = ptr;
+       }
 }
 
 static void init_one_irq_desc(int irq, struct irq_desc *desc, int cpu)
@@ -237,6 +239,7 @@ struct irq_desc irq_desc[NR_IRQS] __cacheline_aligned_in_smp = {
        }
 };
 
+static unsigned int kstat_irqs_all[NR_IRQS][NR_CPUS];
 int __init early_irq_init(void)
 {
        struct irq_desc *desc;
@@ -253,6 +256,7 @@ int __init early_irq_init(void)
        for (i = 0; i < count; i++) {
                desc[i].irq = i;
                init_alloc_desc_masks(&desc[i], 0, true);
+               desc[i].kstat_irqs = kstat_irqs_all[i];
        }
        return arch_early_irq_init();
 }
@@ -268,6 +272,11 @@ struct irq_desc *irq_to_desc_alloc_cpu(unsigned int irq, int cpu)
 }
 #endif /* !CONFIG_SPARSE_IRQ */
 
+void clear_kstat_irqs(struct irq_desc *desc)
+{
+       memset(desc->kstat_irqs, 0, nr_cpu_ids * sizeof(*(desc->kstat_irqs)));
+}
+
 /*
  * What should we do if we get a hw irq event on an illegal vector?
  * Each architecture has to answer this themself.
@@ -341,6 +350,8 @@ irqreturn_t handle_IRQ_event(unsigned int irq, struct irqaction *action)
        irqreturn_t ret, retval = IRQ_NONE;
        unsigned int status = 0;
 
+       WARN_ONCE(!in_irq(), "BUG: IRQ handler called from non-hardirq context!");
+
        if (!(action->flags & IRQF_DISABLED))
                local_irq_enable_in_hardirq();
 
@@ -360,6 +371,11 @@ irqreturn_t handle_IRQ_event(unsigned int irq, struct irqaction *action)
 }
 
 #ifndef CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ
+
+#ifdef CONFIG_ENABLE_WARN_DEPRECATED
+# warning __do_IRQ is deprecated. Please convert to proper flow handlers
+#endif
+
 /**
  * __do_IRQ - original all in one highlevel IRQ handler
  * @irq:       the interrupt number
@@ -480,12 +496,10 @@ void early_init_irq_lock_class(void)
        }
 }
 
-#ifdef CONFIG_SPARSE_IRQ
 unsigned int kstat_irqs_cpu(unsigned int irq, int cpu)
 {
        struct irq_desc *desc = irq_to_desc(irq);
        return desc ? desc->kstat_irqs[cpu] : 0;
 }
-#endif
 EXPORT_SYMBOL(kstat_irqs_cpu);
 
index 40416a8..ee1aa9f 100644 (file)
@@ -15,6 +15,7 @@ extern int __irq_set_trigger(struct irq_desc *desc, unsigned int irq,
 
 extern struct lock_class_key irq_desc_lock_class;
 extern void init_kstat_irqs(struct irq_desc *desc, int cpu, int nr);
+extern void clear_kstat_irqs(struct irq_desc *desc);
 extern spinlock_t sparse_irq_lock;
 
 #ifdef CONFIG_SPARSE_IRQ
index a3a5dc9..6458e99 100644 (file)
@@ -109,7 +109,7 @@ int irq_set_affinity(unsigned int irq, const struct cpumask *cpumask)
 /*
  * Generic version of the affinity autoselector.
  */
-int do_irq_select_affinity(unsigned int irq, struct irq_desc *desc)
+static int setup_affinity(unsigned int irq, struct irq_desc *desc)
 {
        if (!irq_can_set_affinity(irq))
                return 0;
@@ -133,7 +133,7 @@ set_affinity:
        return 0;
 }
 #else
-static inline int do_irq_select_affinity(unsigned int irq, struct irq_desc *d)
+static inline int setup_affinity(unsigned int irq, struct irq_desc *d)
 {
        return irq_select_affinity(irq);
 }
@@ -149,14 +149,14 @@ int irq_select_affinity_usr(unsigned int irq)
        int ret;
 
        spin_lock_irqsave(&desc->lock, flags);
-       ret = do_irq_select_affinity(irq, desc);
+       ret = setup_affinity(irq, desc);
        spin_unlock_irqrestore(&desc->lock, flags);
 
        return ret;
 }
 
 #else
-static inline int do_irq_select_affinity(int irq, struct irq_desc *desc)
+static inline int setup_affinity(unsigned int irq, struct irq_desc *desc)
 {
        return 0;
 }
@@ -389,9 +389,9 @@ int __irq_set_trigger(struct irq_desc *desc, unsigned int irq,
  * allocate special interrupts that are part of the architecture.
  */
 static int
-__setup_irq(unsigned int irq, struct irq_desc * desc, struct irqaction *new)
+__setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
 {
-       struct irqaction *old, **p;
+       struct irqaction *old, **old_ptr;
        const char *old_name = NULL;
        unsigned long flags;
        int shared = 0;
@@ -423,8 +423,8 @@ __setup_irq(unsigned int irq, struct irq_desc * desc, struct irqaction *new)
         * The following block of code has to be executed atomically
         */
        spin_lock_irqsave(&desc->lock, flags);
-       p = &desc->action;
-       old = *p;
+       old_ptr = &desc->action;
+       old = *old_ptr;
        if (old) {
                /*
                 * Can't share interrupts unless both agree to and are
@@ -447,8 +447,8 @@ __setup_irq(unsigned int irq, struct irq_desc * desc, struct irqaction *new)
 
                /* add new interrupt at end of irq queue */
                do {
-                       p = &old->next;
-                       old = *p;
+                       old_ptr = &old->next;
+                       old = *old_ptr;
                } while (old);
                shared = 1;
        }
@@ -488,7 +488,7 @@ __setup_irq(unsigned int irq, struct irq_desc * desc, struct irqaction *new)
                        desc->status |= IRQ_NO_BALANCING;
 
                /* Set default affinity mask once everything is setup */
-               do_irq_select_affinity(irq, desc);
+               setup_affinity(irq, desc);
 
        } else if ((new->flags & IRQF_TRIGGER_MASK)
                        && (new->flags & IRQF_TRIGGER_MASK)
@@ -499,7 +499,7 @@ __setup_irq(unsigned int irq, struct irq_desc * desc, struct irqaction *new)
                                (int)(new->flags & IRQF_TRIGGER_MASK));
        }
 
-       *p = new;
+       *old_ptr = new;
 
        /* Reset broken irq detection when installing new handler */
        desc->irq_count = 0;
@@ -549,90 +549,117 @@ int setup_irq(unsigned int irq, struct irqaction *act)
 
        return __setup_irq(irq, desc, act);
 }
+EXPORT_SYMBOL_GPL(setup_irq);
 
-/**
- *     free_irq - free an interrupt
- *     @irq: Interrupt line to free
- *     @dev_id: Device identity to free
- *
- *     Remove an interrupt handler. The handler is removed and if the
- *     interrupt line is no longer in use by any driver it is disabled.
- *     On a shared IRQ the caller must ensure the interrupt is disabled
- *     on the card it drives before calling this function. The function
- *     does not return until any executing interrupts for this IRQ
- *     have completed.
- *
- *     This function must not be called from interrupt context.
+ /*
+ * Internal function to unregister an irqaction - used to free
+ * regular and special interrupts that are part of the architecture.
  */
-void free_irq(unsigned int irq, void *dev_id)
+static struct irqaction *__free_irq(unsigned int irq, void *dev_id)
 {
        struct irq_desc *desc = irq_to_desc(irq);
-       struct irqaction **p;
+       struct irqaction *action, **action_ptr;
        unsigned long flags;
 
-       WARN_ON(in_interrupt());
+       WARN(in_interrupt(), "Trying to free IRQ %d from IRQ context!\n", irq);
 
        if (!desc)
-               return;
+               return NULL;
 
        spin_lock_irqsave(&desc->lock, flags);
-       p = &desc->action;
+
+       /*
+        * There can be multiple actions per IRQ descriptor, find the right
+        * one based on the dev_id:
+        */
+       action_ptr = &desc->action;
        for (;;) {
-               struct irqaction *action = *p;
+               action = *action_ptr;
 
-               if (action) {
-                       struct irqaction **pp = p;
+               if (!action) {
+                       WARN(1, "Trying to free already-free IRQ %d\n", irq);
+                       spin_unlock_irqrestore(&desc->lock, flags);
 
-                       p = &action->next;
-                       if (action->dev_id != dev_id)
-                               continue;
+                       return NULL;
+               }
 
-                       /* Found it - now remove it from the list of entries */
-                       *pp = action->next;
+               if (action->dev_id == dev_id)
+                       break;
+               action_ptr = &action->next;
+       }
 
-                       /* Currently used only by UML, might disappear one day.*/
+       /* Found it - now remove it from the list of entries: */
+       *action_ptr = action->next;
+
+       /* Currently used only by UML, might disappear one day: */
 #ifdef CONFIG_IRQ_RELEASE_METHOD
-                       if (desc->chip->release)
-                               desc->chip->release(irq, dev_id);
+       if (desc->chip->release)
+               desc->chip->release(irq, dev_id);
 #endif
 
-                       if (!desc->action) {
-                               desc->status |= IRQ_DISABLED;
-                               if (desc->chip->shutdown)
-                                       desc->chip->shutdown(irq);
-                               else
-                                       desc->chip->disable(irq);
-                       }
-                       spin_unlock_irqrestore(&desc->lock, flags);
-                       unregister_handler_proc(irq, action);
+       /* If this was the last handler, shut down the IRQ line: */
+       if (!desc->action) {
+               desc->status |= IRQ_DISABLED;
+               if (desc->chip->shutdown)
+                       desc->chip->shutdown(irq);
+               else
+                       desc->chip->disable(irq);
+       }
+       spin_unlock_irqrestore(&desc->lock, flags);
+
+       unregister_handler_proc(irq, action);
+
+       /* Make sure it's not being used on another CPU: */
+       synchronize_irq(irq);
 
-                       /* Make sure it's not being used on another CPU */
-                       synchronize_irq(irq);
-#ifdef CONFIG_DEBUG_SHIRQ
-                       /*
-                        * It's a shared IRQ -- the driver ought to be
-                        * prepared for it to happen even now it's
-                        * being freed, so let's make sure....  We do
-                        * this after actually deregistering it, to
-                        * make sure that a 'real' IRQ doesn't run in
-                        * parallel with our fake
-                        */
-                       if (action->flags & IRQF_SHARED) {
-                               local_irq_save(flags);
-                               action->handler(irq, dev_id);
-                               local_irq_restore(flags);
-                       }
-#endif
-                       kfree(action);
-                       return;
-               }
-               printk(KERN_ERR "Trying to free already-free IRQ %d\n", irq);
 #ifdef CONFIG_DEBUG_SHIRQ
-               dump_stack();
-#endif
-               spin_unlock_irqrestore(&desc->lock, flags);
-               return;
+       /*
+        * It's a shared IRQ -- the driver ought to be prepared for an IRQ
+        * event to happen even now it's being freed, so let's make sure that
+        * is so by doing an extra call to the handler ....
+        *
+        * ( We do this after actually deregistering it, to make sure that a
+        *   'real' IRQ doesn't run in * parallel with our fake. )
+        */
+       if (action->flags & IRQF_SHARED) {
+               local_irq_save(flags);
+               action->handler(irq, dev_id);
+               local_irq_restore(flags);
        }
+#endif
+       return action;
+}
+
+/**
+ *     remove_irq - free an interrupt
+ *     @irq: Interrupt line to free
+ *     @act: irqaction for the interrupt
+ *
+ * Used to remove interrupts statically setup by the early boot process.
+ */
+void remove_irq(unsigned int irq, struct irqaction *act)
+{
+       __free_irq(irq, act->dev_id);
+}
+EXPORT_SYMBOL_GPL(remove_irq);
+
+/**
+ *     free_irq - free an interrupt allocated with request_irq
+ *     @irq: Interrupt line to free
+ *     @dev_id: Device identity to free
+ *
+ *     Remove an interrupt handler. The handler is removed and if the
+ *     interrupt line is no longer in use by any driver it is disabled.
+ *     On a shared IRQ the caller must ensure the interrupt is disabled
+ *     on the card it drives before calling this function. The function
+ *     does not return until any executing interrupts for this IRQ
+ *     have completed.
+ *
+ *     This function must not be called from interrupt context.
+ */
+void free_irq(unsigned int irq, void *dev_id)
+{
+       kfree(__free_irq(irq, dev_id));
 }
 EXPORT_SYMBOL(free_irq);
 
@@ -679,11 +706,12 @@ int request_irq(unsigned int irq, irq_handler_t handler,
         * the behavior is classified as "will not fix" so we need to
         * start nudging drivers away from using that idiom.
         */
-       if ((irqflags & (IRQF_SHARED|IRQF_DISABLED))
-                       == (IRQF_SHARED|IRQF_DISABLED))
-               pr_warning("IRQ %d/%s: IRQF_DISABLED is not "
-                               "guaranteed on shared IRQs\n",
-                               irq, devname);
+       if ((irqflags & (IRQF_SHARED|IRQF_DISABLED)) ==
+                                       (IRQF_SHARED|IRQF_DISABLED)) {
+               pr_warning(
+                 "IRQ %d/%s: IRQF_DISABLED is not guaranteed on shared IRQs\n",
+                       irq, devname);
+       }
 
 #ifdef CONFIG_LOCKDEP
        /*
@@ -709,15 +737,13 @@ int request_irq(unsigned int irq, irq_handler_t handler,
        if (!handler)
                return -EINVAL;
 
-       action = kmalloc(sizeof(struct irqaction), GFP_ATOMIC);
+       action = kzalloc(sizeof(struct irqaction), GFP_KERNEL);
        if (!action)
                return -ENOMEM;
 
        action->handler = handler;
        action->flags = irqflags;
-       cpus_clear(action->mask);
        action->name = devname;
-       action->next = NULL;
        action->dev_id = dev_id;
 
        retval = __setup_irq(irq, desc, action);
index 7f9b804..243d612 100644 (file)
@@ -17,16 +17,11 @@ static void init_copy_kstat_irqs(struct irq_desc *old_desc,
                                 struct irq_desc *desc,
                                 int cpu, int nr)
 {
-       unsigned long bytes;
-
        init_kstat_irqs(desc, cpu, nr);
 
-       if (desc->kstat_irqs != old_desc->kstat_irqs) {
-               /* Compute how many bytes we need per irq and allocate them */
-               bytes = nr * sizeof(unsigned int);
-
-               memcpy(desc->kstat_irqs, old_desc->kstat_irqs, bytes);
-       }
+       if (desc->kstat_irqs != old_desc->kstat_irqs)
+               memcpy(desc->kstat_irqs, old_desc->kstat_irqs,
+                        nr * sizeof(*desc->kstat_irqs));
 }
 
 static void free_kstat_irqs(struct irq_desc *old_desc, struct irq_desc *desc)
index dd364c1..4d56829 100644 (file)
@@ -104,7 +104,7 @@ static int misrouted_irq(int irq)
        return ok;
 }
 
-static void poll_spurious_irqs(unsigned long dummy)
+static void poll_all_shared_irqs(void)
 {
        struct irq_desc *desc;
        int i;
@@ -123,11 +123,23 @@ static void poll_spurious_irqs(unsigned long dummy)
 
                try_one_irq(i, desc);
        }
+}
+
+static void poll_spurious_irqs(unsigned long dummy)
+{
+       poll_all_shared_irqs();
 
        mod_timer(&poll_spurious_irq_timer,
                  jiffies + POLL_SPURIOUS_IRQ_INTERVAL);
 }
 
+#ifdef CONFIG_DEBUG_SHIRQ
+void debug_poll_all_shared_irqs(void)
+{
+       poll_all_shared_irqs();
+}
+#endif
+
 /*
  * If 99,900 of the previous 100,000 interrupts have not been handled
  * then assume that the IRQ is stuck in some manner. Drop a diagnostic
index f0e04d6..29f2d7b 100644 (file)
@@ -2049,14 +2049,6 @@ static noinline struct module *load_module(void __user *umod,
        if (err < 0)
                goto free_mod;
 
-#if defined(CONFIG_MODULE_UNLOAD) && defined(CONFIG_SMP)
-       mod->refptr = percpu_modalloc(sizeof(local_t), __alignof__(local_t),
-                                     mod->name);
-       if (!mod->refptr) {
-               err = -ENOMEM;
-               goto free_mod;
-       }
-#endif
        if (pcpuindex) {
                /* We have a special allocation for this section. */
                percpu = percpu_modalloc(sechdrs[pcpuindex].sh_size,
@@ -2064,7 +2056,7 @@ static noinline struct module *load_module(void __user *umod,
                                         mod->name);
                if (!percpu) {
                        err = -ENOMEM;
-                       goto free_percpu;
+                       goto free_mod;
                }
                sechdrs[pcpuindex].sh_flags &= ~(unsigned long)SHF_ALLOC;
                mod->percpu = percpu;
@@ -2116,6 +2108,14 @@ static noinline struct module *load_module(void __user *umod,
        /* Module has been moved. */
        mod = (void *)sechdrs[modindex].sh_addr;
 
+#if defined(CONFIG_MODULE_UNLOAD) && defined(CONFIG_SMP)
+       mod->refptr = percpu_modalloc(sizeof(local_t), __alignof__(local_t),
+                                     mod->name);
+       if (!mod->refptr) {
+               err = -ENOMEM;
+               goto free_init;
+       }
+#endif
        /* Now we've moved module, initialize linked lists, etc. */
        module_unload_init(mod);
 
@@ -2322,15 +2322,17 @@ static noinline struct module *load_module(void __user *umod,
        ftrace_release(mod->module_core, mod->core_size);
  free_unload:
        module_unload_free(mod);
+ free_init:
+#if defined(CONFIG_MODULE_UNLOAD) && defined(CONFIG_SMP)
+       percpu_modfree(mod->refptr);
+#endif
        module_free(mod, mod->module_init);
  free_core:
        module_free(mod, mod->module_core);
+       /* mod will be freed with core. Don't access it beyond this line! */
  free_percpu:
        if (percpu)
                percpu_modfree(percpu);
-#if defined(CONFIG_MODULE_UNLOAD) && defined(CONFIG_SMP)
-       percpu_modfree(mod->refptr);
-#endif
  free_mod:
        kfree(args);
  free_hdr:
index 592bb96..1cdbf0b 100644 (file)
@@ -1262,7 +1262,6 @@ static void shrink_active_list(unsigned long nr_pages, struct zone *zone,
         * Move the pages to the [file or anon] inactive list.
         */
        pagevec_init(&pvec, 1);
-       pgmoved = 0;
        lru = LRU_BASE + file * LRU_FILE;
 
        spin_lock_irq(&zone->lru_lock);
@@ -1274,6 +1273,7 @@ static void shrink_active_list(unsigned long nr_pages, struct zone *zone,
         */
        reclaim_stat->recent_rotated[!!file] += pgmoved;
 
+       pgmoved = 0;
        while (!list_empty(&l_inactive)) {
                page = lru_to_page(&l_inactive);
                prefetchw_prev_lru_page(page, &l_inactive, flags);
index da944ec..9c8309e 100644 (file)
@@ -1192,6 +1192,9 @@ module_init(inet6_init);
 
 static void __exit inet6_exit(void)
 {
+       if (disable_ipv6)
+               return;
+
        /* First of all disallow new sockets creation. */
        sock_unregister(PF_INET6);
        /* Disallow any further netlink messages */
index 385f427..ff50a05 100644 (file)
@@ -293,11 +293,6 @@ static void rpc_make_runnable(struct rpc_task *task)
        rpc_clear_queued(task);
        if (rpc_test_and_set_running(task))
                return;
-       /* We might have raced */
-       if (RPC_IS_QUEUED(task)) {
-               rpc_clear_running(task);
-               return;
-       }
        if (RPC_IS_ASYNC(task)) {
                int status;
 
@@ -607,7 +602,9 @@ void rpc_release_calldata(const struct rpc_call_ops *ops, void *calldata)
  */
 static void __rpc_execute(struct rpc_task *task)
 {
-       int             status = 0;
+       struct rpc_wait_queue *queue;
+       int task_is_async = RPC_IS_ASYNC(task);
+       int status = 0;
 
        dprintk("RPC: %5u __rpc_execute flags=0x%x\n",
                        task->tk_pid, task->tk_flags);
@@ -647,15 +644,25 @@ static void __rpc_execute(struct rpc_task *task)
                 */
                if (!RPC_IS_QUEUED(task))
                        continue;
-               rpc_clear_running(task);
-               if (RPC_IS_ASYNC(task)) {
-                       /* Careful! we may have raced... */
-                       if (RPC_IS_QUEUED(task))
-                               return;
-                       if (rpc_test_and_set_running(task))
-                               return;
+               /*
+                * The queue->lock protects against races with
+                * rpc_make_runnable().
+                *
+                * Note that once we clear RPC_TASK_RUNNING on an asynchronous
+                * rpc_task, rpc_make_runnable() can assign it to a
+                * different workqueue. We therefore cannot assume that the
+                * rpc_task pointer may still be dereferenced.
+                */
+               queue = task->tk_waitqueue;
+               spin_lock_bh(&queue->lock);
+               if (!RPC_IS_QUEUED(task)) {
+                       spin_unlock_bh(&queue->lock);
                        continue;
                }
+               rpc_clear_running(task);
+               spin_unlock_bh(&queue->lock);
+               if (task_is_async)
+                       return;
 
                /* sync task: sleep here */
                dprintk("RPC: %5u sync task going to sleep\n", task->tk_pid);
index 29e401b..62098d1 100644 (file)
@@ -663,7 +663,7 @@ void xprt_connect(struct rpc_task *task)
                        xprt, (xprt_connected(xprt) ? "is" : "is not"));
 
        if (!xprt_bound(xprt)) {
-               task->tk_status = -EIO;
+               task->tk_status = -EAGAIN;
                return;
        }
        if (!xprt_lock_write(xprt, task))
index 5cbb404..29c71e6 100644 (file)
@@ -467,7 +467,7 @@ static int xs_sendpages(struct socket *sock, struct sockaddr *addr, int addrlen,
        int err, sent = 0;
 
        if (unlikely(!sock))
-               return -ENOTCONN;
+               return -ENOTSOCK;
 
        clear_bit(SOCK_ASYNC_NOSPACE, &sock->flags);
        if (base != 0) {
@@ -577,6 +577,8 @@ static int xs_udp_send_request(struct rpc_task *task)
                                req->rq_svec->iov_base,
                                req->rq_svec->iov_len);
 
+       if (!xprt_bound(xprt))
+               return -ENOTCONN;
        status = xs_sendpages(transport->sock,
                              xs_addr(xprt),
                              xprt->addrlen, xdr,
@@ -594,6 +596,10 @@ static int xs_udp_send_request(struct rpc_task *task)
        }
 
        switch (status) {
+       case -ENOTSOCK:
+               status = -ENOTCONN;
+               /* Should we call xs_close() here? */
+               break;
        case -EAGAIN:
                xs_nospace(task);
                break;
@@ -693,6 +699,10 @@ static int xs_tcp_send_request(struct rpc_task *task)
        }
 
        switch (status) {
+       case -ENOTSOCK:
+               status = -ENOTCONN;
+               /* Should we call xs_close() here? */
+               break;
        case -EAGAIN:
                xs_nospace(task);
                break;
@@ -1523,7 +1533,7 @@ static void xs_udp_connect_worker4(struct work_struct *work)
        struct socket *sock = transport->sock;
        int err, status = -EIO;
 
-       if (xprt->shutdown || !xprt_bound(xprt))
+       if (xprt->shutdown)
                goto out;
 
        /* Start by resetting any existing state */
@@ -1564,7 +1574,7 @@ static void xs_udp_connect_worker6(struct work_struct *work)
        struct socket *sock = transport->sock;
        int err, status = -EIO;
 
-       if (xprt->shutdown || !xprt_bound(xprt))
+       if (xprt->shutdown)
                goto out;
 
        /* Start by resetting any existing state */
@@ -1648,6 +1658,9 @@ static int xs_tcp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock)
                write_unlock_bh(&sk->sk_callback_lock);
        }
 
+       if (!xprt_bound(xprt))
+               return -ENOTCONN;
+
        /* Tell the socket layer to start connecting... */
        xprt->stat.connect_count++;
        xprt->stat.connect_start = jiffies;
@@ -1668,7 +1681,7 @@ static void xs_tcp_connect_worker4(struct work_struct *work)
        struct socket *sock = transport->sock;
        int err, status = -EIO;
 
-       if (xprt->shutdown || !xprt_bound(xprt))
+       if (xprt->shutdown)
                goto out;
 
        if (!sock) {
@@ -1728,7 +1741,7 @@ static void xs_tcp_connect_worker6(struct work_struct *work)
        struct socket *sock = transport->sock;
        int err, status = -EIO;
 
-       if (xprt->shutdown || !xprt_bound(xprt))
+       if (xprt->shutdown)
                goto out;
 
        if (!sock) {
index e25ff62..62a5425 100644 (file)
@@ -748,12 +748,51 @@ static void xfrm_hash_grow_check(struct net *net, int have_hash_collision)
                schedule_work(&net->xfrm.state_hash_work);
 }
 
+static void xfrm_state_look_at(struct xfrm_policy *pol, struct xfrm_state *x,
+                              struct flowi *fl, unsigned short family,
+                              xfrm_address_t *daddr, xfrm_address_t *saddr,
+                              struct xfrm_state **best, int *acq_in_progress,
+                              int *error)
+{
+       /* Resolution logic:
+        * 1. There is a valid state with matching selector. Done.
+        * 2. Valid state with inappropriate selector. Skip.
+        *
+        * Entering area of "sysdeps".
+        *
+        * 3. If state is not valid, selector is temporary, it selects
+        *    only session which triggered previous resolution. Key
+        *    manager will do something to install a state with proper
+        *    selector.
+        */
+       if (x->km.state == XFRM_STATE_VALID) {
+               if ((x->sel.family &&
+                    !xfrm_selector_match(&x->sel, fl, x->sel.family)) ||
+                   !security_xfrm_state_pol_flow_match(x, pol, fl))
+                       return;
+
+               if (!*best ||
+                   (*best)->km.dying > x->km.dying ||
+                   ((*best)->km.dying == x->km.dying &&
+                    (*best)->curlft.add_time < x->curlft.add_time))
+                       *best = x;
+       } else if (x->km.state == XFRM_STATE_ACQ) {
+               *acq_in_progress = 1;
+       } else if (x->km.state == XFRM_STATE_ERROR ||
+                  x->km.state == XFRM_STATE_EXPIRED) {
+               if (xfrm_selector_match(&x->sel, fl, x->sel.family) &&
+                   security_xfrm_state_pol_flow_match(x, pol, fl))
+                       *error = -ESRCH;
+       }
+}
+
 struct xfrm_state *
 xfrm_state_find(xfrm_address_t *daddr, xfrm_address_t *saddr,
                struct flowi *fl, struct xfrm_tmpl *tmpl,
                struct xfrm_policy *pol, int *err,
                unsigned short family)
 {
+       static xfrm_address_t saddr_wildcard = { };
        struct net *net = xp_net(pol);
        unsigned int h;
        struct hlist_node *entry;
@@ -773,40 +812,27 @@ xfrm_state_find(xfrm_address_t *daddr, xfrm_address_t *saddr,
                    xfrm_state_addr_check(x, daddr, saddr, family) &&
                    tmpl->mode == x->props.mode &&
                    tmpl->id.proto == x->id.proto &&
-                   (tmpl->id.spi == x->id.spi || !tmpl->id.spi)) {
-                       /* Resolution logic:
-                          1. There is a valid state with matching selector.
-                             Done.
-                          2. Valid state with inappropriate selector. Skip.
-
-                          Entering area of "sysdeps".
-
-                          3. If state is not valid, selector is temporary,
-                             it selects only session which triggered
-                             previous resolution. Key manager will do
-                             something to install a state with proper
-                             selector.
-                        */
-                       if (x->km.state == XFRM_STATE_VALID) {
-                               if ((x->sel.family && !xfrm_selector_match(&x->sel, fl, x->sel.family)) ||
-                                   !security_xfrm_state_pol_flow_match(x, pol, fl))
-                                       continue;
-                               if (!best ||
-                                   best->km.dying > x->km.dying ||
-                                   (best->km.dying == x->km.dying &&
-                                    best->curlft.add_time < x->curlft.add_time))
-                                       best = x;
-                       } else if (x->km.state == XFRM_STATE_ACQ) {
-                               acquire_in_progress = 1;
-                       } else if (x->km.state == XFRM_STATE_ERROR ||
-                                  x->km.state == XFRM_STATE_EXPIRED) {
-                               if (xfrm_selector_match(&x->sel, fl, x->sel.family) &&
-                                   security_xfrm_state_pol_flow_match(x, pol, fl))
-                                       error = -ESRCH;
-                       }
-               }
+                   (tmpl->id.spi == x->id.spi || !tmpl->id.spi))
+                       xfrm_state_look_at(pol, x, fl, family, daddr, saddr,
+                                          &best, &acquire_in_progress, &error);
+       }
+       if (best)
+               goto found;
+
+       h = xfrm_dst_hash(net, daddr, &saddr_wildcard, tmpl->reqid, family);
+       hlist_for_each_entry(x, entry, net->xfrm.state_bydst+h, bydst) {
+               if (x->props.family == family &&
+                   x->props.reqid == tmpl->reqid &&
+                   !(x->props.flags & XFRM_STATE_WILDRECV) &&
+                   xfrm_state_addr_check(x, daddr, saddr, family) &&
+                   tmpl->mode == x->props.mode &&
+                   tmpl->id.proto == x->id.proto &&
+                   (tmpl->id.spi == x->id.spi || !tmpl->id.spi))
+                       xfrm_state_look_at(pol, x, fl, family, daddr, saddr,
+                                          &best, &acquire_in_progress, &error);
        }
 
+found:
        x = best;
        if (!x && !error && !acquire_in_progress) {
                if (tmpl->id.spi &&
index 3e1057f..d190092 100644 (file)
@@ -11,6 +11,7 @@
 #include <time.h>
 #include <unistd.h>
 #include <sys/stat.h>
+#include <sys/time.h>
 
 #define LKC_DIRECT_LINK
 #include "lkc.h"
@@ -464,9 +465,22 @@ int main(int ac, char **av)
                        input_mode = set_yes;
                        break;
                case 'r':
+               {
+                       struct timeval now;
+                       unsigned int seed;
+
+                       /*
+                        * Use microseconds derived seed,
+                        * compensate for systems where it may be zero
+                        */
+                       gettimeofday(&now, NULL);
+
+                       seed = (unsigned int)((now.tv_sec + 1) * (now.tv_usec + 1));
+                       srand(seed);
+
                        input_mode = set_random;
-                       srand(time(NULL));
                        break;
+               }
                case 'h':
                        printf(_("See README for usage info\n"));
                        exit(0);
index 830d9ea..273d738 100644 (file)
@@ -843,7 +843,7 @@ void conf_set_all_new_symbols(enum conf_def_mode mode)
                        default:
                                continue;
                        }
-                       if (!sym_is_choice(sym) || mode != def_random)
+                       if (!(sym_is_choice(sym) && mode == def_random))
                                sym->flags |= SYMBOL_DEF_USER;
                        break;
                default:
@@ -856,28 +856,49 @@ void conf_set_all_new_symbols(enum conf_def_mode mode)
 
        if (mode != def_random)
                return;
-
+       /*
+        * We have different type of choice blocks.
+        * If curr.tri equal to mod then we can select several
+        * choice symbols in one block.
+        * In this case we do nothing.
+        * If curr.tri equal yes then only one symbol can be
+        * selected in a choice block and we set it to yes,
+        * and the rest to no.
+        */
        for_all_symbols(i, csym) {
                if (sym_has_value(csym) || !sym_is_choice(csym))
                        continue;
 
                sym_calc_value(csym);
+
+               if (csym->curr.tri != yes)
+                       continue;
+
                prop = sym_get_choice_prop(csym);
-               def = -1;
-               while (1) {
-                       cnt = 0;
-                       expr_list_for_each_sym(prop->expr, e, sym) {
-                               if (sym->visible == no)
-                                       continue;
-                               if (def == cnt++) {
-                                       csym->def[S_DEF_USER].val = sym;
-                                       break;
-                               }
+
+               /* count entries in choice block */
+               cnt = 0;
+               expr_list_for_each_sym(prop->expr, e, sym)
+                       cnt++;
+
+               /*
+                * find a random value and set it to yes,
+                * set the rest to no so we have only one set
+                */
+               def = (rand() % cnt);
+
+               cnt = 0;
+               expr_list_for_each_sym(prop->expr, e, sym) {
+                       if (def == cnt++) {
+                               sym->def[S_DEF_USER].tri = yes;
+                               csym->def[S_DEF_USER].val = sym;
+                       }
+                       else {
+                               sym->def[S_DEF_USER].tri = no;
                        }
-                       if (def >= 0 || cnt < 2)
-                               break;
-                       def = (rand() % cnt) + 1;
                }
                csym->flags |= SYMBOL_DEF_USER;
+               /* clear VALID to get value calculated */
+               csym->flags &= ~(SYMBOL_VALID);
        }
 }
index 4690b8b..e570649 100644 (file)
@@ -692,6 +692,9 @@ static int snd_mixer_oss_put_volume1(struct snd_mixer_oss_file *fmixer,
                snd_mixer_oss_put_volume1_vol(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_PVOLUME], left, right);
                if (slot->present & SNDRV_MIXER_OSS_PRESENT_CVOLUME)
                        snd_mixer_oss_put_volume1_vol(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_CVOLUME], left, right);
+       } else if (slot->present & SNDRV_MIXER_OSS_PRESENT_CVOLUME) {
+               snd_mixer_oss_put_volume1_vol(fmixer, pslot,
+                       slot->numid[SNDRV_MIXER_OSS_ITEM_CVOLUME], left, right);
        } else if (slot->present & SNDRV_MIXER_OSS_PRESENT_GVOLUME) {
                snd_mixer_oss_put_volume1_vol(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_GVOLUME], left, right);
        } else if (slot->present & SNDRV_MIXER_OSS_PRESENT_GLOBAL) {
index 0a1798e..699d289 100644 (file)
@@ -2872,7 +2872,7 @@ static void snd_pcm_oss_proc_write(struct snd_info_entry *entry,
                        setup = kmalloc(sizeof(*setup), GFP_KERNEL);
                        if (! setup) {
                                buffer->error = -ENOMEM;
-                               mutex_lock(&pstr->oss.setup_mutex);
+                               mutex_unlock(&pstr->oss.setup_mutex);
                                return;
                        }
                        if (pstr->oss.setup_list == NULL)
@@ -2886,7 +2886,7 @@ static void snd_pcm_oss_proc_write(struct snd_info_entry *entry,
                        if (! template.task_name) {
                                kfree(setup);
                                buffer->error = -ENOMEM;
-                               mutex_lock(&pstr->oss.setup_mutex);
+                               mutex_unlock(&pstr->oss.setup_mutex);
                                return;
                        }
                }
index d4564ed..4e7ec2b 100644 (file)
@@ -38,6 +38,10 @@ int snd_free_sgbuf_pages(struct snd_dma_buffer *dmab)
        if (! sgbuf)
                return -EINVAL;
 
+       if (dmab->area)
+               vunmap(dmab->area);
+       dmab->area = NULL;
+
        tmpb.dev.type = SNDRV_DMA_TYPE_DEV;
        tmpb.dev.dev = sgbuf->dev;
        for (i = 0; i < sgbuf->pages; i++) {
@@ -48,9 +52,6 @@ int snd_free_sgbuf_pages(struct snd_dma_buffer *dmab)
                tmpb.bytes = (sgbuf->table[i].addr & ~PAGE_MASK) << PAGE_SHIFT;
                snd_dma_free_pages(&tmpb);
        }
-       if (dmab->area)
-               vunmap(dmab->area);
-       dmab->area = NULL;
 
        kfree(sgbuf->table);
        kfree(sgbuf->page_table);
index 58c972b..b848d10 100644 (file)
@@ -550,21 +550,27 @@ static int __devinit snd_opl3sa2_mixer(struct snd_card *card)
 #ifdef CONFIG_PM
 static int snd_opl3sa2_suspend(struct snd_card *card, pm_message_t state)
 {
-       struct snd_opl3sa2 *chip = card->private_data;
+       if (card) {
+               struct snd_opl3sa2 *chip = card->private_data;
 
-       snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
-       chip->wss->suspend(chip->wss);
-       /* power down */
-       snd_opl3sa2_write(chip, OPL3SA2_PM_CTRL, OPL3SA2_PM_D3);
+               snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
+               chip->wss->suspend(chip->wss);
+               /* power down */
+               snd_opl3sa2_write(chip, OPL3SA2_PM_CTRL, OPL3SA2_PM_D3);
+       }
 
        return 0;
 }
 
 static int snd_opl3sa2_resume(struct snd_card *card)
 {
-       struct snd_opl3sa2 *chip = card->private_data;
+       struct snd_opl3sa2 *chip;
        int i;
 
+       if (!card)
+               return 0;
+
+       chip = card->private_data;
        /* power up */
        snd_opl3sa2_write(chip, OPL3SA2_PM_CTRL, OPL3SA2_PM_D0);
 
index 5e909e0..f3b5723 100644 (file)
@@ -2059,26 +2059,31 @@ static int __devinit check_position_fix(struct azx *chip, int fix)
 {
        const struct snd_pci_quirk *q;
 
-       /* Check VIA HD Audio Controller exist */
-       if (chip->pci->vendor == PCI_VENDOR_ID_VIA &&
-           chip->pci->device == VIA_HDAC_DEVICE_ID) {
+       switch (fix) {
+       case POS_FIX_LPIB:
+       case POS_FIX_POSBUF:
+               return fix;
+       }
+
+       /* Check VIA/ATI HD Audio Controller exist */
+       switch (chip->driver_type) {
+       case AZX_DRIVER_VIA:
+       case AZX_DRIVER_ATI:
                chip->via_dmapos_patch = 1;
                /* Use link position directly, avoid any transfer problem. */
                return POS_FIX_LPIB;
        }
        chip->via_dmapos_patch = 0;
 
-       if (fix == POS_FIX_AUTO) {
-               q = snd_pci_quirk_lookup(chip->pci, position_fix_list);
-               if (q) {
-                       printk(KERN_INFO
-                                   "hda_intel: position_fix set to %d "
-                                   "for device %04x:%04x\n",
-                                   q->value, q->subvendor, q->subdevice);
-                       return q->value;
-               }
+       q = snd_pci_quirk_lookup(chip->pci, position_fix_list);
+       if (q) {
+               printk(KERN_INFO
+                      "hda_intel: position_fix set to %d "
+                      "for device %04x:%04x\n",
+                      q->value, q->subvendor, q->subdevice);
+               return q->value;
        }
-       return fix;
+       return POS_FIX_AUTO;
 }
 
 /*
@@ -2210,9 +2215,17 @@ static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci,
        gcap = azx_readw(chip, GCAP);
        snd_printdd("chipset global capabilities = 0x%x\n", gcap);
 
+       /* ATI chips seems buggy about 64bit DMA addresses */
+       if (chip->driver_type == AZX_DRIVER_ATI)
+               gcap &= ~0x01;
+
        /* allow 64bit DMA address if supported by H/W */
        if ((gcap & 0x01) && !pci_set_dma_mask(pci, DMA_64BIT_MASK))
                pci_set_consistent_dma_mask(pci, DMA_64BIT_MASK);
+       else {
+               pci_set_dma_mask(pci, DMA_32BIT_MASK);
+               pci_set_consistent_dma_mask(pci, DMA_32BIT_MASK);
+       }
 
        /* read number of streams from GCAP register instead of using
         * hardcoded value
index f23a735..bb16250 100644 (file)
@@ -607,6 +607,7 @@ static int snd_mixart_hw_params(struct snd_pcm_substream *subs,
        /* set the format to the board */
        err = mixart_set_format(stream, format);
        if(err < 0) {
+               mutex_unlock(&mgr->setup_mutex);
                return err;
        }