aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2009-05-19 00:08:20 -0400
committerDavid S. Miller <davem@davemloft.net>2009-05-19 00:08:20 -0400
commitbb803cfbecb03a0cf8dc7e1864f18dda6631af00 (patch)
tree6c0989693bea6f50cfa5c6bb14f52ec19668def3 /drivers
parent3878fb6fdbceecca20b15748f807340854220f06 (diff)
parent511e11e396dc596825ce04d53d7f6d579404bc01 (diff)
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: drivers/scsi/fcoe/fcoe.c
Diffstat (limited to 'drivers')
-rw-r--r--drivers/Makefile4
-rw-r--r--drivers/acpi/acpica/Makefile27
-rw-r--r--drivers/acpi/acpica/aclocal.h7
-rw-r--r--drivers/acpi/acpica/hwsleep.c43
-rw-r--r--drivers/acpi/acpica/hwvalid.c86
-rw-r--r--drivers/acpi/acpica/rscalc.c7
-rw-r--r--drivers/acpi/acpica/rscreate.c27
-rw-r--r--drivers/acpi/bus.c2
-rw-r--r--drivers/acpi/button.c140
-rw-r--r--drivers/acpi/ec.c1
-rw-r--r--drivers/acpi/osl.c4
-rw-r--r--drivers/acpi/processor_idle.c60
-rw-r--r--drivers/acpi/processor_throttling.c25
-rw-r--r--drivers/acpi/sleep.c35
-rw-r--r--drivers/acpi/system.c11
-rw-r--r--drivers/acpi/thermal.c2
-rw-r--r--drivers/acpi/video.c92
-rw-r--r--drivers/ata/ata_piix.c18
-rw-r--r--drivers/ata/libata-core.c29
-rw-r--r--drivers/ata/libata-eh.c34
-rw-r--r--drivers/ata/libata-scsi.c68
-rw-r--r--drivers/ata/libata-sff.c27
-rw-r--r--drivers/ata/pata_hpt37x.c22
-rw-r--r--drivers/ata/pata_legacy.c37
-rw-r--r--drivers/ata/pata_ninja32.c4
-rw-r--r--drivers/ata/pata_pdc202xx_old.c6
-rw-r--r--drivers/ata/pata_via.c74
-rw-r--r--drivers/ata/sata_fsl.c15
-rw-r--r--drivers/ata/sata_mv.c127
-rw-r--r--drivers/ata/sata_sx4.c180
-rw-r--r--drivers/atm/solos-pci.c2
-rw-r--r--drivers/base/base.h2
-rw-r--r--drivers/base/core.c6
-rw-r--r--drivers/base/dd.c1
-rw-r--r--drivers/base/iommu.c2
-rw-r--r--drivers/base/platform.c255
-rw-r--r--drivers/block/brd.c5
-rw-r--r--drivers/block/cciss.c2
-rw-r--r--drivers/block/hd.c17
-rw-r--r--drivers/block/mg_disk.c19
-rw-r--r--drivers/block/ub.c20
-rw-r--r--drivers/block/umem.c1
-rw-r--r--drivers/char/agp/generic.c4
-rw-r--r--drivers/char/agp/intel-agp.c3
-rw-r--r--drivers/char/hpet.c2
-rw-r--r--drivers/char/hw_random/virtio-rng.c4
-rw-r--r--drivers/char/ipmi/ipmi_msghandler.c211
-rw-r--r--drivers/char/ipmi/ipmi_si_intf.c150
-rw-r--r--drivers/char/mem.c27
-rw-r--r--drivers/char/random.c19
-rw-r--r--drivers/char/sysrq.c5
-rw-r--r--drivers/char/vt.c2
-rw-r--r--drivers/char/vt_ioctl.c6
-rw-r--r--drivers/clocksource/acpi_pm.c12
-rw-r--r--drivers/clocksource/cyclone.c2
-rw-r--r--drivers/clocksource/scx200_hrt.c2
-rw-r--r--drivers/clocksource/tcb_clksrc.c2
-rw-r--r--drivers/dma/dmaengine.c17
-rw-r--r--drivers/dma/dmatest.c4
-rw-r--r--drivers/dma/ioat_dma.c45
-rw-r--r--drivers/dma/ipu/ipu_idmac.c7
-rw-r--r--drivers/edac/edac_core.h12
-rw-r--r--drivers/edac/edac_device.c2
-rw-r--r--drivers/edac/edac_mc.c2
-rw-r--r--drivers/edac/edac_pci.c2
-rw-r--r--drivers/edac/mpc85xx_edac.c2
-rw-r--r--drivers/firmware/iscsi_ibft.c4
-rw-r--r--drivers/gpu/drm/Kconfig7
-rw-r--r--drivers/gpu/drm/drm_crtc_helper.c19
-rw-r--r--drivers/gpu/drm/drm_drv.c3
-rw-r--r--drivers/gpu/drm/drm_stub.c26
-rw-r--r--drivers/gpu/drm/drm_sysfs.c3
-rw-r--r--drivers/gpu/drm/i915/i915_dma.c21
-rw-r--r--drivers/gpu/drm/i915/i915_drv.c2
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h26
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c200
-rw-r--r--drivers/gpu/drm/i915/i915_gem_debugfs.c93
-rw-r--r--drivers/gpu/drm/i915/i915_gem_tiling.c112
-rw-r--r--drivers/gpu/drm/i915/i915_irq.c2
-rw-r--r--drivers/gpu/drm/i915/i915_opregion.c15
-rw-r--r--drivers/gpu/drm/i915/i915_reg.h2
-rw-r--r--drivers/gpu/drm/i915/i915_suspend.c24
-rw-r--r--drivers/gpu/drm/i915/intel_crt.c2
-rw-r--r--drivers/gpu/drm/i915/intel_display.c42
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h4
-rw-r--r--drivers/gpu/drm/i915/intel_fb.c6
-rw-r--r--drivers/gpu/drm/i915/intel_hdmi.c40
-rw-r--r--drivers/gpu/drm/i915/intel_i2c.c17
-rw-r--r--drivers/gpu/drm/i915/intel_lvds.c54
-rw-r--r--drivers/gpu/drm/i915/intel_modes.c6
-rw-r--r--drivers/gpu/drm/i915/intel_sdvo.c22
-rw-r--r--drivers/gpu/drm/r128/r128_cce.c6
-rw-r--r--drivers/gpu/drm/radeon/radeon_drv.h3
-rw-r--r--drivers/gpu/drm/via/via_dma.c12
-rw-r--r--drivers/hid/hid-apple.c2
-rw-r--r--drivers/hid/hid-core.c4
-rw-r--r--drivers/hid/hid-ids.h6
-rw-r--r--drivers/hid/hid-lg.c2
-rw-r--r--drivers/hid/hidraw.c12
-rw-r--r--drivers/hid/usbhid/hid-core.c4
-rw-r--r--drivers/hid/usbhid/hid-quirks.c3
-rw-r--r--drivers/hwmon/Kconfig10
-rw-r--r--drivers/hwmon/Makefile1
-rw-r--r--drivers/hwmon/asus_atk0110.c2
-rw-r--r--drivers/hwmon/hp_accel.c1
-rw-r--r--drivers/hwmon/sht15.c692
-rw-r--r--drivers/hwmon/w83781d.c3
-rw-r--r--drivers/i2c/algos/i2c-algo-bit.c2
-rw-r--r--drivers/i2c/algos/i2c-algo-pca.c11
-rw-r--r--drivers/i2c/busses/Kconfig2
-rw-r--r--drivers/i2c/busses/i2c-ali1535.c2
-rw-r--r--drivers/i2c/busses/i2c-ali15x3.c2
-rw-r--r--drivers/i2c/busses/i2c-amd756.c4
-rw-r--r--drivers/i2c/busses/i2c-cpm.c16
-rw-r--r--drivers/i2c/busses/i2c-i801.c8
-rw-r--r--drivers/i2c/busses/i2c-isch.c2
-rw-r--r--drivers/i2c/busses/i2c-mpc.c34
-rw-r--r--drivers/i2c/busses/i2c-nforce2.c2
-rw-r--r--drivers/i2c/busses/i2c-pxa.c6
-rw-r--r--drivers/i2c/busses/i2c-sis5595.c2
-rw-r--r--drivers/i2c/busses/i2c-sis630.c2
-rw-r--r--drivers/i2c/busses/i2c-sis96x.c2
-rw-r--r--drivers/ide/cs5536.c1
-rw-r--r--drivers/ide/hpt366.c14
-rw-r--r--drivers/ide/icside.c2
-rw-r--r--drivers/ide/ide-cd.c11
-rw-r--r--drivers/ide/ide-gd.c17
-rw-r--r--drivers/ide/ide-io.c11
-rw-r--r--drivers/ide/ide-tape.c6
-rw-r--r--drivers/ide/palm_bk3710.c93
-rw-r--r--drivers/ide/piix.c1
-rw-r--r--drivers/ide/pmac.c2
-rw-r--r--drivers/infiniband/hw/cxgb3/cxio_hal.c1
-rw-r--r--drivers/infiniband/hw/cxgb3/iwch_cm.c8
-rw-r--r--drivers/infiniband/hw/cxgb3/iwch_qp.c1
-rw-r--r--drivers/infiniband/hw/ipath/ipath_fs.c2
-rw-r--r--drivers/infiniband/hw/mlx4/mlx4_ib.h1
-rw-r--r--drivers/infiniband/hw/mlx4/mr.c10
-rw-r--r--drivers/infiniband/hw/mlx4/qp.c2
-rw-r--r--drivers/infiniband/hw/mthca/mthca_cmd.c16
-rw-r--r--drivers/infiniband/hw/nes/nes.h4
-rw-r--r--drivers/infiniband/hw/nes/nes_cm.c84
-rw-r--r--drivers/infiniband/hw/nes/nes_cm.h1
-rw-r--r--drivers/infiniband/hw/nes/nes_hw.c30
-rw-r--r--drivers/infiniband/hw/nes/nes_verbs.c67
-rw-r--r--drivers/infiniband/hw/nes/nes_verbs.h1
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_ib.c6
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_main.c5
-rw-r--r--drivers/infiniband/ulp/iser/iscsi_iser.c1
-rw-r--r--drivers/input/ff-memless.c2
-rw-r--r--drivers/input/gameport/gameport.c14
-rw-r--r--drivers/input/input.c37
-rw-r--r--drivers/input/joydev.c8
-rw-r--r--drivers/input/keyboard/atkbd.c36
-rw-r--r--drivers/input/keyboard/bf54x-keys.c2
-rw-r--r--drivers/input/keyboard/omap-keypad.c16
-rw-r--r--drivers/input/misc/Kconfig2
-rw-r--r--drivers/input/mouse/alps.c1
-rw-r--r--drivers/input/mouse/appletouch.c24
-rw-r--r--drivers/input/mouse/bcm5974.c108
-rw-r--r--drivers/input/mouse/elantech.c48
-rw-r--r--drivers/input/mouse/elantech.h5
-rw-r--r--drivers/input/mouse/lifebook.c6
-rw-r--r--drivers/input/mouse/maplemouse.c43
-rw-r--r--drivers/input/mouse/pc110pad.c1
-rw-r--r--drivers/input/serio/hp_sdc.c24
-rw-r--r--drivers/input/serio/i8042-x86ia64io.h28
-rw-r--r--drivers/input/serio/i8042.c37
-rw-r--r--drivers/input/serio/sa1111ps2.c2
-rw-r--r--drivers/input/tablet/wacom.h5
-rw-r--r--drivers/input/tablet/wacom_sys.c13
-rw-r--r--drivers/input/touchscreen/ad7877.c4
-rw-r--r--drivers/input/touchscreen/ad7879.c3
-rw-r--r--drivers/input/touchscreen/ads7846.c12
-rw-r--r--drivers/input/touchscreen/da9034-ts.c29
-rw-r--r--drivers/input/touchscreen/mainstone-wm97xx.c7
-rw-r--r--drivers/input/touchscreen/tsc2007.c7
-rw-r--r--drivers/input/touchscreen/ucb1400_ts.c2
-rw-r--r--drivers/input/touchscreen/wm97xx-core.c3
-rw-r--r--drivers/isdn/capi/capifs.c11
-rw-r--r--drivers/isdn/hisax/st5481_usb.c9
-rw-r--r--drivers/lguest/lg.h3
-rw-r--r--drivers/lguest/segments.c13
-rw-r--r--drivers/lguest/x86/core.c9
-rw-r--r--drivers/macintosh/Kconfig2
-rw-r--r--drivers/macintosh/mediabay.c3
-rw-r--r--drivers/md/bitmap.c36
-rw-r--r--drivers/md/dm-bio-list.h117
-rw-r--r--drivers/md/dm-delay.c2
-rw-r--r--drivers/md/dm-mpath.c1
-rw-r--r--drivers/md/dm-raid1.c1
-rw-r--r--drivers/md/dm-region-hash.c1
-rw-r--r--drivers/md/dm-snap.c1
-rw-r--r--drivers/md/dm.c1
-rw-r--r--drivers/md/md.c111
-rw-r--r--drivers/md/md.h21
-rw-r--r--drivers/md/raid1.c1
-rw-r--r--drivers/md/raid10.c13
-rw-r--r--drivers/md/raid5.c7
-rw-r--r--drivers/media/radio/radio-sf16fmi.c2
-rw-r--r--drivers/media/radio/radio-sf16fmr2.c2
-rw-r--r--drivers/media/radio/radio-si470x.c2
-rw-r--r--drivers/media/video/au0828/au0828-core.c6
-rw-r--r--drivers/media/video/cafe_ccic.c1
-rw-r--r--drivers/media/video/cx18/cx18-audio.c2
-rw-r--r--drivers/media/video/cx18/cx18-i2c.c16
-rw-r--r--drivers/media/video/cx231xx/Kconfig44
-rw-r--r--drivers/media/video/cx23885/cx23885-cards.c4
-rw-r--r--drivers/media/video/cx23885/cx23885-dvb.c3
-rw-r--r--drivers/media/video/ivtv/ivtv-driver.c9
-rw-r--r--drivers/media/video/ivtv/ivtv-gpio.c4
-rw-r--r--drivers/media/video/ivtv/ivtv-ioctl.c5
-rw-r--r--drivers/media/video/ivtv/ivtv-irq.c2
-rw-r--r--drivers/media/video/ivtv/ivtv-yuv.c3
-rw-r--r--drivers/media/video/ivtv/ivtvfb.c3
-rw-r--r--drivers/media/video/mx3_camera.c4
-rw-r--r--drivers/media/video/pvrusb2/pvrusb2-hdw.c1
-rw-r--r--drivers/media/video/pwc/pwc-ctrl.c238
-rw-r--r--drivers/media/video/s2255drv.c2
-rw-r--r--drivers/media/video/saa5246a.c3
-rw-r--r--drivers/media/video/saa5249.c4
-rw-r--r--drivers/media/video/uvc/uvc_driver.c9
-rw-r--r--drivers/media/video/uvc/uvc_video.c2
-rw-r--r--drivers/media/video/v4l2-ioctl.c45
-rw-r--r--drivers/media/video/zoran/zoran_driver.c28
-rw-r--r--drivers/message/fusion/mptbase.c2
-rw-r--r--drivers/misc/eeprom/at24.c8
-rw-r--r--drivers/misc/eeprom/at25.c5
-rw-r--r--drivers/misc/isl29003.c9
-rw-r--r--drivers/misc/sgi-gru/grufile.c2
-rw-r--r--drivers/misc/sgi-xp/xp_main.c12
-rw-r--r--drivers/misc/sgi-xp/xpc.h254
-rw-r--r--drivers/misc/sgi-xp/xpc_channel.c138
-rw-r--r--drivers/misc/sgi-xp/xpc_main.c128
-rw-r--r--drivers/misc/sgi-xp/xpc_partition.c20
-rw-r--r--drivers/misc/sgi-xp/xpc_sn2.c164
-rw-r--r--drivers/misc/sgi-xp/xpc_uv.c257
-rw-r--r--drivers/mmc/card/block.c8
-rw-r--r--drivers/mmc/core/core.c4
-rw-r--r--drivers/mmc/host/mmci.c2
-rw-r--r--drivers/mmc/host/mvsdio.c11
-rw-r--r--drivers/mmc/host/omap.c2
-rw-r--r--drivers/mmc/host/sdhci-pci.c8
-rw-r--r--drivers/mmc/host/sdhci.h2
-rw-r--r--drivers/mtd/devices/m25p80.c26
-rw-r--r--drivers/mtd/mtdcore.c18
-rw-r--r--drivers/mtd/mtdsuper.c3
-rw-r--r--drivers/mtd/nand/cafe_nand.c2
-rw-r--r--drivers/net/arm/ep93xx_eth.c2
-rw-r--r--drivers/net/arm/ixp4xx_eth.c31
-rw-r--r--drivers/net/atl1c/atl1c_main.c4
-rw-r--r--drivers/net/benet/be.h14
-rw-r--r--drivers/net/benet/be_main.c14
-rw-r--r--drivers/net/bonding/bond_3ad.c11
-rw-r--r--drivers/net/bonding/bond_main.c8
-rw-r--r--drivers/net/jme.c8
-rw-r--r--drivers/net/meth.c27
-rw-r--r--drivers/net/mlx4/en_cq.c4
-rw-r--r--drivers/net/mlx4/en_rx.c1
-rw-r--r--drivers/net/mlx4/main.c2
-rw-r--r--drivers/net/mv643xx_eth.c41
-rw-r--r--drivers/net/vxge/vxge-traffic.c2
-rw-r--r--drivers/net/wan/ixp4xx_hss.c4
-rw-r--r--drivers/net/wimax/i2400m/rx.c5
-rw-r--r--drivers/net/wireless/airo.c10
-rw-r--r--drivers/net/wireless/ath/ath5k/base.c22
-rw-r--r--drivers/net/wireless/ath/ath9k/pci.c4
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-6000.c8
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c2
-rw-r--r--drivers/net/wireless/p54/p54pci.c4
-rw-r--r--drivers/net/wireless/rtl818x/rtl8187.h57
-rw-r--r--drivers/net/wireless/rtl818x/rtl8187_dev.c13
-rw-r--r--drivers/net/wireless/rtl818x/rtl8187_rtl8225.c8
-rw-r--r--drivers/parisc/superio.c3
-rw-r--r--drivers/pci/access.c4
-rw-r--r--drivers/pci/htirq.c1
-rw-r--r--drivers/pci/intel-iommu.c13
-rw-r--r--drivers/pci/msi.c8
-rw-r--r--drivers/pci/pci-sysfs.c12
-rw-r--r--drivers/pci/pci.c70
-rw-r--r--drivers/pci/pcie/aer/aerdrv.h3
-rw-r--r--drivers/pci/pcie/portdrv_pci.c2
-rw-r--r--drivers/pci/probe.c6
-rw-r--r--drivers/pci/quirks.c1
-rw-r--r--drivers/pci/setup-bus.c6
-rw-r--r--drivers/pci/slot.c4
-rw-r--r--drivers/pcmcia/pxa2xx_sharpsl.c3
-rw-r--r--drivers/platform/x86/asus-laptop.c6
-rw-r--r--drivers/platform/x86/eeepc-laptop.c47
-rw-r--r--drivers/platform/x86/sony-laptop.c27
-rw-r--r--drivers/platform/x86/thinkpad_acpi.c81
-rw-r--r--drivers/pnp/pnpacpi/core.c8
-rw-r--r--drivers/regulator/bq24022.c3
-rw-r--r--drivers/regulator/core.c19
-rw-r--r--drivers/regulator/virtual.c8
-rw-r--r--drivers/rtc/Kconfig2
-rw-r--r--drivers/rtc/rtc-cmos.c20
-rw-r--r--drivers/rtc/rtc-sh.c67
-rw-r--r--drivers/rtc/rtc-twl4030.c4
-rw-r--r--drivers/s390/block/dasd.c37
-rw-r--r--drivers/s390/block/dasd_eckd.c16
-rw-r--r--drivers/s390/char/tape.h2
-rw-r--r--drivers/s390/char/tape_34xx.c8
-rw-r--r--drivers/s390/char/tape_3590.c8
-rw-r--r--drivers/s390/char/tape_core.c5
-rw-r--r--drivers/s390/cio/qdio_main.c43
-rw-r--r--drivers/s390/scsi/zfcp_aux.c11
-rw-r--r--drivers/s390/scsi/zfcp_ccw.c1
-rw-r--r--drivers/s390/scsi/zfcp_cfdc.c3
-rw-r--r--drivers/s390/scsi/zfcp_def.h2
-rw-r--r--drivers/s390/scsi/zfcp_erp.c60
-rw-r--r--drivers/s390/scsi/zfcp_ext.h2
-rw-r--r--drivers/s390/scsi/zfcp_fc.c33
-rw-r--r--drivers/s390/scsi/zfcp_fsf.c59
-rw-r--r--drivers/s390/scsi/zfcp_scsi.c44
-rw-r--r--drivers/s390/scsi/zfcp_sysfs.c21
-rw-r--r--drivers/sbus/char/jsflash.c15
-rw-r--r--drivers/sbus/char/uctrl.c7
-rw-r--r--drivers/scsi/3w-9xxx.c8
-rw-r--r--drivers/scsi/a4000t.c2
-rw-r--r--drivers/scsi/aacraid/aachba.c2
-rw-r--r--drivers/scsi/cxgb3i/cxgb3i.h2
-rw-r--r--drivers/scsi/cxgb3i/cxgb3i_ddp.c32
-rw-r--r--drivers/scsi/cxgb3i/cxgb3i_iscsi.c5
-rw-r--r--drivers/scsi/cxgb3i/cxgb3i_offload.c4
-rw-r--r--drivers/scsi/cxgb3i/cxgb3i_pdu.c19
-rw-r--r--drivers/scsi/fcoe/fcoe.c59
-rw-r--r--drivers/scsi/fcoe/libfcoe.c2
-rw-r--r--drivers/scsi/ipr.c13
-rw-r--r--drivers/scsi/iscsi_tcp.c3
-rw-r--r--drivers/scsi/libfc/fc_disc.c54
-rw-r--r--drivers/scsi/libfc/fc_elsct.c2
-rw-r--r--drivers/scsi/libfc/fc_fcp.c7
-rw-r--r--drivers/scsi/libfc/fc_lport.c74
-rw-r--r--drivers/scsi/libfc/fc_rport.c82
-rw-r--r--drivers/scsi/libiscsi.c10
-rw-r--r--drivers/scsi/libiscsi_tcp.c5
-rw-r--r--drivers/scsi/lpfc/lpfc.h2
-rw-r--r--drivers/scsi/lpfc/lpfc_attr.c266
-rw-r--r--drivers/scsi/lpfc/lpfc_crtn.h2
-rw-r--r--drivers/scsi/lpfc/lpfc_debugfs.c45
-rw-r--r--drivers/scsi/lpfc/lpfc_disc.h1
-rw-r--r--drivers/scsi/lpfc/lpfc_els.c245
-rw-r--r--drivers/scsi/lpfc/lpfc_hbadisc.c88
-rw-r--r--drivers/scsi/lpfc/lpfc_init.c205
-rw-r--r--drivers/scsi/lpfc/lpfc_logmsg.h2
-rw-r--r--drivers/scsi/lpfc/lpfc_mbox.c63
-rw-r--r--drivers/scsi/lpfc/lpfc_mem.c19
-rw-r--r--drivers/scsi/lpfc/lpfc_nportdisc.c18
-rw-r--r--drivers/scsi/lpfc/lpfc_scsi.c128
-rw-r--r--drivers/scsi/lpfc/lpfc_sli.c401
-rw-r--r--drivers/scsi/lpfc/lpfc_version.h6
-rw-r--r--drivers/scsi/lpfc/lpfc_vport.c10
-rw-r--r--drivers/scsi/mpt2sas/mpt2sas_base.c85
-rw-r--r--drivers/scsi/mpt2sas/mpt2sas_base.h30
-rw-r--r--drivers/scsi/mpt2sas/mpt2sas_ctl.c216
-rw-r--r--drivers/scsi/mpt2sas/mpt2sas_ctl.h7
-rw-r--r--drivers/scsi/mpt2sas/mpt2sas_scsih.c29
-rw-r--r--drivers/scsi/osd/osd_initiator.c125
-rw-r--r--drivers/scsi/osd/osd_uld.c20
-rw-r--r--drivers/scsi/scsi_lib.c4
-rw-r--r--drivers/scsi/scsi_scan.c2
-rw-r--r--drivers/scsi/scsi_wait_scan.c11
-rw-r--r--drivers/scsi/sd.c15
-rw-r--r--drivers/scsi/sg.c13
-rw-r--r--drivers/scsi/sr_ioctl.c5
-rw-r--r--drivers/serial/8250_pci.c2
-rw-r--r--drivers/serial/bfin_5xx.c6
-rw-r--r--drivers/serial/crisv10.c173
-rw-r--r--drivers/serial/jsm/jsm.h2
-rw-r--r--drivers/serial/jsm/jsm_driver.c1
-rw-r--r--drivers/serial/nwpserial.c4
-rw-r--r--drivers/serial/s3c6400.c1
-rw-r--r--drivers/serial/samsung.c65
-rw-r--r--drivers/serial/samsung.h4
-rw-r--r--drivers/sh/intc.c35
-rw-r--r--drivers/spi/pxa2xx_spi.c18
-rw-r--r--drivers/spi/spi.c22
-rw-r--r--drivers/staging/android/binder.c201
-rw-r--r--drivers/staging/at76_usb/at76_usb.c20
-rw-r--r--drivers/staging/b3dfg/b3dfg.c2
-rw-r--r--drivers/staging/comedi/TODO1
-rw-r--r--drivers/staging/epl/VirtualEthernetLinux.c17
-rw-r--r--drivers/staging/et131x/et131x_netdev.c23
-rw-r--r--drivers/staging/go7007/go7007-driver.c26
-rw-r--r--drivers/staging/go7007/go7007-i2c.c83
-rw-r--r--drivers/staging/go7007/go7007-priv.h1
-rw-r--r--drivers/staging/go7007/go7007-usb.c14
-rw-r--r--drivers/staging/go7007/s2250-board.c71
-rw-r--r--drivers/staging/go7007/wis-i2c.h9
-rw-r--r--drivers/staging/go7007/wis-ov7640.c56
-rw-r--r--drivers/staging/go7007/wis-saa7113.c60
-rw-r--r--drivers/staging/go7007/wis-saa7115.c60
-rw-r--r--drivers/staging/go7007/wis-sony-tuner.c62
-rw-r--r--drivers/staging/go7007/wis-tw2804.c57
-rw-r--r--drivers/staging/go7007/wis-tw9903.c60
-rw-r--r--drivers/staging/go7007/wis-uda1342.c52
-rw-r--r--drivers/staging/line6/audio.c9
-rw-r--r--drivers/staging/otus/usbdrv.c47
-rw-r--r--drivers/staging/otus/zdusb.c3
-rw-r--r--drivers/staging/otus/zdusb.h4
-rw-r--r--drivers/staging/pohmelfs/config.c61
-rw-r--r--drivers/staging/pohmelfs/dir.c24
-rw-r--r--drivers/staging/pohmelfs/inode.c137
-rw-r--r--drivers/staging/pohmelfs/lock.c3
-rw-r--r--drivers/staging/pohmelfs/net.c72
-rw-r--r--drivers/staging/pohmelfs/netfs.h21
-rw-r--r--drivers/staging/pohmelfs/trans.c33
-rw-r--r--drivers/staging/rt2860/rt_main_dev.c25
-rw-r--r--drivers/staging/rt2870/rt2870.h2
-rw-r--r--drivers/staging/rt2870/rt_main_dev.c28
-rw-r--r--drivers/staging/rt3070/rt_main_dev.c29
-rw-r--r--drivers/staging/rtl8187se/r8180.h2
-rw-r--r--drivers/staging/rtl8187se/r8180_core.c46
-rw-r--r--drivers/staging/slicoss/README31
-rw-r--r--drivers/staging/slicoss/slicoss.c25
-rw-r--r--drivers/staging/stlc45xx/Kconfig2
-rw-r--r--drivers/staging/sxg/sxg.c127
-rw-r--r--drivers/staging/uc2322/aten2011.c28
-rw-r--r--drivers/staging/winbond/wbusb.c9
-rw-r--r--drivers/staging/wlan-ng/p80211netdev.c20
-rw-r--r--drivers/thermal/thermal_sys.c8
-rw-r--r--drivers/uio/uio_cif.c1
-rw-r--r--drivers/usb/Makefile2
-rw-r--r--drivers/usb/class/cdc-acm.c4
-rw-r--r--drivers/usb/class/cdc-wdm.c27
-rw-r--r--drivers/usb/core/buffer.c2
-rw-r--r--drivers/usb/core/devio.c2
-rw-r--r--drivers/usb/core/hcd.c26
-rw-r--r--drivers/usb/core/hcd.h14
-rw-r--r--drivers/usb/core/message.c58
-rw-r--r--drivers/usb/core/usb.c2
-rw-r--r--drivers/usb/gadget/ci13xxx_udc.c5
-rw-r--r--drivers/usb/gadget/file_storage.c20
-rw-r--r--drivers/usb/gadget/omap_udc.c3
-rw-r--r--drivers/usb/gadget/u_ether.c8
-rw-r--r--drivers/usb/gadget/usbstring.c6
-rw-r--r--drivers/usb/host/ehci-sched.c2
-rw-r--r--drivers/usb/host/whci/asl.c15
-rw-r--r--drivers/usb/host/whci/hcd.c23
-rw-r--r--drivers/usb/host/whci/pzl.c16
-rw-r--r--drivers/usb/host/whci/qset.c24
-rw-r--r--drivers/usb/host/whci/whcd.h1
-rw-r--r--drivers/usb/host/whci/whci-hc.h1
-rw-r--r--drivers/usb/musb/cppi_dma.c23
-rw-r--r--drivers/usb/musb/musb_core.c14
-rw-r--r--drivers/usb/musb/musb_gadget.c33
-rw-r--r--drivers/usb/musb/musb_host.c406
-rw-r--r--drivers/usb/musb/musbhsdma.c66
-rw-r--r--drivers/usb/musb/omap2430.c1
-rw-r--r--drivers/usb/musb/tusb6010.c1
-rw-r--r--drivers/usb/musb/tusb6010.h1
-rw-r--r--drivers/usb/otg/nop-usb-xceiv.c4
-rw-r--r--drivers/usb/otg/otg.c3
-rw-r--r--drivers/usb/serial/cyberjack.c7
-rw-r--r--drivers/usb/serial/cypress_m8.c4
-rw-r--r--drivers/usb/serial/empeg.c6
-rw-r--r--drivers/usb/serial/ftdi_sio.c21
-rw-r--r--drivers/usb/serial/ftdi_sio.h13
-rw-r--r--drivers/usb/serial/garmin_gps.c8
-rw-r--r--drivers/usb/serial/generic.c6
-rw-r--r--drivers/usb/serial/io_edgeport.c8
-rw-r--r--drivers/usb/serial/io_ti.c8
-rw-r--r--drivers/usb/serial/ipaq.c6
-rw-r--r--drivers/usb/serial/ipw.c3
-rw-r--r--drivers/usb/serial/iuu_phoenix.c1
-rw-r--r--drivers/usb/serial/kobil_sct.c6
-rw-r--r--drivers/usb/serial/mos7720.c7
-rw-r--r--drivers/usb/serial/mos7840.c43
-rw-r--r--drivers/usb/serial/moto_modem.c1
-rw-r--r--drivers/usb/serial/opticon.c8
-rw-r--r--drivers/usb/serial/option.c8
-rw-r--r--drivers/usb/serial/qcserial.c21
-rw-r--r--drivers/usb/serial/sierra.c24
-rw-r--r--drivers/usb/serial/ti_usb_3410_5052.c40
-rw-r--r--drivers/usb/serial/usb-serial.c104
-rw-r--r--drivers/usb/serial/visor.c8
-rw-r--r--drivers/usb/storage/Makefile3
-rw-r--r--drivers/usb/storage/transport.c4
-rw-r--r--drivers/usb/storage/unusual_devs.h25
-rw-r--r--drivers/usb/wusbcore/devconnect.c21
-rw-r--r--drivers/usb/wusbcore/wusbhc.c32
-rw-r--r--drivers/video/Kconfig23
-rw-r--r--drivers/video/Makefile1
-rw-r--r--drivers/video/asiliantfb.c1
-rw-r--r--drivers/video/aty/radeon_base.c4
-rw-r--r--drivers/video/backlight/backlight.c3
-rw-r--r--drivers/video/backlight/lcd.c3
-rw-r--r--drivers/video/cfbfillrect.c36
-rw-r--r--drivers/video/cirrusfb.c4
-rw-r--r--drivers/video/console/fbcon.c55
-rw-r--r--drivers/video/console/vgacon.c2
-rw-r--r--drivers/video/efifb.c7
-rw-r--r--drivers/video/fb_draw.h21
-rw-r--r--drivers/video/fbmem.c19
-rw-r--r--drivers/video/gbefb.c14
-rw-r--r--drivers/video/intelfb/intelfb.h2
-rw-r--r--drivers/video/intelfb/intelfb_i2c.c1
-rw-r--r--drivers/video/intelfb/intelfbdrv.c1
-rw-r--r--drivers/video/intelfb/intelfbhw.c5
-rw-r--r--drivers/video/logo/logo_linux_clut224.ppm4428
-rw-r--r--drivers/video/logo/logo_linux_vga16.ppm4339
-rw-r--r--drivers/video/mx3fb.c14
-rw-r--r--drivers/video/pxafb.c16
-rw-r--r--drivers/video/s3fb.c6
-rw-r--r--drivers/video/sa1100fb.c15
-rw-r--r--drivers/video/sa1100fb.h7
-rw-r--r--drivers/video/sis/sis_main.c2
-rw-r--r--drivers/video/skeletonfb.c8
-rw-r--r--drivers/video/sysfillrect.c30
-rw-r--r--drivers/video/uvesafb.c35
-rw-r--r--drivers/video/vfb.c11
-rw-r--r--drivers/video/via/viafbdev.c6
-rw-r--r--drivers/virtio/virtio_balloon.c3
-rw-r--r--drivers/watchdog/orion5x_wdt.c1
-rw-r--r--drivers/xen/balloon.c3
-rw-r--r--drivers/xen/cpu_hotplug.c40
-rw-r--r--drivers/xen/manage.c5
518 files changed, 11854 insertions, 10661 deletions
diff --git a/drivers/Makefile b/drivers/Makefile
index 2618a6169a13..1266ead6ace0 100644
--- a/drivers/Makefile
+++ b/drivers/Makefile
@@ -36,7 +36,7 @@ obj-$(CONFIG_FB_INTEL) += video/intelfb/
36 36
37obj-y += serial/ 37obj-y += serial/
38obj-$(CONFIG_PARPORT) += parport/ 38obj-$(CONFIG_PARPORT) += parport/
39obj-y += base/ block/ misc/ mfd/ media/ 39obj-y += base/ block/ misc/ mfd/
40obj-$(CONFIG_NUBUS) += nubus/ 40obj-$(CONFIG_NUBUS) += nubus/
41obj-y += macintosh/ 41obj-y += macintosh/
42obj-$(CONFIG_IDE) += ide/ 42obj-$(CONFIG_IDE) += ide/
@@ -71,7 +71,7 @@ obj-$(CONFIG_GAMEPORT) += input/gameport/
71obj-$(CONFIG_INPUT) += input/ 71obj-$(CONFIG_INPUT) += input/
72obj-$(CONFIG_I2O) += message/ 72obj-$(CONFIG_I2O) += message/
73obj-$(CONFIG_RTC_LIB) += rtc/ 73obj-$(CONFIG_RTC_LIB) += rtc/
74obj-y += i2c/ 74obj-y += i2c/ media/
75obj-$(CONFIG_W1) += w1/ 75obj-$(CONFIG_W1) += w1/
76obj-$(CONFIG_POWER_SUPPLY) += power/ 76obj-$(CONFIG_POWER_SUPPLY) += power/
77obj-$(CONFIG_HWMON) += hwmon/ 77obj-$(CONFIG_HWMON) += hwmon/
diff --git a/drivers/acpi/acpica/Makefile b/drivers/acpi/acpica/Makefile
index 17e50824a6f1..72ac28da14e3 100644
--- a/drivers/acpi/acpica/Makefile
+++ b/drivers/acpi/acpica/Makefile
@@ -5,40 +5,43 @@
5ccflags-y := -Os 5ccflags-y := -Os
6ccflags-$(CONFIG_ACPI_DEBUG) += -DACPI_DEBUG_OUTPUT 6ccflags-$(CONFIG_ACPI_DEBUG) += -DACPI_DEBUG_OUTPUT
7 7
8obj-y := dsfield.o dsmthdat.o dsopcode.o dswexec.o dswscope.o \ 8# use acpi.o to put all files here into acpi.o modparam namespace
9obj-y += acpi.o
10
11acpi-y := dsfield.o dsmthdat.o dsopcode.o dswexec.o dswscope.o \
9 dsmethod.o dsobject.o dsutils.o dswload.o dswstate.o \ 12 dsmethod.o dsobject.o dsutils.o dswload.o dswstate.o \
10 dsinit.o 13 dsinit.o
11 14
12obj-y += evevent.o evregion.o evsci.o evxfevnt.o \ 15acpi-y += evevent.o evregion.o evsci.o evxfevnt.o \
13 evmisc.o evrgnini.o evxface.o evxfregn.o \ 16 evmisc.o evrgnini.o evxface.o evxfregn.o \
14 evgpe.o evgpeblk.o 17 evgpe.o evgpeblk.o
15 18
16obj-y += exconfig.o exfield.o exnames.o exoparg6.o exresolv.o exstorob.o\ 19acpi-y += exconfig.o exfield.o exnames.o exoparg6.o exresolv.o exstorob.o\
17 exconvrt.o exfldio.o exoparg1.o exprep.o exresop.o exsystem.o\ 20 exconvrt.o exfldio.o exoparg1.o exprep.o exresop.o exsystem.o\
18 excreate.o exmisc.o exoparg2.o exregion.o exstore.o exutils.o \ 21 excreate.o exmisc.o exoparg2.o exregion.o exstore.o exutils.o \
19 exdump.o exmutex.o exoparg3.o exresnte.o exstoren.o 22 exdump.o exmutex.o exoparg3.o exresnte.o exstoren.o
20 23
21obj-y += hwacpi.o hwgpe.o hwregs.o hwsleep.o hwxface.o hwvalid.o 24acpi-y += hwacpi.o hwgpe.o hwregs.o hwsleep.o hwxface.o hwvalid.o
22 25
23obj-$(ACPI_FUTURE_USAGE) += hwtimer.o 26acpi-$(ACPI_FUTURE_USAGE) += hwtimer.o
24 27
25obj-y += nsaccess.o nsload.o nssearch.o nsxfeval.o \ 28acpi-y += nsaccess.o nsload.o nssearch.o nsxfeval.o \
26 nsalloc.o nseval.o nsnames.o nsutils.o nsxfname.o \ 29 nsalloc.o nseval.o nsnames.o nsutils.o nsxfname.o \
27 nsdump.o nsinit.o nsobject.o nswalk.o nsxfobj.o \ 30 nsdump.o nsinit.o nsobject.o nswalk.o nsxfobj.o \
28 nsparse.o nspredef.o 31 nsparse.o nspredef.o
29 32
30obj-$(ACPI_FUTURE_USAGE) += nsdumpdv.o 33acpi-$(ACPI_FUTURE_USAGE) += nsdumpdv.o
31 34
32obj-y += psargs.o psparse.o psloop.o pstree.o pswalk.o \ 35acpi-y += psargs.o psparse.o psloop.o pstree.o pswalk.o \
33 psopcode.o psscope.o psutils.o psxface.o 36 psopcode.o psscope.o psutils.o psxface.o
34 37
35obj-y += rsaddr.o rscreate.o rsinfo.o rsio.o rslist.o rsmisc.o rsxface.o \ 38acpi-y += rsaddr.o rscreate.o rsinfo.o rsio.o rslist.o rsmisc.o rsxface.o \
36 rscalc.o rsirq.o rsmemory.o rsutils.o 39 rscalc.o rsirq.o rsmemory.o rsutils.o
37 40
38obj-$(ACPI_FUTURE_USAGE) += rsdump.o 41acpi-$(ACPI_FUTURE_USAGE) += rsdump.o
39 42
40obj-y += tbxface.o tbinstal.o tbutils.o tbfind.o tbfadt.o tbxfroot.o 43acpi-y += tbxface.o tbinstal.o tbutils.o tbfind.o tbfadt.o tbxfroot.o
41 44
42obj-y += utalloc.o utdebug.o uteval.o utinit.o utmisc.o utxface.o \ 45acpi-y += utalloc.o utdebug.o uteval.o utinit.o utmisc.o utxface.o \
43 utcopy.o utdelete.o utglobal.o utmath.o utobject.o \ 46 utcopy.o utdelete.o utglobal.o utmath.o utobject.o \
44 utstate.o utmutex.o utobject.o utresrc.o utlock.o 47 utstate.o utmutex.o utobject.o utresrc.o utlock.o
diff --git a/drivers/acpi/acpica/aclocal.h b/drivers/acpi/acpica/aclocal.h
index 772ee5c4ccca..2ec394a328e9 100644
--- a/drivers/acpi/acpica/aclocal.h
+++ b/drivers/acpi/acpica/aclocal.h
@@ -787,7 +787,12 @@ struct acpi_bit_register_info {
787 787
788/* For control registers, both ignored and reserved bits must be preserved */ 788/* For control registers, both ignored and reserved bits must be preserved */
789 789
790#define ACPI_PM1_CONTROL_IGNORED_BITS 0x0201 /* Bits 9, 0(SCI_EN) */ 790/*
791 * The ACPI spec says to ignore PM1_CTL.SCI_EN (bit 0)
792 * but we need to be able to write ACPI_BITREG_SCI_ENABLE directly
793 * as a BIOS workaround on some machines.
794 */
795#define ACPI_PM1_CONTROL_IGNORED_BITS 0x0200 /* Bits 9 */
791#define ACPI_PM1_CONTROL_RESERVED_BITS 0xC1F8 /* Bits 14-15, 3-8 */ 796#define ACPI_PM1_CONTROL_RESERVED_BITS 0xC1F8 /* Bits 14-15, 3-8 */
792#define ACPI_PM1_CONTROL_PRESERVED_BITS \ 797#define ACPI_PM1_CONTROL_PRESERVED_BITS \
793 (ACPI_PM1_CONTROL_IGNORED_BITS | ACPI_PM1_CONTROL_RESERVED_BITS) 798 (ACPI_PM1_CONTROL_IGNORED_BITS | ACPI_PM1_CONTROL_RESERVED_BITS)
diff --git a/drivers/acpi/acpica/hwsleep.c b/drivers/acpi/acpica/hwsleep.c
index baa5fc05e124..db307a356f08 100644
--- a/drivers/acpi/acpica/hwsleep.c
+++ b/drivers/acpi/acpica/hwsleep.c
@@ -211,6 +211,12 @@ acpi_status acpi_enter_sleep_state_prep(u8 sleep_state)
211 211
212ACPI_EXPORT_SYMBOL(acpi_enter_sleep_state_prep) 212ACPI_EXPORT_SYMBOL(acpi_enter_sleep_state_prep)
213 213
214static unsigned int gts, bfs;
215module_param(gts, uint, 0644);
216module_param(bfs, uint, 0644);
217MODULE_PARM_DESC(gts, "Enable evaluation of _GTS on suspend.");
218MODULE_PARM_DESC(bfs, "Enable evaluation of _BFS on resume".);
219
214/******************************************************************************* 220/*******************************************************************************
215 * 221 *
216 * FUNCTION: acpi_enter_sleep_state 222 * FUNCTION: acpi_enter_sleep_state
@@ -278,16 +284,18 @@ acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state)
278 return_ACPI_STATUS(status); 284 return_ACPI_STATUS(status);
279 } 285 }
280 286
281 /* Execute the _GTS method */ 287 if (gts) {
288 /* Execute the _GTS method */
282 289
283 arg_list.count = 1; 290 arg_list.count = 1;
284 arg_list.pointer = &arg; 291 arg_list.pointer = &arg;
285 arg.type = ACPI_TYPE_INTEGER; 292 arg.type = ACPI_TYPE_INTEGER;
286 arg.integer.value = sleep_state; 293 arg.integer.value = sleep_state;
287 294
288 status = acpi_evaluate_object(NULL, METHOD_NAME__GTS, &arg_list, NULL); 295 status = acpi_evaluate_object(NULL, METHOD_NAME__GTS, &arg_list, NULL);
289 if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) { 296 if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
290 return_ACPI_STATUS(status); 297 return_ACPI_STATUS(status);
298 }
291 } 299 }
292 300
293 /* Get current value of PM1A control */ 301 /* Get current value of PM1A control */
@@ -513,18 +521,19 @@ acpi_status acpi_leave_sleep_state_prep(u8 sleep_state)
513 } 521 }
514 } 522 }
515 523
516 /* Execute the _BFS method */ 524 if (bfs) {
525 /* Execute the _BFS method */
517 526
518 arg_list.count = 1; 527 arg_list.count = 1;
519 arg_list.pointer = &arg; 528 arg_list.pointer = &arg;
520 arg.type = ACPI_TYPE_INTEGER; 529 arg.type = ACPI_TYPE_INTEGER;
521 arg.integer.value = sleep_state; 530 arg.integer.value = sleep_state;
522 531
523 status = acpi_evaluate_object(NULL, METHOD_NAME__BFS, &arg_list, NULL); 532 status = acpi_evaluate_object(NULL, METHOD_NAME__BFS, &arg_list, NULL);
524 if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) { 533 if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
525 ACPI_EXCEPTION((AE_INFO, status, "During Method _BFS")); 534 ACPI_EXCEPTION((AE_INFO, status, "During Method _BFS"));
535 }
526 } 536 }
527
528 return_ACPI_STATUS(status); 537 return_ACPI_STATUS(status);
529} 538}
530 539
diff --git a/drivers/acpi/acpica/hwvalid.c b/drivers/acpi/acpica/hwvalid.c
index 7737afb157c3..ec33f270c5b7 100644
--- a/drivers/acpi/acpica/hwvalid.c
+++ b/drivers/acpi/acpica/hwvalid.c
@@ -90,6 +90,7 @@ static const struct acpi_port_info acpi_protected_ports[] = {
90 {"PIT2", 0x0048, 0x004B, ACPI_OSI_WIN_XP}, 90 {"PIT2", 0x0048, 0x004B, ACPI_OSI_WIN_XP},
91 {"RTC", 0x0070, 0x0071, ACPI_OSI_WIN_XP}, 91 {"RTC", 0x0070, 0x0071, ACPI_OSI_WIN_XP},
92 {"CMOS", 0x0074, 0x0076, ACPI_OSI_WIN_XP}, 92 {"CMOS", 0x0074, 0x0076, ACPI_OSI_WIN_XP},
93 {"DMA1", 0x0081, 0x0083, ACPI_OSI_WIN_XP},
93 {"DMA1L", 0x0087, 0x0087, ACPI_OSI_WIN_XP}, 94 {"DMA1L", 0x0087, 0x0087, ACPI_OSI_WIN_XP},
94 {"DMA2", 0x0089, 0x008B, ACPI_OSI_WIN_XP}, 95 {"DMA2", 0x0089, 0x008B, ACPI_OSI_WIN_XP},
95 {"DMA2L", 0x008F, 0x008F, ACPI_OSI_WIN_XP}, 96 {"DMA2L", 0x008F, 0x008F, ACPI_OSI_WIN_XP},
@@ -151,7 +152,7 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width)
151 ACPI_ERROR((AE_INFO, 152 ACPI_ERROR((AE_INFO,
152 "Illegal I/O port address/length above 64K: 0x%p/%X", 153 "Illegal I/O port address/length above 64K: 0x%p/%X",
153 ACPI_CAST_PTR(void, address), byte_width)); 154 ACPI_CAST_PTR(void, address), byte_width));
154 return_ACPI_STATUS(AE_AML_ILLEGAL_ADDRESS); 155 return_ACPI_STATUS(AE_LIMIT);
155 } 156 }
156 157
157 /* Exit if requested address is not within the protected port table */ 158 /* Exit if requested address is not within the protected port table */
@@ -178,11 +179,12 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width)
178 /* Port illegality may depend on the _OSI calls made by the BIOS */ 179 /* Port illegality may depend on the _OSI calls made by the BIOS */
179 180
180 if (acpi_gbl_osi_data >= port_info->osi_dependency) { 181 if (acpi_gbl_osi_data >= port_info->osi_dependency) {
181 ACPI_ERROR((AE_INFO, 182 ACPI_DEBUG_PRINT((ACPI_DB_IO,
182 "Denied AML access to port 0x%p/%X (%s 0x%.4X-0x%.4X)", 183 "Denied AML access to port 0x%p/%X (%s 0x%.4X-0x%.4X)",
183 ACPI_CAST_PTR(void, address), 184 ACPI_CAST_PTR(void, address),
184 byte_width, port_info->name, 185 byte_width, port_info->name,
185 port_info->start, port_info->end)); 186 port_info->start,
187 port_info->end));
186 188
187 return_ACPI_STATUS(AE_AML_ILLEGAL_ADDRESS); 189 return_ACPI_STATUS(AE_AML_ILLEGAL_ADDRESS);
188 } 190 }
@@ -206,7 +208,7 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width)
206 * Value Where value is placed 208 * Value Where value is placed
207 * Width Number of bits 209 * Width Number of bits
208 * 210 *
209 * RETURN: Value read from port 211 * RETURN: Status and value read from port
210 * 212 *
211 * DESCRIPTION: Read data from an I/O port or register. This is a front-end 213 * DESCRIPTION: Read data from an I/O port or register. This is a front-end
212 * to acpi_os_read_port that performs validation on both the port 214 * to acpi_os_read_port that performs validation on both the port
@@ -217,14 +219,43 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width)
217acpi_status acpi_hw_read_port(acpi_io_address address, u32 *value, u32 width) 219acpi_status acpi_hw_read_port(acpi_io_address address, u32 *value, u32 width)
218{ 220{
219 acpi_status status; 221 acpi_status status;
222 u32 one_byte;
223 u32 i;
224
225 /* Validate the entire request and perform the I/O */
220 226
221 status = acpi_hw_validate_io_request(address, width); 227 status = acpi_hw_validate_io_request(address, width);
222 if (ACPI_FAILURE(status)) { 228 if (ACPI_SUCCESS(status)) {
229 status = acpi_os_read_port(address, value, width);
223 return status; 230 return status;
224 } 231 }
225 232
226 status = acpi_os_read_port(address, value, width); 233 if (status != AE_AML_ILLEGAL_ADDRESS) {
227 return status; 234 return status;
235 }
236
237 /*
238 * There has been a protection violation within the request. Fall
239 * back to byte granularity port I/O and ignore the failing bytes.
240 * This provides Windows compatibility.
241 */
242 for (i = 0, *value = 0; i < width; i += 8) {
243
244 /* Validate and read one byte */
245
246 if (acpi_hw_validate_io_request(address, 8) == AE_OK) {
247 status = acpi_os_read_port(address, &one_byte, 8);
248 if (ACPI_FAILURE(status)) {
249 return status;
250 }
251
252 *value |= (one_byte << i);
253 }
254
255 address++;
256 }
257
258 return AE_OK;
228} 259}
229 260
230/****************************************************************************** 261/******************************************************************************
@@ -235,7 +266,7 @@ acpi_status acpi_hw_read_port(acpi_io_address address, u32 *value, u32 width)
235 * Value Value to write 266 * Value Value to write
236 * Width Number of bits 267 * Width Number of bits
237 * 268 *
238 * RETURN: None 269 * RETURN: Status
239 * 270 *
240 * DESCRIPTION: Write data to an I/O port or register. This is a front-end 271 * DESCRIPTION: Write data to an I/O port or register. This is a front-end
241 * to acpi_os_write_port that performs validation on both the port 272 * to acpi_os_write_port that performs validation on both the port
@@ -246,12 +277,39 @@ acpi_status acpi_hw_read_port(acpi_io_address address, u32 *value, u32 width)
246acpi_status acpi_hw_write_port(acpi_io_address address, u32 value, u32 width) 277acpi_status acpi_hw_write_port(acpi_io_address address, u32 value, u32 width)
247{ 278{
248 acpi_status status; 279 acpi_status status;
280 u32 i;
281
282 /* Validate the entire request and perform the I/O */
249 283
250 status = acpi_hw_validate_io_request(address, width); 284 status = acpi_hw_validate_io_request(address, width);
251 if (ACPI_FAILURE(status)) { 285 if (ACPI_SUCCESS(status)) {
286 status = acpi_os_write_port(address, value, width);
252 return status; 287 return status;
253 } 288 }
254 289
255 status = acpi_os_write_port(address, value, width); 290 if (status != AE_AML_ILLEGAL_ADDRESS) {
256 return status; 291 return status;
292 }
293
294 /*
295 * There has been a protection violation within the request. Fall
296 * back to byte granularity port I/O and ignore the failing bytes.
297 * This provides Windows compatibility.
298 */
299 for (i = 0; i < width; i += 8) {
300
301 /* Validate and write one byte */
302
303 if (acpi_hw_validate_io_request(address, 8) == AE_OK) {
304 status =
305 acpi_os_write_port(address, (value >> i) & 0xFF, 8);
306 if (ACPI_FAILURE(status)) {
307 return status;
308 }
309 }
310
311 address++;
312 }
313
314 return AE_OK;
257} 315}
diff --git a/drivers/acpi/acpica/rscalc.c b/drivers/acpi/acpica/rscalc.c
index b6667ff059e5..88b5a2c4814d 100644
--- a/drivers/acpi/acpica/rscalc.c
+++ b/drivers/acpi/acpica/rscalc.c
@@ -543,6 +543,13 @@ acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object,
543 543
544 package_element = *top_object_list; 544 package_element = *top_object_list;
545 545
546 /* We must have a valid Package object */
547
548 if (!package_element ||
549 (package_element->common.type != ACPI_TYPE_PACKAGE)) {
550 return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
551 }
552
546 /* 553 /*
547 * The sub_object_list will now point to an array of the 554 * The sub_object_list will now point to an array of the
548 * four IRQ elements: Address, Pin, Source and source_index 555 * four IRQ elements: Address, Pin, Source and source_index
diff --git a/drivers/acpi/acpica/rscreate.c b/drivers/acpi/acpica/rscreate.c
index 663f692fffcf..a3c23d686d5f 100644
--- a/drivers/acpi/acpica/rscreate.c
+++ b/drivers/acpi/acpica/rscreate.c
@@ -191,8 +191,6 @@ acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
191 user_prt = ACPI_CAST_PTR(struct acpi_pci_routing_table, buffer); 191 user_prt = ACPI_CAST_PTR(struct acpi_pci_routing_table, buffer);
192 192
193 for (index = 0; index < number_of_elements; index++) { 193 for (index = 0; index < number_of_elements; index++) {
194 int source_name_index = 2;
195 int source_index_index = 3;
196 194
197 /* 195 /*
198 * Point user_prt past this current structure 196 * Point user_prt past this current structure
@@ -261,27 +259,6 @@ acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
261 return_ACPI_STATUS(AE_BAD_DATA); 259 return_ACPI_STATUS(AE_BAD_DATA);
262 } 260 }
263 261
264 /*
265 * If BIOS erroneously reversed the _PRT source_name and source_index,
266 * then reverse them back.
267 */
268 if ((sub_object_list[3])->common.type !=
269 ACPI_TYPE_INTEGER) {
270 if (acpi_gbl_enable_interpreter_slack) {
271 source_name_index = 3;
272 source_index_index = 2;
273 printk(KERN_WARNING
274 "ACPI: Handling Garbled _PRT entry\n");
275 } else {
276 ACPI_ERROR((AE_INFO,
277 "(PRT[%X].source_index) Need Integer, found %s",
278 index,
279 acpi_ut_get_object_type_name
280 (sub_object_list[3])));
281 return_ACPI_STATUS(AE_BAD_DATA);
282 }
283 }
284
285 user_prt->pin = (u32) obj_desc->integer.value; 262 user_prt->pin = (u32) obj_desc->integer.value;
286 263
287 /* 264 /*
@@ -304,7 +281,7 @@ acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
304 * 3) Third subobject: Dereference the PRT.source_name 281 * 3) Third subobject: Dereference the PRT.source_name
305 * The name may be unresolved (slack mode), so allow a null object 282 * The name may be unresolved (slack mode), so allow a null object
306 */ 283 */
307 obj_desc = sub_object_list[source_name_index]; 284 obj_desc = sub_object_list[2];
308 if (obj_desc) { 285 if (obj_desc) {
309 switch (obj_desc->common.type) { 286 switch (obj_desc->common.type) {
310 case ACPI_TYPE_LOCAL_REFERENCE: 287 case ACPI_TYPE_LOCAL_REFERENCE:
@@ -378,7 +355,7 @@ acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
378 355
379 /* 4) Fourth subobject: Dereference the PRT.source_index */ 356 /* 4) Fourth subobject: Dereference the PRT.source_index */
380 357
381 obj_desc = sub_object_list[source_index_index]; 358 obj_desc = sub_object_list[3];
382 if (obj_desc->common.type != ACPI_TYPE_INTEGER) { 359 if (obj_desc->common.type != ACPI_TYPE_INTEGER) {
383 ACPI_ERROR((AE_INFO, 360 ACPI_ERROR((AE_INFO,
384 "(PRT[%X].SourceIndex) Need Integer, found %s", 361 "(PRT[%X].SourceIndex) Need Integer, found %s",
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index e8f7b64e92da..ae862f1798dc 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -312,7 +312,7 @@ int acpi_bus_set_power(acpi_handle handle, int state)
312 end: 312 end:
313 if (result) 313 if (result)
314 printk(KERN_WARNING PREFIX 314 printk(KERN_WARNING PREFIX
315 "Transitioning device [%s] to D%d\n", 315 "Device [%s] failed to transition to D%d\n",
316 device->pnp.bus_id, state); 316 device->pnp.bus_id, state);
317 else { 317 else {
318 device->power.state = state; 318 device->power.state = state;
diff --git a/drivers/acpi/button.c b/drivers/acpi/button.c
index d73c94b8441d..9195deba9d94 100644
--- a/drivers/acpi/button.c
+++ b/drivers/acpi/button.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * acpi_button.c - ACPI Button Driver ($Revision: 30 $) 2 * button.c - ACPI Button Driver
3 * 3 *
4 * Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com> 4 * Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com>
5 * Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com> 5 * Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
@@ -41,17 +41,13 @@
41 41
42#define ACPI_BUTTON_SUBCLASS_POWER "power" 42#define ACPI_BUTTON_SUBCLASS_POWER "power"
43#define ACPI_BUTTON_HID_POWER "PNP0C0C" 43#define ACPI_BUTTON_HID_POWER "PNP0C0C"
44#define ACPI_BUTTON_DEVICE_NAME_POWER "Power Button (CM)" 44#define ACPI_BUTTON_DEVICE_NAME_POWER "Power Button"
45#define ACPI_BUTTON_DEVICE_NAME_POWERF "Power Button (FF)"
46#define ACPI_BUTTON_TYPE_POWER 0x01 45#define ACPI_BUTTON_TYPE_POWER 0x01
47#define ACPI_BUTTON_TYPE_POWERF 0x02
48 46
49#define ACPI_BUTTON_SUBCLASS_SLEEP "sleep" 47#define ACPI_BUTTON_SUBCLASS_SLEEP "sleep"
50#define ACPI_BUTTON_HID_SLEEP "PNP0C0E" 48#define ACPI_BUTTON_HID_SLEEP "PNP0C0E"
51#define ACPI_BUTTON_DEVICE_NAME_SLEEP "Sleep Button (CM)" 49#define ACPI_BUTTON_DEVICE_NAME_SLEEP "Sleep Button"
52#define ACPI_BUTTON_DEVICE_NAME_SLEEPF "Sleep Button (FF)"
53#define ACPI_BUTTON_TYPE_SLEEP 0x03 50#define ACPI_BUTTON_TYPE_SLEEP 0x03
54#define ACPI_BUTTON_TYPE_SLEEPF 0x04
55 51
56#define ACPI_BUTTON_SUBCLASS_LID "lid" 52#define ACPI_BUTTON_SUBCLASS_LID "lid"
57#define ACPI_BUTTON_HID_LID "PNP0C0D" 53#define ACPI_BUTTON_HID_LID "PNP0C0D"
@@ -95,7 +91,6 @@ static struct acpi_driver acpi_button_driver = {
95}; 91};
96 92
97struct acpi_button { 93struct acpi_button {
98 struct acpi_device *device; /* Fixed button kludge */
99 unsigned int type; 94 unsigned int type;
100 struct input_dev *input; 95 struct input_dev *input;
101 char phys[32]; /* for input device */ 96 char phys[32]; /* for input device */
@@ -126,14 +121,10 @@ static struct proc_dir_entry *acpi_button_dir;
126 121
127static int acpi_button_info_seq_show(struct seq_file *seq, void *offset) 122static int acpi_button_info_seq_show(struct seq_file *seq, void *offset)
128{ 123{
129 struct acpi_button *button = seq->private; 124 struct acpi_device *device = seq->private;
130
131 if (!button || !button->device)
132 return 0;
133 125
134 seq_printf(seq, "type: %s\n", 126 seq_printf(seq, "type: %s\n",
135 acpi_device_name(button->device)); 127 acpi_device_name(device));
136
137 return 0; 128 return 0;
138} 129}
139 130
@@ -144,14 +135,11 @@ static int acpi_button_info_open_fs(struct inode *inode, struct file *file)
144 135
145static int acpi_button_state_seq_show(struct seq_file *seq, void *offset) 136static int acpi_button_state_seq_show(struct seq_file *seq, void *offset)
146{ 137{
147 struct acpi_button *button = seq->private; 138 struct acpi_device *device = seq->private;
148 acpi_status status; 139 acpi_status status;
149 unsigned long long state; 140 unsigned long long state;
150 141
151 if (!button || !button->device) 142 status = acpi_evaluate_integer(device->handle, "_LID", NULL, &state);
152 return 0;
153
154 status = acpi_evaluate_integer(button->device->handle, "_LID", NULL, &state);
155 seq_printf(seq, "state: %s\n", 143 seq_printf(seq, "state: %s\n",
156 ACPI_FAILURE(status) ? "unsupported" : 144 ACPI_FAILURE(status) ? "unsupported" :
157 (state ? "open" : "closed")); 145 (state ? "open" : "closed"));
@@ -169,24 +157,17 @@ static struct proc_dir_entry *acpi_lid_dir;
169 157
170static int acpi_button_add_fs(struct acpi_device *device) 158static int acpi_button_add_fs(struct acpi_device *device)
171{ 159{
160 struct acpi_button *button = acpi_driver_data(device);
172 struct proc_dir_entry *entry = NULL; 161 struct proc_dir_entry *entry = NULL;
173 struct acpi_button *button;
174
175 if (!device || !acpi_driver_data(device))
176 return -EINVAL;
177
178 button = acpi_driver_data(device);
179 162
180 switch (button->type) { 163 switch (button->type) {
181 case ACPI_BUTTON_TYPE_POWER: 164 case ACPI_BUTTON_TYPE_POWER:
182 case ACPI_BUTTON_TYPE_POWERF:
183 if (!acpi_power_dir) 165 if (!acpi_power_dir)
184 acpi_power_dir = proc_mkdir(ACPI_BUTTON_SUBCLASS_POWER, 166 acpi_power_dir = proc_mkdir(ACPI_BUTTON_SUBCLASS_POWER,
185 acpi_button_dir); 167 acpi_button_dir);
186 entry = acpi_power_dir; 168 entry = acpi_power_dir;
187 break; 169 break;
188 case ACPI_BUTTON_TYPE_SLEEP: 170 case ACPI_BUTTON_TYPE_SLEEP:
189 case ACPI_BUTTON_TYPE_SLEEPF:
190 if (!acpi_sleep_dir) 171 if (!acpi_sleep_dir)
191 acpi_sleep_dir = proc_mkdir(ACPI_BUTTON_SUBCLASS_SLEEP, 172 acpi_sleep_dir = proc_mkdir(ACPI_BUTTON_SUBCLASS_SLEEP,
192 acpi_button_dir); 173 acpi_button_dir);
@@ -210,8 +191,7 @@ static int acpi_button_add_fs(struct acpi_device *device)
210 /* 'info' [R] */ 191 /* 'info' [R] */
211 entry = proc_create_data(ACPI_BUTTON_FILE_INFO, 192 entry = proc_create_data(ACPI_BUTTON_FILE_INFO,
212 S_IRUGO, acpi_device_dir(device), 193 S_IRUGO, acpi_device_dir(device),
213 &acpi_button_info_fops, 194 &acpi_button_info_fops, device);
214 acpi_driver_data(device));
215 if (!entry) 195 if (!entry)
216 return -ENODEV; 196 return -ENODEV;
217 197
@@ -219,8 +199,7 @@ static int acpi_button_add_fs(struct acpi_device *device)
219 if (button->type == ACPI_BUTTON_TYPE_LID) { 199 if (button->type == ACPI_BUTTON_TYPE_LID) {
220 entry = proc_create_data(ACPI_BUTTON_FILE_STATE, 200 entry = proc_create_data(ACPI_BUTTON_FILE_STATE,
221 S_IRUGO, acpi_device_dir(device), 201 S_IRUGO, acpi_device_dir(device),
222 &acpi_button_state_fops, 202 &acpi_button_state_fops, device);
223 acpi_driver_data(device));
224 if (!entry) 203 if (!entry)
225 return -ENODEV; 204 return -ENODEV;
226 } 205 }
@@ -250,15 +229,16 @@ static int acpi_button_remove_fs(struct acpi_device *device)
250/* -------------------------------------------------------------------------- 229/* --------------------------------------------------------------------------
251 Driver Interface 230 Driver Interface
252 -------------------------------------------------------------------------- */ 231 -------------------------------------------------------------------------- */
253static int acpi_lid_send_state(struct acpi_button *button) 232static int acpi_lid_send_state(struct acpi_device *device)
254{ 233{
234 struct acpi_button *button = acpi_driver_data(device);
255 unsigned long long state; 235 unsigned long long state;
256 acpi_status status; 236 acpi_status status;
257 237
258 status = acpi_evaluate_integer(button->device->handle, "_LID", NULL, 238 status = acpi_evaluate_integer(device->handle, "_LID", NULL, &state);
259 &state);
260 if (ACPI_FAILURE(status)) 239 if (ACPI_FAILURE(status))
261 return -ENODEV; 240 return -ENODEV;
241
262 /* input layer checks if event is redundant */ 242 /* input layer checks if event is redundant */
263 input_report_switch(button->input, SW_LID, !state); 243 input_report_switch(button->input, SW_LID, !state);
264 input_sync(button->input); 244 input_sync(button->input);
@@ -270,9 +250,6 @@ static void acpi_button_notify(struct acpi_device *device, u32 event)
270 struct acpi_button *button = acpi_driver_data(device); 250 struct acpi_button *button = acpi_driver_data(device);
271 struct input_dev *input; 251 struct input_dev *input;
272 252
273 if (!button || !button->device)
274 return;
275
276 switch (event) { 253 switch (event) {
277 case ACPI_FIXED_HARDWARE_EVENT: 254 case ACPI_FIXED_HARDWARE_EVENT:
278 event = ACPI_BUTTON_NOTIFY_STATUS; 255 event = ACPI_BUTTON_NOTIFY_STATUS;
@@ -280,7 +257,7 @@ static void acpi_button_notify(struct acpi_device *device, u32 event)
280 case ACPI_BUTTON_NOTIFY_STATUS: 257 case ACPI_BUTTON_NOTIFY_STATUS:
281 input = button->input; 258 input = button->input;
282 if (button->type == ACPI_BUTTON_TYPE_LID) { 259 if (button->type == ACPI_BUTTON_TYPE_LID) {
283 acpi_lid_send_state(button); 260 acpi_lid_send_state(device);
284 } else { 261 } else {
285 int keycode = test_bit(KEY_SLEEP, input->keybit) ? 262 int keycode = test_bit(KEY_SLEEP, input->keybit) ?
286 KEY_SLEEP : KEY_POWER; 263 KEY_SLEEP : KEY_POWER;
@@ -291,43 +268,35 @@ static void acpi_button_notify(struct acpi_device *device, u32 event)
291 input_sync(input); 268 input_sync(input);
292 } 269 }
293 270
294 acpi_bus_generate_proc_event(button->device, event, 271 acpi_bus_generate_proc_event(device, event, ++button->pushed);
295 ++button->pushed);
296 break; 272 break;
297 default: 273 default:
298 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 274 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
299 "Unsupported event [0x%x]\n", event)); 275 "Unsupported event [0x%x]\n", event));
300 break; 276 break;
301 } 277 }
302
303 return;
304} 278}
305 279
306static int acpi_button_resume(struct acpi_device *device) 280static int acpi_button_resume(struct acpi_device *device)
307{ 281{
308 struct acpi_button *button; 282 struct acpi_button *button = acpi_driver_data(device);
309 if (!device) 283
310 return -EINVAL; 284 if (button->type == ACPI_BUTTON_TYPE_LID)
311 button = acpi_driver_data(device); 285 return acpi_lid_send_state(device);
312 if (button && button->type == ACPI_BUTTON_TYPE_LID)
313 return acpi_lid_send_state(button);
314 return 0; 286 return 0;
315} 287}
316 288
317static int acpi_button_add(struct acpi_device *device) 289static int acpi_button_add(struct acpi_device *device)
318{ 290{
319 int error;
320 struct acpi_button *button; 291 struct acpi_button *button;
321 struct input_dev *input; 292 struct input_dev *input;
322 293 char *hid, *name, *class;
323 if (!device) 294 int error;
324 return -EINVAL;
325 295
326 button = kzalloc(sizeof(struct acpi_button), GFP_KERNEL); 296 button = kzalloc(sizeof(struct acpi_button), GFP_KERNEL);
327 if (!button) 297 if (!button)
328 return -ENOMEM; 298 return -ENOMEM;
329 299
330 button->device = device;
331 device->driver_data = button; 300 device->driver_data = button;
332 301
333 button->input = input = input_allocate_device(); 302 button->input = input = input_allocate_device();
@@ -336,40 +305,29 @@ static int acpi_button_add(struct acpi_device *device)
336 goto err_free_button; 305 goto err_free_button;
337 } 306 }
338 307
339 /* 308 hid = acpi_device_hid(device);
340 * Determine the button type (via hid), as fixed-feature buttons 309 name = acpi_device_name(device);
341 * need to be handled a bit differently than generic-space. 310 class = acpi_device_class(device);
342 */ 311
343 if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_POWER)) { 312 if (!strcmp(hid, ACPI_BUTTON_HID_POWER) ||
313 !strcmp(hid, ACPI_BUTTON_HID_POWERF)) {
344 button->type = ACPI_BUTTON_TYPE_POWER; 314 button->type = ACPI_BUTTON_TYPE_POWER;
345 strcpy(acpi_device_name(device), ACPI_BUTTON_DEVICE_NAME_POWER); 315 strcpy(name, ACPI_BUTTON_DEVICE_NAME_POWER);
346 sprintf(acpi_device_class(device), "%s/%s", 316 sprintf(class, "%s/%s",
347 ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_POWER);
348 } else if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_POWERF)) {
349 button->type = ACPI_BUTTON_TYPE_POWERF;
350 strcpy(acpi_device_name(device),
351 ACPI_BUTTON_DEVICE_NAME_POWERF);
352 sprintf(acpi_device_class(device), "%s/%s",
353 ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_POWER); 317 ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_POWER);
354 } else if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_SLEEP)) { 318 } else if (!strcmp(hid, ACPI_BUTTON_HID_SLEEP) ||
319 !strcmp(hid, ACPI_BUTTON_HID_SLEEPF)) {
355 button->type = ACPI_BUTTON_TYPE_SLEEP; 320 button->type = ACPI_BUTTON_TYPE_SLEEP;
356 strcpy(acpi_device_name(device), ACPI_BUTTON_DEVICE_NAME_SLEEP); 321 strcpy(name, ACPI_BUTTON_DEVICE_NAME_SLEEP);
357 sprintf(acpi_device_class(device), "%s/%s", 322 sprintf(class, "%s/%s",
358 ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_SLEEP);
359 } else if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_SLEEPF)) {
360 button->type = ACPI_BUTTON_TYPE_SLEEPF;
361 strcpy(acpi_device_name(device),
362 ACPI_BUTTON_DEVICE_NAME_SLEEPF);
363 sprintf(acpi_device_class(device), "%s/%s",
364 ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_SLEEP); 323 ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_SLEEP);
365 } else if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_LID)) { 324 } else if (!strcmp(hid, ACPI_BUTTON_HID_LID)) {
366 button->type = ACPI_BUTTON_TYPE_LID; 325 button->type = ACPI_BUTTON_TYPE_LID;
367 strcpy(acpi_device_name(device), ACPI_BUTTON_DEVICE_NAME_LID); 326 strcpy(name, ACPI_BUTTON_DEVICE_NAME_LID);
368 sprintf(acpi_device_class(device), "%s/%s", 327 sprintf(class, "%s/%s",
369 ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_LID); 328 ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_LID);
370 } else { 329 } else {
371 printk(KERN_ERR PREFIX "Unsupported hid [%s]\n", 330 printk(KERN_ERR PREFIX "Unsupported hid [%s]\n", hid);
372 acpi_device_hid(device));
373 error = -ENODEV; 331 error = -ENODEV;
374 goto err_free_input; 332 goto err_free_input;
375 } 333 }
@@ -378,10 +336,9 @@ static int acpi_button_add(struct acpi_device *device)
378 if (error) 336 if (error)
379 goto err_free_input; 337 goto err_free_input;
380 338
381 snprintf(button->phys, sizeof(button->phys), 339 snprintf(button->phys, sizeof(button->phys), "%s/button/input0", hid);
382 "%s/button/input0", acpi_device_hid(device));
383 340
384 input->name = acpi_device_name(device); 341 input->name = name;
385 input->phys = button->phys; 342 input->phys = button->phys;
386 input->id.bustype = BUS_HOST; 343 input->id.bustype = BUS_HOST;
387 input->id.product = button->type; 344 input->id.product = button->type;
@@ -389,13 +346,11 @@ static int acpi_button_add(struct acpi_device *device)
389 346
390 switch (button->type) { 347 switch (button->type) {
391 case ACPI_BUTTON_TYPE_POWER: 348 case ACPI_BUTTON_TYPE_POWER:
392 case ACPI_BUTTON_TYPE_POWERF:
393 input->evbit[0] = BIT_MASK(EV_KEY); 349 input->evbit[0] = BIT_MASK(EV_KEY);
394 set_bit(KEY_POWER, input->keybit); 350 set_bit(KEY_POWER, input->keybit);
395 break; 351 break;
396 352
397 case ACPI_BUTTON_TYPE_SLEEP: 353 case ACPI_BUTTON_TYPE_SLEEP:
398 case ACPI_BUTTON_TYPE_SLEEPF:
399 input->evbit[0] = BIT_MASK(EV_KEY); 354 input->evbit[0] = BIT_MASK(EV_KEY);
400 set_bit(KEY_SLEEP, input->keybit); 355 set_bit(KEY_SLEEP, input->keybit);
401 break; 356 break;
@@ -410,7 +365,7 @@ static int acpi_button_add(struct acpi_device *device)
410 if (error) 365 if (error)
411 goto err_remove_fs; 366 goto err_remove_fs;
412 if (button->type == ACPI_BUTTON_TYPE_LID) 367 if (button->type == ACPI_BUTTON_TYPE_LID)
413 acpi_lid_send_state(button); 368 acpi_lid_send_state(device);
414 369
415 if (device->wakeup.flags.valid) { 370 if (device->wakeup.flags.valid) {
416 /* Button's GPE is run-wake GPE */ 371 /* Button's GPE is run-wake GPE */
@@ -422,9 +377,7 @@ static int acpi_button_add(struct acpi_device *device)
422 device->wakeup.state.enabled = 1; 377 device->wakeup.state.enabled = 1;
423 } 378 }
424 379
425 printk(KERN_INFO PREFIX "%s [%s]\n", 380 printk(KERN_INFO PREFIX "%s [%s]\n", name, acpi_device_bid(device));
426 acpi_device_name(device), acpi_device_bid(device));
427
428 return 0; 381 return 0;
429 382
430 err_remove_fs: 383 err_remove_fs:
@@ -438,17 +391,11 @@ static int acpi_button_add(struct acpi_device *device)
438 391
439static int acpi_button_remove(struct acpi_device *device, int type) 392static int acpi_button_remove(struct acpi_device *device, int type)
440{ 393{
441 struct acpi_button *button; 394 struct acpi_button *button = acpi_driver_data(device);
442
443 if (!device || !acpi_driver_data(device))
444 return -EINVAL;
445
446 button = acpi_driver_data(device);
447 395
448 acpi_button_remove_fs(device); 396 acpi_button_remove_fs(device);
449 input_unregister_device(button->input); 397 input_unregister_device(button->input);
450 kfree(button); 398 kfree(button);
451
452 return 0; 399 return 0;
453} 400}
454 401
@@ -459,6 +406,7 @@ static int __init acpi_button_init(void)
459 acpi_button_dir = proc_mkdir(ACPI_BUTTON_CLASS, acpi_root_dir); 406 acpi_button_dir = proc_mkdir(ACPI_BUTTON_CLASS, acpi_root_dir);
460 if (!acpi_button_dir) 407 if (!acpi_button_dir)
461 return -ENODEV; 408 return -ENODEV;
409
462 result = acpi_bus_register_driver(&acpi_button_driver); 410 result = acpi_bus_register_driver(&acpi_button_driver);
463 if (result < 0) { 411 if (result < 0) {
464 remove_proc_entry(ACPI_BUTTON_CLASS, acpi_root_dir); 412 remove_proc_entry(ACPI_BUTTON_CLASS, acpi_root_dir);
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 04e90443eff7..391f331674c7 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -1065,6 +1065,7 @@ static int acpi_ec_resume(struct acpi_device *device)
1065 struct acpi_ec *ec = acpi_driver_data(device); 1065 struct acpi_ec *ec = acpi_driver_data(device);
1066 /* Enable use of GPE back */ 1066 /* Enable use of GPE back */
1067 clear_bit(EC_FLAGS_NO_GPE, &ec->flags); 1067 clear_bit(EC_FLAGS_NO_GPE, &ec->flags);
1068 set_bit(EC_FLAGS_GPE_MODE, &ec->flags);
1068 acpi_enable_gpe(NULL, ec->gpe); 1069 acpi_enable_gpe(NULL, ec->gpe);
1069 return 0; 1070 return 0;
1070} 1071}
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
index d59f08ecaf16..d916bea729f1 100644
--- a/drivers/acpi/osl.c
+++ b/drivers/acpi/osl.c
@@ -353,8 +353,10 @@ static irqreturn_t acpi_irq(int irq, void *dev_id)
353 if (handled) { 353 if (handled) {
354 acpi_irq_handled++; 354 acpi_irq_handled++;
355 return IRQ_HANDLED; 355 return IRQ_HANDLED;
356 } else 356 } else {
357 acpi_irq_not_handled++;
357 return IRQ_NONE; 358 return IRQ_NONE;
359 }
358} 360}
359 361
360acpi_status 362acpi_status
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index 6fe121434ffb..72069ba5f1ed 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -202,21 +202,44 @@ static void acpi_state_timer_broadcast(struct acpi_processor *pr,
202 * Suspend / resume control 202 * Suspend / resume control
203 */ 203 */
204static int acpi_idle_suspend; 204static int acpi_idle_suspend;
205static u32 saved_bm_rld;
206
207static void acpi_idle_bm_rld_save(void)
208{
209 acpi_read_bit_register(ACPI_BITREG_BUS_MASTER_RLD, &saved_bm_rld);
210}
211static void acpi_idle_bm_rld_restore(void)
212{
213 u32 resumed_bm_rld;
214
215 acpi_read_bit_register(ACPI_BITREG_BUS_MASTER_RLD, &resumed_bm_rld);
216
217 if (resumed_bm_rld != saved_bm_rld)
218 acpi_write_bit_register(ACPI_BITREG_BUS_MASTER_RLD, saved_bm_rld);
219}
205 220
206int acpi_processor_suspend(struct acpi_device * device, pm_message_t state) 221int acpi_processor_suspend(struct acpi_device * device, pm_message_t state)
207{ 222{
223 if (acpi_idle_suspend == 1)
224 return 0;
225
226 acpi_idle_bm_rld_save();
208 acpi_idle_suspend = 1; 227 acpi_idle_suspend = 1;
209 return 0; 228 return 0;
210} 229}
211 230
212int acpi_processor_resume(struct acpi_device * device) 231int acpi_processor_resume(struct acpi_device * device)
213{ 232{
233 if (acpi_idle_suspend == 0)
234 return 0;
235
236 acpi_idle_bm_rld_restore();
214 acpi_idle_suspend = 0; 237 acpi_idle_suspend = 0;
215 return 0; 238 return 0;
216} 239}
217 240
218#if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86) 241#if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86)
219static int tsc_halts_in_c(int state) 242static void tsc_check_state(int state)
220{ 243{
221 switch (boot_cpu_data.x86_vendor) { 244 switch (boot_cpu_data.x86_vendor) {
222 case X86_VENDOR_AMD: 245 case X86_VENDOR_AMD:
@@ -226,13 +249,17 @@ static int tsc_halts_in_c(int state)
226 * C/P/S0/S1 states when this bit is set. 249 * C/P/S0/S1 states when this bit is set.
227 */ 250 */
228 if (boot_cpu_has(X86_FEATURE_NONSTOP_TSC)) 251 if (boot_cpu_has(X86_FEATURE_NONSTOP_TSC))
229 return 0; 252 return;
230 253
231 /*FALL THROUGH*/ 254 /*FALL THROUGH*/
232 default: 255 default:
233 return state > ACPI_STATE_C1; 256 /* TSC could halt in idle, so notify users */
257 if (state > ACPI_STATE_C1)
258 mark_tsc_unstable("TSC halts in idle");
234 } 259 }
235} 260}
261#else
262static void tsc_check_state(int state) { return; }
236#endif 263#endif
237 264
238static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr) 265static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr)
@@ -578,7 +605,7 @@ static int acpi_processor_power_verify(struct acpi_processor *pr)
578 605
579 pr->power.timer_broadcast_on_state = INT_MAX; 606 pr->power.timer_broadcast_on_state = INT_MAX;
580 607
581 for (i = 1; i < ACPI_PROCESSOR_MAX_POWER; i++) { 608 for (i = 1; i < ACPI_PROCESSOR_MAX_POWER && i <= max_cstate; i++) {
582 struct acpi_processor_cx *cx = &pr->power.states[i]; 609 struct acpi_processor_cx *cx = &pr->power.states[i];
583 610
584 switch (cx->type) { 611 switch (cx->type) {
@@ -598,6 +625,8 @@ static int acpi_processor_power_verify(struct acpi_processor *pr)
598 acpi_timer_check_state(i, pr, cx); 625 acpi_timer_check_state(i, pr, cx);
599 break; 626 break;
600 } 627 }
628 if (cx->valid)
629 tsc_check_state(cx->type);
601 630
602 if (cx->valid) 631 if (cx->valid)
603 working++; 632 working++;
@@ -657,11 +686,9 @@ static int acpi_processor_power_seq_show(struct seq_file *seq, void *offset)
657 686
658 seq_printf(seq, "active state: C%zd\n" 687 seq_printf(seq, "active state: C%zd\n"
659 "max_cstate: C%d\n" 688 "max_cstate: C%d\n"
660 "bus master activity: %08x\n"
661 "maximum allowed latency: %d usec\n", 689 "maximum allowed latency: %d usec\n",
662 pr->power.state ? pr->power.state - pr->power.states : 0, 690 pr->power.state ? pr->power.state - pr->power.states : 0,
663 max_cstate, (unsigned)pr->power.bm_activity, 691 max_cstate, pm_qos_requirement(PM_QOS_CPU_DMA_LATENCY));
664 pm_qos_requirement(PM_QOS_CPU_DMA_LATENCY));
665 692
666 seq_puts(seq, "states:\n"); 693 seq_puts(seq, "states:\n");
667 694
@@ -871,11 +898,6 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev,
871 kt2 = ktime_get_real(); 898 kt2 = ktime_get_real();
872 idle_time = ktime_to_us(ktime_sub(kt2, kt1)); 899 idle_time = ktime_to_us(ktime_sub(kt2, kt1));
873 900
874#if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86)
875 /* TSC could halt in idle, so notify users */
876 if (tsc_halts_in_c(cx->type))
877 mark_tsc_unstable("TSC halts in idle");;
878#endif
879 sleep_ticks = us_to_pm_timer_ticks(idle_time); 901 sleep_ticks = us_to_pm_timer_ticks(idle_time);
880 902
881 /* Tell the scheduler how much we idled: */ 903 /* Tell the scheduler how much we idled: */
@@ -955,6 +977,7 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
955 */ 977 */
956 acpi_state_timer_broadcast(pr, cx, 1); 978 acpi_state_timer_broadcast(pr, cx, 1);
957 979
980 kt1 = ktime_get_real();
958 /* 981 /*
959 * disable bus master 982 * disable bus master
960 * bm_check implies we need ARB_DIS 983 * bm_check implies we need ARB_DIS
@@ -976,10 +999,7 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
976 ACPI_FLUSH_CPU_CACHE(); 999 ACPI_FLUSH_CPU_CACHE();
977 } 1000 }
978 1001
979 kt1 = ktime_get_real();
980 acpi_idle_do_entry(cx); 1002 acpi_idle_do_entry(cx);
981 kt2 = ktime_get_real();
982 idle_time = ktime_to_us(ktime_sub(kt2, kt1));
983 1003
984 /* Re-enable bus master arbitration */ 1004 /* Re-enable bus master arbitration */
985 if (pr->flags.bm_check && pr->flags.bm_control) { 1005 if (pr->flags.bm_check && pr->flags.bm_control) {
@@ -988,12 +1008,9 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
988 c3_cpu_count--; 1008 c3_cpu_count--;
989 spin_unlock(&c3_lock); 1009 spin_unlock(&c3_lock);
990 } 1010 }
1011 kt2 = ktime_get_real();
1012 idle_time = ktime_to_us(ktime_sub(kt2, kt1));
991 1013
992#if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86)
993 /* TSC could halt in idle, so notify users */
994 if (tsc_halts_in_c(ACPI_STATE_C3))
995 mark_tsc_unstable("TSC halts in idle");
996#endif
997 sleep_ticks = us_to_pm_timer_ticks(idle_time); 1014 sleep_ticks = us_to_pm_timer_ticks(idle_time);
998 /* Tell the scheduler how much we idled: */ 1015 /* Tell the scheduler how much we idled: */
999 sched_clock_idle_wakeup_event(sleep_ticks*PM_TIMER_TICK_NS); 1016 sched_clock_idle_wakeup_event(sleep_ticks*PM_TIMER_TICK_NS);
@@ -1037,6 +1054,9 @@ static int acpi_processor_setup_cpuidle(struct acpi_processor *pr)
1037 dev->states[i].desc[0] = '\0'; 1054 dev->states[i].desc[0] = '\0';
1038 } 1055 }
1039 1056
1057 if (max_cstate == 0)
1058 max_cstate = 1;
1059
1040 for (i = 1; i < ACPI_PROCESSOR_MAX_POWER && i <= max_cstate; i++) { 1060 for (i = 1; i < ACPI_PROCESSOR_MAX_POWER && i <= max_cstate; i++) {
1041 cx = &pr->power.states[i]; 1061 cx = &pr->power.states[i];
1042 state = &dev->states[count]; 1062 state = &dev->states[count];
diff --git a/drivers/acpi/processor_throttling.c b/drivers/acpi/processor_throttling.c
index d0d1f4d50434..7f16f5f8e7d3 100644
--- a/drivers/acpi/processor_throttling.c
+++ b/drivers/acpi/processor_throttling.c
@@ -45,6 +45,14 @@
45#define _COMPONENT ACPI_PROCESSOR_COMPONENT 45#define _COMPONENT ACPI_PROCESSOR_COMPONENT
46ACPI_MODULE_NAME("processor_throttling"); 46ACPI_MODULE_NAME("processor_throttling");
47 47
48/* ignore_tpc:
49 * 0 -> acpi processor driver doesn't ignore _TPC values
50 * 1 -> acpi processor driver ignores _TPC values
51 */
52static int ignore_tpc;
53module_param(ignore_tpc, int, 0644);
54MODULE_PARM_DESC(ignore_tpc, "Disable broken BIOS _TPC throttling support");
55
48struct throttling_tstate { 56struct throttling_tstate {
49 unsigned int cpu; /* cpu nr */ 57 unsigned int cpu; /* cpu nr */
50 int target_state; /* target T-state */ 58 int target_state; /* target T-state */
@@ -283,6 +291,10 @@ static int acpi_processor_get_platform_limit(struct acpi_processor *pr)
283 291
284 if (!pr) 292 if (!pr)
285 return -EINVAL; 293 return -EINVAL;
294
295 if (ignore_tpc)
296 goto end;
297
286 status = acpi_evaluate_integer(pr->handle, "_TPC", NULL, &tpc); 298 status = acpi_evaluate_integer(pr->handle, "_TPC", NULL, &tpc);
287 if (ACPI_FAILURE(status)) { 299 if (ACPI_FAILURE(status)) {
288 if (status != AE_NOT_FOUND) { 300 if (status != AE_NOT_FOUND) {
@@ -290,6 +302,8 @@ static int acpi_processor_get_platform_limit(struct acpi_processor *pr)
290 } 302 }
291 return -ENODEV; 303 return -ENODEV;
292 } 304 }
305
306end:
293 pr->throttling_platform_limit = (int)tpc; 307 pr->throttling_platform_limit = (int)tpc;
294 return 0; 308 return 0;
295} 309}
@@ -302,6 +316,9 @@ int acpi_processor_tstate_has_changed(struct acpi_processor *pr)
302 struct acpi_processor_limit *limit; 316 struct acpi_processor_limit *limit;
303 int target_state; 317 int target_state;
304 318
319 if (ignore_tpc)
320 return 0;
321
305 result = acpi_processor_get_platform_limit(pr); 322 result = acpi_processor_get_platform_limit(pr);
306 if (result) { 323 if (result) {
307 /* Throttling Limit is unsupported */ 324 /* Throttling Limit is unsupported */
@@ -821,6 +838,14 @@ static int acpi_processor_get_throttling_ptc(struct acpi_processor *pr)
821 ret = acpi_read_throttling_status(pr, &value); 838 ret = acpi_read_throttling_status(pr, &value);
822 if (ret >= 0) { 839 if (ret >= 0) {
823 state = acpi_get_throttling_state(pr, value); 840 state = acpi_get_throttling_state(pr, value);
841 if (state == -1) {
842 ACPI_WARNING((AE_INFO,
843 "Invalid throttling state, reset\n"));
844 state = 0;
845 ret = acpi_processor_set_throttling(pr, state);
846 if (ret)
847 return ret;
848 }
824 pr->throttling.state = state; 849 pr->throttling.state = state;
825 } 850 }
826 851
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
index 779e4e500df4..01574a066534 100644
--- a/drivers/acpi/sleep.c
+++ b/drivers/acpi/sleep.c
@@ -300,9 +300,9 @@ static int acpi_suspend_state_valid(suspend_state_t pm_state)
300static struct platform_suspend_ops acpi_suspend_ops = { 300static struct platform_suspend_ops acpi_suspend_ops = {
301 .valid = acpi_suspend_state_valid, 301 .valid = acpi_suspend_state_valid,
302 .begin = acpi_suspend_begin, 302 .begin = acpi_suspend_begin,
303 .prepare = acpi_pm_prepare, 303 .prepare_late = acpi_pm_prepare,
304 .enter = acpi_suspend_enter, 304 .enter = acpi_suspend_enter,
305 .finish = acpi_pm_finish, 305 .wake = acpi_pm_finish,
306 .end = acpi_pm_end, 306 .end = acpi_pm_end,
307}; 307};
308 308
@@ -328,9 +328,9 @@ static int acpi_suspend_begin_old(suspend_state_t pm_state)
328static struct platform_suspend_ops acpi_suspend_ops_old = { 328static struct platform_suspend_ops acpi_suspend_ops_old = {
329 .valid = acpi_suspend_state_valid, 329 .valid = acpi_suspend_state_valid,
330 .begin = acpi_suspend_begin_old, 330 .begin = acpi_suspend_begin_old,
331 .prepare = acpi_pm_disable_gpes, 331 .prepare_late = acpi_pm_disable_gpes,
332 .enter = acpi_suspend_enter, 332 .enter = acpi_suspend_enter,
333 .finish = acpi_pm_finish, 333 .wake = acpi_pm_finish,
334 .end = acpi_pm_end, 334 .end = acpi_pm_end,
335 .recover = acpi_pm_finish, 335 .recover = acpi_pm_finish,
336}; 336};
@@ -713,6 +713,32 @@ static void acpi_power_off(void)
713 acpi_enter_sleep_state(ACPI_STATE_S5); 713 acpi_enter_sleep_state(ACPI_STATE_S5);
714} 714}
715 715
716/*
717 * ACPI 2.0 created the optional _GTS and _BFS,
718 * but industry adoption has been neither rapid nor broad.
719 *
720 * Linux gets into trouble when it executes poorly validated
721 * paths through the BIOS, so disable _GTS and _BFS by default,
722 * but do speak up and offer the option to enable them.
723 */
724void __init acpi_gts_bfs_check(void)
725{
726 acpi_handle dummy;
727
728 if (ACPI_SUCCESS(acpi_get_handle(ACPI_ROOT_OBJECT, METHOD_NAME__GTS, &dummy)))
729 {
730 printk(KERN_NOTICE PREFIX "BIOS offers _GTS\n");
731 printk(KERN_NOTICE PREFIX "If \"acpi.gts=1\" improves suspend, "
732 "please notify linux-acpi@vger.kernel.org\n");
733 }
734 if (ACPI_SUCCESS(acpi_get_handle(ACPI_ROOT_OBJECT, METHOD_NAME__BFS, &dummy)))
735 {
736 printk(KERN_NOTICE PREFIX "BIOS offers _BFS\n");
737 printk(KERN_NOTICE PREFIX "If \"acpi.bfs=1\" improves resume, "
738 "please notify linux-acpi@vger.kernel.org\n");
739 }
740}
741
716int __init acpi_sleep_init(void) 742int __init acpi_sleep_init(void)
717{ 743{
718 acpi_status status; 744 acpi_status status;
@@ -771,5 +797,6 @@ int __init acpi_sleep_init(void)
771 * object can also be evaluated when the system enters S5. 797 * object can also be evaluated when the system enters S5.
772 */ 798 */
773 register_reboot_notifier(&tts_notifier); 799 register_reboot_notifier(&tts_notifier);
800 acpi_gts_bfs_check();
774 return 0; 801 return 0;
775} 802}
diff --git a/drivers/acpi/system.c b/drivers/acpi/system.c
index da51f05ef8d8..0944daec064f 100644
--- a/drivers/acpi/system.c
+++ b/drivers/acpi/system.c
@@ -38,6 +38,7 @@ ACPI_MODULE_NAME("system");
38#define ACPI_SYSTEM_DEVICE_NAME "System" 38#define ACPI_SYSTEM_DEVICE_NAME "System"
39 39
40u32 acpi_irq_handled; 40u32 acpi_irq_handled;
41u32 acpi_irq_not_handled;
41 42
42/* 43/*
43 * Make ACPICA version work as module param 44 * Make ACPICA version work as module param
@@ -214,8 +215,9 @@ err:
214 215
215#define COUNT_GPE 0 216#define COUNT_GPE 0
216#define COUNT_SCI 1 /* acpi_irq_handled */ 217#define COUNT_SCI 1 /* acpi_irq_handled */
217#define COUNT_ERROR 2 /* other */ 218#define COUNT_SCI_NOT 2 /* acpi_irq_not_handled */
218#define NUM_COUNTERS_EXTRA 3 219#define COUNT_ERROR 3 /* other */
220#define NUM_COUNTERS_EXTRA 4
219 221
220struct event_counter { 222struct event_counter {
221 u32 count; 223 u32 count;
@@ -317,6 +319,8 @@ static ssize_t counter_show(struct kobject *kobj,
317 319
318 all_counters[num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_SCI].count = 320 all_counters[num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_SCI].count =
319 acpi_irq_handled; 321 acpi_irq_handled;
322 all_counters[num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_SCI_NOT].count =
323 acpi_irq_not_handled;
320 all_counters[num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_GPE].count = 324 all_counters[num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_GPE].count =
321 acpi_gpe_count; 325 acpi_gpe_count;
322 326
@@ -363,6 +367,7 @@ static ssize_t counter_set(struct kobject *kobj,
363 all_counters[i].count = 0; 367 all_counters[i].count = 0;
364 acpi_gpe_count = 0; 368 acpi_gpe_count = 0;
365 acpi_irq_handled = 0; 369 acpi_irq_handled = 0;
370 acpi_irq_not_handled = 0;
366 goto end; 371 goto end;
367 } 372 }
368 373
@@ -456,6 +461,8 @@ void acpi_irq_stats_init(void)
456 sprintf(buffer, "gpe_all"); 461 sprintf(buffer, "gpe_all");
457 else if (i == num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_SCI) 462 else if (i == num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_SCI)
458 sprintf(buffer, "sci"); 463 sprintf(buffer, "sci");
464 else if (i == num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_SCI_NOT)
465 sprintf(buffer, "sci_not");
459 else if (i == num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_ERROR) 466 else if (i == num_gpes + ACPI_NUM_FIXED_EVENTS + COUNT_ERROR)
460 sprintf(buffer, "error"); 467 sprintf(buffer, "error");
461 else 468 else
diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c
index 9cd15e8c8932..564ea1424288 100644
--- a/drivers/acpi/thermal.c
+++ b/drivers/acpi/thermal.c
@@ -909,7 +909,7 @@ static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz)
909 thermal_zone_device_register("acpitz", trips, tz, 909 thermal_zone_device_register("acpitz", trips, tz,
910 &acpi_thermal_zone_ops, 910 &acpi_thermal_zone_ops,
911 0, 0, 0, 911 0, 0, 0,
912 tz->polling_frequency); 912 tz->polling_frequency*100);
913 if (IS_ERR(tz->thermal_zone)) 913 if (IS_ERR(tz->thermal_zone))
914 return -ENODEV; 914 return -ENODEV;
915 915
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
index cd4fb7543a90..810cca90ca7f 100644
--- a/drivers/acpi/video.c
+++ b/drivers/acpi/video.c
@@ -538,6 +538,41 @@ acpi_video_device_lcd_set_level(struct acpi_video_device *device, int level)
538 return -EINVAL; 538 return -EINVAL;
539} 539}
540 540
541/*
542 * For some buggy _BQC methods, we need to add a constant value to
543 * the _BQC return value to get the actual current brightness level
544 */
545
546static int bqc_offset_aml_bug_workaround;
547static int __init video_set_bqc_offset(const struct dmi_system_id *d)
548{
549 bqc_offset_aml_bug_workaround = 9;
550 return 0;
551}
552
553static struct dmi_system_id video_dmi_table[] __initdata = {
554 /*
555 * Broken _BQC workaround http://bugzilla.kernel.org/show_bug.cgi?id=13121
556 */
557 {
558 .callback = video_set_bqc_offset,
559 .ident = "Acer Aspire 5720",
560 .matches = {
561 DMI_MATCH(DMI_BOARD_VENDOR, "Acer"),
562 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5720"),
563 },
564 },
565 {
566 .callback = video_set_bqc_offset,
567 .ident = "Acer Aspire 5710Z",
568 .matches = {
569 DMI_MATCH(DMI_BOARD_VENDOR, "Acer"),
570 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5710Z"),
571 },
572 },
573 {}
574};
575
541static int 576static int
542acpi_video_device_lcd_get_level_current(struct acpi_video_device *device, 577acpi_video_device_lcd_get_level_current(struct acpi_video_device *device,
543 unsigned long long *level) 578 unsigned long long *level)
@@ -557,6 +592,7 @@ acpi_video_device_lcd_get_level_current(struct acpi_video_device *device,
557 *level = device->brightness->levels[*level + 2]; 592 *level = device->brightness->levels[*level + 2];
558 593
559 } 594 }
595 *level += bqc_offset_aml_bug_workaround;
560 device->brightness->curr = *level; 596 device->brightness->curr = *level;
561 return 0; 597 return 0;
562 } else { 598 } else {
@@ -770,10 +806,12 @@ acpi_video_init_brightness(struct acpi_video_device *device)
770 * In this case, the first two elements in _BCL packages 806 * In this case, the first two elements in _BCL packages
771 * are also supported brightness levels that OS should take care of. 807 * are also supported brightness levels that OS should take care of.
772 */ 808 */
773 for (i = 2; i < count; i++) 809 for (i = 2; i < count; i++) {
774 if (br->levels[i] == br->levels[0] || 810 if (br->levels[i] == br->levels[0])
775 br->levels[i] == br->levels[1]) 811 level_ac_battery++;
812 if (br->levels[i] == br->levels[1])
776 level_ac_battery++; 813 level_ac_battery++;
814 }
777 815
778 if (level_ac_battery < 2) { 816 if (level_ac_battery < 2) {
779 level_ac_battery = 2 - level_ac_battery; 817 level_ac_battery = 2 - level_ac_battery;
@@ -807,12 +845,19 @@ acpi_video_init_brightness(struct acpi_video_device *device)
807 br->flags._BCM_use_index = br->flags._BCL_use_index; 845 br->flags._BCM_use_index = br->flags._BCL_use_index;
808 846
809 /* _BQC uses INDEX while _BCL uses VALUE in some laptops */ 847 /* _BQC uses INDEX while _BCL uses VALUE in some laptops */
810 br->curr = max_level; 848 br->curr = level_old = max_level;
849
850 if (!device->cap._BQC)
851 goto set_level;
852
811 result = acpi_video_device_lcd_get_level_current(device, &level_old); 853 result = acpi_video_device_lcd_get_level_current(device, &level_old);
812 if (result) 854 if (result)
813 goto out_free_levels; 855 goto out_free_levels;
814 856
815 result = acpi_video_device_lcd_set_level(device, br->curr); 857 /*
858 * Set the level to maximum and check if _BQC uses indexed value
859 */
860 result = acpi_video_device_lcd_set_level(device, max_level);
816 if (result) 861 if (result)
817 goto out_free_levels; 862 goto out_free_levels;
818 863
@@ -820,25 +865,19 @@ acpi_video_init_brightness(struct acpi_video_device *device)
820 if (result) 865 if (result)
821 goto out_free_levels; 866 goto out_free_levels;
822 867
823 if ((level != level_old) && !br->flags._BCM_use_index) { 868 br->flags._BQC_use_index = (level == max_level ? 0 : 1);
824 /* Note: 869
825 * This piece of code does not work correctly if the current 870 if (!br->flags._BQC_use_index)
826 * brightness levels is 0. 871 goto set_level;
827 * But I guess boxes that boot with such a dark screen are rare 872
828 * and no more code is needed to cover this specifial case. 873 if (br->flags._BCL_reversed)
829 */ 874 level_old = (br->count - 1) - level_old;
830 875 level_old = br->levels[level_old];
831 if (level_ac_battery != 2) { 876
832 /* 877set_level:
833 * For now, we don't support the _BCL like this: 878 result = acpi_video_device_lcd_set_level(device, level_old);
834 * 16, 15, 0, 1, 2, 3, ..., 14, 15, 16 879 if (result)
835 * because we may mess up the index returned by _BQC. 880 goto out_free_levels;
836 * Plus: we have not got a box like this.
837 */
838 ACPI_ERROR((AE_INFO, "_BCL not supported\n"));
839 }
840 br->flags._BQC_use_index = 1;
841 }
842 881
843 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 882 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
844 "found %d brightness levels\n", count - 2)); 883 "found %d brightness levels\n", count - 2));
@@ -2287,13 +2326,15 @@ EXPORT_SYMBOL(acpi_video_register);
2287 2326
2288static int __init acpi_video_init(void) 2327static int __init acpi_video_init(void)
2289{ 2328{
2329 dmi_check_system(video_dmi_table);
2330
2290 if (intel_opregion_present()) 2331 if (intel_opregion_present())
2291 return 0; 2332 return 0;
2292 2333
2293 return acpi_video_register(); 2334 return acpi_video_register();
2294} 2335}
2295 2336
2296static void __exit acpi_video_exit(void) 2337void __exit acpi_video_exit(void)
2297{ 2338{
2298 2339
2299 acpi_bus_unregister_driver(&acpi_video_bus); 2340 acpi_bus_unregister_driver(&acpi_video_bus);
@@ -2302,6 +2343,7 @@ static void __exit acpi_video_exit(void)
2302 2343
2303 return; 2344 return;
2304} 2345}
2346EXPORT_SYMBOL(acpi_video_exit);
2305 2347
2306module_init(acpi_video_init); 2348module_init(acpi_video_init);
2307module_exit(acpi_video_exit); 2349module_exit(acpi_video_exit);
diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
index 942d14ac8792..d51a17c0f59b 100644
--- a/drivers/ata/ata_piix.c
+++ b/drivers/ata/ata_piix.c
@@ -72,6 +72,7 @@
72 * ICH2 spec c #20 - IDE PRD must not cross a 64K boundary 72 * ICH2 spec c #20 - IDE PRD must not cross a 64K boundary
73 * and must be dword aligned 73 * and must be dword aligned
74 * ICH2 spec c #24 - UDMA mode 4,5 t85/86 should be 6ns not 3.3 74 * ICH2 spec c #24 - UDMA mode 4,5 t85/86 should be 6ns not 3.3
75 * ICH7 errata #16 - MWDMA1 timings are incorrect
75 * 76 *
76 * Should have been BIOS fixed: 77 * Should have been BIOS fixed:
77 * 450NX: errata #19 - DMA hangs on old 450NX 78 * 450NX: errata #19 - DMA hangs on old 450NX
@@ -94,7 +95,7 @@
94#include <linux/dmi.h> 95#include <linux/dmi.h>
95 96
96#define DRV_NAME "ata_piix" 97#define DRV_NAME "ata_piix"
97#define DRV_VERSION "2.12" 98#define DRV_VERSION "2.13"
98 99
99enum { 100enum {
100 PIIX_IOCFG = 0x54, /* IDE I/O configuration register */ 101 PIIX_IOCFG = 0x54, /* IDE I/O configuration register */
@@ -136,6 +137,7 @@ enum piix_controller_ids {
136 ich_pata_33, /* ICH up to UDMA 33 only */ 137 ich_pata_33, /* ICH up to UDMA 33 only */
137 ich_pata_66, /* ICH up to 66 Mhz */ 138 ich_pata_66, /* ICH up to 66 Mhz */
138 ich_pata_100, /* ICH up to UDMA 100 */ 139 ich_pata_100, /* ICH up to UDMA 100 */
140 ich_pata_100_nomwdma1, /* ICH up to UDMA 100 but with no MWDMA1*/
139 ich5_sata, 141 ich5_sata,
140 ich6_sata, 142 ich6_sata,
141 ich6m_sata, 143 ich6m_sata,
@@ -216,8 +218,8 @@ static const struct pci_device_id piix_pci_tbl[] = {
216 /* ICH6 (and 6) (i915) UDMA 100 */ 218 /* ICH6 (and 6) (i915) UDMA 100 */
217 { 0x8086, 0x266F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_100 }, 219 { 0x8086, 0x266F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_100 },
218 /* ICH7/7-R (i945, i975) UDMA 100*/ 220 /* ICH7/7-R (i945, i975) UDMA 100*/
219 { 0x8086, 0x27DF, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_100 }, 221 { 0x8086, 0x27DF, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_100_nomwdma1 },
220 { 0x8086, 0x269E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_100 }, 222 { 0x8086, 0x269E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_100_nomwdma1 },
221 /* ICH8 Mobile PATA Controller */ 223 /* ICH8 Mobile PATA Controller */
222 { 0x8086, 0x2850, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_100 }, 224 { 0x8086, 0x2850, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_100 },
223 225
@@ -487,6 +489,15 @@ static struct ata_port_info piix_port_info[] = {
487 .port_ops = &ich_pata_ops, 489 .port_ops = &ich_pata_ops,
488 }, 490 },
489 491
492 [ich_pata_100_nomwdma1] =
493 {
494 .flags = PIIX_PATA_FLAGS | PIIX_FLAG_CHECKINTR,
495 .pio_mask = ATA_PIO4,
496 .mwdma_mask = ATA_MWDMA2_ONLY,
497 .udma_mask = ATA_UDMA5,
498 .port_ops = &ich_pata_ops,
499 },
500
490 [ich5_sata] = 501 [ich5_sata] =
491 { 502 {
492 .flags = PIIX_SATA_FLAGS, 503 .flags = PIIX_SATA_FLAGS,
@@ -594,6 +605,7 @@ static const struct ich_laptop ich_laptop[] = {
594 { 0x24CA, 0x1025, 0x003d }, /* ICH4 on ACER TM290 */ 605 { 0x24CA, 0x1025, 0x003d }, /* ICH4 on ACER TM290 */
595 { 0x266F, 0x1025, 0x0066 }, /* ICH6 on ACER Aspire 1694WLMi */ 606 { 0x266F, 0x1025, 0x0066 }, /* ICH6 on ACER Aspire 1694WLMi */
596 { 0x2653, 0x1043, 0x82D8 }, /* ICH6M on Asus Eee 701 */ 607 { 0x2653, 0x1043, 0x82D8 }, /* ICH6M on Asus Eee 701 */
608 { 0x27df, 0x104d, 0x900e }, /* ICH7 on Sony TZ-90 */
597 /* end marker */ 609 /* end marker */
598 { 0, } 610 { 0, }
599}; 611};
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 065507c46644..c9242301cfa1 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -1231,6 +1231,9 @@ unsigned int ata_dev_classify(const struct ata_taskfile *tf)
1231 * 1231 *
1232 * We follow the current spec and consider that 0x69/0x96 1232 * We follow the current spec and consider that 0x69/0x96
1233 * identifies a port multiplier and 0x3c/0xc3 a SEMB device. 1233 * identifies a port multiplier and 0x3c/0xc3 a SEMB device.
1234 * Unfortunately, WDC WD1600JS-62MHB5 (a hard drive) reports
1235 * SEMB signature. This is worked around in
1236 * ata_dev_read_id().
1234 */ 1237 */
1235 if ((tf->lbam == 0) && (tf->lbah == 0)) { 1238 if ((tf->lbam == 0) && (tf->lbah == 0)) {
1236 DPRINTK("found ATA device by sig\n"); 1239 DPRINTK("found ATA device by sig\n");
@@ -1248,8 +1251,8 @@ unsigned int ata_dev_classify(const struct ata_taskfile *tf)
1248 } 1251 }
1249 1252
1250 if ((tf->lbam == 0x3c) && (tf->lbah == 0xc3)) { 1253 if ((tf->lbam == 0x3c) && (tf->lbah == 0xc3)) {
1251 printk(KERN_INFO "ata: SEMB device ignored\n"); 1254 DPRINTK("found SEMB device by sig (could be ATA device)\n");
1252 return ATA_DEV_SEMB_UNSUP; /* not yet */ 1255 return ATA_DEV_SEMB;
1253 } 1256 }
1254 1257
1255 DPRINTK("unknown device\n"); 1258 DPRINTK("unknown device\n");
@@ -1653,8 +1656,8 @@ unsigned long ata_id_xfermask(const u16 *id)
1653 /* 1656 /*
1654 * Process compact flash extended modes 1657 * Process compact flash extended modes
1655 */ 1658 */
1656 int pio = id[163] & 0x7; 1659 int pio = (id[ATA_ID_CFA_MODES] >> 0) & 0x7;
1657 int dma = (id[163] >> 3) & 7; 1660 int dma = (id[ATA_ID_CFA_MODES] >> 3) & 0x7;
1658 1661
1659 if (pio) 1662 if (pio)
1660 pio_mask |= (1 << 5); 1663 pio_mask |= (1 << 5);
@@ -2080,6 +2083,7 @@ int ata_dev_read_id(struct ata_device *dev, unsigned int *p_class,
2080 struct ata_taskfile tf; 2083 struct ata_taskfile tf;
2081 unsigned int err_mask = 0; 2084 unsigned int err_mask = 0;
2082 const char *reason; 2085 const char *reason;
2086 bool is_semb = class == ATA_DEV_SEMB;
2083 int may_fallback = 1, tried_spinup = 0; 2087 int may_fallback = 1, tried_spinup = 0;
2084 int rc; 2088 int rc;
2085 2089
@@ -2090,6 +2094,8 @@ retry:
2090 ata_tf_init(dev, &tf); 2094 ata_tf_init(dev, &tf);
2091 2095
2092 switch (class) { 2096 switch (class) {
2097 case ATA_DEV_SEMB:
2098 class = ATA_DEV_ATA; /* some hard drives report SEMB sig */
2093 case ATA_DEV_ATA: 2099 case ATA_DEV_ATA:
2094 tf.command = ATA_CMD_ID_ATA; 2100 tf.command = ATA_CMD_ID_ATA;
2095 break; 2101 break;
@@ -2126,6 +2132,14 @@ retry:
2126 return -ENOENT; 2132 return -ENOENT;
2127 } 2133 }
2128 2134
2135 if (is_semb) {
2136 ata_dev_printk(dev, KERN_INFO, "IDENTIFY failed on "
2137 "device w/ SEMB sig, disabled\n");
2138 /* SEMB is not supported yet */
2139 *p_class = ATA_DEV_SEMB_UNSUP;
2140 return 0;
2141 }
2142
2129 if ((err_mask == AC_ERR_DEV) && (tf.feature & ATA_ABORTED)) { 2143 if ((err_mask == AC_ERR_DEV) && (tf.feature & ATA_ABORTED)) {
2130 /* Device or controller might have reported 2144 /* Device or controller might have reported
2131 * the wrong device class. Give a shot at the 2145 * the wrong device class. Give a shot at the
@@ -2412,7 +2426,8 @@ int ata_dev_configure(struct ata_device *dev)
2412 /* ATA-specific feature tests */ 2426 /* ATA-specific feature tests */
2413 if (dev->class == ATA_DEV_ATA) { 2427 if (dev->class == ATA_DEV_ATA) {
2414 if (ata_id_is_cfa(id)) { 2428 if (ata_id_is_cfa(id)) {
2415 if (id[162] & 1) /* CPRM may make this media unusable */ 2429 /* CPRM may make this media unusable */
2430 if (id[ATA_ID_CFA_KEY_MGMT] & 1)
2416 ata_dev_printk(dev, KERN_WARNING, 2431 ata_dev_printk(dev, KERN_WARNING,
2417 "supports DRM functions and may " 2432 "supports DRM functions and may "
2418 "not be fully accessable.\n"); 2433 "not be fully accessable.\n");
@@ -4076,7 +4091,9 @@ int ata_dev_revalidate(struct ata_device *dev, unsigned int new_class,
4076 4091
4077 /* fail early if !ATA && !ATAPI to avoid issuing [P]IDENTIFY to PMP */ 4092 /* fail early if !ATA && !ATAPI to avoid issuing [P]IDENTIFY to PMP */
4078 if (ata_class_enabled(new_class) && 4093 if (ata_class_enabled(new_class) &&
4079 new_class != ATA_DEV_ATA && new_class != ATA_DEV_ATAPI) { 4094 new_class != ATA_DEV_ATA &&
4095 new_class != ATA_DEV_ATAPI &&
4096 new_class != ATA_DEV_SEMB) {
4080 ata_dev_printk(dev, KERN_INFO, "class mismatch %u != %u\n", 4097 ata_dev_printk(dev, KERN_INFO, "class mismatch %u != %u\n",
4081 dev->class, new_class); 4098 dev->class, new_class);
4082 rc = -ENODEV; 4099 rc = -ENODEV;
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index 01831312c360..94919ad03df1 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -2783,6 +2783,12 @@ static int ata_eh_revalidate_and_attach(struct ata_link *link,
2783 } else if (dev->class == ATA_DEV_UNKNOWN && 2783 } else if (dev->class == ATA_DEV_UNKNOWN &&
2784 ehc->tries[dev->devno] && 2784 ehc->tries[dev->devno] &&
2785 ata_class_enabled(ehc->classes[dev->devno])) { 2785 ata_class_enabled(ehc->classes[dev->devno])) {
2786 /* Temporarily set dev->class, it will be
2787 * permanently set once all configurations are
2788 * complete. This is necessary because new
2789 * device configuration is done in two
2790 * separate loops.
2791 */
2786 dev->class = ehc->classes[dev->devno]; 2792 dev->class = ehc->classes[dev->devno];
2787 2793
2788 if (dev->class == ATA_DEV_PMP) 2794 if (dev->class == ATA_DEV_PMP)
@@ -2790,6 +2796,11 @@ static int ata_eh_revalidate_and_attach(struct ata_link *link,
2790 else 2796 else
2791 rc = ata_dev_read_id(dev, &dev->class, 2797 rc = ata_dev_read_id(dev, &dev->class,
2792 readid_flags, dev->id); 2798 readid_flags, dev->id);
2799
2800 /* read_id might have changed class, store and reset */
2801 ehc->classes[dev->devno] = dev->class;
2802 dev->class = ATA_DEV_UNKNOWN;
2803
2793 switch (rc) { 2804 switch (rc) {
2794 case 0: 2805 case 0:
2795 /* clear error info accumulated during probe */ 2806 /* clear error info accumulated during probe */
@@ -2799,13 +2810,11 @@ static int ata_eh_revalidate_and_attach(struct ata_link *link,
2799 case -ENOENT: 2810 case -ENOENT:
2800 /* IDENTIFY was issued to non-existent 2811 /* IDENTIFY was issued to non-existent
2801 * device. No need to reset. Just 2812 * device. No need to reset. Just
2802 * thaw and kill the device. 2813 * thaw and ignore the device.
2803 */ 2814 */
2804 ata_eh_thaw_port(ap); 2815 ata_eh_thaw_port(ap);
2805 dev->class = ATA_DEV_UNKNOWN;
2806 break; 2816 break;
2807 default: 2817 default:
2808 dev->class = ATA_DEV_UNKNOWN;
2809 goto err; 2818 goto err;
2810 } 2819 }
2811 } 2820 }
@@ -2826,11 +2835,15 @@ static int ata_eh_revalidate_and_attach(struct ata_link *link,
2826 dev->class == ATA_DEV_PMP) 2835 dev->class == ATA_DEV_PMP)
2827 continue; 2836 continue;
2828 2837
2838 dev->class = ehc->classes[dev->devno];
2839
2829 ehc->i.flags |= ATA_EHI_PRINTINFO; 2840 ehc->i.flags |= ATA_EHI_PRINTINFO;
2830 rc = ata_dev_configure(dev); 2841 rc = ata_dev_configure(dev);
2831 ehc->i.flags &= ~ATA_EHI_PRINTINFO; 2842 ehc->i.flags &= ~ATA_EHI_PRINTINFO;
2832 if (rc) 2843 if (rc) {
2844 dev->class = ATA_DEV_UNKNOWN;
2833 goto err; 2845 goto err;
2846 }
2834 2847
2835 spin_lock_irqsave(ap->lock, flags); 2848 spin_lock_irqsave(ap->lock, flags);
2836 ap->pflags |= ATA_PFLAG_SCSI_HOTPLUG; 2849 ap->pflags |= ATA_PFLAG_SCSI_HOTPLUG;
@@ -3494,6 +3507,8 @@ static void ata_eh_handle_port_suspend(struct ata_port *ap)
3494 */ 3507 */
3495static void ata_eh_handle_port_resume(struct ata_port *ap) 3508static void ata_eh_handle_port_resume(struct ata_port *ap)
3496{ 3509{
3510 struct ata_link *link;
3511 struct ata_device *dev;
3497 unsigned long flags; 3512 unsigned long flags;
3498 int rc = 0; 3513 int rc = 0;
3499 3514
@@ -3508,6 +3523,17 @@ static void ata_eh_handle_port_resume(struct ata_port *ap)
3508 3523
3509 WARN_ON(!(ap->pflags & ATA_PFLAG_SUSPENDED)); 3524 WARN_ON(!(ap->pflags & ATA_PFLAG_SUSPENDED));
3510 3525
3526 /*
3527 * Error timestamps are in jiffies which doesn't run while
3528 * suspended and PHY events during resume isn't too uncommon.
3529 * When the two are combined, it can lead to unnecessary speed
3530 * downs if the machine is suspended and resumed repeatedly.
3531 * Clear error history.
3532 */
3533 ata_for_each_link(link, ap, HOST_FIRST)
3534 ata_for_each_dev(dev, link, ALL)
3535 ata_ering_clear(&dev->ering);
3536
3511 ata_acpi_set_state(ap, PMSG_ON); 3537 ata_acpi_set_state(ap, PMSG_ON);
3512 3538
3513 if (ap->ops->port_resume) 3539 if (ap->ops->port_resume)
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index b9747fa59e54..342316064e9f 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -313,7 +313,7 @@ ata_scsi_em_message_show(struct device *dev, struct device_attribute *attr,
313 return ap->ops->em_show(ap, buf); 313 return ap->ops->em_show(ap, buf);
314 return -EINVAL; 314 return -EINVAL;
315} 315}
316DEVICE_ATTR(em_message, S_IRUGO | S_IWUGO, 316DEVICE_ATTR(em_message, S_IRUGO | S_IWUSR,
317 ata_scsi_em_message_show, ata_scsi_em_message_store); 317 ata_scsi_em_message_show, ata_scsi_em_message_store);
318EXPORT_SYMBOL_GPL(dev_attr_em_message); 318EXPORT_SYMBOL_GPL(dev_attr_em_message);
319 319
@@ -366,7 +366,7 @@ ata_scsi_activity_store(struct device *dev, struct device_attribute *attr,
366 } 366 }
367 return -EINVAL; 367 return -EINVAL;
368} 368}
369DEVICE_ATTR(sw_activity, S_IWUGO | S_IRUGO, ata_scsi_activity_show, 369DEVICE_ATTR(sw_activity, S_IWUSR | S_IRUGO, ata_scsi_activity_show,
370 ata_scsi_activity_store); 370 ata_scsi_activity_store);
371EXPORT_SYMBOL_GPL(dev_attr_sw_activity); 371EXPORT_SYMBOL_GPL(dev_attr_sw_activity);
372 372
@@ -647,23 +647,45 @@ int ata_task_ioctl(struct scsi_device *scsidev, void __user *arg)
647 return rc; 647 return rc;
648} 648}
649 649
650static int ata_ioc32(struct ata_port *ap)
651{
652 if (ap->flags & ATA_FLAG_PIO_DMA)
653 return 1;
654 if (ap->pflags & ATA_PFLAG_PIO32)
655 return 1;
656 return 0;
657}
658
650int ata_sas_scsi_ioctl(struct ata_port *ap, struct scsi_device *scsidev, 659int ata_sas_scsi_ioctl(struct ata_port *ap, struct scsi_device *scsidev,
651 int cmd, void __user *arg) 660 int cmd, void __user *arg)
652{ 661{
653 int val = -EINVAL, rc = -EINVAL; 662 int val = -EINVAL, rc = -EINVAL;
663 unsigned long flags;
654 664
655 switch (cmd) { 665 switch (cmd) {
656 case ATA_IOC_GET_IO32: 666 case ATA_IOC_GET_IO32:
657 val = 0; 667 spin_lock_irqsave(ap->lock, flags);
668 val = ata_ioc32(ap);
669 spin_unlock_irqrestore(ap->lock, flags);
658 if (copy_to_user(arg, &val, 1)) 670 if (copy_to_user(arg, &val, 1))
659 return -EFAULT; 671 return -EFAULT;
660 return 0; 672 return 0;
661 673
662 case ATA_IOC_SET_IO32: 674 case ATA_IOC_SET_IO32:
663 val = (unsigned long) arg; 675 val = (unsigned long) arg;
664 if (val != 0) 676 rc = 0;
665 return -EINVAL; 677 spin_lock_irqsave(ap->lock, flags);
666 return 0; 678 if (ap->pflags & ATA_PFLAG_PIO32CHANGE) {
679 if (val)
680 ap->pflags |= ATA_PFLAG_PIO32;
681 else
682 ap->pflags &= ~ATA_PFLAG_PIO32;
683 } else {
684 if (val != ata_ioc32(ap))
685 rc = -EINVAL;
686 }
687 spin_unlock_irqrestore(ap->lock, flags);
688 return rc;
667 689
668 case HDIO_GET_IDENTITY: 690 case HDIO_GET_IDENTITY:
669 return ata_get_identity(ap, scsidev, arg); 691 return ata_get_identity(ap, scsidev, arg);
@@ -2120,13 +2142,14 @@ static unsigned int ata_scsiop_inq_89(struct ata_scsi_args *args, u8 *rbuf)
2120 2142
2121static unsigned int ata_scsiop_inq_b1(struct ata_scsi_args *args, u8 *rbuf) 2143static unsigned int ata_scsiop_inq_b1(struct ata_scsi_args *args, u8 *rbuf)
2122{ 2144{
2145 int form_factor = ata_id_form_factor(args->id);
2146 int media_rotation_rate = ata_id_rotation_rate(args->id);
2147
2123 rbuf[1] = 0xb1; 2148 rbuf[1] = 0xb1;
2124 rbuf[3] = 0x3c; 2149 rbuf[3] = 0x3c;
2125 if (ata_id_major_version(args->id) > 7) { 2150 rbuf[4] = media_rotation_rate >> 8;
2126 rbuf[4] = args->id[217] >> 8; 2151 rbuf[5] = media_rotation_rate;
2127 rbuf[5] = args->id[217]; 2152 rbuf[7] = form_factor;
2128 rbuf[7] = args->id[168] & 0xf;
2129 }
2130 2153
2131 return 0; 2154 return 0;
2132} 2155}
@@ -2354,7 +2377,23 @@ saving_not_supp:
2354 */ 2377 */
2355static unsigned int ata_scsiop_read_cap(struct ata_scsi_args *args, u8 *rbuf) 2378static unsigned int ata_scsiop_read_cap(struct ata_scsi_args *args, u8 *rbuf)
2356{ 2379{
2357 u64 last_lba = args->dev->n_sectors - 1; /* LBA of the last block */ 2380 struct ata_device *dev = args->dev;
2381 u64 last_lba = dev->n_sectors - 1; /* LBA of the last block */
2382 u8 log_per_phys = 0;
2383 u16 lowest_aligned = 0;
2384 u16 word_106 = dev->id[106];
2385 u16 word_209 = dev->id[209];
2386
2387 if ((word_106 & 0xc000) == 0x4000) {
2388 /* Number and offset of logical sectors per physical sector */
2389 if (word_106 & (1 << 13))
2390 log_per_phys = word_106 & 0xf;
2391 if ((word_209 & 0xc000) == 0x4000) {
2392 u16 first = dev->id[209] & 0x3fff;
2393 if (first > 0)
2394 lowest_aligned = (1 << log_per_phys) - first;
2395 }
2396 }
2358 2397
2359 VPRINTK("ENTER\n"); 2398 VPRINTK("ENTER\n");
2360 2399
@@ -2385,6 +2424,11 @@ static unsigned int ata_scsiop_read_cap(struct ata_scsi_args *args, u8 *rbuf)
2385 /* sector size */ 2424 /* sector size */
2386 rbuf[10] = ATA_SECT_SIZE >> 8; 2425 rbuf[10] = ATA_SECT_SIZE >> 8;
2387 rbuf[11] = ATA_SECT_SIZE & 0xff; 2426 rbuf[11] = ATA_SECT_SIZE & 0xff;
2427
2428 rbuf[12] = 0;
2429 rbuf[13] = log_per_phys;
2430 rbuf[14] = (lowest_aligned >> 8) & 0x3f;
2431 rbuf[15] = lowest_aligned;
2388 } 2432 }
2389 2433
2390 return 0; 2434 return 0;
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c
index 8332e97a9de3..bb18415d3d63 100644
--- a/drivers/ata/libata-sff.c
+++ b/drivers/ata/libata-sff.c
@@ -87,6 +87,7 @@ const struct ata_port_operations ata_bmdma32_port_ops = {
87 .inherits = &ata_bmdma_port_ops, 87 .inherits = &ata_bmdma_port_ops,
88 88
89 .sff_data_xfer = ata_sff_data_xfer32, 89 .sff_data_xfer = ata_sff_data_xfer32,
90 .port_start = ata_sff_port_start32,
90}; 91};
91EXPORT_SYMBOL_GPL(ata_bmdma32_port_ops); 92EXPORT_SYMBOL_GPL(ata_bmdma32_port_ops);
92 93
@@ -769,6 +770,9 @@ unsigned int ata_sff_data_xfer32(struct ata_device *dev, unsigned char *buf,
769 void __iomem *data_addr = ap->ioaddr.data_addr; 770 void __iomem *data_addr = ap->ioaddr.data_addr;
770 unsigned int words = buflen >> 2; 771 unsigned int words = buflen >> 2;
771 int slop = buflen & 3; 772 int slop = buflen & 3;
773
774 if (!(ap->pflags & ATA_PFLAG_PIO32))
775 return ata_sff_data_xfer(dev, buf, buflen, rw);
772 776
773 /* Transfer multiple of 4 bytes */ 777 /* Transfer multiple of 4 bytes */
774 if (rw == READ) 778 if (rw == READ)
@@ -2402,6 +2406,29 @@ int ata_sff_port_start(struct ata_port *ap)
2402EXPORT_SYMBOL_GPL(ata_sff_port_start); 2406EXPORT_SYMBOL_GPL(ata_sff_port_start);
2403 2407
2404/** 2408/**
2409 * ata_sff_port_start32 - Set port up for dma.
2410 * @ap: Port to initialize
2411 *
2412 * Called just after data structures for each port are
2413 * initialized. Allocates space for PRD table if the device
2414 * is DMA capable SFF.
2415 *
2416 * May be used as the port_start() entry in ata_port_operations for
2417 * devices that are capable of 32bit PIO.
2418 *
2419 * LOCKING:
2420 * Inherited from caller.
2421 */
2422int ata_sff_port_start32(struct ata_port *ap)
2423{
2424 ap->pflags |= ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE;
2425 if (ap->ioaddr.bmdma_addr)
2426 return ata_port_start(ap);
2427 return 0;
2428}
2429EXPORT_SYMBOL_GPL(ata_sff_port_start32);
2430
2431/**
2405 * ata_sff_std_ports - initialize ioaddr with standard port offsets. 2432 * ata_sff_std_ports - initialize ioaddr with standard port offsets.
2406 * @ioaddr: IO address structure to be initialized 2433 * @ioaddr: IO address structure to be initialized
2407 * 2434 *
diff --git a/drivers/ata/pata_hpt37x.c b/drivers/ata/pata_hpt37x.c
index 81ab57003aba..122c786449a9 100644
--- a/drivers/ata/pata_hpt37x.c
+++ b/drivers/ata/pata_hpt37x.c
@@ -8,7 +8,7 @@
8 * Copyright (C) 1999-2003 Andre Hedrick <andre@linux-ide.org> 8 * Copyright (C) 1999-2003 Andre Hedrick <andre@linux-ide.org>
9 * Portions Copyright (C) 2001 Sun Microsystems, Inc. 9 * Portions Copyright (C) 2001 Sun Microsystems, Inc.
10 * Portions Copyright (C) 2003 Red Hat Inc 10 * Portions Copyright (C) 2003 Red Hat Inc
11 * Portions Copyright (C) 2005-2007 MontaVista Software, Inc. 11 * Portions Copyright (C) 2005-2009 MontaVista Software, Inc.
12 * 12 *
13 * TODO 13 * TODO
14 * Look into engine reset on timeout errors. Should not be required. 14 * Look into engine reset on timeout errors. Should not be required.
@@ -24,7 +24,7 @@
24#include <linux/libata.h> 24#include <linux/libata.h>
25 25
26#define DRV_NAME "pata_hpt37x" 26#define DRV_NAME "pata_hpt37x"
27#define DRV_VERSION "0.6.11" 27#define DRV_VERSION "0.6.12"
28 28
29struct hpt_clock { 29struct hpt_clock {
30 u8 xfer_speed; 30 u8 xfer_speed;
@@ -445,23 +445,6 @@ static void hpt370_set_dmamode(struct ata_port *ap, struct ata_device *adev)
445} 445}
446 446
447/** 447/**
448 * hpt370_bmdma_start - DMA engine begin
449 * @qc: ATA command
450 *
451 * The 370 and 370A want us to reset the DMA engine each time we
452 * use it. The 372 and later are fine.
453 */
454
455static void hpt370_bmdma_start(struct ata_queued_cmd *qc)
456{
457 struct ata_port *ap = qc->ap;
458 struct pci_dev *pdev = to_pci_dev(ap->host->dev);
459 pci_write_config_byte(pdev, 0x50 + 4 * ap->port_no, 0x37);
460 udelay(10);
461 ata_bmdma_start(qc);
462}
463
464/**
465 * hpt370_bmdma_end - DMA engine stop 448 * hpt370_bmdma_end - DMA engine stop
466 * @qc: ATA command 449 * @qc: ATA command
467 * 450 *
@@ -598,7 +581,6 @@ static struct scsi_host_template hpt37x_sht = {
598static struct ata_port_operations hpt370_port_ops = { 581static struct ata_port_operations hpt370_port_ops = {
599 .inherits = &ata_bmdma_port_ops, 582 .inherits = &ata_bmdma_port_ops,
600 583
601 .bmdma_start = hpt370_bmdma_start,
602 .bmdma_stop = hpt370_bmdma_stop, 584 .bmdma_stop = hpt370_bmdma_stop,
603 585
604 .mode_filter = hpt370_filter, 586 .mode_filter = hpt370_filter,
diff --git a/drivers/ata/pata_legacy.c b/drivers/ata/pata_legacy.c
index 3f830f0fe2cc..f72c6c5b820f 100644
--- a/drivers/ata/pata_legacy.c
+++ b/drivers/ata/pata_legacy.c
@@ -108,6 +108,7 @@ struct legacy_controller {
108 struct ata_port_operations *ops; 108 struct ata_port_operations *ops;
109 unsigned int pio_mask; 109 unsigned int pio_mask;
110 unsigned int flags; 110 unsigned int flags;
111 unsigned int pflags;
111 int (*setup)(struct platform_device *, struct legacy_probe *probe, 112 int (*setup)(struct platform_device *, struct legacy_probe *probe,
112 struct legacy_data *data); 113 struct legacy_data *data);
113}; 114};
@@ -284,9 +285,11 @@ static unsigned int pdc_data_xfer_vlb(struct ata_device *dev,
284 unsigned char *buf, unsigned int buflen, int rw) 285 unsigned char *buf, unsigned int buflen, int rw)
285{ 286{
286 int slop = buflen & 3; 287 int slop = buflen & 3;
288 struct ata_port *ap = dev->link->ap;
289
287 /* 32bit I/O capable *and* we need to write a whole number of dwords */ 290 /* 32bit I/O capable *and* we need to write a whole number of dwords */
288 if (ata_id_has_dword_io(dev->id) && (slop == 0 || slop == 3)) { 291 if (ata_id_has_dword_io(dev->id) && (slop == 0 || slop == 3)
289 struct ata_port *ap = dev->link->ap; 292 && (ap->pflags & ATA_PFLAG_PIO32)) {
290 unsigned long flags; 293 unsigned long flags;
291 294
292 local_irq_save(flags); 295 local_irq_save(flags);
@@ -736,7 +739,8 @@ static unsigned int vlb32_data_xfer(struct ata_device *adev, unsigned char *buf,
736 struct ata_port *ap = adev->link->ap; 739 struct ata_port *ap = adev->link->ap;
737 int slop = buflen & 3; 740 int slop = buflen & 3;
738 741
739 if (ata_id_has_dword_io(adev->id) && (slop == 0 || slop == 3)) { 742 if (ata_id_has_dword_io(adev->id) && (slop == 0 || slop == 3)
743 && (ap->pflags & ATA_PFLAG_PIO32)) {
740 if (rw == WRITE) 744 if (rw == WRITE)
741 iowrite32_rep(ap->ioaddr.data_addr, buf, buflen >> 2); 745 iowrite32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
742 else 746 else
@@ -858,27 +862,30 @@ static struct ata_port_operations winbond_port_ops = {
858 862
859static struct legacy_controller controllers[] = { 863static struct legacy_controller controllers[] = {
860 {"BIOS", &legacy_port_ops, 0x1F, 864 {"BIOS", &legacy_port_ops, 0x1F,
861 ATA_FLAG_NO_IORDY, NULL }, 865 ATA_FLAG_NO_IORDY, 0, NULL },
862 {"Snooping", &simple_port_ops, 0x1F, 866 {"Snooping", &simple_port_ops, 0x1F,
863 0 , NULL }, 867 0, 0, NULL },
864 {"PDC20230", &pdc20230_port_ops, 0x7, 868 {"PDC20230", &pdc20230_port_ops, 0x7,
865 ATA_FLAG_NO_IORDY, NULL }, 869 ATA_FLAG_NO_IORDY,
870 ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, NULL },
866 {"HT6560A", &ht6560a_port_ops, 0x07, 871 {"HT6560A", &ht6560a_port_ops, 0x07,
867 ATA_FLAG_NO_IORDY, NULL }, 872 ATA_FLAG_NO_IORDY, 0, NULL },
868 {"HT6560B", &ht6560b_port_ops, 0x1F, 873 {"HT6560B", &ht6560b_port_ops, 0x1F,
869 ATA_FLAG_NO_IORDY, NULL }, 874 ATA_FLAG_NO_IORDY, 0, NULL },
870 {"OPTI82C611A", &opti82c611a_port_ops, 0x0F, 875 {"OPTI82C611A", &opti82c611a_port_ops, 0x0F,
871 0 , NULL }, 876 0, 0, NULL },
872 {"OPTI82C46X", &opti82c46x_port_ops, 0x0F, 877 {"OPTI82C46X", &opti82c46x_port_ops, 0x0F,
873 0 , NULL }, 878 0, 0, NULL },
874 {"QDI6500", &qdi6500_port_ops, 0x07, 879 {"QDI6500", &qdi6500_port_ops, 0x07,
875 ATA_FLAG_NO_IORDY, qdi_port }, 880 ATA_FLAG_NO_IORDY,
881 ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, qdi_port },
876 {"QDI6580", &qdi6580_port_ops, 0x1F, 882 {"QDI6580", &qdi6580_port_ops, 0x1F,
877 0 , qdi_port }, 883 0, ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, qdi_port },
878 {"QDI6580DP", &qdi6580dp_port_ops, 0x1F, 884 {"QDI6580DP", &qdi6580dp_port_ops, 0x1F,
879 0 , qdi_port }, 885 0, ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, qdi_port },
880 {"W83759A", &winbond_port_ops, 0x1F, 886 {"W83759A", &winbond_port_ops, 0x1F,
881 0 , winbond_port } 887 0, ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE,
888 winbond_port }
882}; 889};
883 890
884/** 891/**
@@ -1008,6 +1015,7 @@ static __init int legacy_init_one(struct legacy_probe *probe)
1008 ap->ops = ops; 1015 ap->ops = ops;
1009 ap->pio_mask = pio_modes; 1016 ap->pio_mask = pio_modes;
1010 ap->flags |= ATA_FLAG_SLAVE_POSS | iordy; 1017 ap->flags |= ATA_FLAG_SLAVE_POSS | iordy;
1018 ap->pflags |= controller->pflags;
1011 ap->ioaddr.cmd_addr = io_addr; 1019 ap->ioaddr.cmd_addr = io_addr;
1012 ap->ioaddr.altstatus_addr = ctrl_addr; 1020 ap->ioaddr.altstatus_addr = ctrl_addr;
1013 ap->ioaddr.ctl_addr = ctrl_addr; 1021 ap->ioaddr.ctl_addr = ctrl_addr;
@@ -1032,6 +1040,7 @@ static __init int legacy_init_one(struct legacy_probe *probe)
1032 return 0; 1040 return 0;
1033 } 1041 }
1034 } 1042 }
1043 ata_host_detach(host);
1035fail: 1044fail:
1036 platform_device_unregister(pdev); 1045 platform_device_unregister(pdev);
1037 return ret; 1046 return ret;
diff --git a/drivers/ata/pata_ninja32.c b/drivers/ata/pata_ninja32.c
index 0fb6b1b1e634..dd53a66b19e3 100644
--- a/drivers/ata/pata_ninja32.c
+++ b/drivers/ata/pata_ninja32.c
@@ -44,7 +44,7 @@
44#include <linux/libata.h> 44#include <linux/libata.h>
45 45
46#define DRV_NAME "pata_ninja32" 46#define DRV_NAME "pata_ninja32"
47#define DRV_VERSION "0.1.3" 47#define DRV_VERSION "0.1.5"
48 48
49 49
50/** 50/**
@@ -86,6 +86,7 @@ static struct ata_port_operations ninja32_port_ops = {
86 .sff_dev_select = ninja32_dev_select, 86 .sff_dev_select = ninja32_dev_select,
87 .cable_detect = ata_cable_40wire, 87 .cable_detect = ata_cable_40wire,
88 .set_piomode = ninja32_set_piomode, 88 .set_piomode = ninja32_set_piomode,
89 .sff_data_xfer = ata_sff_data_xfer32
89}; 90};
90 91
91static void ninja32_program(void __iomem *base) 92static void ninja32_program(void __iomem *base)
@@ -144,6 +145,7 @@ static int ninja32_init_one(struct pci_dev *dev, const struct pci_device_id *id)
144 ap->ioaddr.altstatus_addr = base + 0x1E; 145 ap->ioaddr.altstatus_addr = base + 0x1E;
145 ap->ioaddr.bmdma_addr = base; 146 ap->ioaddr.bmdma_addr = base;
146 ata_sff_std_ports(&ap->ioaddr); 147 ata_sff_std_ports(&ap->ioaddr);
148 ap->pflags = ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE;
147 149
148 ninja32_program(base); 150 ninja32_program(base);
149 /* FIXME: Should we disable them at remove ? */ 151 /* FIXME: Should we disable them at remove ? */
diff --git a/drivers/ata/pata_pdc202xx_old.c b/drivers/ata/pata_pdc202xx_old.c
index 5fedb3d4032b..2f3c9bed63d9 100644
--- a/drivers/ata/pata_pdc202xx_old.c
+++ b/drivers/ata/pata_pdc202xx_old.c
@@ -2,7 +2,7 @@
2 * pata_pdc202xx_old.c - Promise PDC202xx PATA for new ATA layer 2 * pata_pdc202xx_old.c - Promise PDC202xx PATA for new ATA layer
3 * (C) 2005 Red Hat Inc 3 * (C) 2005 Red Hat Inc
4 * Alan Cox <alan@lxorguk.ukuu.org.uk> 4 * Alan Cox <alan@lxorguk.ukuu.org.uk>
5 * (C) 2007 Bartlomiej Zolnierkiewicz 5 * (C) 2007,2009 Bartlomiej Zolnierkiewicz
6 * 6 *
7 * Based in part on linux/drivers/ide/pci/pdc202xx_old.c 7 * Based in part on linux/drivers/ide/pci/pdc202xx_old.c
8 * 8 *
@@ -158,7 +158,7 @@ static void pdc2026x_bmdma_start(struct ata_queued_cmd *qc)
158 u32 len; 158 u32 len;
159 159
160 /* Check we keep host level locking here */ 160 /* Check we keep host level locking here */
161 if (adev->dma_mode >= XFER_UDMA_2) 161 if (adev->dma_mode > XFER_UDMA_2)
162 iowrite8(ioread8(clock) | sel66, clock); 162 iowrite8(ioread8(clock) | sel66, clock);
163 else 163 else
164 iowrite8(ioread8(clock) & ~sel66, clock); 164 iowrite8(ioread8(clock) & ~sel66, clock);
@@ -212,7 +212,7 @@ static void pdc2026x_bmdma_stop(struct ata_queued_cmd *qc)
212 iowrite8(ioread8(clock) & ~sel66, clock); 212 iowrite8(ioread8(clock) & ~sel66, clock);
213 } 213 }
214 /* Flip back to 33Mhz for PIO */ 214 /* Flip back to 33Mhz for PIO */
215 if (adev->dma_mode >= XFER_UDMA_2) 215 if (adev->dma_mode > XFER_UDMA_2)
216 iowrite8(ioread8(clock) & ~sel66, clock); 216 iowrite8(ioread8(clock) & ~sel66, clock);
217 ata_bmdma_stop(qc); 217 ata_bmdma_stop(qc);
218 pdc202xx_set_piomode(ap, adev); 218 pdc202xx_set_piomode(ap, adev);
diff --git a/drivers/ata/pata_via.c b/drivers/ata/pata_via.c
index b08e6e0f82b6..45657cacec43 100644
--- a/drivers/ata/pata_via.c
+++ b/drivers/ata/pata_via.c
@@ -62,7 +62,7 @@
62#include <linux/dmi.h> 62#include <linux/dmi.h>
63 63
64#define DRV_NAME "pata_via" 64#define DRV_NAME "pata_via"
65#define DRV_VERSION "0.3.3" 65#define DRV_VERSION "0.3.4"
66 66
67/* 67/*
68 * The following comes directly from Vojtech Pavlik's ide/pci/via82cxxx 68 * The following comes directly from Vojtech Pavlik's ide/pci/via82cxxx
@@ -136,6 +136,9 @@ static const struct via_isa_bridge {
136 { NULL } 136 { NULL }
137}; 137};
138 138
139struct via_port {
140 u8 cached_device;
141};
139 142
140/* 143/*
141 * Cable special cases 144 * Cable special cases
@@ -346,14 +349,70 @@ static void via_set_dmamode(struct ata_port *ap, struct ata_device *adev)
346 */ 349 */
347static void via_tf_load(struct ata_port *ap, const struct ata_taskfile *tf) 350static void via_tf_load(struct ata_port *ap, const struct ata_taskfile *tf)
348{ 351{
349 struct ata_taskfile tmp_tf; 352 struct ata_ioports *ioaddr = &ap->ioaddr;
353 struct via_port *vp = ap->private_data;
354 unsigned int is_addr = tf->flags & ATA_TFLAG_ISADDR;
355 int newctl = 0;
356
357 if (tf->ctl != ap->last_ctl) {
358 iowrite8(tf->ctl, ioaddr->ctl_addr);
359 ap->last_ctl = tf->ctl;
360 ata_wait_idle(ap);
361 newctl = 1;
362 }
363
364 if (tf->flags & ATA_TFLAG_DEVICE) {
365 iowrite8(tf->device, ioaddr->device_addr);
366 vp->cached_device = tf->device;
367 } else if (newctl)
368 iowrite8(vp->cached_device, ioaddr->device_addr);
369
370 if (is_addr && (tf->flags & ATA_TFLAG_LBA48)) {
371 WARN_ON_ONCE(!ioaddr->ctl_addr);
372 iowrite8(tf->hob_feature, ioaddr->feature_addr);
373 iowrite8(tf->hob_nsect, ioaddr->nsect_addr);
374 iowrite8(tf->hob_lbal, ioaddr->lbal_addr);
375 iowrite8(tf->hob_lbam, ioaddr->lbam_addr);
376 iowrite8(tf->hob_lbah, ioaddr->lbah_addr);
377 VPRINTK("hob: feat 0x%X nsect 0x%X, lba 0x%X 0x%X 0x%X\n",
378 tf->hob_feature,
379 tf->hob_nsect,
380 tf->hob_lbal,
381 tf->hob_lbam,
382 tf->hob_lbah);
383 }
350 384
351 if (ap->ctl != ap->last_ctl && !(tf->flags & ATA_TFLAG_DEVICE)) { 385 if (is_addr) {
352 tmp_tf = *tf; 386 iowrite8(tf->feature, ioaddr->feature_addr);
353 tmp_tf.flags |= ATA_TFLAG_DEVICE; 387 iowrite8(tf->nsect, ioaddr->nsect_addr);
354 tf = &tmp_tf; 388 iowrite8(tf->lbal, ioaddr->lbal_addr);
389 iowrite8(tf->lbam, ioaddr->lbam_addr);
390 iowrite8(tf->lbah, ioaddr->lbah_addr);
391 VPRINTK("feat 0x%X nsect 0x%X lba 0x%X 0x%X 0x%X\n",
392 tf->feature,
393 tf->nsect,
394 tf->lbal,
395 tf->lbam,
396 tf->lbah);
355 } 397 }
356 ata_sff_tf_load(ap, tf); 398
399 ata_wait_idle(ap);
400}
401
402static int via_port_start(struct ata_port *ap)
403{
404 struct via_port *vp;
405 struct pci_dev *pdev = to_pci_dev(ap->host->dev);
406
407 int ret = ata_sff_port_start(ap);
408 if (ret < 0)
409 return ret;
410
411 vp = devm_kzalloc(&pdev->dev, sizeof(struct via_port), GFP_KERNEL);
412 if (vp == NULL)
413 return -ENOMEM;
414 ap->private_data = vp;
415 return 0;
357} 416}
358 417
359static struct scsi_host_template via_sht = { 418static struct scsi_host_template via_sht = {
@@ -367,6 +426,7 @@ static struct ata_port_operations via_port_ops = {
367 .set_dmamode = via_set_dmamode, 426 .set_dmamode = via_set_dmamode,
368 .prereset = via_pre_reset, 427 .prereset = via_pre_reset,
369 .sff_tf_load = via_tf_load, 428 .sff_tf_load = via_tf_load,
429 .port_start = via_port_start,
370}; 430};
371 431
372static struct ata_port_operations via_port_ops_noirq = { 432static struct ata_port_operations via_port_ops_noirq = {
diff --git a/drivers/ata/sata_fsl.c b/drivers/ata/sata_fsl.c
index c2e90e1fece0..36b8629203be 100644
--- a/drivers/ata/sata_fsl.c
+++ b/drivers/ata/sata_fsl.c
@@ -205,6 +205,7 @@ struct cmdhdr_tbl_entry {
205 * Description information bitdefs 205 * Description information bitdefs
206 */ 206 */
207enum { 207enum {
208 CMD_DESC_RES = (1 << 11),
208 VENDOR_SPECIFIC_BIST = (1 << 10), 209 VENDOR_SPECIFIC_BIST = (1 << 10),
209 CMD_DESC_SNOOP_ENABLE = (1 << 9), 210 CMD_DESC_SNOOP_ENABLE = (1 << 9),
210 FPDMA_QUEUED_CMD = (1 << 8), 211 FPDMA_QUEUED_CMD = (1 << 8),
@@ -332,13 +333,14 @@ static unsigned int sata_fsl_fill_sg(struct ata_queued_cmd *qc, void *cmd_desc,
332 dma_addr_t sg_addr = sg_dma_address(sg); 333 dma_addr_t sg_addr = sg_dma_address(sg);
333 u32 sg_len = sg_dma_len(sg); 334 u32 sg_len = sg_dma_len(sg);
334 335
335 VPRINTK("SATA FSL : fill_sg, sg_addr = 0x%x, sg_len = %d\n", 336 VPRINTK("SATA FSL : fill_sg, sg_addr = 0x%llx, sg_len = %d\n",
336 sg_addr, sg_len); 337 (unsigned long long)sg_addr, sg_len);
337 338
338 /* warn if each s/g element is not dword aligned */ 339 /* warn if each s/g element is not dword aligned */
339 if (sg_addr & 0x03) 340 if (sg_addr & 0x03)
340 ata_port_printk(qc->ap, KERN_ERR, 341 ata_port_printk(qc->ap, KERN_ERR,
341 "s/g addr unaligned : 0x%x\n", sg_addr); 342 "s/g addr unaligned : 0x%llx\n",
343 (unsigned long long)sg_addr);
342 if (sg_len & 0x03) 344 if (sg_len & 0x03)
343 ata_port_printk(qc->ap, KERN_ERR, 345 ata_port_printk(qc->ap, KERN_ERR,
344 "s/g len unaligned : 0x%x\n", sg_len); 346 "s/g len unaligned : 0x%x\n", sg_len);
@@ -387,7 +389,7 @@ static void sata_fsl_qc_prep(struct ata_queued_cmd *qc)
387 void __iomem *hcr_base = host_priv->hcr_base; 389 void __iomem *hcr_base = host_priv->hcr_base;
388 unsigned int tag = sata_fsl_tag(qc->tag, hcr_base); 390 unsigned int tag = sata_fsl_tag(qc->tag, hcr_base);
389 struct command_desc *cd; 391 struct command_desc *cd;
390 u32 desc_info = CMD_DESC_SNOOP_ENABLE; 392 u32 desc_info = CMD_DESC_RES | CMD_DESC_SNOOP_ENABLE;
391 u32 num_prde = 0; 393 u32 num_prde = 0;
392 u32 ttl_dwords = 0; 394 u32 ttl_dwords = 0;
393 dma_addr_t cd_paddr; 395 dma_addr_t cd_paddr;
@@ -840,7 +842,7 @@ issue_srst:
840 842
841 /* device reset/SRST is a control register update FIS, uses tag0 */ 843 /* device reset/SRST is a control register update FIS, uses tag0 */
842 sata_fsl_setup_cmd_hdr_entry(pp, 0, 844 sata_fsl_setup_cmd_hdr_entry(pp, 0,
843 SRST_CMD | CMD_DESC_SNOOP_ENABLE, 0, 0, 5); 845 SRST_CMD | CMD_DESC_RES | CMD_DESC_SNOOP_ENABLE, 0, 0, 5);
844 846
845 tf.ctl |= ATA_SRST; /* setup SRST bit in taskfile control reg */ 847 tf.ctl |= ATA_SRST; /* setup SRST bit in taskfile control reg */
846 ata_tf_to_fis(&tf, pmp, 0, cfis); 848 ata_tf_to_fis(&tf, pmp, 0, cfis);
@@ -886,7 +888,8 @@ issue_srst:
886 * using ATA signature D2H register FIS to the host controller. 888 * using ATA signature D2H register FIS to the host controller.
887 */ 889 */
888 890
889 sata_fsl_setup_cmd_hdr_entry(pp, 0, CMD_DESC_SNOOP_ENABLE, 0, 0, 5); 891 sata_fsl_setup_cmd_hdr_entry(pp, 0, CMD_DESC_RES | CMD_DESC_SNOOP_ENABLE,
892 0, 0, 5);
890 893
891 tf.ctl &= ~ATA_SRST; /* 2nd H2D Ctl. register FIS */ 894 tf.ctl &= ~ATA_SRST; /* 2nd H2D Ctl. register FIS */
892 ata_tf_to_fis(&tf, pmp, 0, cfis); 895 ata_tf_to_fis(&tf, pmp, 0, cfis);
diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c
index 37ae5dc1070c..23714aefb825 100644
--- a/drivers/ata/sata_mv.c
+++ b/drivers/ata/sata_mv.c
@@ -293,6 +293,10 @@ enum {
293 FISCFG_WAIT_DEV_ERR = (1 << 8), /* wait for host on DevErr */ 293 FISCFG_WAIT_DEV_ERR = (1 << 8), /* wait for host on DevErr */
294 FISCFG_SINGLE_SYNC = (1 << 16), /* SYNC on DMA activation */ 294 FISCFG_SINGLE_SYNC = (1 << 16), /* SYNC on DMA activation */
295 295
296 PHY_MODE9_GEN2 = 0x398,
297 PHY_MODE9_GEN1 = 0x39c,
298 PHYCFG_OFS = 0x3a0, /* only in 65n devices */
299
296 MV5_PHY_MODE = 0x74, 300 MV5_PHY_MODE = 0x74,
297 MV5_LTMODE = 0x30, 301 MV5_LTMODE = 0x30,
298 MV5_PHY_CTL = 0x0C, 302 MV5_PHY_CTL = 0x0C,
@@ -609,6 +613,8 @@ static int mv_soc_reset_hc(struct mv_host_priv *hpriv,
609static void mv_soc_reset_flash(struct mv_host_priv *hpriv, 613static void mv_soc_reset_flash(struct mv_host_priv *hpriv,
610 void __iomem *mmio); 614 void __iomem *mmio);
611static void mv_soc_reset_bus(struct ata_host *host, void __iomem *mmio); 615static void mv_soc_reset_bus(struct ata_host *host, void __iomem *mmio);
616static void mv_soc_65n_phy_errata(struct mv_host_priv *hpriv,
617 void __iomem *mmio, unsigned int port);
612static void mv_reset_pci_bus(struct ata_host *host, void __iomem *mmio); 618static void mv_reset_pci_bus(struct ata_host *host, void __iomem *mmio);
613static void mv_reset_channel(struct mv_host_priv *hpriv, void __iomem *mmio, 619static void mv_reset_channel(struct mv_host_priv *hpriv, void __iomem *mmio,
614 unsigned int port_no); 620 unsigned int port_no);
@@ -807,6 +813,14 @@ static const struct mv_hw_ops mv_soc_ops = {
807 .reset_bus = mv_soc_reset_bus, 813 .reset_bus = mv_soc_reset_bus,
808}; 814};
809 815
816static const struct mv_hw_ops mv_soc_65n_ops = {
817 .phy_errata = mv_soc_65n_phy_errata,
818 .enable_leds = mv_soc_enable_leds,
819 .reset_hc = mv_soc_reset_hc,
820 .reset_flash = mv_soc_reset_flash,
821 .reset_bus = mv_soc_reset_bus,
822};
823
810/* 824/*
811 * Functions 825 * Functions
812 */ 826 */
@@ -1881,6 +1895,39 @@ static u8 mv_bmdma_status(struct ata_port *ap)
1881 return status; 1895 return status;
1882} 1896}
1883 1897
1898static void mv_rw_multi_errata_sata24(struct ata_queued_cmd *qc)
1899{
1900 struct ata_taskfile *tf = &qc->tf;
1901 /*
1902 * Workaround for 88SX60x1 FEr SATA#24.
1903 *
1904 * Chip may corrupt WRITEs if multi_count >= 4kB.
1905 * Note that READs are unaffected.
1906 *
1907 * It's not clear if this errata really means "4K bytes",
1908 * or if it always happens for multi_count > 7
1909 * regardless of device sector_size.
1910 *
1911 * So, for safety, any write with multi_count > 7
1912 * gets converted here into a regular PIO write instead:
1913 */
1914 if ((tf->flags & ATA_TFLAG_WRITE) && is_multi_taskfile(tf)) {
1915 if (qc->dev->multi_count > 7) {
1916 switch (tf->command) {
1917 case ATA_CMD_WRITE_MULTI:
1918 tf->command = ATA_CMD_PIO_WRITE;
1919 break;
1920 case ATA_CMD_WRITE_MULTI_FUA_EXT:
1921 tf->flags &= ~ATA_TFLAG_FUA; /* ugh */
1922 /* fall through */
1923 case ATA_CMD_WRITE_MULTI_EXT:
1924 tf->command = ATA_CMD_PIO_WRITE_EXT;
1925 break;
1926 }
1927 }
1928 }
1929}
1930
1884/** 1931/**
1885 * mv_qc_prep - Host specific command preparation. 1932 * mv_qc_prep - Host specific command preparation.
1886 * @qc: queued command to prepare 1933 * @qc: queued command to prepare
@@ -1898,17 +1945,24 @@ static void mv_qc_prep(struct ata_queued_cmd *qc)
1898 struct ata_port *ap = qc->ap; 1945 struct ata_port *ap = qc->ap;
1899 struct mv_port_priv *pp = ap->private_data; 1946 struct mv_port_priv *pp = ap->private_data;
1900 __le16 *cw; 1947 __le16 *cw;
1901 struct ata_taskfile *tf; 1948 struct ata_taskfile *tf = &qc->tf;
1902 u16 flags = 0; 1949 u16 flags = 0;
1903 unsigned in_index; 1950 unsigned in_index;
1904 1951
1905 if ((qc->tf.protocol != ATA_PROT_DMA) && 1952 switch (tf->protocol) {
1906 (qc->tf.protocol != ATA_PROT_NCQ)) 1953 case ATA_PROT_DMA:
1954 case ATA_PROT_NCQ:
1955 break; /* continue below */
1956 case ATA_PROT_PIO:
1957 mv_rw_multi_errata_sata24(qc);
1958 return;
1959 default:
1907 return; 1960 return;
1961 }
1908 1962
1909 /* Fill in command request block 1963 /* Fill in command request block
1910 */ 1964 */
1911 if (!(qc->tf.flags & ATA_TFLAG_WRITE)) 1965 if (!(tf->flags & ATA_TFLAG_WRITE))
1912 flags |= CRQB_FLAG_READ; 1966 flags |= CRQB_FLAG_READ;
1913 WARN_ON(MV_MAX_Q_DEPTH <= qc->tag); 1967 WARN_ON(MV_MAX_Q_DEPTH <= qc->tag);
1914 flags |= qc->tag << CRQB_TAG_SHIFT; 1968 flags |= qc->tag << CRQB_TAG_SHIFT;
@@ -1924,7 +1978,6 @@ static void mv_qc_prep(struct ata_queued_cmd *qc)
1924 pp->crqb[in_index].ctrl_flags = cpu_to_le16(flags); 1978 pp->crqb[in_index].ctrl_flags = cpu_to_le16(flags);
1925 1979
1926 cw = &pp->crqb[in_index].ata_cmd[0]; 1980 cw = &pp->crqb[in_index].ata_cmd[0];
1927 tf = &qc->tf;
1928 1981
1929 /* Sadly, the CRQB cannot accomodate all registers--there are 1982 /* Sadly, the CRQB cannot accomodate all registers--there are
1930 * only 11 bytes...so we must pick and choose required 1983 * only 11 bytes...so we must pick and choose required
@@ -1990,16 +2043,16 @@ static void mv_qc_prep_iie(struct ata_queued_cmd *qc)
1990 struct ata_port *ap = qc->ap; 2043 struct ata_port *ap = qc->ap;
1991 struct mv_port_priv *pp = ap->private_data; 2044 struct mv_port_priv *pp = ap->private_data;
1992 struct mv_crqb_iie *crqb; 2045 struct mv_crqb_iie *crqb;
1993 struct ata_taskfile *tf; 2046 struct ata_taskfile *tf = &qc->tf;
1994 unsigned in_index; 2047 unsigned in_index;
1995 u32 flags = 0; 2048 u32 flags = 0;
1996 2049
1997 if ((qc->tf.protocol != ATA_PROT_DMA) && 2050 if ((tf->protocol != ATA_PROT_DMA) &&
1998 (qc->tf.protocol != ATA_PROT_NCQ)) 2051 (tf->protocol != ATA_PROT_NCQ))
1999 return; 2052 return;
2000 2053
2001 /* Fill in Gen IIE command request block */ 2054 /* Fill in Gen IIE command request block */
2002 if (!(qc->tf.flags & ATA_TFLAG_WRITE)) 2055 if (!(tf->flags & ATA_TFLAG_WRITE))
2003 flags |= CRQB_FLAG_READ; 2056 flags |= CRQB_FLAG_READ;
2004 2057
2005 WARN_ON(MV_MAX_Q_DEPTH <= qc->tag); 2058 WARN_ON(MV_MAX_Q_DEPTH <= qc->tag);
@@ -2015,7 +2068,6 @@ static void mv_qc_prep_iie(struct ata_queued_cmd *qc)
2015 crqb->addr_hi = cpu_to_le32((pp->sg_tbl_dma[qc->tag] >> 16) >> 16); 2068 crqb->addr_hi = cpu_to_le32((pp->sg_tbl_dma[qc->tag] >> 16) >> 16);
2016 crqb->flags = cpu_to_le32(flags); 2069 crqb->flags = cpu_to_le32(flags);
2017 2070
2018 tf = &qc->tf;
2019 crqb->ata_cmd[0] = cpu_to_le32( 2071 crqb->ata_cmd[0] = cpu_to_le32(
2020 (tf->command << 16) | 2072 (tf->command << 16) |
2021 (tf->feature << 24) 2073 (tf->feature << 24)
@@ -3359,6 +3411,53 @@ static void mv_soc_reset_bus(struct ata_host *host, void __iomem *mmio)
3359 return; 3411 return;
3360} 3412}
3361 3413
3414static void mv_soc_65n_phy_errata(struct mv_host_priv *hpriv,
3415 void __iomem *mmio, unsigned int port)
3416{
3417 void __iomem *port_mmio = mv_port_base(mmio, port);
3418 u32 reg;
3419
3420 reg = readl(port_mmio + PHY_MODE3);
3421 reg &= ~(0x3 << 27); /* SELMUPF (bits 28:27) to 1 */
3422 reg |= (0x1 << 27);
3423 reg &= ~(0x3 << 29); /* SELMUPI (bits 30:29) to 1 */
3424 reg |= (0x1 << 29);
3425 writel(reg, port_mmio + PHY_MODE3);
3426
3427 reg = readl(port_mmio + PHY_MODE4);
3428 reg &= ~0x1; /* SATU_OD8 (bit 0) to 0, reserved bit 16 must be set */
3429 reg |= (0x1 << 16);
3430 writel(reg, port_mmio + PHY_MODE4);
3431
3432 reg = readl(port_mmio + PHY_MODE9_GEN2);
3433 reg &= ~0xf; /* TXAMP[3:0] (bits 3:0) to 8 */
3434 reg |= 0x8;
3435 reg &= ~(0x1 << 14); /* TXAMP[4] (bit 14) to 0 */
3436 writel(reg, port_mmio + PHY_MODE9_GEN2);
3437
3438 reg = readl(port_mmio + PHY_MODE9_GEN1);
3439 reg &= ~0xf; /* TXAMP[3:0] (bits 3:0) to 8 */
3440 reg |= 0x8;
3441 reg &= ~(0x1 << 14); /* TXAMP[4] (bit 14) to 0 */
3442 writel(reg, port_mmio + PHY_MODE9_GEN1);
3443}
3444
3445/**
3446 * soc_is_65 - check if the soc is 65 nano device
3447 *
3448 * Detect the type of the SoC, this is done by reading the PHYCFG_OFS
3449 * register, this register should contain non-zero value and it exists only
3450 * in the 65 nano devices, when reading it from older devices we get 0.
3451 */
3452static bool soc_is_65n(struct mv_host_priv *hpriv)
3453{
3454 void __iomem *port0_mmio = mv_port_base(hpriv->base, 0);
3455
3456 if (readl(port0_mmio + PHYCFG_OFS))
3457 return true;
3458 return false;
3459}
3460
3362static void mv_setup_ifcfg(void __iomem *port_mmio, int want_gen2i) 3461static void mv_setup_ifcfg(void __iomem *port_mmio, int want_gen2i)
3363{ 3462{
3364 u32 ifcfg = readl(port_mmio + SATA_IFCFG); 3463 u32 ifcfg = readl(port_mmio + SATA_IFCFG);
@@ -3699,7 +3798,10 @@ static int mv_chip_id(struct ata_host *host, unsigned int board_idx)
3699 } 3798 }
3700 break; 3799 break;
3701 case chip_soc: 3800 case chip_soc:
3702 hpriv->ops = &mv_soc_ops; 3801 if (soc_is_65n(hpriv))
3802 hpriv->ops = &mv_soc_65n_ops;
3803 else
3804 hpriv->ops = &mv_soc_ops;
3703 hp_flags |= MV_HP_FLAG_SOC | MV_HP_GEN_IIE | 3805 hp_flags |= MV_HP_FLAG_SOC | MV_HP_GEN_IIE |
3704 MV_HP_ERRATA_60X1C0; 3806 MV_HP_ERRATA_60X1C0;
3705 break; 3807 break;
@@ -3762,7 +3864,8 @@ static int mv_init_host(struct ata_host *host, unsigned int board_idx)
3762 n_hc = mv_get_hc_count(host->ports[0]->flags); 3864 n_hc = mv_get_hc_count(host->ports[0]->flags);
3763 3865
3764 for (port = 0; port < host->n_ports; port++) 3866 for (port = 0; port < host->n_ports; port++)
3765 hpriv->ops->read_preamp(hpriv, port, mmio); 3867 if (hpriv->ops->read_preamp)
3868 hpriv->ops->read_preamp(hpriv, port, mmio);
3766 3869
3767 rc = hpriv->ops->reset_hc(hpriv, mmio, n_hc); 3870 rc = hpriv->ops->reset_hc(hpriv, mmio, n_hc);
3768 if (rc) 3871 if (rc)
diff --git a/drivers/ata/sata_sx4.c b/drivers/ata/sata_sx4.c
index dce3dccced3f..eb05a3c82a9e 100644
--- a/drivers/ata/sata_sx4.c
+++ b/drivers/ata/sata_sx4.c
@@ -213,8 +213,9 @@ struct pdc_host_priv {
213 213
214 214
215static int pdc_sata_init_one(struct pci_dev *pdev, const struct pci_device_id *ent); 215static int pdc_sata_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
216static void pdc_eng_timeout(struct ata_port *ap); 216static void pdc_error_handler(struct ata_port *ap);
217static void pdc_20621_phy_reset(struct ata_port *ap); 217static void pdc_freeze(struct ata_port *ap);
218static void pdc_thaw(struct ata_port *ap);
218static int pdc_port_start(struct ata_port *ap); 219static int pdc_port_start(struct ata_port *ap);
219static void pdc20621_qc_prep(struct ata_queued_cmd *qc); 220static void pdc20621_qc_prep(struct ata_queued_cmd *qc);
220static void pdc_tf_load_mmio(struct ata_port *ap, const struct ata_taskfile *tf); 221static void pdc_tf_load_mmio(struct ata_port *ap, const struct ata_taskfile *tf);
@@ -233,6 +234,10 @@ static void pdc20621_put_to_dimm(struct ata_host *host,
233 void *psource, u32 offset, u32 size); 234 void *psource, u32 offset, u32 size);
234static void pdc20621_irq_clear(struct ata_port *ap); 235static void pdc20621_irq_clear(struct ata_port *ap);
235static unsigned int pdc20621_qc_issue(struct ata_queued_cmd *qc); 236static unsigned int pdc20621_qc_issue(struct ata_queued_cmd *qc);
237static int pdc_softreset(struct ata_link *link, unsigned int *class,
238 unsigned long deadline);
239static void pdc_post_internal_cmd(struct ata_queued_cmd *qc);
240static int pdc_check_atapi_dma(struct ata_queued_cmd *qc);
236 241
237 242
238static struct scsi_host_template pdc_sata_sht = { 243static struct scsi_host_template pdc_sata_sht = {
@@ -243,20 +248,24 @@ static struct scsi_host_template pdc_sata_sht = {
243 248
244/* TODO: inherit from base port_ops after converting to new EH */ 249/* TODO: inherit from base port_ops after converting to new EH */
245static struct ata_port_operations pdc_20621_ops = { 250static struct ata_port_operations pdc_20621_ops = {
246 .sff_tf_load = pdc_tf_load_mmio, 251 .inherits = &ata_sff_port_ops,
247 .sff_tf_read = ata_sff_tf_read, 252
248 .sff_check_status = ata_sff_check_status, 253 .check_atapi_dma = pdc_check_atapi_dma,
249 .sff_exec_command = pdc_exec_command_mmio,
250 .sff_dev_select = ata_sff_dev_select,
251 .phy_reset = pdc_20621_phy_reset,
252 .qc_prep = pdc20621_qc_prep, 254 .qc_prep = pdc20621_qc_prep,
253 .qc_issue = pdc20621_qc_issue, 255 .qc_issue = pdc20621_qc_issue,
254 .qc_fill_rtf = ata_sff_qc_fill_rtf, 256
255 .sff_data_xfer = ata_sff_data_xfer, 257 .freeze = pdc_freeze,
256 .eng_timeout = pdc_eng_timeout, 258 .thaw = pdc_thaw,
257 .sff_irq_clear = pdc20621_irq_clear, 259 .softreset = pdc_softreset,
258 .sff_irq_on = ata_sff_irq_on, 260 .error_handler = pdc_error_handler,
261 .lost_interrupt = ATA_OP_NULL,
262 .post_internal_cmd = pdc_post_internal_cmd,
263
259 .port_start = pdc_port_start, 264 .port_start = pdc_port_start,
265
266 .sff_tf_load = pdc_tf_load_mmio,
267 .sff_exec_command = pdc_exec_command_mmio,
268 .sff_irq_clear = pdc20621_irq_clear,
260}; 269};
261 270
262static const struct ata_port_info pdc_port_info[] = { 271static const struct ata_port_info pdc_port_info[] = {
@@ -310,14 +319,6 @@ static int pdc_port_start(struct ata_port *ap)
310 return 0; 319 return 0;
311} 320}
312 321
313static void pdc_20621_phy_reset(struct ata_port *ap)
314{
315 VPRINTK("ENTER\n");
316 ap->cbl = ATA_CBL_SATA;
317 ata_port_probe(ap);
318 ata_bus_reset(ap);
319}
320
321static inline void pdc20621_ata_sg(struct ata_taskfile *tf, u8 *buf, 322static inline void pdc20621_ata_sg(struct ata_taskfile *tf, u8 *buf,
322 unsigned int portno, 323 unsigned int portno,
323 unsigned int total_len) 324 unsigned int total_len)
@@ -686,8 +687,11 @@ static void pdc20621_packet_start(struct ata_queued_cmd *qc)
686static unsigned int pdc20621_qc_issue(struct ata_queued_cmd *qc) 687static unsigned int pdc20621_qc_issue(struct ata_queued_cmd *qc)
687{ 688{
688 switch (qc->tf.protocol) { 689 switch (qc->tf.protocol) {
689 case ATA_PROT_DMA:
690 case ATA_PROT_NODATA: 690 case ATA_PROT_NODATA:
691 if (qc->tf.flags & ATA_TFLAG_POLLING)
692 break;
693 /*FALLTHROUGH*/
694 case ATA_PROT_DMA:
691 pdc20621_packet_start(qc); 695 pdc20621_packet_start(qc);
692 return 0; 696 return 0;
693 697
@@ -786,12 +790,7 @@ static inline unsigned int pdc20621_host_intr(struct ata_port *ap,
786 790
787static void pdc20621_irq_clear(struct ata_port *ap) 791static void pdc20621_irq_clear(struct ata_port *ap)
788{ 792{
789 struct ata_host *host = ap->host; 793 ioread8(ap->ioaddr.status_addr);
790 void __iomem *mmio = host->iomap[PDC_MMIO_BAR];
791
792 mmio += PDC_CHIP0_OFS;
793
794 readl(mmio + PDC_20621_SEQMASK);
795} 794}
796 795
797static irqreturn_t pdc20621_interrupt(int irq, void *dev_instance) 796static irqreturn_t pdc20621_interrupt(int irq, void *dev_instance)
@@ -859,46 +858,119 @@ static irqreturn_t pdc20621_interrupt(int irq, void *dev_instance)
859 return IRQ_RETVAL(handled); 858 return IRQ_RETVAL(handled);
860} 859}
861 860
862static void pdc_eng_timeout(struct ata_port *ap) 861static void pdc_freeze(struct ata_port *ap)
863{ 862{
864 u8 drv_stat; 863 void __iomem *mmio = ap->ioaddr.cmd_addr;
865 struct ata_host *host = ap->host; 864 u32 tmp;
866 struct ata_queued_cmd *qc;
867 unsigned long flags;
868 865
869 DPRINTK("ENTER\n"); 866 /* FIXME: if all 4 ATA engines are stopped, also stop HDMA engine */
870 867
871 spin_lock_irqsave(&host->lock, flags); 868 tmp = readl(mmio + PDC_CTLSTAT);
869 tmp |= PDC_MASK_INT;
870 tmp &= ~PDC_DMA_ENABLE;
871 writel(tmp, mmio + PDC_CTLSTAT);
872 readl(mmio + PDC_CTLSTAT); /* flush */
873}
872 874
873 qc = ata_qc_from_tag(ap, ap->link.active_tag); 875static void pdc_thaw(struct ata_port *ap)
876{
877 void __iomem *mmio = ap->ioaddr.cmd_addr;
878 u32 tmp;
874 879
875 switch (qc->tf.protocol) { 880 /* FIXME: start HDMA engine, if zero ATA engines running */
876 case ATA_PROT_DMA:
877 case ATA_PROT_NODATA:
878 ata_port_printk(ap, KERN_ERR, "command timeout\n");
879 qc->err_mask |= __ac_err_mask(ata_wait_idle(ap));
880 break;
881 881
882 default: 882 /* clear IRQ */
883 drv_stat = ata_sff_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000); 883 ioread8(ap->ioaddr.status_addr);
884 884
885 ata_port_printk(ap, KERN_ERR, 885 /* turn IRQ back on */
886 "unknown timeout, cmd 0x%x stat 0x%x\n", 886 tmp = readl(mmio + PDC_CTLSTAT);
887 qc->tf.command, drv_stat); 887 tmp &= ~PDC_MASK_INT;
888 writel(tmp, mmio + PDC_CTLSTAT);
889 readl(mmio + PDC_CTLSTAT); /* flush */
890}
888 891
889 qc->err_mask |= ac_err_mask(drv_stat); 892static void pdc_reset_port(struct ata_port *ap)
890 break; 893{
894 void __iomem *mmio = ap->ioaddr.cmd_addr + PDC_CTLSTAT;
895 unsigned int i;
896 u32 tmp;
897
898 /* FIXME: handle HDMA copy engine */
899
900 for (i = 11; i > 0; i--) {
901 tmp = readl(mmio);
902 if (tmp & PDC_RESET)
903 break;
904
905 udelay(100);
906
907 tmp |= PDC_RESET;
908 writel(tmp, mmio);
891 } 909 }
892 910
893 spin_unlock_irqrestore(&host->lock, flags); 911 tmp &= ~PDC_RESET;
894 ata_eh_qc_complete(qc); 912 writel(tmp, mmio);
895 DPRINTK("EXIT\n"); 913 readl(mmio); /* flush */
914}
915
916static int pdc_softreset(struct ata_link *link, unsigned int *class,
917 unsigned long deadline)
918{
919 pdc_reset_port(link->ap);
920 return ata_sff_softreset(link, class, deadline);
921}
922
923static void pdc_error_handler(struct ata_port *ap)
924{
925 if (!(ap->pflags & ATA_PFLAG_FROZEN))
926 pdc_reset_port(ap);
927
928 ata_std_error_handler(ap);
929}
930
931static void pdc_post_internal_cmd(struct ata_queued_cmd *qc)
932{
933 struct ata_port *ap = qc->ap;
934
935 /* make DMA engine forget about the failed command */
936 if (qc->flags & ATA_QCFLAG_FAILED)
937 pdc_reset_port(ap);
938}
939
940static int pdc_check_atapi_dma(struct ata_queued_cmd *qc)
941{
942 u8 *scsicmd = qc->scsicmd->cmnd;
943 int pio = 1; /* atapi dma off by default */
944
945 /* Whitelist commands that may use DMA. */
946 switch (scsicmd[0]) {
947 case WRITE_12:
948 case WRITE_10:
949 case WRITE_6:
950 case READ_12:
951 case READ_10:
952 case READ_6:
953 case 0xad: /* READ_DVD_STRUCTURE */
954 case 0xbe: /* READ_CD */
955 pio = 0;
956 }
957 /* -45150 (FFFF4FA2) to -1 (FFFFFFFF) shall use PIO mode */
958 if (scsicmd[0] == WRITE_10) {
959 unsigned int lba =
960 (scsicmd[2] << 24) |
961 (scsicmd[3] << 16) |
962 (scsicmd[4] << 8) |
963 scsicmd[5];
964 if (lba >= 0xFFFF4FA2)
965 pio = 1;
966 }
967 return pio;
896} 968}
897 969
898static void pdc_tf_load_mmio(struct ata_port *ap, const struct ata_taskfile *tf) 970static void pdc_tf_load_mmio(struct ata_port *ap, const struct ata_taskfile *tf)
899{ 971{
900 WARN_ON(tf->protocol == ATA_PROT_DMA || 972 WARN_ON(tf->protocol == ATA_PROT_DMA ||
901 tf->protocol == ATA_PROT_NODATA); 973 tf->protocol == ATAPI_PROT_DMA);
902 ata_sff_tf_load(ap, tf); 974 ata_sff_tf_load(ap, tf);
903} 975}
904 976
@@ -906,7 +978,7 @@ static void pdc_tf_load_mmio(struct ata_port *ap, const struct ata_taskfile *tf)
906static void pdc_exec_command_mmio(struct ata_port *ap, const struct ata_taskfile *tf) 978static void pdc_exec_command_mmio(struct ata_port *ap, const struct ata_taskfile *tf)
907{ 979{
908 WARN_ON(tf->protocol == ATA_PROT_DMA || 980 WARN_ON(tf->protocol == ATA_PROT_DMA ||
909 tf->protocol == ATA_PROT_NODATA); 981 tf->protocol == ATAPI_PROT_DMA);
910 ata_sff_exec_command(ap, tf); 982 ata_sff_exec_command(ap, tf);
911} 983}
912 984
diff --git a/drivers/atm/solos-pci.c b/drivers/atm/solos-pci.c
index be204308cc1b..9359613addc5 100644
--- a/drivers/atm/solos-pci.c
+++ b/drivers/atm/solos-pci.c
@@ -1059,7 +1059,7 @@ static int fpga_probe(struct pci_dev *dev, const struct pci_device_id *id)
1059 goto out; 1059 goto out;
1060 } 1060 }
1061 1061
1062 err = pci_set_dma_mask(dev, DMA_32BIT_MASK); 1062 err = pci_set_dma_mask(dev, DMA_BIT_MASK(32));
1063 if (err) { 1063 if (err) {
1064 dev_warn(&dev->dev, "Failed to set 32-bit DMA mask\n"); 1064 dev_warn(&dev->dev, "Failed to set 32-bit DMA mask\n");
1065 goto out; 1065 goto out;
diff --git a/drivers/base/base.h b/drivers/base/base.h
index ddc97496db4a..b528145a078f 100644
--- a/drivers/base/base.h
+++ b/drivers/base/base.h
@@ -115,7 +115,7 @@ extern int driver_probe_device(struct device_driver *drv, struct device *dev);
115static inline int driver_match_device(struct device_driver *drv, 115static inline int driver_match_device(struct device_driver *drv,
116 struct device *dev) 116 struct device *dev)
117{ 117{
118 return drv->bus->match && drv->bus->match(dev, drv); 118 return drv->bus->match ? drv->bus->match(dev, drv) : 1;
119} 119}
120 120
121extern void sysdev_shutdown(void); 121extern void sysdev_shutdown(void);
diff --git a/drivers/base/core.c b/drivers/base/core.c
index e73c92d13a23..4aa527b8a913 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -891,7 +891,8 @@ int device_add(struct device *dev)
891 set_dev_node(dev, dev_to_node(parent)); 891 set_dev_node(dev, dev_to_node(parent));
892 892
893 /* first, register with generic layer. */ 893 /* first, register with generic layer. */
894 error = kobject_add(&dev->kobj, dev->kobj.parent, "%s", dev_name(dev)); 894 /* we require the name to be set before, and pass NULL */
895 error = kobject_add(&dev->kobj, dev->kobj.parent, NULL);
895 if (error) 896 if (error)
896 goto Error; 897 goto Error;
897 898
@@ -1142,6 +1143,9 @@ int device_for_each_child(struct device *parent, void *data,
1142 struct device *child; 1143 struct device *child;
1143 int error = 0; 1144 int error = 0;
1144 1145
1146 if (!parent->p)
1147 return 0;
1148
1145 klist_iter_init(&parent->p->klist_children, &i); 1149 klist_iter_init(&parent->p->klist_children, &i);
1146 while ((child = next_device(&i)) && !error) 1150 while ((child = next_device(&i)) && !error)
1147 error = fn(child, data); 1151 error = fn(child, data);
diff --git a/drivers/base/dd.c b/drivers/base/dd.c
index f17c3266a0e0..742cbe6b042b 100644
--- a/drivers/base/dd.c
+++ b/drivers/base/dd.c
@@ -179,6 +179,7 @@ void wait_for_device_probe(void)
179 wait_event(probe_waitqueue, atomic_read(&probe_count) == 0); 179 wait_event(probe_waitqueue, atomic_read(&probe_count) == 0);
180 async_synchronize_full(); 180 async_synchronize_full();
181} 181}
182EXPORT_SYMBOL_GPL(wait_for_device_probe);
182 183
183/** 184/**
184 * driver_probe_device - attempt to bind device & driver together 185 * driver_probe_device - attempt to bind device & driver together
diff --git a/drivers/base/iommu.c b/drivers/base/iommu.c
index 9f0e672f4be8..8ad4ffea6920 100644
--- a/drivers/base/iommu.c
+++ b/drivers/base/iommu.c
@@ -18,6 +18,8 @@
18 18
19#include <linux/bug.h> 19#include <linux/bug.h>
20#include <linux/types.h> 20#include <linux/types.h>
21#include <linux/module.h>
22#include <linux/slab.h>
21#include <linux/errno.h> 23#include <linux/errno.h>
22#include <linux/iommu.h> 24#include <linux/iommu.h>
23 25
diff --git a/drivers/base/platform.c b/drivers/base/platform.c
index d2198f64ad4e..8b4708e06244 100644
--- a/drivers/base/platform.c
+++ b/drivers/base/platform.c
@@ -217,7 +217,6 @@ int platform_device_add_data(struct platform_device *pdev, const void *data,
217 if (d) { 217 if (d) {
218 memcpy(d, data, size); 218 memcpy(d, data, size);
219 pdev->dev.platform_data = d; 219 pdev->dev.platform_data = d;
220 pdev->platform_data = d;
221 } 220 }
222 return d ? 0 : -ENOMEM; 221 return d ? 0 : -ENOMEM;
223} 222}
@@ -247,21 +246,6 @@ int platform_device_add(struct platform_device *pdev)
247 else 246 else
248 dev_set_name(&pdev->dev, pdev->name); 247 dev_set_name(&pdev->dev, pdev->name);
249 248
250 /* We will remove platform_data field from struct device
251 * if all platform devices pass its platform specific data
252 * from platform_device. The conversion is going to be a
253 * long time, so we allow the two cases coexist to make
254 * this kind of fix more easily*/
255 if (pdev->platform_data && pdev->dev.platform_data) {
256 printk(KERN_ERR
257 "%s: use which platform_data?\n",
258 dev_name(&pdev->dev));
259 } else if (pdev->platform_data) {
260 pdev->dev.platform_data = pdev->platform_data;
261 } else if (pdev->dev.platform_data) {
262 pdev->platform_data = pdev->dev.platform_data;
263 }
264
265 for (i = 0; i < pdev->num_resources; i++) { 249 for (i = 0; i < pdev->num_resources; i++) {
266 struct resource *p, *r = &pdev->resource[i]; 250 struct resource *p, *r = &pdev->resource[i];
267 251
@@ -990,6 +974,8 @@ int __init platform_bus_init(void)
990{ 974{
991 int error; 975 int error;
992 976
977 early_platform_cleanup();
978
993 error = device_register(&platform_bus); 979 error = device_register(&platform_bus);
994 if (error) 980 if (error)
995 return error; 981 return error;
@@ -1020,3 +1006,240 @@ u64 dma_get_required_mask(struct device *dev)
1020} 1006}
1021EXPORT_SYMBOL_GPL(dma_get_required_mask); 1007EXPORT_SYMBOL_GPL(dma_get_required_mask);
1022#endif 1008#endif
1009
1010static __initdata LIST_HEAD(early_platform_driver_list);
1011static __initdata LIST_HEAD(early_platform_device_list);
1012
1013/**
1014 * early_platform_driver_register
1015 * @epdrv: early_platform driver structure
1016 * @buf: string passed from early_param()
1017 */
1018int __init early_platform_driver_register(struct early_platform_driver *epdrv,
1019 char *buf)
1020{
1021 unsigned long index;
1022 int n;
1023
1024 /* Simply add the driver to the end of the global list.
1025 * Drivers will by default be put on the list in compiled-in order.
1026 */
1027 if (!epdrv->list.next) {
1028 INIT_LIST_HEAD(&epdrv->list);
1029 list_add_tail(&epdrv->list, &early_platform_driver_list);
1030 }
1031
1032 /* If the user has specified device then make sure the driver
1033 * gets prioritized. The driver of the last device specified on
1034 * command line will be put first on the list.
1035 */
1036 n = strlen(epdrv->pdrv->driver.name);
1037 if (buf && !strncmp(buf, epdrv->pdrv->driver.name, n)) {
1038 list_move(&epdrv->list, &early_platform_driver_list);
1039
1040 if (!strcmp(buf, epdrv->pdrv->driver.name))
1041 epdrv->requested_id = -1;
1042 else if (buf[n] == '.' && strict_strtoul(&buf[n + 1], 10,
1043 &index) == 0)
1044 epdrv->requested_id = index;
1045 else
1046 epdrv->requested_id = EARLY_PLATFORM_ID_ERROR;
1047 }
1048
1049 return 0;
1050}
1051
1052/**
1053 * early_platform_add_devices - add a numbers of early platform devices
1054 * @devs: array of early platform devices to add
1055 * @num: number of early platform devices in array
1056 */
1057void __init early_platform_add_devices(struct platform_device **devs, int num)
1058{
1059 struct device *dev;
1060 int i;
1061
1062 /* simply add the devices to list */
1063 for (i = 0; i < num; i++) {
1064 dev = &devs[i]->dev;
1065
1066 if (!dev->devres_head.next) {
1067 INIT_LIST_HEAD(&dev->devres_head);
1068 list_add_tail(&dev->devres_head,
1069 &early_platform_device_list);
1070 }
1071 }
1072}
1073
1074/**
1075 * early_platform_driver_register_all
1076 * @class_str: string to identify early platform driver class
1077 */
1078void __init early_platform_driver_register_all(char *class_str)
1079{
1080 /* The "class_str" parameter may or may not be present on the kernel
1081 * command line. If it is present then there may be more than one
1082 * matching parameter.
1083 *
1084 * Since we register our early platform drivers using early_param()
1085 * we need to make sure that they also get registered in the case
1086 * when the parameter is missing from the kernel command line.
1087 *
1088 * We use parse_early_options() to make sure the early_param() gets
1089 * called at least once. The early_param() may be called more than
1090 * once since the name of the preferred device may be specified on
1091 * the kernel command line. early_platform_driver_register() handles
1092 * this case for us.
1093 */
1094 parse_early_options(class_str);
1095}
1096
1097/**
1098 * early_platform_match
1099 * @epdrv: early platform driver structure
1100 * @id: id to match against
1101 */
1102static __init struct platform_device *
1103early_platform_match(struct early_platform_driver *epdrv, int id)
1104{
1105 struct platform_device *pd;
1106
1107 list_for_each_entry(pd, &early_platform_device_list, dev.devres_head)
1108 if (platform_match(&pd->dev, &epdrv->pdrv->driver))
1109 if (pd->id == id)
1110 return pd;
1111
1112 return NULL;
1113}
1114
1115/**
1116 * early_platform_left
1117 * @epdrv: early platform driver structure
1118 * @id: return true if id or above exists
1119 */
1120static __init int early_platform_left(struct early_platform_driver *epdrv,
1121 int id)
1122{
1123 struct platform_device *pd;
1124
1125 list_for_each_entry(pd, &early_platform_device_list, dev.devres_head)
1126 if (platform_match(&pd->dev, &epdrv->pdrv->driver))
1127 if (pd->id >= id)
1128 return 1;
1129
1130 return 0;
1131}
1132
1133/**
1134 * early_platform_driver_probe_id
1135 * @class_str: string to identify early platform driver class
1136 * @id: id to match against
1137 * @nr_probe: number of platform devices to successfully probe before exiting
1138 */
1139static int __init early_platform_driver_probe_id(char *class_str,
1140 int id,
1141 int nr_probe)
1142{
1143 struct early_platform_driver *epdrv;
1144 struct platform_device *match;
1145 int match_id;
1146 int n = 0;
1147 int left = 0;
1148
1149 list_for_each_entry(epdrv, &early_platform_driver_list, list) {
1150 /* only use drivers matching our class_str */
1151 if (strcmp(class_str, epdrv->class_str))
1152 continue;
1153
1154 if (id == -2) {
1155 match_id = epdrv->requested_id;
1156 left = 1;
1157
1158 } else {
1159 match_id = id;
1160 left += early_platform_left(epdrv, id);
1161
1162 /* skip requested id */
1163 switch (epdrv->requested_id) {
1164 case EARLY_PLATFORM_ID_ERROR:
1165 case EARLY_PLATFORM_ID_UNSET:
1166 break;
1167 default:
1168 if (epdrv->requested_id == id)
1169 match_id = EARLY_PLATFORM_ID_UNSET;
1170 }
1171 }
1172
1173 switch (match_id) {
1174 case EARLY_PLATFORM_ID_ERROR:
1175 pr_warning("%s: unable to parse %s parameter\n",
1176 class_str, epdrv->pdrv->driver.name);
1177 /* fall-through */
1178 case EARLY_PLATFORM_ID_UNSET:
1179 match = NULL;
1180 break;
1181 default:
1182 match = early_platform_match(epdrv, match_id);
1183 }
1184
1185 if (match) {
1186 if (epdrv->pdrv->probe(match))
1187 pr_warning("%s: unable to probe %s early.\n",
1188 class_str, match->name);
1189 else
1190 n++;
1191 }
1192
1193 if (n >= nr_probe)
1194 break;
1195 }
1196
1197 if (left)
1198 return n;
1199 else
1200 return -ENODEV;
1201}
1202
1203/**
1204 * early_platform_driver_probe
1205 * @class_str: string to identify early platform driver class
1206 * @nr_probe: number of platform devices to successfully probe before exiting
1207 * @user_only: only probe user specified early platform devices
1208 */
1209int __init early_platform_driver_probe(char *class_str,
1210 int nr_probe,
1211 int user_only)
1212{
1213 int k, n, i;
1214
1215 n = 0;
1216 for (i = -2; n < nr_probe; i++) {
1217 k = early_platform_driver_probe_id(class_str, i, nr_probe - n);
1218
1219 if (k < 0)
1220 break;
1221
1222 n += k;
1223
1224 if (user_only)
1225 break;
1226 }
1227
1228 return n;
1229}
1230
1231/**
1232 * early_platform_cleanup - clean up early platform code
1233 */
1234void __init early_platform_cleanup(void)
1235{
1236 struct platform_device *pd, *pd2;
1237
1238 /* clean up the devres list used to chain devices */
1239 list_for_each_entry_safe(pd, pd2, &early_platform_device_list,
1240 dev.devres_head) {
1241 list_del(&pd->dev.devres_head);
1242 memset(&pd->dev.devres_head, 0, sizeof(pd->dev.devres_head));
1243 }
1244}
1245
diff --git a/drivers/block/brd.c b/drivers/block/brd.c
index bdd4f5f45575..5f7e64ba87e5 100644
--- a/drivers/block/brd.c
+++ b/drivers/block/brd.c
@@ -275,8 +275,10 @@ static int brd_do_bvec(struct brd_device *brd, struct page *page,
275 if (rw == READ) { 275 if (rw == READ) {
276 copy_from_brd(mem + off, brd, sector, len); 276 copy_from_brd(mem + off, brd, sector, len);
277 flush_dcache_page(page); 277 flush_dcache_page(page);
278 } else 278 } else {
279 flush_dcache_page(page);
279 copy_to_brd(brd, mem + off, sector, len); 280 copy_to_brd(brd, mem + off, sector, len);
281 }
280 kunmap_atomic(mem, KM_USER0); 282 kunmap_atomic(mem, KM_USER0);
281 283
282out: 284out:
@@ -436,6 +438,7 @@ static struct brd_device *brd_alloc(int i)
436 if (!brd->brd_queue) 438 if (!brd->brd_queue)
437 goto out_free_dev; 439 goto out_free_dev;
438 blk_queue_make_request(brd->brd_queue, brd_make_request); 440 blk_queue_make_request(brd->brd_queue, brd_make_request);
441 blk_queue_ordered(brd->brd_queue, QUEUE_ORDERED_TAG, NULL);
439 blk_queue_max_sectors(brd->brd_queue, 1024); 442 blk_queue_max_sectors(brd->brd_queue, 1024);
440 blk_queue_bounce_limit(brd->brd_queue, BLK_BOUNCE_ANY); 443 blk_queue_bounce_limit(brd->brd_queue, BLK_BOUNCE_ANY);
441 444
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
index 0ef6f08aa6ea..4d4d5e0d3fa6 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
@@ -3505,7 +3505,7 @@ static __devinit int cciss_message(struct pci_dev *pdev, unsigned char opcode, u
3505 /* The Inbound Post Queue only accepts 32-bit physical addresses for the 3505 /* The Inbound Post Queue only accepts 32-bit physical addresses for the
3506 CCISS commands, so they must be allocated from the lower 4GiB of 3506 CCISS commands, so they must be allocated from the lower 4GiB of
3507 memory. */ 3507 memory. */
3508 err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 3508 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
3509 if (err) { 3509 if (err) {
3510 iounmap(vaddr); 3510 iounmap(vaddr);
3511 return -ENOMEM; 3511 return -ENOMEM;
diff --git a/drivers/block/hd.c b/drivers/block/hd.c
index 3c11f062a18c..baaa9e486e50 100644
--- a/drivers/block/hd.c
+++ b/drivers/block/hd.c
@@ -509,7 +509,6 @@ ok_to_write:
509 if (i > 0) { 509 if (i > 0) {
510 SET_HANDLER(&write_intr); 510 SET_HANDLER(&write_intr);
511 outsw(HD_DATA, req->buffer, 256); 511 outsw(HD_DATA, req->buffer, 256);
512 local_irq_enable();
513 } else { 512 } else {
514#if (HD_DELAY > 0) 513#if (HD_DELAY > 0)
515 last_req = read_timer(); 514 last_req = read_timer();
@@ -541,8 +540,7 @@ static void hd_times_out(unsigned long dummy)
541 if (!CURRENT) 540 if (!CURRENT)
542 return; 541 return;
543 542
544 disable_irq(HD_IRQ); 543 spin_lock_irq(hd_queue->queue_lock);
545 local_irq_enable();
546 reset = 1; 544 reset = 1;
547 name = CURRENT->rq_disk->disk_name; 545 name = CURRENT->rq_disk->disk_name;
548 printk("%s: timeout\n", name); 546 printk("%s: timeout\n", name);
@@ -552,9 +550,8 @@ static void hd_times_out(unsigned long dummy)
552#endif 550#endif
553 end_request(CURRENT, 0); 551 end_request(CURRENT, 0);
554 } 552 }
555 local_irq_disable();
556 hd_request(); 553 hd_request();
557 enable_irq(HD_IRQ); 554 spin_unlock_irq(hd_queue->queue_lock);
558} 555}
559 556
560static int do_special_op(struct hd_i_struct *disk, struct request *req) 557static int do_special_op(struct hd_i_struct *disk, struct request *req)
@@ -592,7 +589,6 @@ static void hd_request(void)
592 return; 589 return;
593repeat: 590repeat:
594 del_timer(&device_timer); 591 del_timer(&device_timer);
595 local_irq_enable();
596 592
597 req = CURRENT; 593 req = CURRENT;
598 if (!req) { 594 if (!req) {
@@ -601,7 +597,6 @@ repeat:
601 } 597 }
602 598
603 if (reset) { 599 if (reset) {
604 local_irq_disable();
605 reset_hd(); 600 reset_hd();
606 return; 601 return;
607 } 602 }
@@ -660,9 +655,7 @@ repeat:
660 655
661static void do_hd_request(struct request_queue *q) 656static void do_hd_request(struct request_queue *q)
662{ 657{
663 disable_irq(HD_IRQ);
664 hd_request(); 658 hd_request();
665 enable_irq(HD_IRQ);
666} 659}
667 660
668static int hd_getgeo(struct block_device *bdev, struct hd_geometry *geo) 661static int hd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
@@ -684,12 +677,16 @@ static irqreturn_t hd_interrupt(int irq, void *dev_id)
684{ 677{
685 void (*handler)(void) = do_hd; 678 void (*handler)(void) = do_hd;
686 679
680 spin_lock(hd_queue->queue_lock);
681
687 do_hd = NULL; 682 do_hd = NULL;
688 del_timer(&device_timer); 683 del_timer(&device_timer);
689 if (!handler) 684 if (!handler)
690 handler = unexpected_hd_interrupt; 685 handler = unexpected_hd_interrupt;
691 handler(); 686 handler();
692 local_irq_enable(); 687
688 spin_unlock(hd_queue->queue_lock);
689
693 return IRQ_HANDLED; 690 return IRQ_HANDLED;
694} 691}
695 692
diff --git a/drivers/block/mg_disk.c b/drivers/block/mg_disk.c
index fb39d9aa3cdc..f3898353d0a8 100644
--- a/drivers/block/mg_disk.c
+++ b/drivers/block/mg_disk.c
@@ -79,7 +79,7 @@ static void mg_dump_status(const char *msg, unsigned int stat,
79 if (host->breq) { 79 if (host->breq) {
80 req = elv_next_request(host->breq); 80 req = elv_next_request(host->breq);
81 if (req) 81 if (req)
82 printk(", sector=%ld", req->sector); 82 printk(", sector=%u", (u32)req->sector);
83 } 83 }
84 84
85 } 85 }
@@ -160,11 +160,16 @@ static irqreturn_t mg_irq(int irq, void *dev_id)
160 struct mg_host *host = dev_id; 160 struct mg_host *host = dev_id;
161 void (*handler)(struct mg_host *) = host->mg_do_intr; 161 void (*handler)(struct mg_host *) = host->mg_do_intr;
162 162
163 host->mg_do_intr = 0; 163 spin_lock(&host->lock);
164
165 host->mg_do_intr = NULL;
164 del_timer(&host->timer); 166 del_timer(&host->timer);
165 if (!handler) 167 if (!handler)
166 handler = mg_unexpected_intr; 168 handler = mg_unexpected_intr;
167 handler(host); 169 handler(host);
170
171 spin_unlock(&host->lock);
172
168 return IRQ_HANDLED; 173 return IRQ_HANDLED;
169} 174}
170 175
@@ -319,7 +324,7 @@ static void mg_read(struct request *req)
319 324
320 remains = req->nr_sectors; 325 remains = req->nr_sectors;
321 326
322 if (mg_out(host, req->sector, req->nr_sectors, MG_CMD_RD, 0) != 327 if (mg_out(host, req->sector, req->nr_sectors, MG_CMD_RD, NULL) !=
323 MG_ERR_NONE) 328 MG_ERR_NONE)
324 mg_bad_rw_intr(host); 329 mg_bad_rw_intr(host);
325 330
@@ -363,7 +368,7 @@ static void mg_write(struct request *req)
363 368
364 remains = req->nr_sectors; 369 remains = req->nr_sectors;
365 370
366 if (mg_out(host, req->sector, req->nr_sectors, MG_CMD_WR, 0) != 371 if (mg_out(host, req->sector, req->nr_sectors, MG_CMD_WR, NULL) !=
367 MG_ERR_NONE) { 372 MG_ERR_NONE) {
368 mg_bad_rw_intr(host); 373 mg_bad_rw_intr(host);
369 return; 374 return;
@@ -521,9 +526,11 @@ void mg_times_out(unsigned long data)
521 char *name; 526 char *name;
522 struct request *req; 527 struct request *req;
523 528
529 spin_lock_irq(&host->lock);
530
524 req = elv_next_request(host->breq); 531 req = elv_next_request(host->breq);
525 if (!req) 532 if (!req)
526 return; 533 goto out_unlock;
527 534
528 host->mg_do_intr = NULL; 535 host->mg_do_intr = NULL;
529 536
@@ -534,6 +541,8 @@ void mg_times_out(unsigned long data)
534 mg_bad_rw_intr(host); 541 mg_bad_rw_intr(host);
535 542
536 mg_request(host->breq); 543 mg_request(host->breq);
544out_unlock:
545 spin_unlock_irq(&host->lock);
537} 546}
538 547
539static void mg_request_poll(struct request_queue *q) 548static void mg_request_poll(struct request_queue *q)
diff --git a/drivers/block/ub.c b/drivers/block/ub.c
index 69b7f8e77596..689cd27ac890 100644
--- a/drivers/block/ub.c
+++ b/drivers/block/ub.c
@@ -1025,6 +1025,7 @@ static void ub_scsi_urb_compl(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
1025{ 1025{
1026 struct urb *urb = &sc->work_urb; 1026 struct urb *urb = &sc->work_urb;
1027 struct bulk_cs_wrap *bcs; 1027 struct bulk_cs_wrap *bcs;
1028 int endp;
1028 int len; 1029 int len;
1029 int rc; 1030 int rc;
1030 1031
@@ -1033,6 +1034,10 @@ static void ub_scsi_urb_compl(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
1033 return; 1034 return;
1034 } 1035 }
1035 1036
1037 endp = usb_pipeendpoint(sc->last_pipe);
1038 if (usb_pipein(sc->last_pipe))
1039 endp |= USB_DIR_IN;
1040
1036 if (cmd->state == UB_CMDST_CLEAR) { 1041 if (cmd->state == UB_CMDST_CLEAR) {
1037 if (urb->status == -EPIPE) { 1042 if (urb->status == -EPIPE) {
1038 /* 1043 /*
@@ -1048,9 +1053,7 @@ static void ub_scsi_urb_compl(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
1048 * We ignore the result for the halt clear. 1053 * We ignore the result for the halt clear.
1049 */ 1054 */
1050 1055
1051 /* reset the endpoint toggle */ 1056 usb_reset_endpoint(sc->dev, endp);
1052 usb_settoggle(sc->dev, usb_pipeendpoint(sc->last_pipe),
1053 usb_pipeout(sc->last_pipe), 0);
1054 1057
1055 ub_state_sense(sc, cmd); 1058 ub_state_sense(sc, cmd);
1056 1059
@@ -1065,9 +1068,7 @@ static void ub_scsi_urb_compl(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
1065 * We ignore the result for the halt clear. 1068 * We ignore the result for the halt clear.
1066 */ 1069 */
1067 1070
1068 /* reset the endpoint toggle */ 1071 usb_reset_endpoint(sc->dev, endp);
1069 usb_settoggle(sc->dev, usb_pipeendpoint(sc->last_pipe),
1070 usb_pipeout(sc->last_pipe), 0);
1071 1072
1072 ub_state_stat(sc, cmd); 1073 ub_state_stat(sc, cmd);
1073 1074
@@ -1082,9 +1083,7 @@ static void ub_scsi_urb_compl(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
1082 * We ignore the result for the halt clear. 1083 * We ignore the result for the halt clear.
1083 */ 1084 */
1084 1085
1085 /* reset the endpoint toggle */ 1086 usb_reset_endpoint(sc->dev, endp);
1086 usb_settoggle(sc->dev, usb_pipeendpoint(sc->last_pipe),
1087 usb_pipeout(sc->last_pipe), 0);
1088 1087
1089 ub_state_stat_counted(sc, cmd); 1088 ub_state_stat_counted(sc, cmd);
1090 1089
@@ -2119,8 +2118,7 @@ static int ub_probe_clear_stall(struct ub_dev *sc, int stalled_pipe)
2119 del_timer_sync(&timer); 2118 del_timer_sync(&timer);
2120 usb_kill_urb(&sc->work_urb); 2119 usb_kill_urb(&sc->work_urb);
2121 2120
2122 /* reset the endpoint toggle */ 2121 usb_reset_endpoint(sc->dev, endp);
2123 usb_settoggle(sc->dev, endp, usb_pipeout(sc->last_pipe), 0);
2124 2122
2125 return 0; 2123 return 0;
2126} 2124}
diff --git a/drivers/block/umem.c b/drivers/block/umem.c
index 9744d59a69f2..858c34dd032d 100644
--- a/drivers/block/umem.c
+++ b/drivers/block/umem.c
@@ -906,6 +906,7 @@ static int __devinit mm_pci_probe(struct pci_dev *dev,
906 goto failed_alloc; 906 goto failed_alloc;
907 907
908 blk_queue_make_request(card->queue, mm_make_request); 908 blk_queue_make_request(card->queue, mm_make_request);
909 card->queue->queue_lock = &card->lock;
909 card->queue->queuedata = card; 910 card->queue->queuedata = card;
910 card->queue->unplug_fn = mm_unplug_device; 911 card->queue->unplug_fn = mm_unplug_device;
911 912
diff --git a/drivers/char/agp/generic.c b/drivers/char/agp/generic.c
index 10d6cbd7c05e..2224b762b7fb 100644
--- a/drivers/char/agp/generic.c
+++ b/drivers/char/agp/generic.c
@@ -1226,7 +1226,7 @@ int agp_generic_alloc_pages(struct agp_bridge_data *bridge, struct agp_memory *m
1226 int i, ret = -ENOMEM; 1226 int i, ret = -ENOMEM;
1227 1227
1228 for (i = 0; i < num_pages; i++) { 1228 for (i = 0; i < num_pages; i++) {
1229 page = alloc_page(GFP_KERNEL | GFP_DMA32); 1229 page = alloc_page(GFP_KERNEL | GFP_DMA32 | __GFP_ZERO);
1230 /* agp_free_memory() needs gart address */ 1230 /* agp_free_memory() needs gart address */
1231 if (page == NULL) 1231 if (page == NULL)
1232 goto out; 1232 goto out;
@@ -1257,7 +1257,7 @@ void *agp_generic_alloc_page(struct agp_bridge_data *bridge)
1257{ 1257{
1258 struct page * page; 1258 struct page * page;
1259 1259
1260 page = alloc_page(GFP_KERNEL | GFP_DMA32); 1260 page = alloc_page(GFP_KERNEL | GFP_DMA32 | __GFP_ZERO);
1261 if (page == NULL) 1261 if (page == NULL)
1262 return NULL; 1262 return NULL;
1263 1263
diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c
index 9d9490e22e07..3686912427ba 100644
--- a/drivers/char/agp/intel-agp.c
+++ b/drivers/char/agp/intel-agp.c
@@ -2131,6 +2131,8 @@ static const struct intel_driver_description {
2131 { PCI_DEVICE_ID_INTEL_82845G_HB, PCI_DEVICE_ID_INTEL_82845G_IG, 0, "830M", 2131 { PCI_DEVICE_ID_INTEL_82845G_HB, PCI_DEVICE_ID_INTEL_82845G_IG, 0, "830M",
2132 &intel_845_driver, &intel_830_driver }, 2132 &intel_845_driver, &intel_830_driver },
2133 { PCI_DEVICE_ID_INTEL_82850_HB, 0, 0, "i850", &intel_850_driver, NULL }, 2133 { PCI_DEVICE_ID_INTEL_82850_HB, 0, 0, "i850", &intel_850_driver, NULL },
2134 { PCI_DEVICE_ID_INTEL_82854_HB, PCI_DEVICE_ID_INTEL_82854_IG, 0, "854",
2135 &intel_845_driver, &intel_830_driver },
2134 { PCI_DEVICE_ID_INTEL_82855PM_HB, 0, 0, "855PM", &intel_845_driver, NULL }, 2136 { PCI_DEVICE_ID_INTEL_82855PM_HB, 0, 0, "855PM", &intel_845_driver, NULL },
2135 { PCI_DEVICE_ID_INTEL_82855GM_HB, PCI_DEVICE_ID_INTEL_82855GM_IG, 0, "855GM", 2137 { PCI_DEVICE_ID_INTEL_82855GM_HB, PCI_DEVICE_ID_INTEL_82855GM_IG, 0, "855GM",
2136 &intel_845_driver, &intel_830_driver }, 2138 &intel_845_driver, &intel_830_driver },
@@ -2355,6 +2357,7 @@ static struct pci_device_id agp_intel_pci_table[] = {
2355 ID(PCI_DEVICE_ID_INTEL_82845_HB), 2357 ID(PCI_DEVICE_ID_INTEL_82845_HB),
2356 ID(PCI_DEVICE_ID_INTEL_82845G_HB), 2358 ID(PCI_DEVICE_ID_INTEL_82845G_HB),
2357 ID(PCI_DEVICE_ID_INTEL_82850_HB), 2359 ID(PCI_DEVICE_ID_INTEL_82850_HB),
2360 ID(PCI_DEVICE_ID_INTEL_82854_HB),
2358 ID(PCI_DEVICE_ID_INTEL_82855PM_HB), 2361 ID(PCI_DEVICE_ID_INTEL_82855PM_HB),
2359 ID(PCI_DEVICE_ID_INTEL_82855GM_HB), 2362 ID(PCI_DEVICE_ID_INTEL_82855GM_HB),
2360 ID(PCI_DEVICE_ID_INTEL_82860_HB), 2363 ID(PCI_DEVICE_ID_INTEL_82860_HB),
diff --git a/drivers/char/hpet.c b/drivers/char/hpet.c
index 50dfa3bc71ce..340ba4f9dc54 100644
--- a/drivers/char/hpet.c
+++ b/drivers/char/hpet.c
@@ -72,7 +72,7 @@ static u32 hpet_nhpet, hpet_max_freq = HPET_USER_FREQ;
72#ifdef CONFIG_IA64 72#ifdef CONFIG_IA64
73static void __iomem *hpet_mctr; 73static void __iomem *hpet_mctr;
74 74
75static cycle_t read_hpet(void) 75static cycle_t read_hpet(struct clocksource *cs)
76{ 76{
77 return (cycle_t)read_counter((void __iomem *)hpet_mctr); 77 return (cycle_t)read_counter((void __iomem *)hpet_mctr);
78} 78}
diff --git a/drivers/char/hw_random/virtio-rng.c b/drivers/char/hw_random/virtio-rng.c
index d0e563e4fc39..86e83f883139 100644
--- a/drivers/char/hw_random/virtio-rng.c
+++ b/drivers/char/hw_random/virtio-rng.c
@@ -37,9 +37,9 @@ static void random_recv_done(struct virtqueue *vq)
37{ 37{
38 int len; 38 int len;
39 39
40 /* We never get spurious callbacks. */ 40 /* We can get spurious callbacks, e.g. shared IRQs + virtio_pci. */
41 if (!vq->vq_ops->get_buf(vq, &len)) 41 if (!vq->vq_ops->get_buf(vq, &len))
42 BUG(); 42 return;
43 43
44 data_left = len / sizeof(random_data[0]); 44 data_left = len / sizeof(random_data[0]);
45 complete(&have_data); 45 complete(&have_data);
diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
index e93fc8d22fb2..aa83a0865ec1 100644
--- a/drivers/char/ipmi/ipmi_msghandler.c
+++ b/drivers/char/ipmi/ipmi_msghandler.c
@@ -285,6 +285,11 @@ enum ipmi_stat_indexes {
285 /* Events that were received with the proper format. */ 285 /* Events that were received with the proper format. */
286 IPMI_STAT_events, 286 IPMI_STAT_events,
287 287
288 /* Retransmissions on IPMB that failed. */
289 IPMI_STAT_dropped_rexmit_ipmb_commands,
290
291 /* Retransmissions on LAN that failed. */
292 IPMI_STAT_dropped_rexmit_lan_commands,
288 293
289 /* This *must* remain last, add new values above this. */ 294 /* This *must* remain last, add new values above this. */
290 IPMI_NUM_STATS 295 IPMI_NUM_STATS
@@ -445,6 +450,20 @@ static DEFINE_MUTEX(smi_watchers_mutex);
445#define ipmi_get_stat(intf, stat) \ 450#define ipmi_get_stat(intf, stat) \
446 ((unsigned int) atomic_read(&(intf)->stats[IPMI_STAT_ ## stat])) 451 ((unsigned int) atomic_read(&(intf)->stats[IPMI_STAT_ ## stat]))
447 452
453static int is_lan_addr(struct ipmi_addr *addr)
454{
455 return addr->addr_type == IPMI_LAN_ADDR_TYPE;
456}
457
458static int is_ipmb_addr(struct ipmi_addr *addr)
459{
460 return addr->addr_type == IPMI_IPMB_ADDR_TYPE;
461}
462
463static int is_ipmb_bcast_addr(struct ipmi_addr *addr)
464{
465 return addr->addr_type == IPMI_IPMB_BROADCAST_ADDR_TYPE;
466}
448 467
449static void free_recv_msg_list(struct list_head *q) 468static void free_recv_msg_list(struct list_head *q)
450{ 469{
@@ -601,8 +620,7 @@ ipmi_addr_equal(struct ipmi_addr *addr1, struct ipmi_addr *addr2)
601 return (smi_addr1->lun == smi_addr2->lun); 620 return (smi_addr1->lun == smi_addr2->lun);
602 } 621 }
603 622
604 if ((addr1->addr_type == IPMI_IPMB_ADDR_TYPE) 623 if (is_ipmb_addr(addr1) || is_ipmb_bcast_addr(addr1)) {
605 || (addr1->addr_type == IPMI_IPMB_BROADCAST_ADDR_TYPE)) {
606 struct ipmi_ipmb_addr *ipmb_addr1 624 struct ipmi_ipmb_addr *ipmb_addr1
607 = (struct ipmi_ipmb_addr *) addr1; 625 = (struct ipmi_ipmb_addr *) addr1;
608 struct ipmi_ipmb_addr *ipmb_addr2 626 struct ipmi_ipmb_addr *ipmb_addr2
@@ -612,7 +630,7 @@ ipmi_addr_equal(struct ipmi_addr *addr1, struct ipmi_addr *addr2)
612 && (ipmb_addr1->lun == ipmb_addr2->lun)); 630 && (ipmb_addr1->lun == ipmb_addr2->lun));
613 } 631 }
614 632
615 if (addr1->addr_type == IPMI_LAN_ADDR_TYPE) { 633 if (is_lan_addr(addr1)) {
616 struct ipmi_lan_addr *lan_addr1 634 struct ipmi_lan_addr *lan_addr1
617 = (struct ipmi_lan_addr *) addr1; 635 = (struct ipmi_lan_addr *) addr1;
618 struct ipmi_lan_addr *lan_addr2 636 struct ipmi_lan_addr *lan_addr2
@@ -644,14 +662,13 @@ int ipmi_validate_addr(struct ipmi_addr *addr, int len)
644 || (addr->channel < 0)) 662 || (addr->channel < 0))
645 return -EINVAL; 663 return -EINVAL;
646 664
647 if ((addr->addr_type == IPMI_IPMB_ADDR_TYPE) 665 if (is_ipmb_addr(addr) || is_ipmb_bcast_addr(addr)) {
648 || (addr->addr_type == IPMI_IPMB_BROADCAST_ADDR_TYPE)) {
649 if (len < sizeof(struct ipmi_ipmb_addr)) 666 if (len < sizeof(struct ipmi_ipmb_addr))
650 return -EINVAL; 667 return -EINVAL;
651 return 0; 668 return 0;
652 } 669 }
653 670
654 if (addr->addr_type == IPMI_LAN_ADDR_TYPE) { 671 if (is_lan_addr(addr)) {
655 if (len < sizeof(struct ipmi_lan_addr)) 672 if (len < sizeof(struct ipmi_lan_addr))
656 return -EINVAL; 673 return -EINVAL;
657 return 0; 674 return 0;
@@ -1503,8 +1520,7 @@ static int i_ipmi_request(ipmi_user_t user,
1503 memcpy(&(smi_msg->data[2]), msg->data, msg->data_len); 1520 memcpy(&(smi_msg->data[2]), msg->data, msg->data_len);
1504 smi_msg->data_size = msg->data_len + 2; 1521 smi_msg->data_size = msg->data_len + 2;
1505 ipmi_inc_stat(intf, sent_local_commands); 1522 ipmi_inc_stat(intf, sent_local_commands);
1506 } else if ((addr->addr_type == IPMI_IPMB_ADDR_TYPE) 1523 } else if (is_ipmb_addr(addr) || is_ipmb_bcast_addr(addr)) {
1507 || (addr->addr_type == IPMI_IPMB_BROADCAST_ADDR_TYPE)) {
1508 struct ipmi_ipmb_addr *ipmb_addr; 1524 struct ipmi_ipmb_addr *ipmb_addr;
1509 unsigned char ipmb_seq; 1525 unsigned char ipmb_seq;
1510 long seqid; 1526 long seqid;
@@ -1583,8 +1599,6 @@ static int i_ipmi_request(ipmi_user_t user,
1583 1599
1584 spin_lock_irqsave(&(intf->seq_lock), flags); 1600 spin_lock_irqsave(&(intf->seq_lock), flags);
1585 1601
1586 ipmi_inc_stat(intf, sent_ipmb_commands);
1587
1588 /* 1602 /*
1589 * Create a sequence number with a 1 second 1603 * Create a sequence number with a 1 second
1590 * timeout and 4 retries. 1604 * timeout and 4 retries.
@@ -1606,6 +1620,8 @@ static int i_ipmi_request(ipmi_user_t user,
1606 goto out_err; 1620 goto out_err;
1607 } 1621 }
1608 1622
1623 ipmi_inc_stat(intf, sent_ipmb_commands);
1624
1609 /* 1625 /*
1610 * Store the sequence number in the message, 1626 * Store the sequence number in the message,
1611 * so that when the send message response 1627 * so that when the send message response
@@ -1635,7 +1651,7 @@ static int i_ipmi_request(ipmi_user_t user,
1635 */ 1651 */
1636 spin_unlock_irqrestore(&(intf->seq_lock), flags); 1652 spin_unlock_irqrestore(&(intf->seq_lock), flags);
1637 } 1653 }
1638 } else if (addr->addr_type == IPMI_LAN_ADDR_TYPE) { 1654 } else if (is_lan_addr(addr)) {
1639 struct ipmi_lan_addr *lan_addr; 1655 struct ipmi_lan_addr *lan_addr;
1640 unsigned char ipmb_seq; 1656 unsigned char ipmb_seq;
1641 long seqid; 1657 long seqid;
@@ -1696,8 +1712,6 @@ static int i_ipmi_request(ipmi_user_t user,
1696 1712
1697 spin_lock_irqsave(&(intf->seq_lock), flags); 1713 spin_lock_irqsave(&(intf->seq_lock), flags);
1698 1714
1699 ipmi_inc_stat(intf, sent_lan_commands);
1700
1701 /* 1715 /*
1702 * Create a sequence number with a 1 second 1716 * Create a sequence number with a 1 second
1703 * timeout and 4 retries. 1717 * timeout and 4 retries.
@@ -1719,6 +1733,8 @@ static int i_ipmi_request(ipmi_user_t user,
1719 goto out_err; 1733 goto out_err;
1720 } 1734 }
1721 1735
1736 ipmi_inc_stat(intf, sent_lan_commands);
1737
1722 /* 1738 /*
1723 * Store the sequence number in the message, 1739 * Store the sequence number in the message,
1724 * so that when the send message response 1740 * so that when the send message response
@@ -1937,6 +1953,10 @@ static int stat_file_read_proc(char *page, char **start, off_t off,
1937 ipmi_get_stat(intf, invalid_events)); 1953 ipmi_get_stat(intf, invalid_events));
1938 out += sprintf(out, "events: %u\n", 1954 out += sprintf(out, "events: %u\n",
1939 ipmi_get_stat(intf, events)); 1955 ipmi_get_stat(intf, events));
1956 out += sprintf(out, "failed rexmit LAN msgs: %u\n",
1957 ipmi_get_stat(intf, dropped_rexmit_lan_commands));
1958 out += sprintf(out, "failed rexmit IPMB msgs: %u\n",
1959 ipmi_get_stat(intf, dropped_rexmit_ipmb_commands));
1940 1960
1941 return (out - ((char *) page)); 1961 return (out - ((char *) page));
1942} 1962}
@@ -3264,6 +3284,114 @@ static int handle_lan_get_msg_cmd(ipmi_smi_t intf,
3264 return rv; 3284 return rv;
3265} 3285}
3266 3286
3287/*
3288 * This routine will handle "Get Message" command responses with
3289 * channels that use an OEM Medium. The message format belongs to
3290 * the OEM. See IPMI 2.0 specification, Chapter 6 and
3291 * Chapter 22, sections 22.6 and 22.24 for more details.
3292 */
3293static int handle_oem_get_msg_cmd(ipmi_smi_t intf,
3294 struct ipmi_smi_msg *msg)
3295{
3296 struct cmd_rcvr *rcvr;
3297 int rv = 0;
3298 unsigned char netfn;
3299 unsigned char cmd;
3300 unsigned char chan;
3301 ipmi_user_t user = NULL;
3302 struct ipmi_system_interface_addr *smi_addr;
3303 struct ipmi_recv_msg *recv_msg;
3304
3305 /*
3306 * We expect the OEM SW to perform error checking
3307 * so we just do some basic sanity checks
3308 */
3309 if (msg->rsp_size < 4) {
3310 /* Message not big enough, just ignore it. */
3311 ipmi_inc_stat(intf, invalid_commands);
3312 return 0;
3313 }
3314
3315 if (msg->rsp[2] != 0) {
3316 /* An error getting the response, just ignore it. */
3317 return 0;
3318 }
3319
3320 /*
3321 * This is an OEM Message so the OEM needs to know how
3322 * handle the message. We do no interpretation.
3323 */
3324 netfn = msg->rsp[0] >> 2;
3325 cmd = msg->rsp[1];
3326 chan = msg->rsp[3] & 0xf;
3327
3328 rcu_read_lock();
3329 rcvr = find_cmd_rcvr(intf, netfn, cmd, chan);
3330 if (rcvr) {
3331 user = rcvr->user;
3332 kref_get(&user->refcount);
3333 } else
3334 user = NULL;
3335 rcu_read_unlock();
3336
3337 if (user == NULL) {
3338 /* We didn't find a user, just give up. */
3339 ipmi_inc_stat(intf, unhandled_commands);
3340
3341 /*
3342 * Don't do anything with these messages, just allow
3343 * them to be freed.
3344 */
3345
3346 rv = 0;
3347 } else {
3348 /* Deliver the message to the user. */
3349 ipmi_inc_stat(intf, handled_commands);
3350
3351 recv_msg = ipmi_alloc_recv_msg();
3352 if (!recv_msg) {
3353 /*
3354 * We couldn't allocate memory for the
3355 * message, so requeue it for handling
3356 * later.
3357 */
3358 rv = 1;
3359 kref_put(&user->refcount, free_user);
3360 } else {
3361 /*
3362 * OEM Messages are expected to be delivered via
3363 * the system interface to SMS software. We might
3364 * need to visit this again depending on OEM
3365 * requirements
3366 */
3367 smi_addr = ((struct ipmi_system_interface_addr *)
3368 &(recv_msg->addr));
3369 smi_addr->addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE;
3370 smi_addr->channel = IPMI_BMC_CHANNEL;
3371 smi_addr->lun = msg->rsp[0] & 3;
3372
3373 recv_msg->user = user;
3374 recv_msg->user_msg_data = NULL;
3375 recv_msg->recv_type = IPMI_OEM_RECV_TYPE;
3376 recv_msg->msg.netfn = msg->rsp[0] >> 2;
3377 recv_msg->msg.cmd = msg->rsp[1];
3378 recv_msg->msg.data = recv_msg->msg_data;
3379
3380 /*
3381 * The message starts at byte 4 which follows the
3382 * the Channel Byte in the "GET MESSAGE" command
3383 */
3384 recv_msg->msg.data_len = msg->rsp_size - 4;
3385 memcpy(recv_msg->msg_data,
3386 &(msg->rsp[4]),
3387 msg->rsp_size - 4);
3388 deliver_response(recv_msg);
3389 }
3390 }
3391
3392 return rv;
3393}
3394
3267static void copy_event_into_recv_msg(struct ipmi_recv_msg *recv_msg, 3395static void copy_event_into_recv_msg(struct ipmi_recv_msg *recv_msg,
3268 struct ipmi_smi_msg *msg) 3396 struct ipmi_smi_msg *msg)
3269{ 3397{
@@ -3519,6 +3647,17 @@ static int handle_new_recv_msg(ipmi_smi_t intf,
3519 goto out; 3647 goto out;
3520 } 3648 }
3521 3649
3650 /*
3651 ** We need to make sure the channels have been initialized.
3652 ** The channel_handler routine will set the "curr_channel"
3653 ** equal to or greater than IPMI_MAX_CHANNELS when all the
3654 ** channels for this interface have been initialized.
3655 */
3656 if (intf->curr_channel < IPMI_MAX_CHANNELS) {
3657 requeue = 1; /* Just put the message back for now */
3658 goto out;
3659 }
3660
3522 switch (intf->channels[chan].medium) { 3661 switch (intf->channels[chan].medium) {
3523 case IPMI_CHANNEL_MEDIUM_IPMB: 3662 case IPMI_CHANNEL_MEDIUM_IPMB:
3524 if (msg->rsp[4] & 0x04) { 3663 if (msg->rsp[4] & 0x04) {
@@ -3554,11 +3693,20 @@ static int handle_new_recv_msg(ipmi_smi_t intf,
3554 break; 3693 break;
3555 3694
3556 default: 3695 default:
3557 /* 3696 /* Check for OEM Channels. Clients had better
3558 * We don't handle the channel type, so just 3697 register for these commands. */
3559 * free the message. 3698 if ((intf->channels[chan].medium
3560 */ 3699 >= IPMI_CHANNEL_MEDIUM_OEM_MIN)
3561 requeue = 0; 3700 && (intf->channels[chan].medium
3701 <= IPMI_CHANNEL_MEDIUM_OEM_MAX)) {
3702 requeue = handle_oem_get_msg_cmd(intf, msg);
3703 } else {
3704 /*
3705 * We don't handle the channel type, so just
3706 * free the message.
3707 */
3708 requeue = 0;
3709 }
3562 } 3710 }
3563 3711
3564 } else if ((msg->rsp[0] == ((IPMI_NETFN_APP_REQUEST|1) << 2)) 3712 } else if ((msg->rsp[0] == ((IPMI_NETFN_APP_REQUEST|1) << 2))
@@ -3730,7 +3878,7 @@ static void check_msg_timeout(ipmi_smi_t intf, struct seq_table *ent,
3730 list_add_tail(&msg->link, timeouts); 3878 list_add_tail(&msg->link, timeouts);
3731 if (ent->broadcast) 3879 if (ent->broadcast)
3732 ipmi_inc_stat(intf, timed_out_ipmb_broadcasts); 3880 ipmi_inc_stat(intf, timed_out_ipmb_broadcasts);
3733 else if (ent->recv_msg->addr.addr_type == IPMI_LAN_ADDR_TYPE) 3881 else if (is_lan_addr(&ent->recv_msg->addr))
3734 ipmi_inc_stat(intf, timed_out_lan_commands); 3882 ipmi_inc_stat(intf, timed_out_lan_commands);
3735 else 3883 else
3736 ipmi_inc_stat(intf, timed_out_ipmb_commands); 3884 ipmi_inc_stat(intf, timed_out_ipmb_commands);
@@ -3744,15 +3892,17 @@ static void check_msg_timeout(ipmi_smi_t intf, struct seq_table *ent,
3744 */ 3892 */
3745 ent->timeout = MAX_MSG_TIMEOUT; 3893 ent->timeout = MAX_MSG_TIMEOUT;
3746 ent->retries_left--; 3894 ent->retries_left--;
3747 if (ent->recv_msg->addr.addr_type == IPMI_LAN_ADDR_TYPE)
3748 ipmi_inc_stat(intf, retransmitted_lan_commands);
3749 else
3750 ipmi_inc_stat(intf, retransmitted_ipmb_commands);
3751
3752 smi_msg = smi_from_recv_msg(intf, ent->recv_msg, slot, 3895 smi_msg = smi_from_recv_msg(intf, ent->recv_msg, slot,
3753 ent->seqid); 3896 ent->seqid);
3754 if (!smi_msg) 3897 if (!smi_msg) {
3898 if (is_lan_addr(&ent->recv_msg->addr))
3899 ipmi_inc_stat(intf,
3900 dropped_rexmit_lan_commands);
3901 else
3902 ipmi_inc_stat(intf,
3903 dropped_rexmit_ipmb_commands);
3755 return; 3904 return;
3905 }
3756 3906
3757 spin_unlock_irqrestore(&intf->seq_lock, *flags); 3907 spin_unlock_irqrestore(&intf->seq_lock, *flags);
3758 3908
@@ -3764,10 +3914,17 @@ static void check_msg_timeout(ipmi_smi_t intf, struct seq_table *ent,
3764 * resent. 3914 * resent.
3765 */ 3915 */
3766 handlers = intf->handlers; 3916 handlers = intf->handlers;
3767 if (handlers) 3917 if (handlers) {
3918 if (is_lan_addr(&ent->recv_msg->addr))
3919 ipmi_inc_stat(intf,
3920 retransmitted_lan_commands);
3921 else
3922 ipmi_inc_stat(intf,
3923 retransmitted_ipmb_commands);
3924
3768 intf->handlers->sender(intf->send_info, 3925 intf->handlers->sender(intf->send_info,
3769 smi_msg, 0); 3926 smi_msg, 0);
3770 else 3927 } else
3771 ipmi_free_smi_msg(smi_msg); 3928 ipmi_free_smi_msg(smi_msg);
3772 3929
3773 spin_lock_irqsave(&intf->seq_lock, *flags); 3930 spin_lock_irqsave(&intf->seq_lock, *flags);
diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
index e58ea4cd55ce..259644646b82 100644
--- a/drivers/char/ipmi/ipmi_si_intf.c
+++ b/drivers/char/ipmi/ipmi_si_intf.c
@@ -82,12 +82,6 @@
82#define SI_SHORT_TIMEOUT_USEC 250 /* .25ms when the SM request a 82#define SI_SHORT_TIMEOUT_USEC 250 /* .25ms when the SM request a
83 short timeout */ 83 short timeout */
84 84
85/* Bit for BMC global enables. */
86#define IPMI_BMC_RCV_MSG_INTR 0x01
87#define IPMI_BMC_EVT_MSG_INTR 0x02
88#define IPMI_BMC_EVT_MSG_BUFF 0x04
89#define IPMI_BMC_SYS_LOG 0x08
90
91enum si_intf_state { 85enum si_intf_state {
92 SI_NORMAL, 86 SI_NORMAL,
93 SI_GETTING_FLAGS, 87 SI_GETTING_FLAGS,
@@ -220,6 +214,9 @@ struct smi_info {
220 OEM2_DATA_AVAIL) 214 OEM2_DATA_AVAIL)
221 unsigned char msg_flags; 215 unsigned char msg_flags;
222 216
217 /* Does the BMC have an event buffer? */
218 char has_event_buffer;
219
223 /* 220 /*
224 * If set to true, this will request events the next time the 221 * If set to true, this will request events the next time the
225 * state machine is idle. 222 * state machine is idle.
@@ -968,7 +965,8 @@ static void request_events(void *send_info)
968{ 965{
969 struct smi_info *smi_info = send_info; 966 struct smi_info *smi_info = send_info;
970 967
971 if (atomic_read(&smi_info->stop_operation)) 968 if (atomic_read(&smi_info->stop_operation) ||
969 !smi_info->has_event_buffer)
972 return; 970 return;
973 971
974 atomic_set(&smi_info->req_events, 1); 972 atomic_set(&smi_info->req_events, 1);
@@ -2407,26 +2405,9 @@ static struct of_platform_driver ipmi_of_platform_driver = {
2407}; 2405};
2408#endif /* CONFIG_PPC_OF */ 2406#endif /* CONFIG_PPC_OF */
2409 2407
2410 2408static int wait_for_msg_done(struct smi_info *smi_info)
2411static int try_get_dev_id(struct smi_info *smi_info)
2412{ 2409{
2413 unsigned char msg[2];
2414 unsigned char *resp;
2415 unsigned long resp_len;
2416 enum si_sm_result smi_result; 2410 enum si_sm_result smi_result;
2417 int rv = 0;
2418
2419 resp = kmalloc(IPMI_MAX_MSG_LENGTH, GFP_KERNEL);
2420 if (!resp)
2421 return -ENOMEM;
2422
2423 /*
2424 * Do a Get Device ID command, since it comes back with some
2425 * useful info.
2426 */
2427 msg[0] = IPMI_NETFN_APP_REQUEST << 2;
2428 msg[1] = IPMI_GET_DEVICE_ID_CMD;
2429 smi_info->handlers->start_transaction(smi_info->si_sm, msg, 2);
2430 2411
2431 smi_result = smi_info->handlers->event(smi_info->si_sm, 0); 2412 smi_result = smi_info->handlers->event(smi_info->si_sm, 0);
2432 for (;;) { 2413 for (;;) {
@@ -2441,16 +2422,39 @@ static int try_get_dev_id(struct smi_info *smi_info)
2441 } else 2422 } else
2442 break; 2423 break;
2443 } 2424 }
2444 if (smi_result == SI_SM_HOSED) { 2425 if (smi_result == SI_SM_HOSED)
2445 /* 2426 /*
2446 * We couldn't get the state machine to run, so whatever's at 2427 * We couldn't get the state machine to run, so whatever's at
2447 * the port is probably not an IPMI SMI interface. 2428 * the port is probably not an IPMI SMI interface.
2448 */ 2429 */
2449 rv = -ENODEV; 2430 return -ENODEV;
2431
2432 return 0;
2433}
2434
2435static int try_get_dev_id(struct smi_info *smi_info)
2436{
2437 unsigned char msg[2];
2438 unsigned char *resp;
2439 unsigned long resp_len;
2440 int rv = 0;
2441
2442 resp = kmalloc(IPMI_MAX_MSG_LENGTH, GFP_KERNEL);
2443 if (!resp)
2444 return -ENOMEM;
2445
2446 /*
2447 * Do a Get Device ID command, since it comes back with some
2448 * useful info.
2449 */
2450 msg[0] = IPMI_NETFN_APP_REQUEST << 2;
2451 msg[1] = IPMI_GET_DEVICE_ID_CMD;
2452 smi_info->handlers->start_transaction(smi_info->si_sm, msg, 2);
2453
2454 rv = wait_for_msg_done(smi_info);
2455 if (rv)
2450 goto out; 2456 goto out;
2451 }
2452 2457
2453 /* Otherwise, we got some data. */
2454 resp_len = smi_info->handlers->get_result(smi_info->si_sm, 2458 resp_len = smi_info->handlers->get_result(smi_info->si_sm,
2455 resp, IPMI_MAX_MSG_LENGTH); 2459 resp, IPMI_MAX_MSG_LENGTH);
2456 2460
@@ -2462,6 +2466,88 @@ static int try_get_dev_id(struct smi_info *smi_info)
2462 return rv; 2466 return rv;
2463} 2467}
2464 2468
2469static int try_enable_event_buffer(struct smi_info *smi_info)
2470{
2471 unsigned char msg[3];
2472 unsigned char *resp;
2473 unsigned long resp_len;
2474 int rv = 0;
2475
2476 resp = kmalloc(IPMI_MAX_MSG_LENGTH, GFP_KERNEL);
2477 if (!resp)
2478 return -ENOMEM;
2479
2480 msg[0] = IPMI_NETFN_APP_REQUEST << 2;
2481 msg[1] = IPMI_GET_BMC_GLOBAL_ENABLES_CMD;
2482 smi_info->handlers->start_transaction(smi_info->si_sm, msg, 2);
2483
2484 rv = wait_for_msg_done(smi_info);
2485 if (rv) {
2486 printk(KERN_WARNING
2487 "ipmi_si: Error getting response from get global,"
2488 " enables command, the event buffer is not"
2489 " enabled.\n");
2490 goto out;
2491 }
2492
2493 resp_len = smi_info->handlers->get_result(smi_info->si_sm,
2494 resp, IPMI_MAX_MSG_LENGTH);
2495
2496 if (resp_len < 4 ||
2497 resp[0] != (IPMI_NETFN_APP_REQUEST | 1) << 2 ||
2498 resp[1] != IPMI_GET_BMC_GLOBAL_ENABLES_CMD ||
2499 resp[2] != 0) {
2500 printk(KERN_WARNING
2501 "ipmi_si: Invalid return from get global"
2502 " enables command, cannot enable the event"
2503 " buffer.\n");
2504 rv = -EINVAL;
2505 goto out;
2506 }
2507
2508 if (resp[3] & IPMI_BMC_EVT_MSG_BUFF)
2509 /* buffer is already enabled, nothing to do. */
2510 goto out;
2511
2512 msg[0] = IPMI_NETFN_APP_REQUEST << 2;
2513 msg[1] = IPMI_SET_BMC_GLOBAL_ENABLES_CMD;
2514 msg[2] = resp[3] | IPMI_BMC_EVT_MSG_BUFF;
2515 smi_info->handlers->start_transaction(smi_info->si_sm, msg, 3);
2516
2517 rv = wait_for_msg_done(smi_info);
2518 if (rv) {
2519 printk(KERN_WARNING
2520 "ipmi_si: Error getting response from set global,"
2521 " enables command, the event buffer is not"
2522 " enabled.\n");
2523 goto out;
2524 }
2525
2526 resp_len = smi_info->handlers->get_result(smi_info->si_sm,
2527 resp, IPMI_MAX_MSG_LENGTH);
2528
2529 if (resp_len < 3 ||
2530 resp[0] != (IPMI_NETFN_APP_REQUEST | 1) << 2 ||
2531 resp[1] != IPMI_SET_BMC_GLOBAL_ENABLES_CMD) {
2532 printk(KERN_WARNING
2533 "ipmi_si: Invalid return from get global,"
2534 "enables command, not enable the event"
2535 " buffer.\n");
2536 rv = -EINVAL;
2537 goto out;
2538 }
2539
2540 if (resp[2] != 0)
2541 /*
2542 * An error when setting the event buffer bit means
2543 * that the event buffer is not supported.
2544 */
2545 rv = -ENOENT;
2546 out:
2547 kfree(resp);
2548 return rv;
2549}
2550
2465static int type_file_read_proc(char *page, char **start, off_t off, 2551static int type_file_read_proc(char *page, char **start, off_t off,
2466 int count, int *eof, void *data) 2552 int count, int *eof, void *data)
2467{ 2553{
@@ -2847,6 +2933,10 @@ static int try_smi_init(struct smi_info *new_smi)
2847 new_smi->intf_num = smi_num; 2933 new_smi->intf_num = smi_num;
2848 smi_num++; 2934 smi_num++;
2849 2935
2936 rv = try_enable_event_buffer(new_smi);
2937 if (rv == 0)
2938 new_smi->has_event_buffer = 1;
2939
2850 /* 2940 /*
2851 * Start clearing the flags before we enable interrupts or the 2941 * Start clearing the flags before we enable interrupts or the
2852 * timer to avoid racing with the timer. 2942 * timer to avoid racing with the timer.
@@ -2863,7 +2953,7 @@ static int try_smi_init(struct smi_info *new_smi)
2863 */ 2953 */
2864 new_smi->pdev = platform_device_alloc("ipmi_si", 2954 new_smi->pdev = platform_device_alloc("ipmi_si",
2865 new_smi->intf_num); 2955 new_smi->intf_num);
2866 if (rv) { 2956 if (!new_smi->pdev) {
2867 printk(KERN_ERR 2957 printk(KERN_ERR
2868 "ipmi_si_intf:" 2958 "ipmi_si_intf:"
2869 " Unable to allocate platform device\n"); 2959 " Unable to allocate platform device\n");
diff --git a/drivers/char/mem.c b/drivers/char/mem.c
index 3586b3b3df3f..8f05c38c2f06 100644
--- a/drivers/char/mem.c
+++ b/drivers/char/mem.c
@@ -301,33 +301,7 @@ static inline int private_mapping_ok(struct vm_area_struct *vma)
301} 301}
302#endif 302#endif
303 303
304void __attribute__((weak))
305map_devmem(unsigned long pfn, unsigned long len, pgprot_t prot)
306{
307 /* nothing. architectures can override. */
308}
309
310void __attribute__((weak))
311unmap_devmem(unsigned long pfn, unsigned long len, pgprot_t prot)
312{
313 /* nothing. architectures can override. */
314}
315
316static void mmap_mem_open(struct vm_area_struct *vma)
317{
318 map_devmem(vma->vm_pgoff, vma->vm_end - vma->vm_start,
319 vma->vm_page_prot);
320}
321
322static void mmap_mem_close(struct vm_area_struct *vma)
323{
324 unmap_devmem(vma->vm_pgoff, vma->vm_end - vma->vm_start,
325 vma->vm_page_prot);
326}
327
328static struct vm_operations_struct mmap_mem_ops = { 304static struct vm_operations_struct mmap_mem_ops = {
329 .open = mmap_mem_open,
330 .close = mmap_mem_close,
331#ifdef CONFIG_HAVE_IOREMAP_PROT 305#ifdef CONFIG_HAVE_IOREMAP_PROT
332 .access = generic_access_phys 306 .access = generic_access_phys
333#endif 307#endif
@@ -362,7 +336,6 @@ static int mmap_mem(struct file * file, struct vm_area_struct * vma)
362 vma->vm_pgoff, 336 vma->vm_pgoff,
363 size, 337 size,
364 vma->vm_page_prot)) { 338 vma->vm_page_prot)) {
365 unmap_devmem(vma->vm_pgoff, size, vma->vm_page_prot);
366 return -EAGAIN; 339 return -EAGAIN;
367 } 340 }
368 return 0; 341 return 0;
diff --git a/drivers/char/random.c b/drivers/char/random.c
index f824ef8a9273..b2ced39d76b2 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -1665,15 +1665,20 @@ EXPORT_SYMBOL(secure_dccp_sequence_number);
1665 * value is not cryptographically secure but for several uses the cost of 1665 * value is not cryptographically secure but for several uses the cost of
1666 * depleting entropy is too high 1666 * depleting entropy is too high
1667 */ 1667 */
1668DEFINE_PER_CPU(__u32 [4], get_random_int_hash);
1668unsigned int get_random_int(void) 1669unsigned int get_random_int(void)
1669{ 1670{
1670 /* 1671 struct keydata *keyptr;
1671 * Use IP's RNG. It suits our purpose perfectly: it re-keys itself 1672 __u32 *hash = get_cpu_var(get_random_int_hash);
1672 * every second, from the entropy pool (and thus creates a limited 1673 int ret;
1673 * drain on it), and uses halfMD4Transform within the second. We 1674
1674 * also mix it with jiffies and the PID: 1675 keyptr = get_keyptr();
1675 */ 1676 hash[0] += current->pid + jiffies + get_cycles() + (int)(long)&ret;
1676 return secure_ip_id((__force __be32)(current->pid + jiffies)); 1677
1678 ret = half_md4_transform(hash, keyptr->secret);
1679 put_cpu_var(get_random_int_hash);
1680
1681 return ret;
1677} 1682}
1678 1683
1679/* 1684/*
diff --git a/drivers/char/sysrq.c b/drivers/char/sysrq.c
index 6de020d078e1..d6a807f4077d 100644
--- a/drivers/char/sysrq.c
+++ b/drivers/char/sysrq.c
@@ -35,7 +35,6 @@
35#include <linux/vt_kern.h> 35#include <linux/vt_kern.h>
36#include <linux/workqueue.h> 36#include <linux/workqueue.h>
37#include <linux/kexec.h> 37#include <linux/kexec.h>
38#include <linux/interrupt.h>
39#include <linux/hrtimer.h> 38#include <linux/hrtimer.h>
40#include <linux/oom.h> 39#include <linux/oom.h>
41 40
@@ -407,7 +406,7 @@ static struct sysrq_key_op *sysrq_key_table[36] = {
407 &sysrq_showlocks_op, /* d */ 406 &sysrq_showlocks_op, /* d */
408 &sysrq_term_op, /* e */ 407 &sysrq_term_op, /* e */
409 &sysrq_moom_op, /* f */ 408 &sysrq_moom_op, /* f */
410 /* g: May be registered by ppc for kgdb */ 409 /* g: May be registered for the kernel debugger */
411 NULL, /* g */ 410 NULL, /* g */
412 NULL, /* h - reserved for help */ 411 NULL, /* h - reserved for help */
413 &sysrq_kill_op, /* i */ 412 &sysrq_kill_op, /* i */
@@ -432,7 +431,7 @@ static struct sysrq_key_op *sysrq_key_table[36] = {
432 &sysrq_sync_op, /* s */ 431 &sysrq_sync_op, /* s */
433 &sysrq_showstate_op, /* t */ 432 &sysrq_showstate_op, /* t */
434 &sysrq_mountro_op, /* u */ 433 &sysrq_mountro_op, /* u */
435 /* v: May be registered at init time by SMP VOYAGER */ 434 /* v: May be registered for frame buffer console restore */
436 NULL, /* v */ 435 NULL, /* v */
437 &sysrq_showstate_blocked_op, /* w */ 436 &sysrq_showstate_blocked_op, /* w */
438 /* x: May be registered on ppc/powerpc for xmon */ 437 /* x: May be registered on ppc/powerpc for xmon */
diff --git a/drivers/char/vt.c b/drivers/char/vt.c
index 2c1d133819b5..08151d4de489 100644
--- a/drivers/char/vt.c
+++ b/drivers/char/vt.c
@@ -2274,7 +2274,7 @@ rescan_last_byte:
2274 continue; /* nothing to display */ 2274 continue; /* nothing to display */
2275 } 2275 }
2276 /* Glyph not found */ 2276 /* Glyph not found */
2277 if ((!(vc->vc_utf && !vc->vc_disp_ctrl) && c < 128) && !(c & ~charmask)) { 2277 if ((!(vc->vc_utf && !vc->vc_disp_ctrl) || c < 128) && !(c & ~charmask)) {
2278 /* In legacy mode use the glyph we get by a 1:1 mapping. 2278 /* In legacy mode use the glyph we get by a 1:1 mapping.
2279 This would make absolutely no sense with Unicode in mind, 2279 This would make absolutely no sense with Unicode in mind,
2280 but do this for ASCII characters since a font may lack 2280 but do this for ASCII characters since a font may lack
diff --git a/drivers/char/vt_ioctl.c b/drivers/char/vt_ioctl.c
index a2dee0eb6dad..e6ce632a393e 100644
--- a/drivers/char/vt_ioctl.c
+++ b/drivers/char/vt_ioctl.c
@@ -400,6 +400,9 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
400 case KIOCSOUND: 400 case KIOCSOUND:
401 if (!perm) 401 if (!perm)
402 goto eperm; 402 goto eperm;
403 /* FIXME: This is an old broken API but we need to keep it
404 supported and somehow separate the historic advertised
405 tick rate from any real one */
403 if (arg) 406 if (arg)
404 arg = CLOCK_TICK_RATE / arg; 407 arg = CLOCK_TICK_RATE / arg;
405 kd_mksound(arg, 0); 408 kd_mksound(arg, 0);
@@ -417,6 +420,9 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
417 */ 420 */
418 ticks = HZ * ((arg >> 16) & 0xffff) / 1000; 421 ticks = HZ * ((arg >> 16) & 0xffff) / 1000;
419 count = ticks ? (arg & 0xffff) : 0; 422 count = ticks ? (arg & 0xffff) : 0;
423 /* FIXME: This is an old broken API but we need to keep it
424 supported and somehow separate the historic advertised
425 tick rate from any real one */
420 if (count) 426 if (count)
421 count = CLOCK_TICK_RATE / count; 427 count = CLOCK_TICK_RATE / count;
422 kd_mksound(count, ticks); 428 kd_mksound(count, ticks);
diff --git a/drivers/clocksource/acpi_pm.c b/drivers/clocksource/acpi_pm.c
index ee19b6e8fcb4..40bd8c61c7d7 100644
--- a/drivers/clocksource/acpi_pm.c
+++ b/drivers/clocksource/acpi_pm.c
@@ -57,7 +57,7 @@ u32 acpi_pm_read_verified(void)
57 return v2; 57 return v2;
58} 58}
59 59
60static cycle_t acpi_pm_read(void) 60static cycle_t acpi_pm_read(struct clocksource *cs)
61{ 61{
62 return (cycle_t)read_pmtmr(); 62 return (cycle_t)read_pmtmr();
63} 63}
@@ -83,7 +83,7 @@ static int __init acpi_pm_good_setup(char *__str)
83} 83}
84__setup("acpi_pm_good", acpi_pm_good_setup); 84__setup("acpi_pm_good", acpi_pm_good_setup);
85 85
86static cycle_t acpi_pm_read_slow(void) 86static cycle_t acpi_pm_read_slow(struct clocksource *cs)
87{ 87{
88 return (cycle_t)acpi_pm_read_verified(); 88 return (cycle_t)acpi_pm_read_verified();
89} 89}
@@ -156,9 +156,9 @@ static int verify_pmtmr_rate(void)
156 unsigned long count, delta; 156 unsigned long count, delta;
157 157
158 mach_prepare_counter(); 158 mach_prepare_counter();
159 value1 = clocksource_acpi_pm.read(); 159 value1 = clocksource_acpi_pm.read(&clocksource_acpi_pm);
160 mach_countup(&count); 160 mach_countup(&count);
161 value2 = clocksource_acpi_pm.read(); 161 value2 = clocksource_acpi_pm.read(&clocksource_acpi_pm);
162 delta = (value2 - value1) & ACPI_PM_MASK; 162 delta = (value2 - value1) & ACPI_PM_MASK;
163 163
164 /* Check that the PMTMR delta is within 5% of what we expect */ 164 /* Check that the PMTMR delta is within 5% of what we expect */
@@ -195,9 +195,9 @@ static int __init init_acpi_pm_clocksource(void)
195 /* "verify" this timing source: */ 195 /* "verify" this timing source: */
196 for (j = 0; j < ACPI_PM_MONOTONICITY_CHECKS; j++) { 196 for (j = 0; j < ACPI_PM_MONOTONICITY_CHECKS; j++) {
197 udelay(100 * j); 197 udelay(100 * j);
198 value1 = clocksource_acpi_pm.read(); 198 value1 = clocksource_acpi_pm.read(&clocksource_acpi_pm);
199 for (i = 0; i < ACPI_PM_READ_CHECKS; i++) { 199 for (i = 0; i < ACPI_PM_READ_CHECKS; i++) {
200 value2 = clocksource_acpi_pm.read(); 200 value2 = clocksource_acpi_pm.read(&clocksource_acpi_pm);
201 if (value2 == value1) 201 if (value2 == value1)
202 continue; 202 continue;
203 if (value2 > value1) 203 if (value2 > value1)
diff --git a/drivers/clocksource/cyclone.c b/drivers/clocksource/cyclone.c
index 8615059a8729..64e528e8bfa6 100644
--- a/drivers/clocksource/cyclone.c
+++ b/drivers/clocksource/cyclone.c
@@ -19,7 +19,7 @@
19int use_cyclone = 0; 19int use_cyclone = 0;
20static void __iomem *cyclone_ptr; 20static void __iomem *cyclone_ptr;
21 21
22static cycle_t read_cyclone(void) 22static cycle_t read_cyclone(struct clocksource *cs)
23{ 23{
24 return (cycle_t)readl(cyclone_ptr); 24 return (cycle_t)readl(cyclone_ptr);
25} 25}
diff --git a/drivers/clocksource/scx200_hrt.c b/drivers/clocksource/scx200_hrt.c
index b92da677aa5d..27f4d9637b62 100644
--- a/drivers/clocksource/scx200_hrt.c
+++ b/drivers/clocksource/scx200_hrt.c
@@ -43,7 +43,7 @@ MODULE_PARM_DESC(ppm, "+-adjust to actual XO freq (ppm)");
43/* The base timer frequency, * 27 if selected */ 43/* The base timer frequency, * 27 if selected */
44#define HRT_FREQ 1000000 44#define HRT_FREQ 1000000
45 45
46static cycle_t read_hrt(void) 46static cycle_t read_hrt(struct clocksource *cs)
47{ 47{
48 /* Read the timer value */ 48 /* Read the timer value */
49 return (cycle_t) inl(scx200_cb_base + SCx200_TIMER_OFFSET); 49 return (cycle_t) inl(scx200_cb_base + SCx200_TIMER_OFFSET);
diff --git a/drivers/clocksource/tcb_clksrc.c b/drivers/clocksource/tcb_clksrc.c
index 254f1064d973..01b886e68822 100644
--- a/drivers/clocksource/tcb_clksrc.c
+++ b/drivers/clocksource/tcb_clksrc.c
@@ -39,7 +39,7 @@
39 39
40static void __iomem *tcaddr; 40static void __iomem *tcaddr;
41 41
42static cycle_t tc_get_cycles(void) 42static cycle_t tc_get_cycles(struct clocksource *cs)
43{ 43{
44 unsigned long flags; 44 unsigned long flags;
45 u32 lower, upper; 45 u32 lower, upper;
diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c
index 92438e9dacc3..5a87384ea4ff 100644
--- a/drivers/dma/dmaengine.c
+++ b/drivers/dma/dmaengine.c
@@ -804,11 +804,14 @@ dma_async_memcpy_buf_to_buf(struct dma_chan *chan, void *dest,
804 dma_addr_t dma_dest, dma_src; 804 dma_addr_t dma_dest, dma_src;
805 dma_cookie_t cookie; 805 dma_cookie_t cookie;
806 int cpu; 806 int cpu;
807 unsigned long flags;
807 808
808 dma_src = dma_map_single(dev->dev, src, len, DMA_TO_DEVICE); 809 dma_src = dma_map_single(dev->dev, src, len, DMA_TO_DEVICE);
809 dma_dest = dma_map_single(dev->dev, dest, len, DMA_FROM_DEVICE); 810 dma_dest = dma_map_single(dev->dev, dest, len, DMA_FROM_DEVICE);
810 tx = dev->device_prep_dma_memcpy(chan, dma_dest, dma_src, len, 811 flags = DMA_CTRL_ACK |
811 DMA_CTRL_ACK); 812 DMA_COMPL_SRC_UNMAP_SINGLE |
813 DMA_COMPL_DEST_UNMAP_SINGLE;
814 tx = dev->device_prep_dma_memcpy(chan, dma_dest, dma_src, len, flags);
812 815
813 if (!tx) { 816 if (!tx) {
814 dma_unmap_single(dev->dev, dma_src, len, DMA_TO_DEVICE); 817 dma_unmap_single(dev->dev, dma_src, len, DMA_TO_DEVICE);
@@ -850,11 +853,12 @@ dma_async_memcpy_buf_to_pg(struct dma_chan *chan, struct page *page,
850 dma_addr_t dma_dest, dma_src; 853 dma_addr_t dma_dest, dma_src;
851 dma_cookie_t cookie; 854 dma_cookie_t cookie;
852 int cpu; 855 int cpu;
856 unsigned long flags;
853 857
854 dma_src = dma_map_single(dev->dev, kdata, len, DMA_TO_DEVICE); 858 dma_src = dma_map_single(dev->dev, kdata, len, DMA_TO_DEVICE);
855 dma_dest = dma_map_page(dev->dev, page, offset, len, DMA_FROM_DEVICE); 859 dma_dest = dma_map_page(dev->dev, page, offset, len, DMA_FROM_DEVICE);
856 tx = dev->device_prep_dma_memcpy(chan, dma_dest, dma_src, len, 860 flags = DMA_CTRL_ACK | DMA_COMPL_SRC_UNMAP_SINGLE;
857 DMA_CTRL_ACK); 861 tx = dev->device_prep_dma_memcpy(chan, dma_dest, dma_src, len, flags);
858 862
859 if (!tx) { 863 if (!tx) {
860 dma_unmap_single(dev->dev, dma_src, len, DMA_TO_DEVICE); 864 dma_unmap_single(dev->dev, dma_src, len, DMA_TO_DEVICE);
@@ -898,12 +902,13 @@ dma_async_memcpy_pg_to_pg(struct dma_chan *chan, struct page *dest_pg,
898 dma_addr_t dma_dest, dma_src; 902 dma_addr_t dma_dest, dma_src;
899 dma_cookie_t cookie; 903 dma_cookie_t cookie;
900 int cpu; 904 int cpu;
905 unsigned long flags;
901 906
902 dma_src = dma_map_page(dev->dev, src_pg, src_off, len, DMA_TO_DEVICE); 907 dma_src = dma_map_page(dev->dev, src_pg, src_off, len, DMA_TO_DEVICE);
903 dma_dest = dma_map_page(dev->dev, dest_pg, dest_off, len, 908 dma_dest = dma_map_page(dev->dev, dest_pg, dest_off, len,
904 DMA_FROM_DEVICE); 909 DMA_FROM_DEVICE);
905 tx = dev->device_prep_dma_memcpy(chan, dma_dest, dma_src, len, 910 flags = DMA_CTRL_ACK;
906 DMA_CTRL_ACK); 911 tx = dev->device_prep_dma_memcpy(chan, dma_dest, dma_src, len, flags);
907 912
908 if (!tx) { 913 if (!tx) {
909 dma_unmap_page(dev->dev, dma_src, len, DMA_TO_DEVICE); 914 dma_unmap_page(dev->dev, dma_src, len, DMA_TO_DEVICE);
diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c
index a27c0fb1bc11..fb7da5141e96 100644
--- a/drivers/dma/dmatest.c
+++ b/drivers/dma/dmatest.c
@@ -531,9 +531,7 @@ static int __init dmatest_init(void)
531 chan = dma_request_channel(mask, filter, NULL); 531 chan = dma_request_channel(mask, filter, NULL);
532 if (chan) { 532 if (chan) {
533 err = dmatest_add_channel(chan); 533 err = dmatest_add_channel(chan);
534 if (err == 0) 534 if (err) {
535 continue;
536 else {
537 dma_release_channel(chan); 535 dma_release_channel(chan);
538 break; /* add_channel failed, punt */ 536 break; /* add_channel failed, punt */
539 } 537 }
diff --git a/drivers/dma/ioat_dma.c b/drivers/dma/ioat_dma.c
index e4fc33c1c32f..1955ee8d6d20 100644
--- a/drivers/dma/ioat_dma.c
+++ b/drivers/dma/ioat_dma.c
@@ -1063,22 +1063,31 @@ static void ioat_dma_cleanup_tasklet(unsigned long data)
1063static void 1063static void
1064ioat_dma_unmap(struct ioat_dma_chan *ioat_chan, struct ioat_desc_sw *desc) 1064ioat_dma_unmap(struct ioat_dma_chan *ioat_chan, struct ioat_desc_sw *desc)
1065{ 1065{
1066 /* 1066 if (!(desc->async_tx.flags & DMA_COMPL_SKIP_DEST_UNMAP)) {
1067 * yes we are unmapping both _page and _single 1067 if (desc->async_tx.flags & DMA_COMPL_DEST_UNMAP_SINGLE)
1068 * alloc'd regions with unmap_page. Is this 1068 pci_unmap_single(ioat_chan->device->pdev,
1069 * *really* that bad? 1069 pci_unmap_addr(desc, dst),
1070 */ 1070 pci_unmap_len(desc, len),
1071 if (!(desc->async_tx.flags & DMA_COMPL_SKIP_DEST_UNMAP)) 1071 PCI_DMA_FROMDEVICE);
1072 pci_unmap_page(ioat_chan->device->pdev, 1072 else
1073 pci_unmap_addr(desc, dst), 1073 pci_unmap_page(ioat_chan->device->pdev,
1074 pci_unmap_len(desc, len), 1074 pci_unmap_addr(desc, dst),
1075 PCI_DMA_FROMDEVICE); 1075 pci_unmap_len(desc, len),
1076 1076 PCI_DMA_FROMDEVICE);
1077 if (!(desc->async_tx.flags & DMA_COMPL_SKIP_SRC_UNMAP)) 1077 }
1078 pci_unmap_page(ioat_chan->device->pdev, 1078
1079 pci_unmap_addr(desc, src), 1079 if (!(desc->async_tx.flags & DMA_COMPL_SKIP_SRC_UNMAP)) {
1080 pci_unmap_len(desc, len), 1080 if (desc->async_tx.flags & DMA_COMPL_SRC_UNMAP_SINGLE)
1081 PCI_DMA_TODEVICE); 1081 pci_unmap_single(ioat_chan->device->pdev,
1082 pci_unmap_addr(desc, src),
1083 pci_unmap_len(desc, len),
1084 PCI_DMA_TODEVICE);
1085 else
1086 pci_unmap_page(ioat_chan->device->pdev,
1087 pci_unmap_addr(desc, src),
1088 pci_unmap_len(desc, len),
1089 PCI_DMA_TODEVICE);
1090 }
1082} 1091}
1083 1092
1084/** 1093/**
@@ -1363,6 +1372,7 @@ static int ioat_dma_self_test(struct ioatdma_device *device)
1363 int err = 0; 1372 int err = 0;
1364 struct completion cmp; 1373 struct completion cmp;
1365 unsigned long tmo; 1374 unsigned long tmo;
1375 unsigned long flags;
1366 1376
1367 src = kzalloc(sizeof(u8) * IOAT_TEST_SIZE, GFP_KERNEL); 1377 src = kzalloc(sizeof(u8) * IOAT_TEST_SIZE, GFP_KERNEL);
1368 if (!src) 1378 if (!src)
@@ -1392,8 +1402,9 @@ static int ioat_dma_self_test(struct ioatdma_device *device)
1392 DMA_TO_DEVICE); 1402 DMA_TO_DEVICE);
1393 dma_dest = dma_map_single(dma_chan->device->dev, dest, IOAT_TEST_SIZE, 1403 dma_dest = dma_map_single(dma_chan->device->dev, dest, IOAT_TEST_SIZE,
1394 DMA_FROM_DEVICE); 1404 DMA_FROM_DEVICE);
1405 flags = DMA_COMPL_SRC_UNMAP_SINGLE | DMA_COMPL_DEST_UNMAP_SINGLE;
1395 tx = device->common.device_prep_dma_memcpy(dma_chan, dma_dest, dma_src, 1406 tx = device->common.device_prep_dma_memcpy(dma_chan, dma_dest, dma_src,
1396 IOAT_TEST_SIZE, 0); 1407 IOAT_TEST_SIZE, flags);
1397 if (!tx) { 1408 if (!tx) {
1398 dev_err(&device->pdev->dev, 1409 dev_err(&device->pdev->dev,
1399 "Self-test prep failed, disabling\n"); 1410 "Self-test prep failed, disabling\n");
diff --git a/drivers/dma/ipu/ipu_idmac.c b/drivers/dma/ipu/ipu_idmac.c
index e202a6ce5573..9a5bc1a7389e 100644
--- a/drivers/dma/ipu/ipu_idmac.c
+++ b/drivers/dma/ipu/ipu_idmac.c
@@ -1272,7 +1272,8 @@ static irqreturn_t idmac_interrupt(int irq, void *dev_id)
1272 /* Other interrupts do not interfere with this channel */ 1272 /* Other interrupts do not interfere with this channel */
1273 spin_lock(&ichan->lock); 1273 spin_lock(&ichan->lock);
1274 if (unlikely(chan_id != IDMAC_SDC_0 && chan_id != IDMAC_SDC_1 && 1274 if (unlikely(chan_id != IDMAC_SDC_0 && chan_id != IDMAC_SDC_1 &&
1275 ((curbuf >> chan_id) & 1) == ichan->active_buffer)) { 1275 ((curbuf >> chan_id) & 1) == ichan->active_buffer &&
1276 !list_is_last(ichan->queue.next, &ichan->queue))) {
1276 int i = 100; 1277 int i = 100;
1277 1278
1278 /* This doesn't help. See comment in ipu_disable_channel() */ 1279 /* This doesn't help. See comment in ipu_disable_channel() */
@@ -1547,7 +1548,7 @@ static irqreturn_t ic_sof_irq(int irq, void *dev_id)
1547 struct idmac_channel *ichan = dev_id; 1548 struct idmac_channel *ichan = dev_id;
1548 printk(KERN_DEBUG "Got SOF IRQ %d on Channel %d\n", 1549 printk(KERN_DEBUG "Got SOF IRQ %d on Channel %d\n",
1549 irq, ichan->dma_chan.chan_id); 1550 irq, ichan->dma_chan.chan_id);
1550 disable_irq(irq); 1551 disable_irq_nosync(irq);
1551 return IRQ_HANDLED; 1552 return IRQ_HANDLED;
1552} 1553}
1553 1554
@@ -1556,7 +1557,7 @@ static irqreturn_t ic_eof_irq(int irq, void *dev_id)
1556 struct idmac_channel *ichan = dev_id; 1557 struct idmac_channel *ichan = dev_id;
1557 printk(KERN_DEBUG "Got EOF IRQ %d on Channel %d\n", 1558 printk(KERN_DEBUG "Got EOF IRQ %d on Channel %d\n",
1558 irq, ichan->dma_chan.chan_id); 1559 irq, ichan->dma_chan.chan_id);
1559 disable_irq(irq); 1560 disable_irq_nosync(irq);
1560 return IRQ_HANDLED; 1561 return IRQ_HANDLED;
1561} 1562}
1562 1563
diff --git a/drivers/edac/edac_core.h b/drivers/edac/edac_core.h
index 28f2c3f959b5..6ad95c8d6363 100644
--- a/drivers/edac/edac_core.h
+++ b/drivers/edac/edac_core.h
@@ -767,11 +767,19 @@ static inline void pci_write_bits16(struct pci_dev *pdev, int offset,
767 pci_write_config_word(pdev, offset, value); 767 pci_write_config_word(pdev, offset, value);
768} 768}
769 769
770/* write all or some bits in a dword-register*/ 770/*
771 * pci_write_bits32
772 *
773 * edac local routine to do pci_write_config_dword, but adds
774 * a mask parameter. If mask is all ones, ignore the mask.
775 * Otherwise utilize the mask to isolate specified bits
776 *
777 * write all or some bits in a dword-register
778 */
771static inline void pci_write_bits32(struct pci_dev *pdev, int offset, 779static inline void pci_write_bits32(struct pci_dev *pdev, int offset,
772 u32 value, u32 mask) 780 u32 value, u32 mask)
773{ 781{
774 if (mask != 0xffff) { 782 if (mask != 0xffffffff) {
775 u32 buf; 783 u32 buf;
776 784
777 pci_read_config_dword(pdev, offset, &buf); 785 pci_read_config_dword(pdev, offset, &buf);
diff --git a/drivers/edac/edac_device.c b/drivers/edac/edac_device.c
index ca9113e1c106..a7d2c717d033 100644
--- a/drivers/edac/edac_device.c
+++ b/drivers/edac/edac_device.c
@@ -389,7 +389,7 @@ static void del_edac_device_from_global_list(struct edac_device_ctl_info
389 */ 389 */
390static void edac_device_workq_function(struct work_struct *work_req) 390static void edac_device_workq_function(struct work_struct *work_req)
391{ 391{
392 struct delayed_work *d_work = (struct delayed_work *)work_req; 392 struct delayed_work *d_work = to_delayed_work(work_req);
393 struct edac_device_ctl_info *edac_dev = to_edac_device_ctl_work(d_work); 393 struct edac_device_ctl_info *edac_dev = to_edac_device_ctl_work(d_work);
394 394
395 mutex_lock(&device_ctls_mutex); 395 mutex_lock(&device_ctls_mutex);
diff --git a/drivers/edac/edac_mc.c b/drivers/edac/edac_mc.c
index 25d66940b4fa..335b7ebdb11c 100644
--- a/drivers/edac/edac_mc.c
+++ b/drivers/edac/edac_mc.c
@@ -260,7 +260,7 @@ static int edac_mc_assert_error_check_and_clear(void)
260 */ 260 */
261static void edac_mc_workq_function(struct work_struct *work_req) 261static void edac_mc_workq_function(struct work_struct *work_req)
262{ 262{
263 struct delayed_work *d_work = (struct delayed_work *)work_req; 263 struct delayed_work *d_work = to_delayed_work(work_req);
264 struct mem_ctl_info *mci = to_edac_mem_ctl_work(d_work); 264 struct mem_ctl_info *mci = to_edac_mem_ctl_work(d_work);
265 265
266 mutex_lock(&mem_ctls_mutex); 266 mutex_lock(&mem_ctls_mutex);
diff --git a/drivers/edac/edac_pci.c b/drivers/edac/edac_pci.c
index 5b150aea703a..30b585b1d60b 100644
--- a/drivers/edac/edac_pci.c
+++ b/drivers/edac/edac_pci.c
@@ -233,7 +233,7 @@ EXPORT_SYMBOL_GPL(edac_pci_find);
233 */ 233 */
234static void edac_pci_workq_function(struct work_struct *work_req) 234static void edac_pci_workq_function(struct work_struct *work_req)
235{ 235{
236 struct delayed_work *d_work = (struct delayed_work *)work_req; 236 struct delayed_work *d_work = to_delayed_work(work_req);
237 struct edac_pci_ctl_info *pci = to_edac_pci_ctl_work(d_work); 237 struct edac_pci_ctl_info *pci = to_edac_pci_ctl_work(d_work);
238 int msec; 238 int msec;
239 unsigned long delay; 239 unsigned long delay;
diff --git a/drivers/edac/mpc85xx_edac.c b/drivers/edac/mpc85xx_edac.c
index 4637a4a757df..7c8c2d72916f 100644
--- a/drivers/edac/mpc85xx_edac.c
+++ b/drivers/edac/mpc85xx_edac.c
@@ -674,7 +674,7 @@ static void mpc85xx_mc_check(struct mem_ctl_info *mci)
674 int row_index; 674 int row_index;
675 675
676 err_detect = in_be32(pdata->mc_vbase + MPC85XX_MC_ERR_DETECT); 676 err_detect = in_be32(pdata->mc_vbase + MPC85XX_MC_ERR_DETECT);
677 if (err_detect) 677 if (!err_detect)
678 return; 678 return;
679 679
680 mpc85xx_mc_printk(mci, KERN_ERR, "Err Detect Register: %#8.8x\n", 680 mpc85xx_mc_printk(mci, KERN_ERR, "Err Detect Register: %#8.8x\n",
diff --git a/drivers/firmware/iscsi_ibft.c b/drivers/firmware/iscsi_ibft.c
index 7b7ddc2d51c9..420a96e7f2db 100644
--- a/drivers/firmware/iscsi_ibft.c
+++ b/drivers/firmware/iscsi_ibft.c
@@ -754,11 +754,11 @@ static int __init ibft_check_nic_for(struct ibft_nic *nic, int entry)
754 rc = 1; 754 rc = 1;
755 break; 755 break;
756 case ibft_eth_ip_addr: 756 case ibft_eth_ip_addr:
757 if (!memcmp(nic->dhcp, nulls, sizeof(nic->dhcp))) 757 if (memcmp(nic->ip_addr, nulls, sizeof(nic->ip_addr)))
758 rc = 1; 758 rc = 1;
759 break; 759 break;
760 case ibft_eth_subnet_mask: 760 case ibft_eth_subnet_mask:
761 if (!memcmp(nic->dhcp, nulls, sizeof(nic->dhcp))) 761 if (nic->subnet_mask_prefix)
762 rc = 1; 762 rc = 1;
763 break; 763 break;
764 case ibft_eth_origin: 764 case ibft_eth_origin:
diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index 3a22eb9be378..4cd35d8fd799 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -71,6 +71,7 @@ config DRM_I915
71 select FB_CFB_COPYAREA 71 select FB_CFB_COPYAREA
72 select FB_CFB_IMAGEBLIT 72 select FB_CFB_IMAGEBLIT
73 select FB 73 select FB
74 select FRAMEBUFFER_CONSOLE if !EMBEDDED
74 tristate "i915 driver" 75 tristate "i915 driver"
75 help 76 help
76 Choose this option if you have a system that has Intel 830M, 845G, 77 Choose this option if you have a system that has Intel 830M, 845G,
@@ -83,6 +84,12 @@ config DRM_I915
83config DRM_I915_KMS 84config DRM_I915_KMS
84 bool "Enable modesetting on intel by default" 85 bool "Enable modesetting on intel by default"
85 depends on DRM_I915 86 depends on DRM_I915
87 # i915 KMS depends on ACPI_VIDEO when ACPI is enabled
88 # but for select to work, need to select ACPI_VIDEO's dependencies, ick
89 select VIDEO_OUTPUT_CONTROL if ACPI
90 select BACKLIGHT_CLASS_DEVICE if ACPI
91 select INPUT if ACPI
92 select ACPI_VIDEO if ACPI
86 help 93 help
87 Choose this option if you want kernel modesetting enabled by default, 94 Choose this option if you want kernel modesetting enabled by default,
88 and you have a new enough userspace to support this. Running old 95 and you have a new enough userspace to support this. Running old
diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
index a04639dc633d..45890447feec 100644
--- a/drivers/gpu/drm/drm_crtc_helper.c
+++ b/drivers/gpu/drm/drm_crtc_helper.c
@@ -561,7 +561,6 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
561 int saved_x, saved_y; 561 int saved_x, saved_y;
562 struct drm_encoder *encoder; 562 struct drm_encoder *encoder;
563 bool ret = true; 563 bool ret = true;
564 bool depth_changed, bpp_changed;
565 564
566 adjusted_mode = drm_mode_duplicate(dev, mode); 565 adjusted_mode = drm_mode_duplicate(dev, mode);
567 566
@@ -570,15 +569,6 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
570 if (!crtc->enabled) 569 if (!crtc->enabled)
571 return true; 570 return true;
572 571
573 if (old_fb && crtc->fb) {
574 depth_changed = (old_fb->depth != crtc->fb->depth);
575 bpp_changed = (old_fb->bits_per_pixel !=
576 crtc->fb->bits_per_pixel);
577 } else {
578 depth_changed = true;
579 bpp_changed = true;
580 }
581
582 saved_mode = crtc->mode; 572 saved_mode = crtc->mode;
583 saved_x = crtc->x; 573 saved_x = crtc->x;
584 saved_y = crtc->y; 574 saved_y = crtc->y;
@@ -590,15 +580,6 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
590 crtc->x = x; 580 crtc->x = x;
591 crtc->y = y; 581 crtc->y = y;
592 582
593 if (drm_mode_equal(&saved_mode, &crtc->mode)) {
594 if (saved_x != crtc->x || saved_y != crtc->y ||
595 depth_changed || bpp_changed) {
596 ret = !crtc_funcs->mode_set_base(crtc, crtc->x, crtc->y,
597 old_fb);
598 goto done;
599 }
600 }
601
602 /* Pass our mode to the connectors and the CRTC to give them a chance to 583 /* Pass our mode to the connectors and the CRTC to give them a chance to
603 * adjust it according to limitations or connector properties, and also 584 * adjust it according to limitations or connector properties, and also
604 * a chance to reject the mode entirely. 585 * a chance to reject the mode entirely.
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
index c4ada8b6295b..f01def16a669 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
@@ -456,7 +456,8 @@ int drm_ioctl(struct inode *inode, struct file *filp,
456 retcode = -EINVAL; 456 retcode = -EINVAL;
457 } else if (((ioctl->flags & DRM_ROOT_ONLY) && !capable(CAP_SYS_ADMIN)) || 457 } else if (((ioctl->flags & DRM_ROOT_ONLY) && !capable(CAP_SYS_ADMIN)) ||
458 ((ioctl->flags & DRM_AUTH) && !file_priv->authenticated) || 458 ((ioctl->flags & DRM_AUTH) && !file_priv->authenticated) ||
459 ((ioctl->flags & DRM_MASTER) && !file_priv->is_master)) { 459 ((ioctl->flags & DRM_MASTER) && !file_priv->is_master) ||
460 (!(ioctl->flags & DRM_CONTROL_ALLOW) && (file_priv->minor->type == DRM_MINOR_CONTROL))) {
460 retcode = -EACCES; 461 retcode = -EACCES;
461 } else { 462 } else {
462 if (cmd & (IOC_IN | IOC_OUT)) { 463 if (cmd & (IOC_IN | IOC_OUT)) {
diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c
index d009661781bc..b9631e3a1ea6 100644
--- a/drivers/gpu/drm/drm_stub.c
+++ b/drivers/gpu/drm/drm_stub.c
@@ -159,6 +159,9 @@ void drm_master_put(struct drm_master **master)
159int drm_setmaster_ioctl(struct drm_device *dev, void *data, 159int drm_setmaster_ioctl(struct drm_device *dev, void *data,
160 struct drm_file *file_priv) 160 struct drm_file *file_priv)
161{ 161{
162 if (file_priv->is_master)
163 return 0;
164
162 if (file_priv->minor->master && file_priv->minor->master != file_priv->master) 165 if (file_priv->minor->master && file_priv->minor->master != file_priv->master)
163 return -EINVAL; 166 return -EINVAL;
164 167
@@ -169,6 +172,7 @@ int drm_setmaster_ioctl(struct drm_device *dev, void *data,
169 file_priv->minor->master != file_priv->master) { 172 file_priv->minor->master != file_priv->master) {
170 mutex_lock(&dev->struct_mutex); 173 mutex_lock(&dev->struct_mutex);
171 file_priv->minor->master = drm_master_get(file_priv->master); 174 file_priv->minor->master = drm_master_get(file_priv->master);
175 file_priv->is_master = 1;
172 mutex_unlock(&dev->struct_mutex); 176 mutex_unlock(&dev->struct_mutex);
173 } 177 }
174 178
@@ -178,10 +182,15 @@ int drm_setmaster_ioctl(struct drm_device *dev, void *data,
178int drm_dropmaster_ioctl(struct drm_device *dev, void *data, 182int drm_dropmaster_ioctl(struct drm_device *dev, void *data,
179 struct drm_file *file_priv) 183 struct drm_file *file_priv)
180{ 184{
181 if (!file_priv->master) 185 if (!file_priv->is_master)
186 return -EINVAL;
187
188 if (!file_priv->minor->master)
182 return -EINVAL; 189 return -EINVAL;
190
183 mutex_lock(&dev->struct_mutex); 191 mutex_lock(&dev->struct_mutex);
184 drm_master_put(&file_priv->minor->master); 192 drm_master_put(&file_priv->minor->master);
193 file_priv->is_master = 0;
185 mutex_unlock(&dev->struct_mutex); 194 mutex_unlock(&dev->struct_mutex);
186 return 0; 195 return 0;
187} 196}
@@ -393,14 +402,14 @@ int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
393 if (dev->driver->load) { 402 if (dev->driver->load) {
394 ret = dev->driver->load(dev, ent->driver_data); 403 ret = dev->driver->load(dev, ent->driver_data);
395 if (ret) 404 if (ret)
396 goto err_g3; 405 goto err_g4;
397 } 406 }
398 407
399 /* setup the grouping for the legacy output */ 408 /* setup the grouping for the legacy output */
400 if (drm_core_check_feature(dev, DRIVER_MODESET)) { 409 if (drm_core_check_feature(dev, DRIVER_MODESET)) {
401 ret = drm_mode_group_init_legacy_group(dev, &dev->primary->mode_group); 410 ret = drm_mode_group_init_legacy_group(dev, &dev->primary->mode_group);
402 if (ret) 411 if (ret)
403 goto err_g3; 412 goto err_g4;
404 } 413 }
405 414
406 list_add_tail(&dev->driver_item, &driver->device_list); 415 list_add_tail(&dev->driver_item, &driver->device_list);
@@ -411,8 +420,11 @@ int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
411 420
412 return 0; 421 return 0;
413 422
414err_g3: 423err_g4:
415 drm_put_minor(&dev->primary); 424 drm_put_minor(&dev->primary);
425err_g3:
426 if (drm_core_check_feature(dev, DRIVER_MODESET))
427 drm_put_minor(&dev->control);
416err_g2: 428err_g2:
417 pci_disable_device(pdev); 429 pci_disable_device(pdev);
418err_g1: 430err_g1:
@@ -493,11 +505,11 @@ void drm_put_dev(struct drm_device *dev)
493 dev->agp = NULL; 505 dev->agp = NULL;
494 } 506 }
495 507
496 drm_ht_remove(&dev->map_hash);
497 drm_ctxbitmap_cleanup(dev);
498
499 list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head) 508 list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head)
500 drm_rmmap(dev, r_list->map); 509 drm_rmmap(dev, r_list->map);
510 drm_ht_remove(&dev->map_hash);
511
512 drm_ctxbitmap_cleanup(dev);
501 513
502 if (drm_core_check_feature(dev, DRIVER_MODESET)) 514 if (drm_core_check_feature(dev, DRIVER_MODESET))
503 drm_put_minor(&dev->control); 515 drm_put_minor(&dev->control);
diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c
index bc0c6849360c..8f9372921f82 100644
--- a/drivers/gpu/drm/drm_sysfs.c
+++ b/drivers/gpu/drm/drm_sysfs.c
@@ -132,6 +132,7 @@ void drm_sysfs_destroy(void)
132 */ 132 */
133static void drm_sysfs_device_release(struct device *dev) 133static void drm_sysfs_device_release(struct device *dev)
134{ 134{
135 memset(dev, 0, sizeof(struct device));
135 return; 136 return;
136} 137}
137 138
@@ -488,9 +489,7 @@ int drm_sysfs_device_add(struct drm_minor *minor)
488 489
489 return 0; 490 return 0;
490 491
491 device_unregister(&minor->kdev);
492err_out: 492err_out:
493
494 return err; 493 return err;
495} 494}
496 495
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index a000cf028826..53d544552625 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -713,18 +713,18 @@ static int i915_cmdbuffer(struct drm_device *dev, void *data,
713 mutex_unlock(&dev->struct_mutex); 713 mutex_unlock(&dev->struct_mutex);
714 if (ret) { 714 if (ret) {
715 DRM_ERROR("i915_dispatch_cmdbuffer failed\n"); 715 DRM_ERROR("i915_dispatch_cmdbuffer failed\n");
716 goto fail_batch_free; 716 goto fail_clip_free;
717 } 717 }
718 718
719 if (sarea_priv) 719 if (sarea_priv)
720 sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv); 720 sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv);
721 721
722fail_batch_free:
723 drm_free(batch_data, cmdbuf->sz, DRM_MEM_DRIVER);
724fail_clip_free: 722fail_clip_free:
725 drm_free(cliprects, 723 drm_free(cliprects,
726 cmdbuf->num_cliprects * sizeof(struct drm_clip_rect), 724 cmdbuf->num_cliprects * sizeof(struct drm_clip_rect),
727 DRM_MEM_DRIVER); 725 DRM_MEM_DRIVER);
726fail_batch_free:
727 drm_free(batch_data, cmdbuf->sz, DRM_MEM_DRIVER);
728 728
729 return ret; 729 return ret;
730} 730}
@@ -1011,8 +1011,16 @@ static int i915_load_modeset_init(struct drm_device *dev)
1011 /* Basic memrange allocator for stolen space (aka vram) */ 1011 /* Basic memrange allocator for stolen space (aka vram) */
1012 drm_mm_init(&dev_priv->vram, 0, prealloc_size); 1012 drm_mm_init(&dev_priv->vram, 0, prealloc_size);
1013 1013
1014 /* Let GEM Manage from end of prealloc space to end of aperture */ 1014 /* Let GEM Manage from end of prealloc space to end of aperture.
1015 i915_gem_do_init(dev, prealloc_size, agp_size); 1015 *
1016 * However, leave one page at the end still bound to the scratch page.
1017 * There are a number of places where the hardware apparently
1018 * prefetches past the end of the object, and we've seen multiple
1019 * hangs with the GPU head pointer stuck in a batchbuffer bound
1020 * at the last page of the aperture. One page should be enough to
1021 * keep any prefetching inside of the aperture.
1022 */
1023 i915_gem_do_init(dev, prealloc_size, agp_size - 4096);
1016 1024
1017 ret = i915_gem_init_ringbuffer(dev); 1025 ret = i915_gem_init_ringbuffer(dev);
1018 if (ret) 1026 if (ret)
@@ -1232,7 +1240,7 @@ int i915_driver_unload(struct drm_device *dev)
1232 if (dev_priv->regs != NULL) 1240 if (dev_priv->regs != NULL)
1233 iounmap(dev_priv->regs); 1241 iounmap(dev_priv->regs);
1234 1242
1235 intel_opregion_free(dev); 1243 intel_opregion_free(dev, 0);
1236 1244
1237 if (drm_core_check_feature(dev, DRIVER_MODESET)) { 1245 if (drm_core_check_feature(dev, DRIVER_MODESET)) {
1238 intel_modeset_cleanup(dev); 1246 intel_modeset_cleanup(dev);
@@ -1350,6 +1358,7 @@ struct drm_ioctl_desc i915_ioctls[] = {
1350 DRM_IOCTL_DEF(DRM_I915_GEM_SET_TILING, i915_gem_set_tiling, 0), 1358 DRM_IOCTL_DEF(DRM_I915_GEM_SET_TILING, i915_gem_set_tiling, 0),
1351 DRM_IOCTL_DEF(DRM_I915_GEM_GET_TILING, i915_gem_get_tiling, 0), 1359 DRM_IOCTL_DEF(DRM_I915_GEM_GET_TILING, i915_gem_get_tiling, 0),
1352 DRM_IOCTL_DEF(DRM_I915_GEM_GET_APERTURE, i915_gem_get_aperture_ioctl, 0), 1360 DRM_IOCTL_DEF(DRM_I915_GEM_GET_APERTURE, i915_gem_get_aperture_ioctl, 0),
1361 DRM_IOCTL_DEF(DRM_I915_GET_PIPE_FROM_CRTC_ID, intel_get_pipe_from_crtc_id, 0),
1353}; 1362};
1354 1363
1355int i915_max_ioctl = DRM_ARRAY_SIZE(i915_ioctls); 1364int i915_max_ioctl = DRM_ARRAY_SIZE(i915_ioctls);
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 6503e2210f65..98560e1e899a 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -77,7 +77,7 @@ static int i915_suspend(struct drm_device *dev, pm_message_t state)
77 drm_irq_uninstall(dev); 77 drm_irq_uninstall(dev);
78 } 78 }
79 79
80 intel_opregion_free(dev); 80 intel_opregion_free(dev, 1);
81 81
82 if (state.event == PM_EVENT_SUSPEND) { 82 if (state.event == PM_EVENT_SUSPEND) {
83 /* Shut down the device */ 83 /* Shut down the device */
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 3750d8003048..9b149fe824c3 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -283,6 +283,7 @@ typedef struct drm_i915_private {
283 u8 saveAR[21]; 283 u8 saveAR[21];
284 u8 saveDACMASK; 284 u8 saveDACMASK;
285 u8 saveCR[37]; 285 u8 saveCR[37];
286 uint64_t saveFENCE[16];
286 287
287 struct { 288 struct {
288 struct drm_mm gtt_space; 289 struct drm_mm gtt_space;
@@ -446,6 +447,9 @@ struct drm_i915_gem_object {
446 uint32_t tiling_mode; 447 uint32_t tiling_mode;
447 uint32_t stride; 448 uint32_t stride;
448 449
450 /** Record of address bit 17 of each page at last unbind. */
451 long *bit_17;
452
449 /** AGP mapping type (AGP_USER_MEMORY or AGP_USER_CACHED_MEMORY */ 453 /** AGP mapping type (AGP_USER_MEMORY or AGP_USER_CACHED_MEMORY */
450 uint32_t agp_type; 454 uint32_t agp_type;
451 455
@@ -635,9 +639,13 @@ int i915_gem_attach_phys_object(struct drm_device *dev,
635void i915_gem_detach_phys_object(struct drm_device *dev, 639void i915_gem_detach_phys_object(struct drm_device *dev,
636 struct drm_gem_object *obj); 640 struct drm_gem_object *obj);
637void i915_gem_free_all_phys_object(struct drm_device *dev); 641void i915_gem_free_all_phys_object(struct drm_device *dev);
642int i915_gem_object_get_pages(struct drm_gem_object *obj);
643void i915_gem_object_put_pages(struct drm_gem_object *obj);
638 644
639/* i915_gem_tiling.c */ 645/* i915_gem_tiling.c */
640void i915_gem_detect_bit_6_swizzle(struct drm_device *dev); 646void i915_gem_detect_bit_6_swizzle(struct drm_device *dev);
647void i915_gem_object_do_bit_17_swizzle(struct drm_gem_object *obj);
648void i915_gem_object_save_bit_17_swizzle(struct drm_gem_object *obj);
641 649
642/* i915_gem_debug.c */ 650/* i915_gem_debug.c */
643void i915_gem_dump_object(struct drm_gem_object *obj, int len, 651void i915_gem_dump_object(struct drm_gem_object *obj, int len,
@@ -667,12 +675,12 @@ extern int i915_restore_state(struct drm_device *dev);
667#ifdef CONFIG_ACPI 675#ifdef CONFIG_ACPI
668/* i915_opregion.c */ 676/* i915_opregion.c */
669extern int intel_opregion_init(struct drm_device *dev, int resume); 677extern int intel_opregion_init(struct drm_device *dev, int resume);
670extern void intel_opregion_free(struct drm_device *dev); 678extern void intel_opregion_free(struct drm_device *dev, int suspend);
671extern void opregion_asle_intr(struct drm_device *dev); 679extern void opregion_asle_intr(struct drm_device *dev);
672extern void opregion_enable_asle(struct drm_device *dev); 680extern void opregion_enable_asle(struct drm_device *dev);
673#else 681#else
674static inline int intel_opregion_init(struct drm_device *dev, int resume) { return 0; } 682static inline int intel_opregion_init(struct drm_device *dev, int resume) { return 0; }
675static inline void intel_opregion_free(struct drm_device *dev) { return; } 683static inline void intel_opregion_free(struct drm_device *dev, int suspend) { return; }
676static inline void opregion_asle_intr(struct drm_device *dev) { return; } 684static inline void opregion_asle_intr(struct drm_device *dev) { return; }
677static inline void opregion_enable_asle(struct drm_device *dev) { return; } 685static inline void opregion_enable_asle(struct drm_device *dev) { return; }
678#endif 686#endif
@@ -698,13 +706,8 @@ extern void intel_modeset_cleanup(struct drm_device *dev);
698#define I915_WRITE16(reg, val) writel(val, dev_priv->regs + (reg)) 706#define I915_WRITE16(reg, val) writel(val, dev_priv->regs + (reg))
699#define I915_READ8(reg) readb(dev_priv->regs + (reg)) 707#define I915_READ8(reg) readb(dev_priv->regs + (reg))
700#define I915_WRITE8(reg, val) writeb(val, dev_priv->regs + (reg)) 708#define I915_WRITE8(reg, val) writeb(val, dev_priv->regs + (reg))
701#ifdef writeq
702#define I915_WRITE64(reg, val) writeq(val, dev_priv->regs + (reg)) 709#define I915_WRITE64(reg, val) writeq(val, dev_priv->regs + (reg))
703#else 710#define I915_READ64(reg) readq(dev_priv->regs + (reg))
704#define I915_WRITE64(reg, val) (writel(val, dev_priv->regs + (reg)), \
705 writel(upper_32_bits(val), dev_priv->regs + \
706 (reg) + 4))
707#endif
708#define POSTING_READ(reg) (void)I915_READ(reg) 711#define POSTING_READ(reg) (void)I915_READ(reg)
709 712
710#define I915_VERBOSE 0 713#define I915_VERBOSE 0
@@ -780,15 +783,18 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
780 (dev)->pci_device == 0x2A42 || \ 783 (dev)->pci_device == 0x2A42 || \
781 (dev)->pci_device == 0x2E02 || \ 784 (dev)->pci_device == 0x2E02 || \
782 (dev)->pci_device == 0x2E12 || \ 785 (dev)->pci_device == 0x2E12 || \
783 (dev)->pci_device == 0x2E22) 786 (dev)->pci_device == 0x2E22 || \
787 (dev)->pci_device == 0x2E32)
784 788
785#define IS_I965GM(dev) ((dev)->pci_device == 0x2A02) 789#define IS_I965GM(dev) ((dev)->pci_device == 0x2A02 || \
790 (dev)->pci_device == 0x2A12)
786 791
787#define IS_GM45(dev) ((dev)->pci_device == 0x2A42) 792#define IS_GM45(dev) ((dev)->pci_device == 0x2A42)
788 793
789#define IS_G4X(dev) ((dev)->pci_device == 0x2E02 || \ 794#define IS_G4X(dev) ((dev)->pci_device == 0x2E02 || \
790 (dev)->pci_device == 0x2E12 || \ 795 (dev)->pci_device == 0x2E12 || \
791 (dev)->pci_device == 0x2E22 || \ 796 (dev)->pci_device == 0x2E22 || \
797 (dev)->pci_device == 0x2E32 || \
792 IS_GM45(dev)) 798 IS_GM45(dev))
793 799
794#define IS_IGDG(dev) ((dev)->pci_device == 0xa001) 800#define IS_IGDG(dev) ((dev)->pci_device == 0xa001)
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 1449b452cc63..b189b49c7602 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -43,8 +43,6 @@ static int i915_gem_object_set_cpu_read_domain_range(struct drm_gem_object *obj,
43 uint64_t offset, 43 uint64_t offset,
44 uint64_t size); 44 uint64_t size);
45static void i915_gem_object_set_to_full_cpu_read_domain(struct drm_gem_object *obj); 45static void i915_gem_object_set_to_full_cpu_read_domain(struct drm_gem_object *obj);
46static int i915_gem_object_get_pages(struct drm_gem_object *obj);
47static void i915_gem_object_put_pages(struct drm_gem_object *obj);
48static int i915_gem_object_wait_rendering(struct drm_gem_object *obj); 46static int i915_gem_object_wait_rendering(struct drm_gem_object *obj);
49static int i915_gem_object_bind_to_gtt(struct drm_gem_object *obj, 47static int i915_gem_object_bind_to_gtt(struct drm_gem_object *obj,
50 unsigned alignment); 48 unsigned alignment);
@@ -143,15 +141,27 @@ fast_shmem_read(struct page **pages,
143 int length) 141 int length)
144{ 142{
145 char __iomem *vaddr; 143 char __iomem *vaddr;
146 int ret; 144 int unwritten;
147 145
148 vaddr = kmap_atomic(pages[page_base >> PAGE_SHIFT], KM_USER0); 146 vaddr = kmap_atomic(pages[page_base >> PAGE_SHIFT], KM_USER0);
149 if (vaddr == NULL) 147 if (vaddr == NULL)
150 return -ENOMEM; 148 return -ENOMEM;
151 ret = __copy_to_user_inatomic(data, vaddr + page_offset, length); 149 unwritten = __copy_to_user_inatomic(data, vaddr + page_offset, length);
152 kunmap_atomic(vaddr, KM_USER0); 150 kunmap_atomic(vaddr, KM_USER0);
153 151
154 return ret; 152 if (unwritten)
153 return -EFAULT;
154
155 return 0;
156}
157
158static int i915_gem_object_needs_bit17_swizzle(struct drm_gem_object *obj)
159{
160 drm_i915_private_t *dev_priv = obj->dev->dev_private;
161 struct drm_i915_gem_object *obj_priv = obj->driver_private;
162
163 return dev_priv->mm.bit_6_swizzle_x == I915_BIT_6_SWIZZLE_9_10_17 &&
164 obj_priv->tiling_mode != I915_TILING_NONE;
155} 165}
156 166
157static inline int 167static inline int
@@ -181,6 +191,64 @@ slow_shmem_copy(struct page *dst_page,
181 return 0; 191 return 0;
182} 192}
183 193
194static inline int
195slow_shmem_bit17_copy(struct page *gpu_page,
196 int gpu_offset,
197 struct page *cpu_page,
198 int cpu_offset,
199 int length,
200 int is_read)
201{
202 char *gpu_vaddr, *cpu_vaddr;
203
204 /* Use the unswizzled path if this page isn't affected. */
205 if ((page_to_phys(gpu_page) & (1 << 17)) == 0) {
206 if (is_read)
207 return slow_shmem_copy(cpu_page, cpu_offset,
208 gpu_page, gpu_offset, length);
209 else
210 return slow_shmem_copy(gpu_page, gpu_offset,
211 cpu_page, cpu_offset, length);
212 }
213
214 gpu_vaddr = kmap_atomic(gpu_page, KM_USER0);
215 if (gpu_vaddr == NULL)
216 return -ENOMEM;
217
218 cpu_vaddr = kmap_atomic(cpu_page, KM_USER1);
219 if (cpu_vaddr == NULL) {
220 kunmap_atomic(gpu_vaddr, KM_USER0);
221 return -ENOMEM;
222 }
223
224 /* Copy the data, XORing A6 with A17 (1). The user already knows he's
225 * XORing with the other bits (A9 for Y, A9 and A10 for X)
226 */
227 while (length > 0) {
228 int cacheline_end = ALIGN(gpu_offset + 1, 64);
229 int this_length = min(cacheline_end - gpu_offset, length);
230 int swizzled_gpu_offset = gpu_offset ^ 64;
231
232 if (is_read) {
233 memcpy(cpu_vaddr + cpu_offset,
234 gpu_vaddr + swizzled_gpu_offset,
235 this_length);
236 } else {
237 memcpy(gpu_vaddr + swizzled_gpu_offset,
238 cpu_vaddr + cpu_offset,
239 this_length);
240 }
241 cpu_offset += this_length;
242 gpu_offset += this_length;
243 length -= this_length;
244 }
245
246 kunmap_atomic(cpu_vaddr, KM_USER1);
247 kunmap_atomic(gpu_vaddr, KM_USER0);
248
249 return 0;
250}
251
184/** 252/**
185 * This is the fast shmem pread path, which attempts to copy_from_user directly 253 * This is the fast shmem pread path, which attempts to copy_from_user directly
186 * from the backing pages of the object to the user's address space. On a 254 * from the backing pages of the object to the user's address space. On a
@@ -269,6 +337,7 @@ i915_gem_shmem_pread_slow(struct drm_device *dev, struct drm_gem_object *obj,
269 int page_length; 337 int page_length;
270 int ret; 338 int ret;
271 uint64_t data_ptr = args->data_ptr; 339 uint64_t data_ptr = args->data_ptr;
340 int do_bit17_swizzling;
272 341
273 remain = args->size; 342 remain = args->size;
274 343
@@ -286,13 +355,15 @@ i915_gem_shmem_pread_slow(struct drm_device *dev, struct drm_gem_object *obj,
286 355
287 down_read(&mm->mmap_sem); 356 down_read(&mm->mmap_sem);
288 pinned_pages = get_user_pages(current, mm, (uintptr_t)args->data_ptr, 357 pinned_pages = get_user_pages(current, mm, (uintptr_t)args->data_ptr,
289 num_pages, 0, 0, user_pages, NULL); 358 num_pages, 1, 0, user_pages, NULL);
290 up_read(&mm->mmap_sem); 359 up_read(&mm->mmap_sem);
291 if (pinned_pages < num_pages) { 360 if (pinned_pages < num_pages) {
292 ret = -EFAULT; 361 ret = -EFAULT;
293 goto fail_put_user_pages; 362 goto fail_put_user_pages;
294 } 363 }
295 364
365 do_bit17_swizzling = i915_gem_object_needs_bit17_swizzle(obj);
366
296 mutex_lock(&dev->struct_mutex); 367 mutex_lock(&dev->struct_mutex);
297 368
298 ret = i915_gem_object_get_pages(obj); 369 ret = i915_gem_object_get_pages(obj);
@@ -327,11 +398,20 @@ i915_gem_shmem_pread_slow(struct drm_device *dev, struct drm_gem_object *obj,
327 if ((data_page_offset + page_length) > PAGE_SIZE) 398 if ((data_page_offset + page_length) > PAGE_SIZE)
328 page_length = PAGE_SIZE - data_page_offset; 399 page_length = PAGE_SIZE - data_page_offset;
329 400
330 ret = slow_shmem_copy(user_pages[data_page_index], 401 if (do_bit17_swizzling) {
331 data_page_offset, 402 ret = slow_shmem_bit17_copy(obj_priv->pages[shmem_page_index],
332 obj_priv->pages[shmem_page_index], 403 shmem_page_offset,
333 shmem_page_offset, 404 user_pages[data_page_index],
334 page_length); 405 data_page_offset,
406 page_length,
407 1);
408 } else {
409 ret = slow_shmem_copy(user_pages[data_page_index],
410 data_page_offset,
411 obj_priv->pages[shmem_page_index],
412 shmem_page_offset,
413 page_length);
414 }
335 if (ret) 415 if (ret)
336 goto fail_put_pages; 416 goto fail_put_pages;
337 417
@@ -383,9 +463,14 @@ i915_gem_pread_ioctl(struct drm_device *dev, void *data,
383 return -EINVAL; 463 return -EINVAL;
384 } 464 }
385 465
386 ret = i915_gem_shmem_pread_fast(dev, obj, args, file_priv); 466 if (i915_gem_object_needs_bit17_swizzle(obj)) {
387 if (ret != 0)
388 ret = i915_gem_shmem_pread_slow(dev, obj, args, file_priv); 467 ret = i915_gem_shmem_pread_slow(dev, obj, args, file_priv);
468 } else {
469 ret = i915_gem_shmem_pread_fast(dev, obj, args, file_priv);
470 if (ret != 0)
471 ret = i915_gem_shmem_pread_slow(dev, obj, args,
472 file_priv);
473 }
389 474
390 drm_gem_object_unreference(obj); 475 drm_gem_object_unreference(obj);
391 476
@@ -727,6 +812,7 @@ i915_gem_shmem_pwrite_slow(struct drm_device *dev, struct drm_gem_object *obj,
727 int page_length; 812 int page_length;
728 int ret; 813 int ret;
729 uint64_t data_ptr = args->data_ptr; 814 uint64_t data_ptr = args->data_ptr;
815 int do_bit17_swizzling;
730 816
731 remain = args->size; 817 remain = args->size;
732 818
@@ -751,6 +837,8 @@ i915_gem_shmem_pwrite_slow(struct drm_device *dev, struct drm_gem_object *obj,
751 goto fail_put_user_pages; 837 goto fail_put_user_pages;
752 } 838 }
753 839
840 do_bit17_swizzling = i915_gem_object_needs_bit17_swizzle(obj);
841
754 mutex_lock(&dev->struct_mutex); 842 mutex_lock(&dev->struct_mutex);
755 843
756 ret = i915_gem_object_get_pages(obj); 844 ret = i915_gem_object_get_pages(obj);
@@ -785,11 +873,20 @@ i915_gem_shmem_pwrite_slow(struct drm_device *dev, struct drm_gem_object *obj,
785 if ((data_page_offset + page_length) > PAGE_SIZE) 873 if ((data_page_offset + page_length) > PAGE_SIZE)
786 page_length = PAGE_SIZE - data_page_offset; 874 page_length = PAGE_SIZE - data_page_offset;
787 875
788 ret = slow_shmem_copy(obj_priv->pages[shmem_page_index], 876 if (do_bit17_swizzling) {
789 shmem_page_offset, 877 ret = slow_shmem_bit17_copy(obj_priv->pages[shmem_page_index],
790 user_pages[data_page_index], 878 shmem_page_offset,
791 data_page_offset, 879 user_pages[data_page_index],
792 page_length); 880 data_page_offset,
881 page_length,
882 0);
883 } else {
884 ret = slow_shmem_copy(obj_priv->pages[shmem_page_index],
885 shmem_page_offset,
886 user_pages[data_page_index],
887 data_page_offset,
888 page_length);
889 }
793 if (ret) 890 if (ret)
794 goto fail_put_pages; 891 goto fail_put_pages;
795 892
@@ -854,6 +951,8 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
854 ret = i915_gem_gtt_pwrite_slow(dev, obj, args, 951 ret = i915_gem_gtt_pwrite_slow(dev, obj, args,
855 file_priv); 952 file_priv);
856 } 953 }
954 } else if (i915_gem_object_needs_bit17_swizzle(obj)) {
955 ret = i915_gem_shmem_pwrite_slow(dev, obj, args, file_priv);
857 } else { 956 } else {
858 ret = i915_gem_shmem_pwrite_fast(dev, obj, args, file_priv); 957 ret = i915_gem_shmem_pwrite_fast(dev, obj, args, file_priv);
859 if (ret == -EFAULT) { 958 if (ret == -EFAULT) {
@@ -1285,7 +1384,7 @@ i915_gem_mmap_gtt_ioctl(struct drm_device *dev, void *data,
1285 return 0; 1384 return 0;
1286} 1385}
1287 1386
1288static void 1387void
1289i915_gem_object_put_pages(struct drm_gem_object *obj) 1388i915_gem_object_put_pages(struct drm_gem_object *obj)
1290{ 1389{
1291 struct drm_i915_gem_object *obj_priv = obj->driver_private; 1390 struct drm_i915_gem_object *obj_priv = obj->driver_private;
@@ -1297,6 +1396,9 @@ i915_gem_object_put_pages(struct drm_gem_object *obj)
1297 if (--obj_priv->pages_refcount != 0) 1396 if (--obj_priv->pages_refcount != 0)
1298 return; 1397 return;
1299 1398
1399 if (obj_priv->tiling_mode != I915_TILING_NONE)
1400 i915_gem_object_save_bit_17_swizzle(obj);
1401
1300 for (i = 0; i < page_count; i++) 1402 for (i = 0; i < page_count; i++)
1301 if (obj_priv->pages[i] != NULL) { 1403 if (obj_priv->pages[i] != NULL) {
1302 if (obj_priv->dirty) 1404 if (obj_priv->dirty)
@@ -1494,8 +1596,19 @@ i915_gem_retire_request(struct drm_device *dev,
1494 1596
1495 if (obj->write_domain != 0) 1597 if (obj->write_domain != 0)
1496 i915_gem_object_move_to_flushing(obj); 1598 i915_gem_object_move_to_flushing(obj);
1497 else 1599 else {
1600 /* Take a reference on the object so it won't be
1601 * freed while the spinlock is held. The list
1602 * protection for this spinlock is safe when breaking
1603 * the lock like this since the next thing we do
1604 * is just get the head of the list again.
1605 */
1606 drm_gem_object_reference(obj);
1498 i915_gem_object_move_to_inactive(obj); 1607 i915_gem_object_move_to_inactive(obj);
1608 spin_unlock(&dev_priv->mm.active_list_lock);
1609 drm_gem_object_unreference(obj);
1610 spin_lock(&dev_priv->mm.active_list_lock);
1611 }
1499 } 1612 }
1500out: 1613out:
1501 spin_unlock(&dev_priv->mm.active_list_lock); 1614 spin_unlock(&dev_priv->mm.active_list_lock);
@@ -1578,11 +1691,20 @@ static int
1578i915_wait_request(struct drm_device *dev, uint32_t seqno) 1691i915_wait_request(struct drm_device *dev, uint32_t seqno)
1579{ 1692{
1580 drm_i915_private_t *dev_priv = dev->dev_private; 1693 drm_i915_private_t *dev_priv = dev->dev_private;
1694 u32 ier;
1581 int ret = 0; 1695 int ret = 0;
1582 1696
1583 BUG_ON(seqno == 0); 1697 BUG_ON(seqno == 0);
1584 1698
1585 if (!i915_seqno_passed(i915_get_gem_seqno(dev), seqno)) { 1699 if (!i915_seqno_passed(i915_get_gem_seqno(dev), seqno)) {
1700 ier = I915_READ(IER);
1701 if (!ier) {
1702 DRM_ERROR("something (likely vbetool) disabled "
1703 "interrupts, re-enabling\n");
1704 i915_driver_irq_preinstall(dev);
1705 i915_driver_irq_postinstall(dev);
1706 }
1707
1586 dev_priv->mm.waiting_gem_seqno = seqno; 1708 dev_priv->mm.waiting_gem_seqno = seqno;
1587 i915_user_irq_get(dev); 1709 i915_user_irq_get(dev);
1588 ret = wait_event_interruptible(dev_priv->irq_queue, 1710 ret = wait_event_interruptible(dev_priv->irq_queue,
@@ -1884,7 +2006,7 @@ i915_gem_evict_everything(struct drm_device *dev)
1884 return ret; 2006 return ret;
1885} 2007}
1886 2008
1887static int 2009int
1888i915_gem_object_get_pages(struct drm_gem_object *obj) 2010i915_gem_object_get_pages(struct drm_gem_object *obj)
1889{ 2011{
1890 struct drm_i915_gem_object *obj_priv = obj->driver_private; 2012 struct drm_i915_gem_object *obj_priv = obj->driver_private;
@@ -1922,6 +2044,10 @@ i915_gem_object_get_pages(struct drm_gem_object *obj)
1922 } 2044 }
1923 obj_priv->pages[i] = page; 2045 obj_priv->pages[i] = page;
1924 } 2046 }
2047
2048 if (obj_priv->tiling_mode != I915_TILING_NONE)
2049 i915_gem_object_do_bit_17_swizzle(obj);
2050
1925 return 0; 2051 return 0;
1926} 2052}
1927 2053
@@ -3002,13 +3128,13 @@ i915_gem_get_relocs_from_user(struct drm_i915_gem_exec_object *exec_list,
3002 drm_free(*relocs, reloc_count * sizeof(**relocs), 3128 drm_free(*relocs, reloc_count * sizeof(**relocs),
3003 DRM_MEM_DRIVER); 3129 DRM_MEM_DRIVER);
3004 *relocs = NULL; 3130 *relocs = NULL;
3005 return ret; 3131 return -EFAULT;
3006 } 3132 }
3007 3133
3008 reloc_index += exec_list[i].relocation_count; 3134 reloc_index += exec_list[i].relocation_count;
3009 } 3135 }
3010 3136
3011 return ret; 3137 return 0;
3012} 3138}
3013 3139
3014static int 3140static int
@@ -3017,23 +3143,28 @@ i915_gem_put_relocs_to_user(struct drm_i915_gem_exec_object *exec_list,
3017 struct drm_i915_gem_relocation_entry *relocs) 3143 struct drm_i915_gem_relocation_entry *relocs)
3018{ 3144{
3019 uint32_t reloc_count = 0, i; 3145 uint32_t reloc_count = 0, i;
3020 int ret; 3146 int ret = 0;
3021 3147
3022 for (i = 0; i < buffer_count; i++) { 3148 for (i = 0; i < buffer_count; i++) {
3023 struct drm_i915_gem_relocation_entry __user *user_relocs; 3149 struct drm_i915_gem_relocation_entry __user *user_relocs;
3150 int unwritten;
3024 3151
3025 user_relocs = (void __user *)(uintptr_t)exec_list[i].relocs_ptr; 3152 user_relocs = (void __user *)(uintptr_t)exec_list[i].relocs_ptr;
3026 3153
3027 if (ret == 0) { 3154 unwritten = copy_to_user(user_relocs,
3028 ret = copy_to_user(user_relocs, 3155 &relocs[reloc_count],
3029 &relocs[reloc_count], 3156 exec_list[i].relocation_count *
3030 exec_list[i].relocation_count * 3157 sizeof(*relocs));
3031 sizeof(*relocs)); 3158
3159 if (unwritten) {
3160 ret = -EFAULT;
3161 goto err;
3032 } 3162 }
3033 3163
3034 reloc_count += exec_list[i].relocation_count; 3164 reloc_count += exec_list[i].relocation_count;
3035 } 3165 }
3036 3166
3167err:
3037 drm_free(relocs, reloc_count * sizeof(*relocs), DRM_MEM_DRIVER); 3168 drm_free(relocs, reloc_count * sizeof(*relocs), DRM_MEM_DRIVER);
3038 3169
3039 return ret; 3170 return ret;
@@ -3243,7 +3374,7 @@ i915_gem_execbuffer(struct drm_device *dev, void *data,
3243 exec_offset = exec_list[args->buffer_count - 1].offset; 3374 exec_offset = exec_list[args->buffer_count - 1].offset;
3244 3375
3245#if WATCH_EXEC 3376#if WATCH_EXEC
3246 i915_gem_dump_object(object_list[args->buffer_count - 1], 3377 i915_gem_dump_object(batch_obj,
3247 args->batch_len, 3378 args->batch_len,
3248 __func__, 3379 __func__,
3249 ~0); 3380 ~0);
@@ -3308,10 +3439,12 @@ err:
3308 (uintptr_t) args->buffers_ptr, 3439 (uintptr_t) args->buffers_ptr,
3309 exec_list, 3440 exec_list,
3310 sizeof(*exec_list) * args->buffer_count); 3441 sizeof(*exec_list) * args->buffer_count);
3311 if (ret) 3442 if (ret) {
3443 ret = -EFAULT;
3312 DRM_ERROR("failed to copy %d exec entries " 3444 DRM_ERROR("failed to copy %d exec entries "
3313 "back to user (%d)\n", 3445 "back to user (%d)\n",
3314 args->buffer_count, ret); 3446 args->buffer_count, ret);
3447 }
3315 } 3448 }
3316 3449
3317 /* Copy the updated relocations out regardless of current error 3450 /* Copy the updated relocations out regardless of current error
@@ -3593,6 +3726,7 @@ void i915_gem_free_object(struct drm_gem_object *obj)
3593 i915_gem_free_mmap_offset(obj); 3726 i915_gem_free_mmap_offset(obj);
3594 3727
3595 drm_free(obj_priv->page_cpu_valid, 1, DRM_MEM_DRIVER); 3728 drm_free(obj_priv->page_cpu_valid, 1, DRM_MEM_DRIVER);
3729 kfree(obj_priv->bit_17);
3596 drm_free(obj->driver_private, 1, DRM_MEM_DRIVER); 3730 drm_free(obj->driver_private, 1, DRM_MEM_DRIVER);
3597} 3731}
3598 3732
@@ -3962,8 +4096,10 @@ i915_gem_entervt_ioctl(struct drm_device *dev, void *data,
3962 dev_priv->mm.suspended = 0; 4096 dev_priv->mm.suspended = 0;
3963 4097
3964 ret = i915_gem_init_ringbuffer(dev); 4098 ret = i915_gem_init_ringbuffer(dev);
3965 if (ret != 0) 4099 if (ret != 0) {
4100 mutex_unlock(&dev->struct_mutex);
3966 return ret; 4101 return ret;
4102 }
3967 4103
3968 spin_lock(&dev_priv->mm.active_list_lock); 4104 spin_lock(&dev_priv->mm.active_list_lock);
3969 BUG_ON(!list_empty(&dev_priv->mm.active_list)); 4105 BUG_ON(!list_empty(&dev_priv->mm.active_list));
diff --git a/drivers/gpu/drm/i915/i915_gem_debugfs.c b/drivers/gpu/drm/i915/i915_gem_debugfs.c
index a1ac0c5e7307..986f1082c596 100644
--- a/drivers/gpu/drm/i915/i915_gem_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_gem_debugfs.c
@@ -234,6 +234,96 @@ static int i915_hws_info(struct seq_file *m, void *data)
234 return 0; 234 return 0;
235} 235}
236 236
237static void i915_dump_pages(struct seq_file *m, struct page **pages, int page_count)
238{
239 int page, i;
240 uint32_t *mem;
241
242 for (page = 0; page < page_count; page++) {
243 mem = kmap(pages[page]);
244 for (i = 0; i < PAGE_SIZE; i += 4)
245 seq_printf(m, "%08x : %08x\n", i, mem[i / 4]);
246 kunmap(pages[page]);
247 }
248}
249
250static int i915_batchbuffer_info(struct seq_file *m, void *data)
251{
252 struct drm_info_node *node = (struct drm_info_node *) m->private;
253 struct drm_device *dev = node->minor->dev;
254 drm_i915_private_t *dev_priv = dev->dev_private;
255 struct drm_gem_object *obj;
256 struct drm_i915_gem_object *obj_priv;
257 int ret;
258
259 spin_lock(&dev_priv->mm.active_list_lock);
260
261 list_for_each_entry(obj_priv, &dev_priv->mm.active_list, list) {
262 obj = obj_priv->obj;
263 if (obj->read_domains & I915_GEM_DOMAIN_COMMAND) {
264 ret = i915_gem_object_get_pages(obj);
265 if (ret) {
266 DRM_ERROR("Failed to get pages: %d\n", ret);
267 spin_unlock(&dev_priv->mm.active_list_lock);
268 return ret;
269 }
270
271 seq_printf(m, "--- gtt_offset = 0x%08x\n", obj_priv->gtt_offset);
272 i915_dump_pages(m, obj_priv->pages, obj->size / PAGE_SIZE);
273
274 i915_gem_object_put_pages(obj);
275 }
276 }
277
278 spin_unlock(&dev_priv->mm.active_list_lock);
279
280 return 0;
281}
282
283static int i915_ringbuffer_data(struct seq_file *m, void *data)
284{
285 struct drm_info_node *node = (struct drm_info_node *) m->private;
286 struct drm_device *dev = node->minor->dev;
287 drm_i915_private_t *dev_priv = dev->dev_private;
288 u8 *virt;
289 uint32_t *ptr, off;
290
291 if (!dev_priv->ring.ring_obj) {
292 seq_printf(m, "No ringbuffer setup\n");
293 return 0;
294 }
295
296 virt = dev_priv->ring.virtual_start;
297
298 for (off = 0; off < dev_priv->ring.Size; off += 4) {
299 ptr = (uint32_t *)(virt + off);
300 seq_printf(m, "%08x : %08x\n", off, *ptr);
301 }
302
303 return 0;
304}
305
306static int i915_ringbuffer_info(struct seq_file *m, void *data)
307{
308 struct drm_info_node *node = (struct drm_info_node *) m->private;
309 struct drm_device *dev = node->minor->dev;
310 drm_i915_private_t *dev_priv = dev->dev_private;
311 unsigned int head, tail, mask;
312
313 head = I915_READ(PRB0_HEAD) & HEAD_ADDR;
314 tail = I915_READ(PRB0_TAIL) & TAIL_ADDR;
315 mask = dev_priv->ring.tail_mask;
316
317 seq_printf(m, "RingHead : %08x\n", head);
318 seq_printf(m, "RingTail : %08x\n", tail);
319 seq_printf(m, "RingMask : %08x\n", mask);
320 seq_printf(m, "RingSize : %08lx\n", dev_priv->ring.Size);
321 seq_printf(m, "Acthd : %08x\n", I915_READ(IS_I965G(dev) ? ACTHD_I965 : ACTHD));
322
323 return 0;
324}
325
326
237static struct drm_info_list i915_gem_debugfs_list[] = { 327static struct drm_info_list i915_gem_debugfs_list[] = {
238 {"i915_gem_active", i915_gem_object_list_info, 0, (void *) ACTIVE_LIST}, 328 {"i915_gem_active", i915_gem_object_list_info, 0, (void *) ACTIVE_LIST},
239 {"i915_gem_flushing", i915_gem_object_list_info, 0, (void *) FLUSHING_LIST}, 329 {"i915_gem_flushing", i915_gem_object_list_info, 0, (void *) FLUSHING_LIST},
@@ -243,6 +333,9 @@ static struct drm_info_list i915_gem_debugfs_list[] = {
243 {"i915_gem_fence_regs", i915_gem_fence_regs_info, 0}, 333 {"i915_gem_fence_regs", i915_gem_fence_regs_info, 0},
244 {"i915_gem_interrupt", i915_interrupt_info, 0}, 334 {"i915_gem_interrupt", i915_interrupt_info, 0},
245 {"i915_gem_hws", i915_hws_info, 0}, 335 {"i915_gem_hws", i915_hws_info, 0},
336 {"i915_ringbuffer_data", i915_ringbuffer_data, 0},
337 {"i915_ringbuffer_info", i915_ringbuffer_info, 0},
338 {"i915_batchbuffers", i915_batchbuffer_info, 0},
246}; 339};
247#define I915_GEM_DEBUGFS_ENTRIES ARRAY_SIZE(i915_gem_debugfs_list) 340#define I915_GEM_DEBUGFS_ENTRIES ARRAY_SIZE(i915_gem_debugfs_list)
248 341
diff --git a/drivers/gpu/drm/i915/i915_gem_tiling.c b/drivers/gpu/drm/i915/i915_gem_tiling.c
index 6be3f927c86a..52a059354e83 100644
--- a/drivers/gpu/drm/i915/i915_gem_tiling.c
+++ b/drivers/gpu/drm/i915/i915_gem_tiling.c
@@ -25,6 +25,8 @@
25 * 25 *
26 */ 26 */
27 27
28#include "linux/string.h"
29#include "linux/bitops.h"
28#include "drmP.h" 30#include "drmP.h"
29#include "drm.h" 31#include "drm.h"
30#include "i915_drm.h" 32#include "i915_drm.h"
@@ -127,8 +129,8 @@ i915_gem_detect_bit_6_swizzle(struct drm_device *dev)
127 swizzle_y = I915_BIT_6_SWIZZLE_9_11; 129 swizzle_y = I915_BIT_6_SWIZZLE_9_11;
128 } else { 130 } else {
129 /* Bit 17 swizzling by the CPU in addition. */ 131 /* Bit 17 swizzling by the CPU in addition. */
130 swizzle_x = I915_BIT_6_SWIZZLE_UNKNOWN; 132 swizzle_x = I915_BIT_6_SWIZZLE_9_10_17;
131 swizzle_y = I915_BIT_6_SWIZZLE_UNKNOWN; 133 swizzle_y = I915_BIT_6_SWIZZLE_9_17;
132 } 134 }
133 break; 135 break;
134 } 136 }
@@ -281,13 +283,25 @@ i915_gem_set_tiling(struct drm_device *dev, void *data,
281 mutex_lock(&dev->struct_mutex); 283 mutex_lock(&dev->struct_mutex);
282 284
283 if (args->tiling_mode == I915_TILING_NONE) { 285 if (args->tiling_mode == I915_TILING_NONE) {
284 obj_priv->tiling_mode = I915_TILING_NONE;
285 args->swizzle_mode = I915_BIT_6_SWIZZLE_NONE; 286 args->swizzle_mode = I915_BIT_6_SWIZZLE_NONE;
286 } else { 287 } else {
287 if (args->tiling_mode == I915_TILING_X) 288 if (args->tiling_mode == I915_TILING_X)
288 args->swizzle_mode = dev_priv->mm.bit_6_swizzle_x; 289 args->swizzle_mode = dev_priv->mm.bit_6_swizzle_x;
289 else 290 else
290 args->swizzle_mode = dev_priv->mm.bit_6_swizzle_y; 291 args->swizzle_mode = dev_priv->mm.bit_6_swizzle_y;
292
293 /* Hide bit 17 swizzling from the user. This prevents old Mesa
294 * from aborting the application on sw fallbacks to bit 17,
295 * and we use the pread/pwrite bit17 paths to swizzle for it.
296 * If there was a user that was relying on the swizzle
297 * information for drm_intel_bo_map()ed reads/writes this would
298 * break it, but we don't have any of those.
299 */
300 if (args->swizzle_mode == I915_BIT_6_SWIZZLE_9_17)
301 args->swizzle_mode = I915_BIT_6_SWIZZLE_9;
302 if (args->swizzle_mode == I915_BIT_6_SWIZZLE_9_10_17)
303 args->swizzle_mode = I915_BIT_6_SWIZZLE_9_10;
304
291 /* If we can't handle the swizzling, make it untiled. */ 305 /* If we can't handle the swizzling, make it untiled. */
292 if (args->swizzle_mode == I915_BIT_6_SWIZZLE_UNKNOWN) { 306 if (args->swizzle_mode == I915_BIT_6_SWIZZLE_UNKNOWN) {
293 args->tiling_mode = I915_TILING_NONE; 307 args->tiling_mode = I915_TILING_NONE;
@@ -354,8 +368,100 @@ i915_gem_get_tiling(struct drm_device *dev, void *data,
354 DRM_ERROR("unknown tiling mode\n"); 368 DRM_ERROR("unknown tiling mode\n");
355 } 369 }
356 370
371 /* Hide bit 17 from the user -- see comment in i915_gem_set_tiling */
372 if (args->swizzle_mode == I915_BIT_6_SWIZZLE_9_17)
373 args->swizzle_mode = I915_BIT_6_SWIZZLE_9;
374 if (args->swizzle_mode == I915_BIT_6_SWIZZLE_9_10_17)
375 args->swizzle_mode = I915_BIT_6_SWIZZLE_9_10;
376
357 drm_gem_object_unreference(obj); 377 drm_gem_object_unreference(obj);
358 mutex_unlock(&dev->struct_mutex); 378 mutex_unlock(&dev->struct_mutex);
359 379
360 return 0; 380 return 0;
361} 381}
382
383/**
384 * Swap every 64 bytes of this page around, to account for it having a new
385 * bit 17 of its physical address and therefore being interpreted differently
386 * by the GPU.
387 */
388static int
389i915_gem_swizzle_page(struct page *page)
390{
391 char *vaddr;
392 int i;
393 char temp[64];
394
395 vaddr = kmap(page);
396 if (vaddr == NULL)
397 return -ENOMEM;
398
399 for (i = 0; i < PAGE_SIZE; i += 128) {
400 memcpy(temp, &vaddr[i], 64);
401 memcpy(&vaddr[i], &vaddr[i + 64], 64);
402 memcpy(&vaddr[i + 64], temp, 64);
403 }
404
405 kunmap(page);
406
407 return 0;
408}
409
410void
411i915_gem_object_do_bit_17_swizzle(struct drm_gem_object *obj)
412{
413 struct drm_device *dev = obj->dev;
414 drm_i915_private_t *dev_priv = dev->dev_private;
415 struct drm_i915_gem_object *obj_priv = obj->driver_private;
416 int page_count = obj->size >> PAGE_SHIFT;
417 int i;
418
419 if (dev_priv->mm.bit_6_swizzle_x != I915_BIT_6_SWIZZLE_9_10_17)
420 return;
421
422 if (obj_priv->bit_17 == NULL)
423 return;
424
425 for (i = 0; i < page_count; i++) {
426 char new_bit_17 = page_to_phys(obj_priv->pages[i]) >> 17;
427 if ((new_bit_17 & 0x1) !=
428 (test_bit(i, obj_priv->bit_17) != 0)) {
429 int ret = i915_gem_swizzle_page(obj_priv->pages[i]);
430 if (ret != 0) {
431 DRM_ERROR("Failed to swizzle page\n");
432 return;
433 }
434 set_page_dirty(obj_priv->pages[i]);
435 }
436 }
437}
438
439void
440i915_gem_object_save_bit_17_swizzle(struct drm_gem_object *obj)
441{
442 struct drm_device *dev = obj->dev;
443 drm_i915_private_t *dev_priv = dev->dev_private;
444 struct drm_i915_gem_object *obj_priv = obj->driver_private;
445 int page_count = obj->size >> PAGE_SHIFT;
446 int i;
447
448 if (dev_priv->mm.bit_6_swizzle_x != I915_BIT_6_SWIZZLE_9_10_17)
449 return;
450
451 if (obj_priv->bit_17 == NULL) {
452 obj_priv->bit_17 = kmalloc(BITS_TO_LONGS(page_count) *
453 sizeof(long), GFP_KERNEL);
454 if (obj_priv->bit_17 == NULL) {
455 DRM_ERROR("Failed to allocate memory for bit 17 "
456 "record\n");
457 return;
458 }
459 }
460
461 for (i = 0; i < page_count; i++) {
462 if (page_to_phys(obj_priv->pages[i]) & (1 << 17))
463 __set_bit(i, obj_priv->bit_17);
464 else
465 __clear_bit(i, obj_priv->bit_17);
466 }
467}
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index ee7ce7b78cf7..98bb4c878c4e 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -406,7 +406,7 @@ int i915_irq_emit(struct drm_device *dev, void *data,
406 drm_i915_irq_emit_t *emit = data; 406 drm_i915_irq_emit_t *emit = data;
407 int result; 407 int result;
408 408
409 if (!dev_priv) { 409 if (!dev_priv || !dev_priv->ring.virtual_start) {
410 DRM_ERROR("called with no initialization\n"); 410 DRM_ERROR("called with no initialization\n");
411 return -EINVAL; 411 return -EINVAL;
412 } 412 }
diff --git a/drivers/gpu/drm/i915/i915_opregion.c b/drivers/gpu/drm/i915/i915_opregion.c
index 69427722d20e..dc425e74a268 100644
--- a/drivers/gpu/drm/i915/i915_opregion.c
+++ b/drivers/gpu/drm/i915/i915_opregion.c
@@ -370,11 +370,8 @@ int intel_opregion_init(struct drm_device *dev, int resume)
370 if (mboxes & MBOX_ACPI) { 370 if (mboxes & MBOX_ACPI) {
371 DRM_DEBUG("Public ACPI methods supported\n"); 371 DRM_DEBUG("Public ACPI methods supported\n");
372 opregion->acpi = base + OPREGION_ACPI_OFFSET; 372 opregion->acpi = base + OPREGION_ACPI_OFFSET;
373 if (drm_core_check_feature(dev, DRIVER_MODESET)) { 373 if (drm_core_check_feature(dev, DRIVER_MODESET))
374 intel_didl_outputs(dev); 374 intel_didl_outputs(dev);
375 if (!resume)
376 acpi_video_register();
377 }
378 } else { 375 } else {
379 DRM_DEBUG("Public ACPI methods not supported\n"); 376 DRM_DEBUG("Public ACPI methods not supported\n");
380 err = -ENOTSUPP; 377 err = -ENOTSUPP;
@@ -389,8 +386,13 @@ int intel_opregion_init(struct drm_device *dev, int resume)
389 if (mboxes & MBOX_ASLE) { 386 if (mboxes & MBOX_ASLE) {
390 DRM_DEBUG("ASLE supported\n"); 387 DRM_DEBUG("ASLE supported\n");
391 opregion->asle = base + OPREGION_ASLE_OFFSET; 388 opregion->asle = base + OPREGION_ASLE_OFFSET;
389 opregion_enable_asle(dev);
392 } 390 }
393 391
392 if (!resume)
393 acpi_video_register();
394
395
394 /* Notify BIOS we are ready to handle ACPI video ext notifs. 396 /* Notify BIOS we are ready to handle ACPI video ext notifs.
395 * Right now, all the events are handled by the ACPI video module. 397 * Right now, all the events are handled by the ACPI video module.
396 * We don't actually need to do anything with them. */ 398 * We don't actually need to do anything with them. */
@@ -408,7 +410,7 @@ err_out:
408 return err; 410 return err;
409} 411}
410 412
411void intel_opregion_free(struct drm_device *dev) 413void intel_opregion_free(struct drm_device *dev, int suspend)
412{ 414{
413 struct drm_i915_private *dev_priv = dev->dev_private; 415 struct drm_i915_private *dev_priv = dev->dev_private;
414 struct intel_opregion *opregion = &dev_priv->opregion; 416 struct intel_opregion *opregion = &dev_priv->opregion;
@@ -416,6 +418,9 @@ void intel_opregion_free(struct drm_device *dev)
416 if (!opregion->enabled) 418 if (!opregion->enabled)
417 return; 419 return;
418 420
421 if (!suspend)
422 acpi_video_exit();
423
419 opregion->acpi->drdy = 0; 424 opregion->acpi->drdy = 0;
420 425
421 system_opregion = NULL; 426 system_opregion = NULL;
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index e805b590ae71..15da44cf21b1 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -526,6 +526,7 @@
526#define DPLLA_INPUT_BUFFER_ENABLE (1 << 0) 526#define DPLLA_INPUT_BUFFER_ENABLE (1 << 0)
527#define D_STATE 0x6104 527#define D_STATE 0x6104
528#define CG_2D_DIS 0x6200 528#define CG_2D_DIS 0x6200
529#define DPCUNIT_CLOCK_GATE_DISABLE (1 << 24)
529#define CG_3D_DIS 0x6204 530#define CG_3D_DIS 0x6204
530 531
531/* 532/*
@@ -1446,6 +1447,7 @@
1446#define DISPPLANE_NO_LINE_DOUBLE 0 1447#define DISPPLANE_NO_LINE_DOUBLE 0
1447#define DISPPLANE_STEREO_POLARITY_FIRST 0 1448#define DISPPLANE_STEREO_POLARITY_FIRST 0
1448#define DISPPLANE_STEREO_POLARITY_SECOND (1<<18) 1449#define DISPPLANE_STEREO_POLARITY_SECOND (1<<18)
1450#define DISPPLANE_TILED (1<<10)
1449#define DSPAADDR 0x70184 1451#define DSPAADDR 0x70184
1450#define DSPASTRIDE 0x70188 1452#define DSPASTRIDE 0x70188
1451#define DSPAPOS 0x7018C /* reserved */ 1453#define DSPAPOS 0x7018C /* reserved */
diff --git a/drivers/gpu/drm/i915/i915_suspend.c b/drivers/gpu/drm/i915/i915_suspend.c
index d669cc2b42c0..ce8a21344a71 100644
--- a/drivers/gpu/drm/i915/i915_suspend.c
+++ b/drivers/gpu/drm/i915/i915_suspend.c
@@ -349,6 +349,18 @@ int i915_save_state(struct drm_device *dev)
349 for (i = 0; i < 3; i++) 349 for (i = 0; i < 3; i++)
350 dev_priv->saveSWF2[i] = I915_READ(SWF30 + (i << 2)); 350 dev_priv->saveSWF2[i] = I915_READ(SWF30 + (i << 2));
351 351
352 /* Fences */
353 if (IS_I965G(dev)) {
354 for (i = 0; i < 16; i++)
355 dev_priv->saveFENCE[i] = I915_READ64(FENCE_REG_965_0 + (i * 8));
356 } else {
357 for (i = 0; i < 8; i++)
358 dev_priv->saveFENCE[i] = I915_READ(FENCE_REG_830_0 + (i * 4));
359
360 if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev))
361 for (i = 0; i < 8; i++)
362 dev_priv->saveFENCE[i+8] = I915_READ(FENCE_REG_945_8 + (i * 4));
363 }
352 i915_save_vga(dev); 364 i915_save_vga(dev);
353 365
354 return 0; 366 return 0;
@@ -371,6 +383,18 @@ int i915_restore_state(struct drm_device *dev)
371 /* Display arbitration */ 383 /* Display arbitration */
372 I915_WRITE(DSPARB, dev_priv->saveDSPARB); 384 I915_WRITE(DSPARB, dev_priv->saveDSPARB);
373 385
386 /* Fences */
387 if (IS_I965G(dev)) {
388 for (i = 0; i < 16; i++)
389 I915_WRITE64(FENCE_REG_965_0 + (i * 8), dev_priv->saveFENCE[i]);
390 } else {
391 for (i = 0; i < 8; i++)
392 I915_WRITE(FENCE_REG_830_0 + (i * 4), dev_priv->saveFENCE[i]);
393 if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev))
394 for (i = 0; i < 8; i++)
395 I915_WRITE(FENCE_REG_945_8 + (i * 4), dev_priv->saveFENCE[i+8]);
396 }
397
374 /* Pipe & plane A info */ 398 /* Pipe & plane A info */
375 /* Prime the clock */ 399 /* Prime the clock */
376 if (dev_priv->saveDPLL_A & DPLL_VCO_ENABLE) { 400 if (dev_priv->saveDPLL_A & DPLL_VCO_ENABLE) {
diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
index 9bdd959260a5..19148c3df637 100644
--- a/drivers/gpu/drm/i915/intel_crt.c
+++ b/drivers/gpu/drm/i915/intel_crt.c
@@ -161,7 +161,7 @@ static bool intel_crt_detect_hotplug(struct drm_connector *connector)
161 hotplug_en &= CRT_FORCE_HOTPLUG_MASK; 161 hotplug_en &= CRT_FORCE_HOTPLUG_MASK;
162 hotplug_en |= CRT_HOTPLUG_FORCE_DETECT; 162 hotplug_en |= CRT_HOTPLUG_FORCE_DETECT;
163 163
164 if (IS_GM45(dev)) 164 if (IS_G4X(dev))
165 hotplug_en |= CRT_HOTPLUG_ACTIVATION_PERIOD_64; 165 hotplug_en |= CRT_HOTPLUG_ACTIVATION_PERIOD_64;
166 166
167 hotplug_en |= CRT_HOTPLUG_VOLTAGE_COMPARE_50; 167 hotplug_en |= CRT_HOTPLUG_VOLTAGE_COMPARE_50;
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 64773ce52964..3387cf32f385 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -367,6 +367,7 @@ static const intel_limit_t intel_limits[] = {
367 .p1 = { .min = I9XX_P1_MIN, .max = I9XX_P1_MAX }, 367 .p1 = { .min = I9XX_P1_MIN, .max = I9XX_P1_MAX },
368 .p2 = { .dot_limit = I9XX_P2_SDVO_DAC_SLOW_LIMIT, 368 .p2 = { .dot_limit = I9XX_P2_SDVO_DAC_SLOW_LIMIT,
369 .p2_slow = I9XX_P2_SDVO_DAC_SLOW, .p2_fast = I9XX_P2_SDVO_DAC_FAST }, 369 .p2_slow = I9XX_P2_SDVO_DAC_SLOW, .p2_fast = I9XX_P2_SDVO_DAC_FAST },
370 .find_pll = intel_find_best_PLL,
370 }, 371 },
371 { /* INTEL_LIMIT_IGD_LVDS */ 372 { /* INTEL_LIMIT_IGD_LVDS */
372 .dot = { .min = I9XX_DOT_MIN, .max = I9XX_DOT_MAX }, 373 .dot = { .min = I9XX_DOT_MIN, .max = I9XX_DOT_MAX },
@@ -380,6 +381,7 @@ static const intel_limit_t intel_limits[] = {
380 /* IGD only supports single-channel mode. */ 381 /* IGD only supports single-channel mode. */
381 .p2 = { .dot_limit = I9XX_P2_LVDS_SLOW_LIMIT, 382 .p2 = { .dot_limit = I9XX_P2_LVDS_SLOW_LIMIT,
382 .p2_slow = I9XX_P2_LVDS_SLOW, .p2_fast = I9XX_P2_LVDS_SLOW }, 383 .p2_slow = I9XX_P2_LVDS_SLOW, .p2_fast = I9XX_P2_LVDS_SLOW },
384 .find_pll = intel_find_best_PLL,
383 }, 385 },
384 386
385}; 387};
@@ -655,6 +657,7 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
655 int dspbase = (pipe == 0 ? DSPAADDR : DSPBADDR); 657 int dspbase = (pipe == 0 ? DSPAADDR : DSPBADDR);
656 int dspsurf = (pipe == 0 ? DSPASURF : DSPBSURF); 658 int dspsurf = (pipe == 0 ? DSPASURF : DSPBSURF);
657 int dspstride = (pipe == 0) ? DSPASTRIDE : DSPBSTRIDE; 659 int dspstride = (pipe == 0) ? DSPASTRIDE : DSPBSTRIDE;
660 int dsptileoff = (pipe == 0 ? DSPATILEOFF : DSPBTILEOFF);
658 int dspcntr_reg = (pipe == 0) ? DSPACNTR : DSPBCNTR; 661 int dspcntr_reg = (pipe == 0) ? DSPACNTR : DSPBCNTR;
659 u32 dspcntr, alignment; 662 u32 dspcntr, alignment;
660 int ret; 663 int ret;
@@ -731,6 +734,13 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
731 mutex_unlock(&dev->struct_mutex); 734 mutex_unlock(&dev->struct_mutex);
732 return -EINVAL; 735 return -EINVAL;
733 } 736 }
737 if (IS_I965G(dev)) {
738 if (obj_priv->tiling_mode != I915_TILING_NONE)
739 dspcntr |= DISPPLANE_TILED;
740 else
741 dspcntr &= ~DISPPLANE_TILED;
742 }
743
734 I915_WRITE(dspcntr_reg, dspcntr); 744 I915_WRITE(dspcntr_reg, dspcntr);
735 745
736 Start = obj_priv->gtt_offset; 746 Start = obj_priv->gtt_offset;
@@ -743,6 +753,7 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
743 I915_READ(dspbase); 753 I915_READ(dspbase);
744 I915_WRITE(dspsurf, Start); 754 I915_WRITE(dspsurf, Start);
745 I915_READ(dspsurf); 755 I915_READ(dspsurf);
756 I915_WRITE(dsptileoff, (y << 16) | x);
746 } else { 757 } else {
747 I915_WRITE(dspbase, Start + Offset); 758 I915_WRITE(dspbase, Start + Offset);
748 I915_READ(dspbase); 759 I915_READ(dspbase);
@@ -1793,6 +1804,37 @@ static void intel_crtc_init(struct drm_device *dev, int pipe)
1793 } 1804 }
1794} 1805}
1795 1806
1807int intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,
1808 struct drm_file *file_priv)
1809{
1810 drm_i915_private_t *dev_priv = dev->dev_private;
1811 struct drm_i915_get_pipe_from_crtc_id *pipe_from_crtc_id = data;
1812 struct drm_crtc *crtc = NULL;
1813 int pipe = -1;
1814
1815 if (!dev_priv) {
1816 DRM_ERROR("called with no initialization\n");
1817 return -EINVAL;
1818 }
1819
1820 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
1821 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
1822 if (crtc->base.id == pipe_from_crtc_id->crtc_id) {
1823 pipe = intel_crtc->pipe;
1824 break;
1825 }
1826 }
1827
1828 if (pipe == -1) {
1829 DRM_ERROR("no such CRTC id\n");
1830 return -EINVAL;
1831 }
1832
1833 pipe_from_crtc_id->pipe = pipe;
1834
1835 return 0;
1836}
1837
1796struct drm_crtc *intel_get_crtc_from_pipe(struct drm_device *dev, int pipe) 1838struct drm_crtc *intel_get_crtc_from_pipe(struct drm_device *dev, int pipe)
1797{ 1839{
1798 struct drm_crtc *crtc = NULL; 1840 struct drm_crtc *crtc = NULL;
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 957daef8edff..cd4b9c5f715e 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -109,7 +109,7 @@ struct intel_i2c_chan *intel_i2c_create(struct drm_device *dev, const u32 reg,
109void intel_i2c_destroy(struct intel_i2c_chan *chan); 109void intel_i2c_destroy(struct intel_i2c_chan *chan);
110int intel_ddc_get_modes(struct intel_output *intel_output); 110int intel_ddc_get_modes(struct intel_output *intel_output);
111extern bool intel_ddc_probe(struct intel_output *intel_output); 111extern bool intel_ddc_probe(struct intel_output *intel_output);
112 112void intel_i2c_quirk_set(struct drm_device *dev, bool enable);
113extern void intel_crt_init(struct drm_device *dev); 113extern void intel_crt_init(struct drm_device *dev);
114extern void intel_hdmi_init(struct drm_device *dev, int sdvox_reg); 114extern void intel_hdmi_init(struct drm_device *dev, int sdvox_reg);
115extern bool intel_sdvo_init(struct drm_device *dev, int output_device); 115extern bool intel_sdvo_init(struct drm_device *dev, int output_device);
@@ -125,6 +125,8 @@ extern struct drm_encoder *intel_best_encoder(struct drm_connector *connector);
125 125
126extern struct drm_display_mode *intel_crtc_mode_get(struct drm_device *dev, 126extern struct drm_display_mode *intel_crtc_mode_get(struct drm_device *dev,
127 struct drm_crtc *crtc); 127 struct drm_crtc *crtc);
128int intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,
129 struct drm_file *file_priv);
128extern void intel_wait_for_vblank(struct drm_device *dev); 130extern void intel_wait_for_vblank(struct drm_device *dev);
129extern struct drm_crtc *intel_get_crtc_from_pipe(struct drm_device *dev, int pipe); 131extern struct drm_crtc *intel_get_crtc_from_pipe(struct drm_device *dev, int pipe);
130extern struct drm_crtc *intel_get_load_detect_pipe(struct intel_output *intel_output, 132extern struct drm_crtc *intel_get_load_detect_pipe(struct intel_output *intel_output,
diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c
index b7f0ebe9f810..e4652dcdd9bb 100644
--- a/drivers/gpu/drm/i915/intel_fb.c
+++ b/drivers/gpu/drm/i915/intel_fb.c
@@ -864,8 +864,8 @@ static void intelfb_sysrq(int dummy1, struct tty_struct *dummy3)
864 864
865static struct sysrq_key_op sysrq_intelfb_restore_op = { 865static struct sysrq_key_op sysrq_intelfb_restore_op = {
866 .handler = intelfb_sysrq, 866 .handler = intelfb_sysrq,
867 .help_msg = "force fb", 867 .help_msg = "force-fb(V)",
868 .action_msg = "force restore of fb console", 868 .action_msg = "Restore framebuffer console",
869}; 869};
870 870
871int intelfb_probe(struct drm_device *dev) 871int intelfb_probe(struct drm_device *dev)
@@ -898,7 +898,7 @@ int intelfb_probe(struct drm_device *dev)
898 ret = intelfb_single_fb_probe(dev); 898 ret = intelfb_single_fb_probe(dev);
899 } 899 }
900 900
901 register_sysrq_key('g', &sysrq_intelfb_restore_op); 901 register_sysrq_key('v', &sysrq_intelfb_restore_op);
902 902
903 return ret; 903 return ret;
904} 904}
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index b06a4a3ff08d..d0983bb93a18 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -38,7 +38,7 @@
38struct intel_hdmi_priv { 38struct intel_hdmi_priv {
39 u32 sdvox_reg; 39 u32 sdvox_reg;
40 u32 save_SDVOX; 40 u32 save_SDVOX;
41 int has_hdmi_sink; 41 bool has_hdmi_sink;
42}; 42};
43 43
44static void intel_hdmi_mode_set(struct drm_encoder *encoder, 44static void intel_hdmi_mode_set(struct drm_encoder *encoder,
@@ -128,6 +128,22 @@ static bool intel_hdmi_mode_fixup(struct drm_encoder *encoder,
128 return true; 128 return true;
129} 129}
130 130
131static void
132intel_hdmi_sink_detect(struct drm_connector *connector)
133{
134 struct intel_output *intel_output = to_intel_output(connector);
135 struct intel_hdmi_priv *hdmi_priv = intel_output->dev_priv;
136 struct edid *edid = NULL;
137
138 edid = drm_get_edid(&intel_output->base,
139 &intel_output->ddc_bus->adapter);
140 if (edid != NULL) {
141 hdmi_priv->has_hdmi_sink = drm_detect_hdmi_monitor(edid);
142 kfree(edid);
143 intel_output->base.display_info.raw_edid = NULL;
144 }
145}
146
131static enum drm_connector_status 147static enum drm_connector_status
132intel_hdmi_detect(struct drm_connector *connector) 148intel_hdmi_detect(struct drm_connector *connector)
133{ 149{
@@ -139,11 +155,18 @@ intel_hdmi_detect(struct drm_connector *connector)
139 155
140 temp = I915_READ(PORT_HOTPLUG_EN); 156 temp = I915_READ(PORT_HOTPLUG_EN);
141 157
142 I915_WRITE(PORT_HOTPLUG_EN, 158 switch (hdmi_priv->sdvox_reg) {
143 temp | 159 case SDVOB:
144 HDMIB_HOTPLUG_INT_EN | 160 temp |= HDMIB_HOTPLUG_INT_EN;
145 HDMIC_HOTPLUG_INT_EN | 161 break;
146 HDMID_HOTPLUG_INT_EN); 162 case SDVOC:
163 temp |= HDMIC_HOTPLUG_INT_EN;
164 break;
165 default:
166 return connector_status_unknown;
167 }
168
169 I915_WRITE(PORT_HOTPLUG_EN, temp);
147 170
148 POSTING_READ(PORT_HOTPLUG_EN); 171 POSTING_READ(PORT_HOTPLUG_EN);
149 172
@@ -158,9 +181,10 @@ intel_hdmi_detect(struct drm_connector *connector)
158 return connector_status_unknown; 181 return connector_status_unknown;
159 } 182 }
160 183
161 if ((I915_READ(PORT_HOTPLUG_STAT) & bit) != 0) 184 if ((I915_READ(PORT_HOTPLUG_STAT) & bit) != 0) {
185 intel_hdmi_sink_detect(connector);
162 return connector_status_connected; 186 return connector_status_connected;
163 else 187 } else
164 return connector_status_disconnected; 188 return connector_status_disconnected;
165} 189}
166 190
diff --git a/drivers/gpu/drm/i915/intel_i2c.c b/drivers/gpu/drm/i915/intel_i2c.c
index 5ee9d4c25753..f7061f68d050 100644
--- a/drivers/gpu/drm/i915/intel_i2c.c
+++ b/drivers/gpu/drm/i915/intel_i2c.c
@@ -34,6 +34,21 @@
34#include "i915_drm.h" 34#include "i915_drm.h"
35#include "i915_drv.h" 35#include "i915_drv.h"
36 36
37void intel_i2c_quirk_set(struct drm_device *dev, bool enable)
38{
39 struct drm_i915_private *dev_priv = dev->dev_private;
40
41 /* When using bit bashing for I2C, this bit needs to be set to 1 */
42 if (!IS_IGD(dev))
43 return;
44 if (enable)
45 I915_WRITE(CG_2D_DIS,
46 I915_READ(CG_2D_DIS) | DPCUNIT_CLOCK_GATE_DISABLE);
47 else
48 I915_WRITE(CG_2D_DIS,
49 I915_READ(CG_2D_DIS) & (~DPCUNIT_CLOCK_GATE_DISABLE));
50}
51
37/* 52/*
38 * Intel GPIO access functions 53 * Intel GPIO access functions
39 */ 54 */
@@ -153,8 +168,10 @@ struct intel_i2c_chan *intel_i2c_create(struct drm_device *dev, const u32 reg,
153 goto out_free; 168 goto out_free;
154 169
155 /* JJJ: raise SCL and SDA? */ 170 /* JJJ: raise SCL and SDA? */
171 intel_i2c_quirk_set(dev, true);
156 set_data(chan, 1); 172 set_data(chan, 1);
157 set_clock(chan, 1); 173 set_clock(chan, 1);
174 intel_i2c_quirk_set(dev, false);
158 udelay(20); 175 udelay(20);
159 176
160 return chan; 177 return chan;
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index 6619f26e46a5..439a86514993 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -384,7 +384,51 @@ static const struct drm_encoder_funcs intel_lvds_enc_funcs = {
384 .destroy = intel_lvds_enc_destroy, 384 .destroy = intel_lvds_enc_destroy,
385}; 385};
386 386
387static int __init intel_no_lvds_dmi_callback(const struct dmi_system_id *id)
388{
389 DRM_DEBUG("Skipping LVDS initialization for %s\n", id->ident);
390 return 1;
391}
387 392
393/* These systems claim to have LVDS, but really don't */
394static const struct dmi_system_id __initdata intel_no_lvds[] = {
395 {
396 .callback = intel_no_lvds_dmi_callback,
397 .ident = "Apple Mac Mini (Core series)",
398 .matches = {
399 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
400 DMI_MATCH(DMI_PRODUCT_NAME, "Macmini1,1"),
401 },
402 },
403 {
404 .callback = intel_no_lvds_dmi_callback,
405 .ident = "Apple Mac Mini (Core 2 series)",
406 .matches = {
407 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
408 DMI_MATCH(DMI_PRODUCT_NAME, "Macmini2,1"),
409 },
410 },
411 {
412 .callback = intel_no_lvds_dmi_callback,
413 .ident = "MSI IM-945GSE-A",
414 .matches = {
415 DMI_MATCH(DMI_SYS_VENDOR, "MSI"),
416 DMI_MATCH(DMI_PRODUCT_NAME, "A9830IMS"),
417 },
418 },
419 {
420 .callback = intel_no_lvds_dmi_callback,
421 .ident = "Dell Studio Hybrid",
422 .matches = {
423 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
424 DMI_MATCH(DMI_PRODUCT_NAME, "Studio Hybrid 140g"),
425 },
426 },
427
428 /* FIXME: add a check for the Aopen Mini PC */
429
430 { } /* terminating entry */
431};
388 432
389/** 433/**
390 * intel_lvds_init - setup LVDS connectors on this device 434 * intel_lvds_init - setup LVDS connectors on this device
@@ -404,15 +448,9 @@ void intel_lvds_init(struct drm_device *dev)
404 u32 lvds; 448 u32 lvds;
405 int pipe; 449 int pipe;
406 450
407 /* Blacklist machines that we know falsely report LVDS. */ 451 /* Skip init on machines we know falsely report LVDS */
408 /* FIXME: add a check for the Aopen Mini PC */ 452 if (dmi_check_system(intel_no_lvds))
409
410 /* Apple Mac Mini Core Duo and Mac Mini Core 2 Duo */
411 if(dmi_match(DMI_PRODUCT_NAME, "Macmini1,1") ||
412 dmi_match(DMI_PRODUCT_NAME, "Macmini2,1")) {
413 DRM_DEBUG("Skipping LVDS initialization for Apple Mac Mini\n");
414 return; 453 return;
415 }
416 454
417 intel_output = kzalloc(sizeof(struct intel_output), GFP_KERNEL); 455 intel_output = kzalloc(sizeof(struct intel_output), GFP_KERNEL);
418 if (!intel_output) { 456 if (!intel_output) {
diff --git a/drivers/gpu/drm/i915/intel_modes.c b/drivers/gpu/drm/i915/intel_modes.c
index 07d7ec976168..e0910fefce87 100644
--- a/drivers/gpu/drm/i915/intel_modes.c
+++ b/drivers/gpu/drm/i915/intel_modes.c
@@ -27,6 +27,7 @@
27#include <linux/fb.h> 27#include <linux/fb.h>
28#include "drmP.h" 28#include "drmP.h"
29#include "intel_drv.h" 29#include "intel_drv.h"
30#include "i915_drv.h"
30 31
31/** 32/**
32 * intel_ddc_probe 33 * intel_ddc_probe
@@ -52,7 +53,10 @@ bool intel_ddc_probe(struct intel_output *intel_output)
52 } 53 }
53 }; 54 };
54 55
56 intel_i2c_quirk_set(intel_output->ddc_bus->drm_dev, true);
55 ret = i2c_transfer(&intel_output->ddc_bus->adapter, msgs, 2); 57 ret = i2c_transfer(&intel_output->ddc_bus->adapter, msgs, 2);
58 intel_i2c_quirk_set(intel_output->ddc_bus->drm_dev, false);
59
56 if (ret == 2) 60 if (ret == 2)
57 return true; 61 return true;
58 62
@@ -70,8 +74,10 @@ int intel_ddc_get_modes(struct intel_output *intel_output)
70 struct edid *edid; 74 struct edid *edid;
71 int ret = 0; 75 int ret = 0;
72 76
77 intel_i2c_quirk_set(intel_output->ddc_bus->drm_dev, true);
73 edid = drm_get_edid(&intel_output->base, 78 edid = drm_get_edid(&intel_output->base,
74 &intel_output->ddc_bus->adapter); 79 &intel_output->ddc_bus->adapter);
80 intel_i2c_quirk_set(intel_output->ddc_bus->drm_dev, false);
75 if (edid) { 81 if (edid) {
76 drm_mode_connector_update_edid_property(&intel_output->base, 82 drm_mode_connector_update_edid_property(&intel_output->base,
77 edid); 83 edid);
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
index 7b31f55f55c8..9913651c1e17 100644
--- a/drivers/gpu/drm/i915/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/intel_sdvo.c
@@ -1357,6 +1357,23 @@ void intel_sdvo_set_hotplug(struct drm_connector *connector, int on)
1357 intel_sdvo_read_response(intel_output, &response, 2); 1357 intel_sdvo_read_response(intel_output, &response, 2);
1358} 1358}
1359 1359
1360static void
1361intel_sdvo_hdmi_sink_detect(struct drm_connector *connector)
1362{
1363 struct intel_output *intel_output = to_intel_output(connector);
1364 struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv;
1365 struct edid *edid = NULL;
1366
1367 intel_sdvo_set_control_bus_switch(intel_output, sdvo_priv->ddc_bus);
1368 edid = drm_get_edid(&intel_output->base,
1369 &intel_output->ddc_bus->adapter);
1370 if (edid != NULL) {
1371 sdvo_priv->is_hdmi = drm_detect_hdmi_monitor(edid);
1372 kfree(edid);
1373 intel_output->base.display_info.raw_edid = NULL;
1374 }
1375}
1376
1360static enum drm_connector_status intel_sdvo_detect(struct drm_connector *connector) 1377static enum drm_connector_status intel_sdvo_detect(struct drm_connector *connector)
1361{ 1378{
1362 u8 response[2]; 1379 u8 response[2];
@@ -1371,9 +1388,10 @@ static enum drm_connector_status intel_sdvo_detect(struct drm_connector *connect
1371 if (status != SDVO_CMD_STATUS_SUCCESS) 1388 if (status != SDVO_CMD_STATUS_SUCCESS)
1372 return connector_status_unknown; 1389 return connector_status_unknown;
1373 1390
1374 if ((response[0] != 0) || (response[1] != 0)) 1391 if ((response[0] != 0) || (response[1] != 0)) {
1392 intel_sdvo_hdmi_sink_detect(connector);
1375 return connector_status_connected; 1393 return connector_status_connected;
1376 else 1394 } else
1377 return connector_status_disconnected; 1395 return connector_status_disconnected;
1378} 1396}
1379 1397
diff --git a/drivers/gpu/drm/r128/r128_cce.c b/drivers/gpu/drm/r128/r128_cce.c
index 32de4cedc363..077c0455a6b9 100644
--- a/drivers/gpu/drm/r128/r128_cce.c
+++ b/drivers/gpu/drm/r128/r128_cce.c
@@ -511,9 +511,9 @@ static int r128_do_init_cce(struct drm_device * dev, drm_r128_init_t * init)
511 511
512#if __OS_HAS_AGP 512#if __OS_HAS_AGP
513 if (!dev_priv->is_pci) { 513 if (!dev_priv->is_pci) {
514 drm_core_ioremap(dev_priv->cce_ring, dev); 514 drm_core_ioremap_wc(dev_priv->cce_ring, dev);
515 drm_core_ioremap(dev_priv->ring_rptr, dev); 515 drm_core_ioremap_wc(dev_priv->ring_rptr, dev);
516 drm_core_ioremap(dev->agp_buffer_map, dev); 516 drm_core_ioremap_wc(dev->agp_buffer_map, dev);
517 if (!dev_priv->cce_ring->handle || 517 if (!dev_priv->cce_ring->handle ||
518 !dev_priv->ring_rptr->handle || 518 !dev_priv->ring_rptr->handle ||
519 !dev->agp_buffer_map->handle) { 519 !dev->agp_buffer_map->handle) {
diff --git a/drivers/gpu/drm/radeon/radeon_drv.h b/drivers/gpu/drm/radeon/radeon_drv.h
index ed4d27e6ee6f..8071d965f142 100644
--- a/drivers/gpu/drm/radeon/radeon_drv.h
+++ b/drivers/gpu/drm/radeon/radeon_drv.h
@@ -99,9 +99,10 @@
99 * 1.27- Add support for IGP GART 99 * 1.27- Add support for IGP GART
100 * 1.28- Add support for VBL on CRTC2 100 * 1.28- Add support for VBL on CRTC2
101 * 1.29- R500 3D cmd buffer support 101 * 1.29- R500 3D cmd buffer support
102 * 1.30- Add support for occlusion queries
102 */ 103 */
103#define DRIVER_MAJOR 1 104#define DRIVER_MAJOR 1
104#define DRIVER_MINOR 29 105#define DRIVER_MINOR 30
105#define DRIVER_PATCHLEVEL 0 106#define DRIVER_PATCHLEVEL 0
106 107
107/* 108/*
diff --git a/drivers/gpu/drm/via/via_dma.c b/drivers/gpu/drm/via/via_dma.c
index 7a339dba6a69..bfb92d283260 100644
--- a/drivers/gpu/drm/via/via_dma.c
+++ b/drivers/gpu/drm/via/via_dma.c
@@ -481,11 +481,13 @@ static int via_wait_idle(drm_via_private_t * dev_priv)
481{ 481{
482 int count = 10000000; 482 int count = 10000000;
483 483
484 while (!(VIA_READ(VIA_REG_STATUS) & VIA_VR_QUEUE_BUSY) && count--); 484 while (!(VIA_READ(VIA_REG_STATUS) & VIA_VR_QUEUE_BUSY) && --count)
485 ;
485 486
486 while (count-- && (VIA_READ(VIA_REG_STATUS) & 487 while (count && (VIA_READ(VIA_REG_STATUS) &
487 (VIA_CMD_RGTR_BUSY | VIA_2D_ENG_BUSY | 488 (VIA_CMD_RGTR_BUSY | VIA_2D_ENG_BUSY |
488 VIA_3D_ENG_BUSY))) ; 489 VIA_3D_ENG_BUSY)))
490 --count;
489 return count; 491 return count;
490} 492}
491 493
@@ -705,7 +707,7 @@ static int via_cmdbuf_size(struct drm_device *dev, void *data, struct drm_file *
705 switch (d_siz->func) { 707 switch (d_siz->func) {
706 case VIA_CMDBUF_SPACE: 708 case VIA_CMDBUF_SPACE:
707 while (((tmp_size = via_cmdbuf_space(dev_priv)) < d_siz->size) 709 while (((tmp_size = via_cmdbuf_space(dev_priv)) < d_siz->size)
708 && count--) { 710 && --count) {
709 if (!d_siz->wait) { 711 if (!d_siz->wait) {
710 break; 712 break;
711 } 713 }
@@ -717,7 +719,7 @@ static int via_cmdbuf_size(struct drm_device *dev, void *data, struct drm_file *
717 break; 719 break;
718 case VIA_CMDBUF_LAG: 720 case VIA_CMDBUF_LAG:
719 while (((tmp_size = via_cmdbuf_lag(dev_priv)) > d_siz->size) 721 while (((tmp_size = via_cmdbuf_lag(dev_priv)) > d_siz->size)
720 && count--) { 722 && --count) {
721 if (!d_siz->wait) { 723 if (!d_siz->wait) {
722 break; 724 break;
723 } 725 }
diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c
index 7359d9d88e46..acbce5745b0c 100644
--- a/drivers/hid/hid-apple.c
+++ b/drivers/hid/hid-apple.c
@@ -151,7 +151,7 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input,
151 if (fnmode) { 151 if (fnmode) {
152 int do_translate; 152 int do_translate;
153 153
154 trans = apple_find_translation((hid->product < 0x220 || 154 trans = apple_find_translation((hid->product < 0x21d ||
155 hid->product >= 0x300) ? 155 hid->product >= 0x300) ?
156 powerbook_fn_keys : apple_fn_keys, 156 powerbook_fn_keys : apple_fn_keys,
157 usage->code); 157 usage->code);
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index 5746a5903bce..8551693d645f 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -1293,6 +1293,7 @@ static const struct hid_device_id hid_blacklist[] = {
1293 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FORCE3D_PRO) }, 1293 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FORCE3D_PRO) },
1294 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL) }, 1294 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL) },
1295 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2) }, 1295 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2) },
1296 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL) },
1296 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2) }, 1297 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2) },
1297 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_SIDEWINDER_GV) }, 1298 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_SIDEWINDER_GV) },
1298 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K) }, 1299 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K) },
@@ -1824,6 +1825,9 @@ int hid_check_keys_pressed(struct hid_device *hid)
1824 struct hid_input *hidinput; 1825 struct hid_input *hidinput;
1825 int i; 1826 int i;
1826 1827
1828 if (!(hid->claimed & HID_CLAIMED_INPUT))
1829 return 0;
1830
1827 list_for_each_entry(hidinput, &hid->inputs, list) { 1831 list_for_each_entry(hidinput, &hid->inputs, list) {
1828 for (i = 0; i < BITS_TO_LONGS(KEY_MAX); i++) 1832 for (i = 0; i < BITS_TO_LONGS(KEY_MAX); i++)
1829 if (hidinput->input->key[i]) 1833 if (hidinput->input->key[i])
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index bdeda4c7cc13..4d5ee2bbc62b 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -113,6 +113,11 @@
113#define USB_VENDOR_ID_BERKSHIRE 0x0c98 113#define USB_VENDOR_ID_BERKSHIRE 0x0c98
114#define USB_DEVICE_ID_BERKSHIRE_PCWD 0x1140 114#define USB_DEVICE_ID_BERKSHIRE_PCWD 0x1140
115 115
116#define USB_VENDOR_ID_CH 0x068e
117#define USB_DEVICE_ID_CH_PRO_PEDALS 0x00f2
118#define USB_DEVICE_ID_CH_COMBATSTICK 0x00f4
119#define USB_DEVICE_ID_CH_FLIGHT_SIM_YOKE 0x00ff
120
116#define USB_VENDOR_ID_CHERRY 0x046a 121#define USB_VENDOR_ID_CHERRY 0x046a
117#define USB_DEVICE_ID_CHERRY_CYMOTION 0x0023 122#define USB_DEVICE_ID_CHERRY_CYMOTION 0x0023
118 123
@@ -292,6 +297,7 @@
292#define USB_DEVICE_ID_LOGITECH_FORCE3D_PRO 0xc286 297#define USB_DEVICE_ID_LOGITECH_FORCE3D_PRO 0xc286
293#define USB_DEVICE_ID_LOGITECH_WHEEL 0xc294 298#define USB_DEVICE_ID_LOGITECH_WHEEL 0xc294
294#define USB_DEVICE_ID_LOGITECH_MOMO_WHEEL 0xc295 299#define USB_DEVICE_ID_LOGITECH_MOMO_WHEEL 0xc295
300#define USB_DEVICE_ID_LOGITECH_G25_WHEEL 0xc299
295#define USB_DEVICE_ID_LOGITECH_ELITE_KBD 0xc30a 301#define USB_DEVICE_ID_LOGITECH_ELITE_KBD 0xc30a
296#define USB_DEVICE_ID_S510_RECEIVER 0xc50c 302#define USB_DEVICE_ID_S510_RECEIVER 0xc50c
297#define USB_DEVICE_ID_S510_RECEIVER_2 0xc517 303#define USB_DEVICE_ID_S510_RECEIVER_2 0xc517
diff --git a/drivers/hid/hid-lg.c b/drivers/hid/hid-lg.c
index 7b80cb694982..7afbaa0efd18 100644
--- a/drivers/hid/hid-lg.c
+++ b/drivers/hid/hid-lg.c
@@ -297,6 +297,8 @@ static const struct hid_device_id lg_devices[] = {
297 .driver_data = LG_FF }, 297 .driver_data = LG_FF },
298 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2), 298 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2),
299 .driver_data = LG_FF }, 299 .driver_data = LG_FF },
300 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL),
301 .driver_data = LG_FF },
300 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2), 302 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2),
301 .driver_data = LG_FF2 }, 303 .driver_data = LG_FF2 },
302 { } 304 { }
diff --git a/drivers/hid/hidraw.c b/drivers/hid/hidraw.c
index e263d4731179..00ccf4b1985d 100644
--- a/drivers/hid/hidraw.c
+++ b/drivers/hid/hidraw.c
@@ -285,8 +285,10 @@ static long hidraw_ioctl(struct file *file, unsigned int cmd,
285 285
286 if (_IOC_NR(cmd) == _IOC_NR(HIDIOCGRAWNAME(0))) { 286 if (_IOC_NR(cmd) == _IOC_NR(HIDIOCGRAWNAME(0))) {
287 int len; 287 int len;
288 if (!hid->name) 288 if (!hid->name) {
289 return 0; 289 ret = 0;
290 break;
291 }
290 len = strlen(hid->name) + 1; 292 len = strlen(hid->name) + 1;
291 if (len > _IOC_SIZE(cmd)) 293 if (len > _IOC_SIZE(cmd))
292 len = _IOC_SIZE(cmd); 294 len = _IOC_SIZE(cmd);
@@ -297,8 +299,10 @@ static long hidraw_ioctl(struct file *file, unsigned int cmd,
297 299
298 if (_IOC_NR(cmd) == _IOC_NR(HIDIOCGRAWPHYS(0))) { 300 if (_IOC_NR(cmd) == _IOC_NR(HIDIOCGRAWPHYS(0))) {
299 int len; 301 int len;
300 if (!hid->phys) 302 if (!hid->phys) {
301 return 0; 303 ret = 0;
304 break;
305 }
302 len = strlen(hid->phys) + 1; 306 len = strlen(hid->phys) + 1;
303 if (len > _IOC_SIZE(cmd)) 307 if (len > _IOC_SIZE(cmd))
304 len = _IOC_SIZE(cmd); 308 len = _IOC_SIZE(cmd);
diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
index 4306cb1b8ce5..ac8049b5f1e9 100644
--- a/drivers/hid/usbhid/hid-core.c
+++ b/drivers/hid/usbhid/hid-core.c
@@ -662,8 +662,8 @@ void usbhid_close(struct hid_device *hid)
662 spin_lock_irq(&usbhid->lock); 662 spin_lock_irq(&usbhid->lock);
663 if (!--hid->open) { 663 if (!--hid->open) {
664 spin_unlock_irq(&usbhid->lock); 664 spin_unlock_irq(&usbhid->lock);
665 hid_cancel_delayed_stuff(usbhid);
665 usb_kill_urb(usbhid->urbin); 666 usb_kill_urb(usbhid->urbin);
666 flush_scheduled_work();
667 usbhid->intf->needs_remote_wakeup = 0; 667 usbhid->intf->needs_remote_wakeup = 0;
668 } else { 668 } else {
669 spin_unlock_irq(&usbhid->lock); 669 spin_unlock_irq(&usbhid->lock);
@@ -898,7 +898,7 @@ static int usbhid_parse(struct hid_device *hid)
898 goto err; 898 goto err;
899 } 899 }
900 900
901 hid->quirks = quirks; 901 hid->quirks |= quirks;
902 902
903 return 0; 903 return 0;
904err: 904err:
diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
index 4391717d2519..d8f7423f363e 100644
--- a/drivers/hid/usbhid/hid-quirks.c
+++ b/drivers/hid/usbhid/hid-quirks.c
@@ -50,6 +50,9 @@ static const struct hid_blacklist {
50 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM, HID_QUIRK_NOGET }, 50 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM, HID_QUIRK_NOGET },
51 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVM, HID_QUIRK_NOGET }, 51 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVM, HID_QUIRK_NOGET },
52 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVMC, HID_QUIRK_NOGET }, 52 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVMC, HID_QUIRK_NOGET },
53 { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_COMBATSTICK, HID_QUIRK_NOGET },
54 { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FLIGHT_SIM_YOKE, HID_QUIRK_NOGET },
55 { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_PRO_PEDALS, HID_QUIRK_NOGET },
53 { USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET }, 56 { USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
54 { USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET }, 57 { USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
55 { USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE, HID_QUIRK_NOGET }, 58 { USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE, HID_QUIRK_NOGET },
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
index 0e8a9185f676..d73f5f473e38 100644
--- a/drivers/hwmon/Kconfig
+++ b/drivers/hwmon/Kconfig
@@ -692,6 +692,16 @@ config SENSORS_PCF8591
692 These devices are hard to detect and rarely found on mainstream 692 These devices are hard to detect and rarely found on mainstream
693 hardware. If unsure, say N. 693 hardware. If unsure, say N.
694 694
695config SENSORS_SHT15
696 tristate "Sensiron humidity and temperature sensors. SHT15 and compat."
697 depends on GENERIC_GPIO
698 help
699 If you say yes here you get support for the Sensiron SHT10, SHT11,
700 SHT15, SHT71, SHT75 humidity and temperature sensors.
701
702 This driver can also be built as a module. If so, the module
703 will be called sht15.
704
695config SENSORS_SIS5595 705config SENSORS_SIS5595
696 tristate "Silicon Integrated Systems Corp. SiS5595" 706 tristate "Silicon Integrated Systems Corp. SiS5595"
697 depends on PCI 707 depends on PCI
diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile
index 1d3757837b4f..0ae26984ba45 100644
--- a/drivers/hwmon/Makefile
+++ b/drivers/hwmon/Makefile
@@ -76,6 +76,7 @@ obj-$(CONFIG_SENSORS_MAX6650) += max6650.o
76obj-$(CONFIG_SENSORS_PC87360) += pc87360.o 76obj-$(CONFIG_SENSORS_PC87360) += pc87360.o
77obj-$(CONFIG_SENSORS_PC87427) += pc87427.o 77obj-$(CONFIG_SENSORS_PC87427) += pc87427.o
78obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o 78obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o
79obj-$(CONFIG_SENSORS_SHT15) += sht15.o
79obj-$(CONFIG_SENSORS_SIS5595) += sis5595.o 80obj-$(CONFIG_SENSORS_SIS5595) += sis5595.o
80obj-$(CONFIG_SENSORS_SMSC47B397)+= smsc47b397.o 81obj-$(CONFIG_SENSORS_SMSC47B397)+= smsc47b397.o
81obj-$(CONFIG_SENSORS_SMSC47M1) += smsc47m1.o 82obj-$(CONFIG_SENSORS_SMSC47M1) += smsc47m1.o
diff --git a/drivers/hwmon/asus_atk0110.c b/drivers/hwmon/asus_atk0110.c
index 0897edef2574..bff0103610c1 100644
--- a/drivers/hwmon/asus_atk0110.c
+++ b/drivers/hwmon/asus_atk0110.c
@@ -348,6 +348,7 @@ static int validate_hwmon_pack(struct atk_data *data, union acpi_object *obj)
348 return 0; 348 return 0;
349} 349}
350 350
351#ifdef DEBUG
351static char const *atk_sensor_type(union acpi_object *flags) 352static char const *atk_sensor_type(union acpi_object *flags)
352{ 353{
353 u64 type = flags->integer.value & ATK_TYPE_MASK; 354 u64 type = flags->integer.value & ATK_TYPE_MASK;
@@ -370,6 +371,7 @@ static char const *atk_sensor_type(union acpi_object *flags)
370 371
371 return what; 372 return what;
372} 373}
374#endif
373 375
374static void atk_print_sensor(struct atk_data *data, union acpi_object *obj) 376static void atk_print_sensor(struct atk_data *data, union acpi_object *obj)
375{ 377{
diff --git a/drivers/hwmon/hp_accel.c b/drivers/hwmon/hp_accel.c
index 55d3dc565be6..abca7e9f953b 100644
--- a/drivers/hwmon/hp_accel.c
+++ b/drivers/hwmon/hp_accel.c
@@ -34,7 +34,6 @@
34#include <linux/wait.h> 34#include <linux/wait.h>
35#include <linux/poll.h> 35#include <linux/poll.h>
36#include <linux/freezer.h> 36#include <linux/freezer.h>
37#include <linux/version.h>
38#include <linux/uaccess.h> 37#include <linux/uaccess.h>
39#include <linux/leds.h> 38#include <linux/leds.h>
40#include <acpi/acpi_drivers.h> 39#include <acpi/acpi_drivers.h>
diff --git a/drivers/hwmon/sht15.c b/drivers/hwmon/sht15.c
new file mode 100644
index 000000000000..6cbdc2fea734
--- /dev/null
+++ b/drivers/hwmon/sht15.c
@@ -0,0 +1,692 @@
1/*
2 * sht15.c - support for the SHT15 Temperature and Humidity Sensor
3 *
4 * Copyright (c) 2009 Jonathan Cameron
5 *
6 * Copyright (c) 2007 Wouter Horre
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 *
12 * Currently ignoring checksum on readings.
13 * Default resolution only (14bit temp, 12bit humidity)
14 * Ignoring battery status.
15 * Heater not enabled.
16 * Timings are all conservative.
17 *
18 * Data sheet available (1/2009) at
19 * http://www.sensirion.ch/en/pdf/product_information/Datasheet-humidity-sensor-SHT1x.pdf
20 *
21 * Regulator supply name = vcc
22 */
23
24#include <linux/interrupt.h>
25#include <linux/irq.h>
26#include <linux/gpio.h>
27#include <linux/module.h>
28#include <linux/init.h>
29#include <linux/hwmon.h>
30#include <linux/hwmon-sysfs.h>
31#include <linux/mutex.h>
32#include <linux/platform_device.h>
33#include <linux/delay.h>
34#include <linux/jiffies.h>
35#include <linux/err.h>
36#include <linux/sht15.h>
37#include <linux/regulator/consumer.h>
38#include <asm/atomic.h>
39
40#define SHT15_MEASURE_TEMP 3
41#define SHT15_MEASURE_RH 5
42
43#define SHT15_READING_NOTHING 0
44#define SHT15_READING_TEMP 1
45#define SHT15_READING_HUMID 2
46
47/* Min timings in nsecs */
48#define SHT15_TSCKL 100 /* clock low */
49#define SHT15_TSCKH 100 /* clock high */
50#define SHT15_TSU 150 /* data setup time */
51
52/**
53 * struct sht15_temppair - elements of voltage dependant temp calc
54 * @vdd: supply voltage in microvolts
55 * @d1: see data sheet
56 */
57struct sht15_temppair {
58 int vdd; /* microvolts */
59 int d1;
60};
61
62/* Table 9 from data sheet - relates temperature calculation
63 * to supply voltage.
64 */
65static const struct sht15_temppair temppoints[] = {
66 { 2500000, -39400 },
67 { 3000000, -39600 },
68 { 3500000, -39700 },
69 { 4000000, -39800 },
70 { 5000000, -40100 },
71};
72
73/**
74 * struct sht15_data - device instance specific data
75 * @pdata: platform data (gpio's etc)
76 * @read_work: bh of interrupt handler
77 * @wait_queue: wait queue for getting values from device
78 * @val_temp: last temperature value read from device
79 * @val_humid: last humidity value read from device
80 * @flag: status flag used to identify what the last request was
81 * @valid: are the current stored values valid (start condition)
82 * @last_updat: time of last update
83 * @read_lock: mutex to ensure only one read in progress
84 * at a time.
85 * @dev: associate device structure
86 * @hwmon_dev: device associated with hwmon subsystem
87 * @reg: associated regulator (if specified)
88 * @nb: notifier block to handle notifications of voltage changes
89 * @supply_uV: local copy of supply voltage used to allow
90 * use of regulator consumer if available
91 * @supply_uV_valid: indicates that an updated value has not yet
92 * been obtained from the regulator and so any calculations
93 * based upon it will be invalid.
94 * @update_supply_work: work struct that is used to update the supply_uV
95 * @interrupt_handled: flag used to indicate a hander has been scheduled
96 */
97struct sht15_data {
98 struct sht15_platform_data *pdata;
99 struct work_struct read_work;
100 wait_queue_head_t wait_queue;
101 uint16_t val_temp;
102 uint16_t val_humid;
103 u8 flag;
104 u8 valid;
105 unsigned long last_updat;
106 struct mutex read_lock;
107 struct device *dev;
108 struct device *hwmon_dev;
109 struct regulator *reg;
110 struct notifier_block nb;
111 int supply_uV;
112 int supply_uV_valid;
113 struct work_struct update_supply_work;
114 atomic_t interrupt_handled;
115};
116
117/**
118 * sht15_connection_reset() - reset the comms interface
119 * @data: sht15 specific data
120 *
121 * This implements section 3.4 of the data sheet
122 */
123static void sht15_connection_reset(struct sht15_data *data)
124{
125 int i;
126 gpio_direction_output(data->pdata->gpio_data, 1);
127 ndelay(SHT15_TSCKL);
128 gpio_set_value(data->pdata->gpio_sck, 0);
129 ndelay(SHT15_TSCKL);
130 for (i = 0; i < 9; ++i) {
131 gpio_set_value(data->pdata->gpio_sck, 1);
132 ndelay(SHT15_TSCKH);
133 gpio_set_value(data->pdata->gpio_sck, 0);
134 ndelay(SHT15_TSCKL);
135 }
136}
137/**
138 * sht15_send_bit() - send an individual bit to the device
139 * @data: device state data
140 * @val: value of bit to be sent
141 **/
142static inline void sht15_send_bit(struct sht15_data *data, int val)
143{
144
145 gpio_set_value(data->pdata->gpio_data, val);
146 ndelay(SHT15_TSU);
147 gpio_set_value(data->pdata->gpio_sck, 1);
148 ndelay(SHT15_TSCKH);
149 gpio_set_value(data->pdata->gpio_sck, 0);
150 ndelay(SHT15_TSCKL); /* clock low time */
151}
152
153/**
154 * sht15_transmission_start() - specific sequence for new transmission
155 *
156 * @data: device state data
157 * Timings for this are not documented on the data sheet, so very
158 * conservative ones used in implementation. This implements
159 * figure 12 on the data sheet.
160 **/
161static void sht15_transmission_start(struct sht15_data *data)
162{
163 /* ensure data is high and output */
164 gpio_direction_output(data->pdata->gpio_data, 1);
165 ndelay(SHT15_TSU);
166 gpio_set_value(data->pdata->gpio_sck, 0);
167 ndelay(SHT15_TSCKL);
168 gpio_set_value(data->pdata->gpio_sck, 1);
169 ndelay(SHT15_TSCKH);
170 gpio_set_value(data->pdata->gpio_data, 0);
171 ndelay(SHT15_TSU);
172 gpio_set_value(data->pdata->gpio_sck, 0);
173 ndelay(SHT15_TSCKL);
174 gpio_set_value(data->pdata->gpio_sck, 1);
175 ndelay(SHT15_TSCKH);
176 gpio_set_value(data->pdata->gpio_data, 1);
177 ndelay(SHT15_TSU);
178 gpio_set_value(data->pdata->gpio_sck, 0);
179 ndelay(SHT15_TSCKL);
180}
181/**
182 * sht15_send_byte() - send a single byte to the device
183 * @data: device state
184 * @byte: value to be sent
185 **/
186static void sht15_send_byte(struct sht15_data *data, u8 byte)
187{
188 int i;
189 for (i = 0; i < 8; i++) {
190 sht15_send_bit(data, !!(byte & 0x80));
191 byte <<= 1;
192 }
193}
194/**
195 * sht15_wait_for_response() - checks for ack from device
196 * @data: device state
197 **/
198static int sht15_wait_for_response(struct sht15_data *data)
199{
200 gpio_direction_input(data->pdata->gpio_data);
201 gpio_set_value(data->pdata->gpio_sck, 1);
202 ndelay(SHT15_TSCKH);
203 if (gpio_get_value(data->pdata->gpio_data)) {
204 gpio_set_value(data->pdata->gpio_sck, 0);
205 dev_err(data->dev, "Command not acknowledged\n");
206 sht15_connection_reset(data);
207 return -EIO;
208 }
209 gpio_set_value(data->pdata->gpio_sck, 0);
210 ndelay(SHT15_TSCKL);
211 return 0;
212}
213
214/**
215 * sht15_send_cmd() - Sends a command to the device.
216 * @data: device state
217 * @cmd: command byte to be sent
218 *
219 * On entry, sck is output low, data is output pull high
220 * and the interrupt disabled.
221 **/
222static int sht15_send_cmd(struct sht15_data *data, u8 cmd)
223{
224 int ret = 0;
225 sht15_transmission_start(data);
226 sht15_send_byte(data, cmd);
227 ret = sht15_wait_for_response(data);
228 return ret;
229}
230/**
231 * sht15_update_single_val() - get a new value from device
232 * @data: device instance specific data
233 * @command: command sent to request value
234 * @timeout_msecs: timeout after which comms are assumed
235 * to have failed are reset.
236 **/
237static inline int sht15_update_single_val(struct sht15_data *data,
238 int command,
239 int timeout_msecs)
240{
241 int ret;
242 ret = sht15_send_cmd(data, command);
243 if (ret)
244 return ret;
245
246 gpio_direction_input(data->pdata->gpio_data);
247 atomic_set(&data->interrupt_handled, 0);
248
249 enable_irq(gpio_to_irq(data->pdata->gpio_data));
250 if (gpio_get_value(data->pdata->gpio_data) == 0) {
251 disable_irq_nosync(gpio_to_irq(data->pdata->gpio_data));
252 /* Only relevant if the interrupt hasn't occured. */
253 if (!atomic_read(&data->interrupt_handled))
254 schedule_work(&data->read_work);
255 }
256 ret = wait_event_timeout(data->wait_queue,
257 (data->flag == SHT15_READING_NOTHING),
258 msecs_to_jiffies(timeout_msecs));
259 if (ret == 0) {/* timeout occurred */
260 disable_irq_nosync(gpio_to_irq(data->pdata->gpio_data));;
261 sht15_connection_reset(data);
262 return -ETIME;
263 }
264 return 0;
265}
266
267/**
268 * sht15_update_vals() - get updated readings from device if too old
269 * @data: device state
270 **/
271static int sht15_update_vals(struct sht15_data *data)
272{
273 int ret = 0;
274 int timeout = HZ;
275
276 mutex_lock(&data->read_lock);
277 if (time_after(jiffies, data->last_updat + timeout)
278 || !data->valid) {
279 data->flag = SHT15_READING_HUMID;
280 ret = sht15_update_single_val(data, SHT15_MEASURE_RH, 160);
281 if (ret)
282 goto error_ret;
283 data->flag = SHT15_READING_TEMP;
284 ret = sht15_update_single_val(data, SHT15_MEASURE_TEMP, 400);
285 if (ret)
286 goto error_ret;
287 data->valid = 1;
288 data->last_updat = jiffies;
289 }
290error_ret:
291 mutex_unlock(&data->read_lock);
292
293 return ret;
294}
295
296/**
297 * sht15_calc_temp() - convert the raw reading to a temperature
298 * @data: device state
299 *
300 * As per section 4.3 of the data sheet.
301 **/
302static inline int sht15_calc_temp(struct sht15_data *data)
303{
304 int d1 = 0;
305 int i;
306
307 for (i = 1; i < ARRAY_SIZE(temppoints) - 1; i++)
308 /* Find pointer to interpolate */
309 if (data->supply_uV > temppoints[i - 1].vdd) {
310 d1 = (data->supply_uV/1000 - temppoints[i - 1].vdd)
311 * (temppoints[i].d1 - temppoints[i - 1].d1)
312 / (temppoints[i].vdd - temppoints[i - 1].vdd)
313 + temppoints[i - 1].d1;
314 break;
315 }
316
317 return data->val_temp*10 + d1;
318}
319
320/**
321 * sht15_calc_humid() - using last temperature convert raw to humid
322 * @data: device state
323 *
324 * This is the temperature compensated version as per section 4.2 of
325 * the data sheet.
326 **/
327static inline int sht15_calc_humid(struct sht15_data *data)
328{
329 int RHlinear; /* milli percent */
330 int temp = sht15_calc_temp(data);
331
332 const int c1 = -4;
333 const int c2 = 40500; /* x 10 ^ -6 */
334 const int c3 = 2800; /* x10 ^ -9 */
335
336 RHlinear = c1*1000
337 + c2 * data->val_humid/1000
338 + (data->val_humid * data->val_humid * c3)/1000000;
339 return (temp - 25000) * (10000 + 800 * data->val_humid)
340 / 1000000 + RHlinear;
341}
342
343static ssize_t sht15_show_temp(struct device *dev,
344 struct device_attribute *attr,
345 char *buf)
346{
347 int ret;
348 struct sht15_data *data = dev_get_drvdata(dev);
349
350 /* Technically no need to read humidity as well */
351 ret = sht15_update_vals(data);
352
353 return ret ? ret : sprintf(buf, "%d\n",
354 sht15_calc_temp(data));
355}
356
357static ssize_t sht15_show_humidity(struct device *dev,
358 struct device_attribute *attr,
359 char *buf)
360{
361 int ret;
362 struct sht15_data *data = dev_get_drvdata(dev);
363
364 ret = sht15_update_vals(data);
365
366 return ret ? ret : sprintf(buf, "%d\n", sht15_calc_humid(data));
367
368};
369static ssize_t show_name(struct device *dev,
370 struct device_attribute *attr,
371 char *buf)
372{
373 struct platform_device *pdev = to_platform_device(dev);
374 return sprintf(buf, "%s\n", pdev->name);
375}
376
377static SENSOR_DEVICE_ATTR(temp1_input,
378 S_IRUGO, sht15_show_temp,
379 NULL, 0);
380static SENSOR_DEVICE_ATTR(humidity1_input,
381 S_IRUGO, sht15_show_humidity,
382 NULL, 0);
383static DEVICE_ATTR(name, S_IRUGO, show_name, NULL);
384static struct attribute *sht15_attrs[] = {
385 &sensor_dev_attr_temp1_input.dev_attr.attr,
386 &sensor_dev_attr_humidity1_input.dev_attr.attr,
387 &dev_attr_name.attr,
388 NULL,
389};
390
391static const struct attribute_group sht15_attr_group = {
392 .attrs = sht15_attrs,
393};
394
395static irqreturn_t sht15_interrupt_fired(int irq, void *d)
396{
397 struct sht15_data *data = d;
398 /* First disable the interrupt */
399 disable_irq_nosync(irq);
400 atomic_inc(&data->interrupt_handled);
401 /* Then schedule a reading work struct */
402 if (data->flag != SHT15_READING_NOTHING)
403 schedule_work(&data->read_work);
404 return IRQ_HANDLED;
405}
406
407/* Each byte of data is acknowledged by pulling the data line
408 * low for one clock pulse.
409 */
410static void sht15_ack(struct sht15_data *data)
411{
412 gpio_direction_output(data->pdata->gpio_data, 0);
413 ndelay(SHT15_TSU);
414 gpio_set_value(data->pdata->gpio_sck, 1);
415 ndelay(SHT15_TSU);
416 gpio_set_value(data->pdata->gpio_sck, 0);
417 ndelay(SHT15_TSU);
418 gpio_set_value(data->pdata->gpio_data, 1);
419
420 gpio_direction_input(data->pdata->gpio_data);
421}
422/**
423 * sht15_end_transmission() - notify device of end of transmission
424 * @data: device state
425 *
426 * This is basically a NAK. (single clock pulse, data high)
427 **/
428static void sht15_end_transmission(struct sht15_data *data)
429{
430 gpio_direction_output(data->pdata->gpio_data, 1);
431 ndelay(SHT15_TSU);
432 gpio_set_value(data->pdata->gpio_sck, 1);
433 ndelay(SHT15_TSCKH);
434 gpio_set_value(data->pdata->gpio_sck, 0);
435 ndelay(SHT15_TSCKL);
436}
437
438static void sht15_bh_read_data(struct work_struct *work_s)
439{
440 int i;
441 uint16_t val = 0;
442 struct sht15_data *data
443 = container_of(work_s, struct sht15_data,
444 read_work);
445 /* Firstly, verify the line is low */
446 if (gpio_get_value(data->pdata->gpio_data)) {
447 /* If not, then start the interrupt again - care
448 here as could have gone low in meantime so verify
449 it hasn't!
450 */
451 atomic_set(&data->interrupt_handled, 0);
452 enable_irq(gpio_to_irq(data->pdata->gpio_data));
453 /* If still not occured or another handler has been scheduled */
454 if (gpio_get_value(data->pdata->gpio_data)
455 || atomic_read(&data->interrupt_handled))
456 return;
457 }
458 /* Read the data back from the device */
459 for (i = 0; i < 16; ++i) {
460 val <<= 1;
461 gpio_set_value(data->pdata->gpio_sck, 1);
462 ndelay(SHT15_TSCKH);
463 val |= !!gpio_get_value(data->pdata->gpio_data);
464 gpio_set_value(data->pdata->gpio_sck, 0);
465 ndelay(SHT15_TSCKL);
466 if (i == 7)
467 sht15_ack(data);
468 }
469 /* Tell the device we are done */
470 sht15_end_transmission(data);
471
472 switch (data->flag) {
473 case SHT15_READING_TEMP:
474 data->val_temp = val;
475 break;
476 case SHT15_READING_HUMID:
477 data->val_humid = val;
478 break;
479 }
480
481 data->flag = SHT15_READING_NOTHING;
482 wake_up(&data->wait_queue);
483}
484
485static void sht15_update_voltage(struct work_struct *work_s)
486{
487 struct sht15_data *data
488 = container_of(work_s, struct sht15_data,
489 update_supply_work);
490 data->supply_uV = regulator_get_voltage(data->reg);
491}
492
493/**
494 * sht15_invalidate_voltage() - mark supply voltage invalid when notified by reg
495 * @nb: associated notification structure
496 * @event: voltage regulator state change event code
497 * @ignored: function parameter - ignored here
498 *
499 * Note that as the notification code holds the regulator lock, we have
500 * to schedule an update of the supply voltage rather than getting it directly.
501 **/
502static int sht15_invalidate_voltage(struct notifier_block *nb,
503 unsigned long event,
504 void *ignored)
505{
506 struct sht15_data *data = container_of(nb, struct sht15_data, nb);
507
508 if (event == REGULATOR_EVENT_VOLTAGE_CHANGE)
509 data->supply_uV_valid = false;
510 schedule_work(&data->update_supply_work);
511
512 return NOTIFY_OK;
513}
514
515static int __devinit sht15_probe(struct platform_device *pdev)
516{
517 int ret = 0;
518 struct sht15_data *data = kzalloc(sizeof(*data), GFP_KERNEL);
519
520 if (!data) {
521 ret = -ENOMEM;
522 dev_err(&pdev->dev, "kzalloc failed");
523 goto error_ret;
524 }
525
526 INIT_WORK(&data->read_work, sht15_bh_read_data);
527 INIT_WORK(&data->update_supply_work, sht15_update_voltage);
528 platform_set_drvdata(pdev, data);
529 mutex_init(&data->read_lock);
530 data->dev = &pdev->dev;
531 init_waitqueue_head(&data->wait_queue);
532
533 if (pdev->dev.platform_data == NULL) {
534 dev_err(&pdev->dev, "no platform data supplied");
535 goto err_free_data;
536 }
537 data->pdata = pdev->dev.platform_data;
538 data->supply_uV = data->pdata->supply_mv*1000;
539
540/* If a regulator is available, query what the supply voltage actually is!*/
541 data->reg = regulator_get(data->dev, "vcc");
542 if (!IS_ERR(data->reg)) {
543 data->supply_uV = regulator_get_voltage(data->reg);
544 regulator_enable(data->reg);
545 /* setup a notifier block to update this if another device
546 * causes the voltage to change */
547 data->nb.notifier_call = &sht15_invalidate_voltage;
548 ret = regulator_register_notifier(data->reg, &data->nb);
549 }
550/* Try requesting the GPIOs */
551 ret = gpio_request(data->pdata->gpio_sck, "SHT15 sck");
552 if (ret) {
553 dev_err(&pdev->dev, "gpio request failed");
554 goto err_free_data;
555 }
556 gpio_direction_output(data->pdata->gpio_sck, 0);
557 ret = gpio_request(data->pdata->gpio_data, "SHT15 data");
558 if (ret) {
559 dev_err(&pdev->dev, "gpio request failed");
560 goto err_release_gpio_sck;
561 }
562 ret = sysfs_create_group(&pdev->dev.kobj, &sht15_attr_group);
563 if (ret) {
564 dev_err(&pdev->dev, "sysfs create failed");
565 goto err_free_data;
566 }
567
568 ret = request_irq(gpio_to_irq(data->pdata->gpio_data),
569 sht15_interrupt_fired,
570 IRQF_TRIGGER_FALLING,
571 "sht15 data",
572 data);
573 if (ret) {
574 dev_err(&pdev->dev, "failed to get irq for data line");
575 goto err_release_gpio_data;
576 }
577 disable_irq_nosync(gpio_to_irq(data->pdata->gpio_data));
578 sht15_connection_reset(data);
579 sht15_send_cmd(data, 0x1E);
580
581 data->hwmon_dev = hwmon_device_register(data->dev);
582 if (IS_ERR(data->hwmon_dev)) {
583 ret = PTR_ERR(data->hwmon_dev);
584 goto err_release_gpio_data;
585 }
586 return 0;
587
588err_release_gpio_data:
589 gpio_free(data->pdata->gpio_data);
590err_release_gpio_sck:
591 gpio_free(data->pdata->gpio_sck);
592err_free_data:
593 kfree(data);
594error_ret:
595
596 return ret;
597}
598
599static int __devexit sht15_remove(struct platform_device *pdev)
600{
601 struct sht15_data *data = platform_get_drvdata(pdev);
602
603 /* Make sure any reads from the device are done and
604 * prevent new ones beginnning */
605 mutex_lock(&data->read_lock);
606 hwmon_device_unregister(data->hwmon_dev);
607 sysfs_remove_group(&pdev->dev.kobj, &sht15_attr_group);
608 if (!IS_ERR(data->reg)) {
609 regulator_unregister_notifier(data->reg, &data->nb);
610 regulator_disable(data->reg);
611 regulator_put(data->reg);
612 }
613
614 free_irq(gpio_to_irq(data->pdata->gpio_data), data);
615 gpio_free(data->pdata->gpio_data);
616 gpio_free(data->pdata->gpio_sck);
617 mutex_unlock(&data->read_lock);
618 kfree(data);
619 return 0;
620}
621
622
623static struct platform_driver sht_drivers[] = {
624 {
625 .driver = {
626 .name = "sht10",
627 .owner = THIS_MODULE,
628 },
629 .probe = sht15_probe,
630 .remove = sht15_remove,
631 }, {
632 .driver = {
633 .name = "sht11",
634 .owner = THIS_MODULE,
635 },
636 .probe = sht15_probe,
637 .remove = sht15_remove,
638 }, {
639 .driver = {
640 .name = "sht15",
641 .owner = THIS_MODULE,
642 },
643 .probe = sht15_probe,
644 .remove = sht15_remove,
645 }, {
646 .driver = {
647 .name = "sht71",
648 .owner = THIS_MODULE,
649 },
650 .probe = sht15_probe,
651 .remove = sht15_remove,
652 }, {
653 .driver = {
654 .name = "sht75",
655 .owner = THIS_MODULE,
656 },
657 .probe = sht15_probe,
658 .remove = sht15_remove,
659 },
660};
661
662
663static int __init sht15_init(void)
664{
665 int ret;
666 int i;
667
668 for (i = 0; i < ARRAY_SIZE(sht_drivers); i++) {
669 ret = platform_driver_register(&sht_drivers[i]);
670 if (ret)
671 goto error_unreg;
672 }
673
674 return 0;
675
676error_unreg:
677 while (--i >= 0)
678 platform_driver_unregister(&sht_drivers[i]);
679
680 return ret;
681}
682module_init(sht15_init);
683
684static void __exit sht15_exit(void)
685{
686 int i;
687 for (i = ARRAY_SIZE(sht_drivers) - 1; i >= 0; i--)
688 platform_driver_unregister(&sht_drivers[i]);
689}
690module_exit(sht15_exit);
691
692MODULE_LICENSE("GPL");
diff --git a/drivers/hwmon/w83781d.c b/drivers/hwmon/w83781d.c
index dbfb30c588d8..0bdab959b736 100644
--- a/drivers/hwmon/w83781d.c
+++ b/drivers/hwmon/w83781d.c
@@ -1462,7 +1462,8 @@ static struct w83781d_data *w83781d_update_device(struct device *dev)
1462 data->pwm[i] = 1462 data->pwm[i] =
1463 w83781d_read_value(data, 1463 w83781d_read_value(data,
1464 W83781D_REG_PWM[i]); 1464 W83781D_REG_PWM[i]);
1465 if ((data->type != w83782d || !client->driver) 1465 /* Only W83782D on SMBus has PWM3 and PWM4 */
1466 if ((data->type != w83782d || !client)
1466 && i == 1) 1467 && i == 1)
1467 break; 1468 break;
1468 } 1469 }
diff --git a/drivers/i2c/algos/i2c-algo-bit.c b/drivers/i2c/algos/i2c-algo-bit.c
index d420cc5f5633..e25e13980af3 100644
--- a/drivers/i2c/algos/i2c-algo-bit.c
+++ b/drivers/i2c/algos/i2c-algo-bit.c
@@ -104,7 +104,7 @@ static int sclhi(struct i2c_algo_bit_data *adap)
104 * chips may hold it low ("clock stretching") while they 104 * chips may hold it low ("clock stretching") while they
105 * are processing data internally. 105 * are processing data internally.
106 */ 106 */
107 if (time_after_eq(jiffies, start + adap->timeout)) 107 if (time_after(jiffies, start + adap->timeout))
108 return -ETIMEDOUT; 108 return -ETIMEDOUT;
109 cond_resched(); 109 cond_resched();
110 } 110 }
diff --git a/drivers/i2c/algos/i2c-algo-pca.c b/drivers/i2c/algos/i2c-algo-pca.c
index 6318f7ddc1d4..78d42aae0089 100644
--- a/drivers/i2c/algos/i2c-algo-pca.c
+++ b/drivers/i2c/algos/i2c-algo-pca.c
@@ -287,10 +287,21 @@ static int pca_xfer(struct i2c_adapter *i2c_adap,
287 287
288 case 0x30: /* Data byte in I2CDAT has been transmitted; NOT ACK has been received */ 288 case 0x30: /* Data byte in I2CDAT has been transmitted; NOT ACK has been received */
289 DEB2("NOT ACK received after data byte\n"); 289 DEB2("NOT ACK received after data byte\n");
290 pca_stop(adap);
290 goto out; 291 goto out;
291 292
292 case 0x38: /* Arbitration lost during SLA+W, SLA+R or data bytes */ 293 case 0x38: /* Arbitration lost during SLA+W, SLA+R or data bytes */
293 DEB2("Arbitration lost\n"); 294 DEB2("Arbitration lost\n");
295 /*
296 * The PCA9564 data sheet (2006-09-01) says "A
297 * START condition will be transmitted when the
298 * bus becomes free (STOP or SCL and SDA high)"
299 * when the STA bit is set (p. 11).
300 *
301 * In case this won't work, try pca_reset()
302 * instead.
303 */
304 pca_start(adap);
294 goto out; 305 goto out;
295 306
296 case 0x58: /* Data byte has been received; NOT ACK has been returned */ 307 case 0x58: /* Data byte has been received; NOT ACK has been returned */
diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
index a48c8aee0218..f1c6ca7e2852 100644
--- a/drivers/i2c/busses/Kconfig
+++ b/drivers/i2c/busses/Kconfig
@@ -467,7 +467,7 @@ config I2C_PXA_SLAVE
467 467
468config I2C_S3C2410 468config I2C_S3C2410
469 tristate "S3C2410 I2C Driver" 469 tristate "S3C2410 I2C Driver"
470 depends on ARCH_S3C2410 470 depends on ARCH_S3C2410 || ARCH_S3C64XX
471 help 471 help
472 Say Y here to include support for I2C controller in the 472 Say Y here to include support for I2C controller in the
473 Samsung S3C2410 based System-on-Chip devices. 473 Samsung S3C2410 based System-on-Chip devices.
diff --git a/drivers/i2c/busses/i2c-ali1535.c b/drivers/i2c/busses/i2c-ali1535.c
index 981e080b32ae..d108450df064 100644
--- a/drivers/i2c/busses/i2c-ali1535.c
+++ b/drivers/i2c/busses/i2c-ali1535.c
@@ -284,7 +284,7 @@ static int ali1535_transaction(struct i2c_adapter *adap)
284 && (timeout++ < MAX_TIMEOUT)); 284 && (timeout++ < MAX_TIMEOUT));
285 285
286 /* If the SMBus is still busy, we give up */ 286 /* If the SMBus is still busy, we give up */
287 if (timeout >= MAX_TIMEOUT) { 287 if (timeout > MAX_TIMEOUT) {
288 result = -ETIMEDOUT; 288 result = -ETIMEDOUT;
289 dev_err(&adap->dev, "SMBus Timeout!\n"); 289 dev_err(&adap->dev, "SMBus Timeout!\n");
290 } 290 }
diff --git a/drivers/i2c/busses/i2c-ali15x3.c b/drivers/i2c/busses/i2c-ali15x3.c
index 39066dee46e3..d627fceb790b 100644
--- a/drivers/i2c/busses/i2c-ali15x3.c
+++ b/drivers/i2c/busses/i2c-ali15x3.c
@@ -306,7 +306,7 @@ static int ali15x3_transaction(struct i2c_adapter *adap)
306 && (timeout++ < MAX_TIMEOUT)); 306 && (timeout++ < MAX_TIMEOUT));
307 307
308 /* If the SMBus is still busy, we give up */ 308 /* If the SMBus is still busy, we give up */
309 if (timeout >= MAX_TIMEOUT) { 309 if (timeout > MAX_TIMEOUT) {
310 result = -ETIMEDOUT; 310 result = -ETIMEDOUT;
311 dev_err(&adap->dev, "SMBus Timeout!\n"); 311 dev_err(&adap->dev, "SMBus Timeout!\n");
312 } 312 }
diff --git a/drivers/i2c/busses/i2c-amd756.c b/drivers/i2c/busses/i2c-amd756.c
index 220f4a1eee1d..f7d6fe9c49ba 100644
--- a/drivers/i2c/busses/i2c-amd756.c
+++ b/drivers/i2c/busses/i2c-amd756.c
@@ -126,7 +126,7 @@ static int amd756_transaction(struct i2c_adapter *adap)
126 } while ((temp & (GS_HST_STS | GS_SMB_STS)) && 126 } while ((temp & (GS_HST_STS | GS_SMB_STS)) &&
127 (timeout++ < MAX_TIMEOUT)); 127 (timeout++ < MAX_TIMEOUT));
128 /* If the SMBus is still busy, we give up */ 128 /* If the SMBus is still busy, we give up */
129 if (timeout >= MAX_TIMEOUT) { 129 if (timeout > MAX_TIMEOUT) {
130 dev_dbg(&adap->dev, "Busy wait timeout (%04x)\n", temp); 130 dev_dbg(&adap->dev, "Busy wait timeout (%04x)\n", temp);
131 goto abort; 131 goto abort;
132 } 132 }
@@ -143,7 +143,7 @@ static int amd756_transaction(struct i2c_adapter *adap)
143 } while ((temp & GS_HST_STS) && (timeout++ < MAX_TIMEOUT)); 143 } while ((temp & GS_HST_STS) && (timeout++ < MAX_TIMEOUT));
144 144
145 /* If the SMBus is still busy, we give up */ 145 /* If the SMBus is still busy, we give up */
146 if (timeout >= MAX_TIMEOUT) { 146 if (timeout > MAX_TIMEOUT) {
147 dev_dbg(&adap->dev, "Completion timeout!\n"); 147 dev_dbg(&adap->dev, "Completion timeout!\n");
148 goto abort; 148 goto abort;
149 } 149 }
diff --git a/drivers/i2c/busses/i2c-cpm.c b/drivers/i2c/busses/i2c-cpm.c
index 3fcf78e906db..b5db8b883615 100644
--- a/drivers/i2c/busses/i2c-cpm.c
+++ b/drivers/i2c/busses/i2c-cpm.c
@@ -531,16 +531,16 @@ static int __devinit cpm_i2c_setup(struct cpm_i2c *cpm)
531 rbdf = cpm->rbase; 531 rbdf = cpm->rbase;
532 532
533 for (i = 0; i < CPM_MAXBD; i++) { 533 for (i = 0; i < CPM_MAXBD; i++) {
534 cpm->rxbuf[i] = dma_alloc_coherent( 534 cpm->rxbuf[i] = dma_alloc_coherent(&cpm->ofdev->dev,
535 NULL, CPM_MAX_READ + 1, &cpm->rxdma[i], GFP_KERNEL); 535 CPM_MAX_READ + 1,
536 &cpm->rxdma[i], GFP_KERNEL);
536 if (!cpm->rxbuf[i]) { 537 if (!cpm->rxbuf[i]) {
537 ret = -ENOMEM; 538 ret = -ENOMEM;
538 goto out_muram; 539 goto out_muram;
539 } 540 }
540 out_be32(&rbdf[i].cbd_bufaddr, ((cpm->rxdma[i] + 1) & ~1)); 541 out_be32(&rbdf[i].cbd_bufaddr, ((cpm->rxdma[i] + 1) & ~1));
541 542
542 cpm->txbuf[i] = (unsigned char *)dma_alloc_coherent( 543 cpm->txbuf[i] = (unsigned char *)dma_alloc_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1, &cpm->txdma[i], GFP_KERNEL);
543 NULL, CPM_MAX_READ + 1, &cpm->txdma[i], GFP_KERNEL);
544 if (!cpm->txbuf[i]) { 544 if (!cpm->txbuf[i]) {
545 ret = -ENOMEM; 545 ret = -ENOMEM;
546 goto out_muram; 546 goto out_muram;
@@ -585,10 +585,10 @@ static int __devinit cpm_i2c_setup(struct cpm_i2c *cpm)
585out_muram: 585out_muram:
586 for (i = 0; i < CPM_MAXBD; i++) { 586 for (i = 0; i < CPM_MAXBD; i++) {
587 if (cpm->rxbuf[i]) 587 if (cpm->rxbuf[i])
588 dma_free_coherent(NULL, CPM_MAX_READ + 1, 588 dma_free_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1,
589 cpm->rxbuf[i], cpm->rxdma[i]); 589 cpm->rxbuf[i], cpm->rxdma[i]);
590 if (cpm->txbuf[i]) 590 if (cpm->txbuf[i])
591 dma_free_coherent(NULL, CPM_MAX_READ + 1, 591 dma_free_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1,
592 cpm->txbuf[i], cpm->txdma[i]); 592 cpm->txbuf[i], cpm->txdma[i]);
593 } 593 }
594 cpm_muram_free(cpm->dp_addr); 594 cpm_muram_free(cpm->dp_addr);
@@ -619,9 +619,9 @@ static void cpm_i2c_shutdown(struct cpm_i2c *cpm)
619 619
620 /* Free all memory */ 620 /* Free all memory */
621 for (i = 0; i < CPM_MAXBD; i++) { 621 for (i = 0; i < CPM_MAXBD; i++) {
622 dma_free_coherent(NULL, CPM_MAX_READ + 1, 622 dma_free_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1,
623 cpm->rxbuf[i], cpm->rxdma[i]); 623 cpm->rxbuf[i], cpm->rxdma[i]);
624 dma_free_coherent(NULL, CPM_MAX_READ + 1, 624 dma_free_coherent(&cpm->ofdev->dev, CPM_MAX_READ + 1,
625 cpm->txbuf[i], cpm->txdma[i]); 625 cpm->txbuf[i], cpm->txdma[i]);
626 } 626 }
627 627
diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c
index 10411848fd70..9d2c5adf5d4f 100644
--- a/drivers/i2c/busses/i2c-i801.c
+++ b/drivers/i2c/busses/i2c-i801.c
@@ -237,7 +237,7 @@ static int i801_transaction(int xact)
237 status = inb_p(SMBHSTSTS); 237 status = inb_p(SMBHSTSTS);
238 } while ((status & SMBHSTSTS_HOST_BUSY) && (timeout++ < MAX_TIMEOUT)); 238 } while ((status & SMBHSTSTS_HOST_BUSY) && (timeout++ < MAX_TIMEOUT));
239 239
240 result = i801_check_post(status, timeout >= MAX_TIMEOUT); 240 result = i801_check_post(status, timeout > MAX_TIMEOUT);
241 if (result < 0) 241 if (result < 0)
242 return result; 242 return result;
243 243
@@ -257,9 +257,9 @@ static void i801_wait_hwpec(void)
257 } while ((!(status & SMBHSTSTS_INTR)) 257 } while ((!(status & SMBHSTSTS_INTR))
258 && (timeout++ < MAX_TIMEOUT)); 258 && (timeout++ < MAX_TIMEOUT));
259 259
260 if (timeout >= MAX_TIMEOUT) { 260 if (timeout > MAX_TIMEOUT)
261 dev_dbg(&I801_dev->dev, "PEC Timeout!\n"); 261 dev_dbg(&I801_dev->dev, "PEC Timeout!\n");
262 } 262
263 outb_p(status, SMBHSTSTS); 263 outb_p(status, SMBHSTSTS);
264} 264}
265 265
@@ -344,7 +344,7 @@ static int i801_block_transaction_byte_by_byte(union i2c_smbus_data *data,
344 while ((!(status & SMBHSTSTS_BYTE_DONE)) 344 while ((!(status & SMBHSTSTS_BYTE_DONE))
345 && (timeout++ < MAX_TIMEOUT)); 345 && (timeout++ < MAX_TIMEOUT));
346 346
347 result = i801_check_post(status, timeout >= MAX_TIMEOUT); 347 result = i801_check_post(status, timeout > MAX_TIMEOUT);
348 if (result < 0) 348 if (result < 0)
349 return result; 349 return result;
350 350
diff --git a/drivers/i2c/busses/i2c-isch.c b/drivers/i2c/busses/i2c-isch.c
index b9c01aa90036..9f6b8e0f8632 100644
--- a/drivers/i2c/busses/i2c-isch.c
+++ b/drivers/i2c/busses/i2c-isch.c
@@ -112,7 +112,7 @@ static int sch_transaction(void)
112 } while ((temp & 0x08) && (timeout++ < MAX_TIMEOUT)); 112 } while ((temp & 0x08) && (timeout++ < MAX_TIMEOUT));
113 113
114 /* If the SMBus is still busy, we give up */ 114 /* If the SMBus is still busy, we give up */
115 if (timeout >= MAX_TIMEOUT) { 115 if (timeout > MAX_TIMEOUT) {
116 dev_err(&sch_adapter.dev, "SMBus Timeout!\n"); 116 dev_err(&sch_adapter.dev, "SMBus Timeout!\n");
117 result = -ETIMEDOUT; 117 result = -ETIMEDOUT;
118 } 118 }
diff --git a/drivers/i2c/busses/i2c-mpc.c b/drivers/i2c/busses/i2c-mpc.c
index 4af5c09f0e8f..dd778d7ae047 100644
--- a/drivers/i2c/busses/i2c-mpc.c
+++ b/drivers/i2c/busses/i2c-mpc.c
@@ -164,7 +164,7 @@ static int i2c_wait(struct mpc_i2c *i2c, unsigned timeout, int writing)
164 return 0; 164 return 0;
165} 165}
166 166
167#ifdef CONFIG_PPC_52xx 167#ifdef CONFIG_PPC_MPC52xx
168static const struct mpc_i2c_divider mpc_i2c_dividers_52xx[] = { 168static const struct mpc_i2c_divider mpc_i2c_dividers_52xx[] = {
169 {20, 0x20}, {22, 0x21}, {24, 0x22}, {26, 0x23}, 169 {20, 0x20}, {22, 0x21}, {24, 0x22}, {26, 0x23},
170 {28, 0x24}, {30, 0x01}, {32, 0x25}, {34, 0x02}, 170 {28, 0x24}, {30, 0x01}, {32, 0x25}, {34, 0x02},
@@ -188,7 +188,7 @@ static const struct mpc_i2c_divider mpc_i2c_dividers_52xx[] = {
188 188
189int mpc_i2c_get_fdr_52xx(struct device_node *node, u32 clock, int prescaler) 189int mpc_i2c_get_fdr_52xx(struct device_node *node, u32 clock, int prescaler)
190{ 190{
191 const struct mpc52xx_i2c_divider *div = NULL; 191 const struct mpc_i2c_divider *div = NULL;
192 unsigned int pvr = mfspr(SPRN_PVR); 192 unsigned int pvr = mfspr(SPRN_PVR);
193 u32 divider; 193 u32 divider;
194 int i; 194 int i;
@@ -203,7 +203,7 @@ int mpc_i2c_get_fdr_52xx(struct device_node *node, u32 clock, int prescaler)
203 * We want to choose an FDR/DFSR that generates an I2C bus speed that 203 * We want to choose an FDR/DFSR that generates an I2C bus speed that
204 * is equal to or lower than the requested speed. 204 * is equal to or lower than the requested speed.
205 */ 205 */
206 for (i = 0; i < ARRAY_SIZE(mpc52xx_i2c_dividers); i++) { 206 for (i = 0; i < ARRAY_SIZE(mpc_i2c_dividers_52xx); i++) {
207 div = &mpc_i2c_dividers_52xx[i]; 207 div = &mpc_i2c_dividers_52xx[i];
208 /* Old MPC5200 rev A CPUs do not support the high bits */ 208 /* Old MPC5200 rev A CPUs do not support the high bits */
209 if (div->fdr & 0xc0 && pvr == 0x80822011) 209 if (div->fdr & 0xc0 && pvr == 0x80822011)
@@ -219,20 +219,23 @@ static void mpc_i2c_setclock_52xx(struct device_node *node,
219 struct mpc_i2c *i2c, 219 struct mpc_i2c *i2c,
220 u32 clock, u32 prescaler) 220 u32 clock, u32 prescaler)
221{ 221{
222 int fdr = mpc52xx_i2c_get_fdr(node, clock, prescaler); 222 int ret, fdr;
223
224 ret = mpc_i2c_get_fdr_52xx(node, clock, prescaler);
225 fdr = (ret >= 0) ? ret : 0x3f; /* backward compatibility */
223 226
224 if (fdr < 0)
225 fdr = 0x3f; /* backward compatibility */
226 writeb(fdr & 0xff, i2c->base + MPC_I2C_FDR); 227 writeb(fdr & 0xff, i2c->base + MPC_I2C_FDR);
227 dev_info(i2c->dev, "clock %d Hz (fdr=%d)\n", clock, fdr); 228
229 if (ret >= 0)
230 dev_info(i2c->dev, "clock %d Hz (fdr=%d)\n", clock, fdr);
228} 231}
229#else /* !CONFIG_PPC_52xx */ 232#else /* !CONFIG_PPC_MPC52xx */
230static void mpc_i2c_setclock_52xx(struct device_node *node, 233static void mpc_i2c_setclock_52xx(struct device_node *node,
231 struct mpc_i2c *i2c, 234 struct mpc_i2c *i2c,
232 u32 clock, u32 prescaler) 235 u32 clock, u32 prescaler)
233{ 236{
234} 237}
235#endif /* CONFIG_PPC_52xx*/ 238#endif /* CONFIG_PPC_MPC52xx*/
236 239
237#ifdef CONFIG_FSL_SOC 240#ifdef CONFIG_FSL_SOC
238static const struct mpc_i2c_divider mpc_i2c_dividers_8xxx[] = { 241static const struct mpc_i2c_divider mpc_i2c_dividers_8xxx[] = {
@@ -321,14 +324,17 @@ static void mpc_i2c_setclock_8xxx(struct device_node *node,
321 struct mpc_i2c *i2c, 324 struct mpc_i2c *i2c,
322 u32 clock, u32 prescaler) 325 u32 clock, u32 prescaler)
323{ 326{
324 int fdr = mpc_i2c_get_fdr_8xxx(node, clock, prescaler); 327 int ret, fdr;
328
329 ret = mpc_i2c_get_fdr_8xxx(node, clock, prescaler);
330 fdr = (ret >= 0) ? ret : 0x1031; /* backward compatibility */
325 331
326 if (fdr < 0)
327 fdr = 0x1031; /* backward compatibility */
328 writeb(fdr & 0xff, i2c->base + MPC_I2C_FDR); 332 writeb(fdr & 0xff, i2c->base + MPC_I2C_FDR);
329 writeb((fdr >> 8) & 0xff, i2c->base + MPC_I2C_DFSRR); 333 writeb((fdr >> 8) & 0xff, i2c->base + MPC_I2C_DFSRR);
330 dev_info(i2c->dev, "clock %d Hz (dfsrr=%d fdr=%d)\n", 334
331 clock, fdr >> 8, fdr & 0xff); 335 if (ret >= 0)
336 dev_info(i2c->dev, "clock %d Hz (dfsrr=%d fdr=%d)\n",
337 clock, fdr >> 8, fdr & 0xff);
332} 338}
333 339
334#else /* !CONFIG_FSL_SOC */ 340#else /* !CONFIG_FSL_SOC */
diff --git a/drivers/i2c/busses/i2c-nforce2.c b/drivers/i2c/busses/i2c-nforce2.c
index 2ff4683703a8..ec11d1c4e77b 100644
--- a/drivers/i2c/busses/i2c-nforce2.c
+++ b/drivers/i2c/busses/i2c-nforce2.c
@@ -173,7 +173,7 @@ static int nforce2_check_status(struct i2c_adapter *adap)
173 temp = inb_p(NVIDIA_SMB_STS); 173 temp = inb_p(NVIDIA_SMB_STS);
174 } while ((!temp) && (timeout++ < MAX_TIMEOUT)); 174 } while ((!temp) && (timeout++ < MAX_TIMEOUT));
175 175
176 if (timeout >= MAX_TIMEOUT) { 176 if (timeout > MAX_TIMEOUT) {
177 dev_dbg(&adap->dev, "SMBus Timeout!\n"); 177 dev_dbg(&adap->dev, "SMBus Timeout!\n");
178 if (smbus->can_abort) 178 if (smbus->can_abort)
179 nforce2_abort(adap); 179 nforce2_abort(adap);
diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c
index c1405c8f6ba5..acc7143d9655 100644
--- a/drivers/i2c/busses/i2c-pxa.c
+++ b/drivers/i2c/busses/i2c-pxa.c
@@ -265,10 +265,10 @@ static int i2c_pxa_wait_bus_not_busy(struct pxa_i2c *i2c)
265 show_state(i2c); 265 show_state(i2c);
266 } 266 }
267 267
268 if (timeout <= 0) 268 if (timeout < 0)
269 show_state(i2c); 269 show_state(i2c);
270 270
271 return timeout <= 0 ? I2C_RETRY : 0; 271 return timeout < 0 ? I2C_RETRY : 0;
272} 272}
273 273
274static int i2c_pxa_wait_master(struct pxa_i2c *i2c) 274static int i2c_pxa_wait_master(struct pxa_i2c *i2c)
@@ -612,7 +612,7 @@ static int i2c_pxa_pio_set_master(struct pxa_i2c *i2c)
612 show_state(i2c); 612 show_state(i2c);
613 } 613 }
614 614
615 if (timeout <= 0) { 615 if (timeout < 0) {
616 show_state(i2c); 616 show_state(i2c);
617 dev_err(&i2c->adap.dev, 617 dev_err(&i2c->adap.dev,
618 "i2c_pxa: timeout waiting for bus free\n"); 618 "i2c_pxa: timeout waiting for bus free\n");
diff --git a/drivers/i2c/busses/i2c-sis5595.c b/drivers/i2c/busses/i2c-sis5595.c
index f320ab27da46..139f0c7f12a4 100644
--- a/drivers/i2c/busses/i2c-sis5595.c
+++ b/drivers/i2c/busses/i2c-sis5595.c
@@ -256,7 +256,7 @@ static int sis5595_transaction(struct i2c_adapter *adap)
256 } while (!(temp & 0x40) && (timeout++ < MAX_TIMEOUT)); 256 } while (!(temp & 0x40) && (timeout++ < MAX_TIMEOUT));
257 257
258 /* If the SMBus is still busy, we give up */ 258 /* If the SMBus is still busy, we give up */
259 if (timeout >= MAX_TIMEOUT) { 259 if (timeout > MAX_TIMEOUT) {
260 dev_dbg(&adap->dev, "SMBus Timeout!\n"); 260 dev_dbg(&adap->dev, "SMBus Timeout!\n");
261 result = -ETIMEDOUT; 261 result = -ETIMEDOUT;
262 } 262 }
diff --git a/drivers/i2c/busses/i2c-sis630.c b/drivers/i2c/busses/i2c-sis630.c
index 50c3610e6028..70ca41e90e58 100644
--- a/drivers/i2c/busses/i2c-sis630.c
+++ b/drivers/i2c/busses/i2c-sis630.c
@@ -173,7 +173,7 @@ static int sis630_transaction_wait(struct i2c_adapter *adap, int size)
173 } while (!(temp & 0x0e) && (timeout++ < MAX_TIMEOUT)); 173 } while (!(temp & 0x0e) && (timeout++ < MAX_TIMEOUT));
174 174
175 /* If the SMBus is still busy, we give up */ 175 /* If the SMBus is still busy, we give up */
176 if (timeout >= MAX_TIMEOUT) { 176 if (timeout > MAX_TIMEOUT) {
177 dev_dbg(&adap->dev, "SMBus Timeout!\n"); 177 dev_dbg(&adap->dev, "SMBus Timeout!\n");
178 result = -ETIMEDOUT; 178 result = -ETIMEDOUT;
179 } 179 }
diff --git a/drivers/i2c/busses/i2c-sis96x.c b/drivers/i2c/busses/i2c-sis96x.c
index 7e1594b40579..8295885b2fdb 100644
--- a/drivers/i2c/busses/i2c-sis96x.c
+++ b/drivers/i2c/busses/i2c-sis96x.c
@@ -132,7 +132,7 @@ static int sis96x_transaction(int size)
132 } while (!(temp & 0x0e) && (timeout++ < MAX_TIMEOUT)); 132 } while (!(temp & 0x0e) && (timeout++ < MAX_TIMEOUT));
133 133
134 /* If the SMBus is still busy, we give up */ 134 /* If the SMBus is still busy, we give up */
135 if (timeout >= MAX_TIMEOUT) { 135 if (timeout > MAX_TIMEOUT) {
136 dev_dbg(&sis96x_adapter.dev, "SMBus Timeout! (0x%02x)\n", temp); 136 dev_dbg(&sis96x_adapter.dev, "SMBus Timeout! (0x%02x)\n", temp);
137 result = -ETIMEDOUT; 137 result = -ETIMEDOUT;
138 } 138 }
diff --git a/drivers/ide/cs5536.c b/drivers/ide/cs5536.c
index 353a35bbba63..0332a95eefd4 100644
--- a/drivers/ide/cs5536.c
+++ b/drivers/ide/cs5536.c
@@ -236,6 +236,7 @@ static const struct ide_dma_ops cs5536_dma_ops = {
236 .dma_test_irq = ide_dma_test_irq, 236 .dma_test_irq = ide_dma_test_irq,
237 .dma_lost_irq = ide_dma_lost_irq, 237 .dma_lost_irq = ide_dma_lost_irq,
238 .dma_timer_expiry = ide_dma_sff_timer_expiry, 238 .dma_timer_expiry = ide_dma_sff_timer_expiry,
239 .dma_sff_read_status = ide_dma_sff_read_status,
239}; 240};
240 241
241static const struct ide_port_info cs5536_info = { 242static const struct ide_port_info cs5536_info = {
diff --git a/drivers/ide/hpt366.c b/drivers/ide/hpt366.c
index a0eb87f59134..0feb66c720e1 100644
--- a/drivers/ide/hpt366.c
+++ b/drivers/ide/hpt366.c
@@ -3,7 +3,7 @@
3 * Portions Copyright (C) 2001 Sun Microsystems, Inc. 3 * Portions Copyright (C) 2001 Sun Microsystems, Inc.
4 * Portions Copyright (C) 2003 Red Hat Inc 4 * Portions Copyright (C) 2003 Red Hat Inc
5 * Portions Copyright (C) 2007 Bartlomiej Zolnierkiewicz 5 * Portions Copyright (C) 2007 Bartlomiej Zolnierkiewicz
6 * Portions Copyright (C) 2005-2008 MontaVista Software, Inc. 6 * Portions Copyright (C) 2005-2009 MontaVista Software, Inc.
7 * 7 *
8 * Thanks to HighPoint Technologies for their assistance, and hardware. 8 * Thanks to HighPoint Technologies for their assistance, and hardware.
9 * Special Thanks to Jon Burchmore in SanDiego for the deep pockets, his 9 * Special Thanks to Jon Burchmore in SanDiego for the deep pockets, his
@@ -114,6 +114,8 @@
114 * the register setting lists into the table indexed by the clock selected 114 * the register setting lists into the table indexed by the clock selected
115 * - set the correct hwif->ultra_mask for each individual chip 115 * - set the correct hwif->ultra_mask for each individual chip
116 * - add Ultra and MW DMA mode filtering for the HPT37[24] based SATA cards 116 * - add Ultra and MW DMA mode filtering for the HPT37[24] based SATA cards
117 * - stop resetting HPT370's state machine before each DMA transfer as that has
118 * caused more harm than good
117 * Sergei Shtylyov, <sshtylyov@ru.mvista.com> or <source@mvista.com> 119 * Sergei Shtylyov, <sshtylyov@ru.mvista.com> or <source@mvista.com>
118 */ 120 */
119 121
@@ -133,7 +135,7 @@
133#define DRV_NAME "hpt366" 135#define DRV_NAME "hpt366"
134 136
135/* various tuning parameters */ 137/* various tuning parameters */
136#define HPT_RESET_STATE_ENGINE 138#undef HPT_RESET_STATE_ENGINE
137#undef HPT_DELAY_INTERRUPT 139#undef HPT_DELAY_INTERRUPT
138 140
139static const char *quirk_drives[] = { 141static const char *quirk_drives[] = {
@@ -808,7 +810,7 @@ static void hpt370_irq_timeout(ide_drive_t *drive)
808 /* get DMA command mode */ 810 /* get DMA command mode */
809 dma_cmd = inb(hwif->dma_base + ATA_DMA_CMD); 811 dma_cmd = inb(hwif->dma_base + ATA_DMA_CMD);
810 /* stop DMA */ 812 /* stop DMA */
811 outb(dma_cmd & ~0x1, hwif->dma_base + ATA_DMA_CMD); 813 outb(dma_cmd & ~ATA_DMA_START, hwif->dma_base + ATA_DMA_CMD);
812 hpt370_clear_engine(drive); 814 hpt370_clear_engine(drive);
813} 815}
814 816
@@ -825,11 +827,11 @@ static int hpt370_dma_end(ide_drive_t *drive)
825 ide_hwif_t *hwif = drive->hwif; 827 ide_hwif_t *hwif = drive->hwif;
826 u8 dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS); 828 u8 dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS);
827 829
828 if (dma_stat & 0x01) { 830 if (dma_stat & ATA_DMA_ACTIVE) {
829 /* wait a little */ 831 /* wait a little */
830 udelay(20); 832 udelay(20);
831 dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS); 833 dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS);
832 if (dma_stat & 0x01) 834 if (dma_stat & ATA_DMA_ACTIVE)
833 hpt370_irq_timeout(drive); 835 hpt370_irq_timeout(drive);
834 } 836 }
835 return ide_dma_end(drive); 837 return ide_dma_end(drive);
@@ -851,7 +853,7 @@ static int hpt374_dma_test_irq(ide_drive_t *drive)
851 853
852 dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS); 854 dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS);
853 /* return 1 if INTR asserted */ 855 /* return 1 if INTR asserted */
854 if (dma_stat & 4) 856 if (dma_stat & ATA_DMA_INTR)
855 return 1; 857 return 1;
856 858
857 return 0; 859 return 0;
diff --git a/drivers/ide/icside.c b/drivers/ide/icside.c
index 4e16ce68b063..36da913cc553 100644
--- a/drivers/ide/icside.c
+++ b/drivers/ide/icside.c
@@ -466,7 +466,7 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)
466 struct ide_host *host; 466 struct ide_host *host;
467 unsigned int sel = 0; 467 unsigned int sel = 0;
468 int ret; 468 int ret;
469 hw_regs_t hw[2], *hws[] = { &hw[0], NULL, NULL, NULL }; 469 hw_regs_t hw[2], *hws[] = { &hw[0], &hw[1], NULL, NULL };
470 struct ide_port_info d = icside_v6_port_info; 470 struct ide_port_info d = icside_v6_port_info;
471 471
472 ioc_base = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0); 472 ioc_base = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0);
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c
index 3aec19d1fdfc..925eb9e245d1 100644
--- a/drivers/ide/ide-cd.c
+++ b/drivers/ide/ide-cd.c
@@ -312,7 +312,6 @@ static int cdrom_decode_status(ide_drive_t *drive, u8 stat)
312 ide_hwif_t *hwif = drive->hwif; 312 ide_hwif_t *hwif = drive->hwif;
313 struct request *rq = hwif->rq; 313 struct request *rq = hwif->rq;
314 int err, sense_key, do_end_request = 0; 314 int err, sense_key, do_end_request = 0;
315 u8 quiet = rq->cmd_flags & REQ_QUIET;
316 315
317 /* get the IDE error register */ 316 /* get the IDE error register */
318 err = ide_read_error(drive); 317 err = ide_read_error(drive);
@@ -347,7 +346,7 @@ static int cdrom_decode_status(ide_drive_t *drive, u8 stat)
347 } else { 346 } else {
348 cdrom_saw_media_change(drive); 347 cdrom_saw_media_change(drive);
349 348
350 if (blk_fs_request(rq) && !quiet) 349 if (blk_fs_request(rq) && !blk_rq_quiet(rq))
351 printk(KERN_ERR PFX "%s: tray open\n", 350 printk(KERN_ERR PFX "%s: tray open\n",
352 drive->name); 351 drive->name);
353 } 352 }
@@ -382,7 +381,7 @@ static int cdrom_decode_status(ide_drive_t *drive, u8 stat)
382 * No point in retrying after an illegal request or data 381 * No point in retrying after an illegal request or data
383 * protect error. 382 * protect error.
384 */ 383 */
385 if (!quiet) 384 if (!blk_rq_quiet(rq))
386 ide_dump_status(drive, "command error", stat); 385 ide_dump_status(drive, "command error", stat);
387 do_end_request = 1; 386 do_end_request = 1;
388 break; 387 break;
@@ -391,14 +390,14 @@ static int cdrom_decode_status(ide_drive_t *drive, u8 stat)
391 * No point in re-trying a zillion times on a bad sector. 390 * No point in re-trying a zillion times on a bad sector.
392 * If we got here the error is not correctable. 391 * If we got here the error is not correctable.
393 */ 392 */
394 if (!quiet) 393 if (!blk_rq_quiet(rq))
395 ide_dump_status(drive, "media error " 394 ide_dump_status(drive, "media error "
396 "(bad sector)", stat); 395 "(bad sector)", stat);
397 do_end_request = 1; 396 do_end_request = 1;
398 break; 397 break;
399 case BLANK_CHECK: 398 case BLANK_CHECK:
400 /* disk appears blank? */ 399 /* disk appears blank? */
401 if (!quiet) 400 if (!blk_rq_quiet(rq))
402 ide_dump_status(drive, "media error (blank)", 401 ide_dump_status(drive, "media error (blank)",
403 stat); 402 stat);
404 do_end_request = 1; 403 do_end_request = 1;
@@ -609,7 +608,7 @@ static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive)
609 struct request *rq = hwif->rq; 608 struct request *rq = hwif->rq;
610 ide_expiry_t *expiry = NULL; 609 ide_expiry_t *expiry = NULL;
611 int dma_error = 0, dma, thislen, uptodate = 0; 610 int dma_error = 0, dma, thislen, uptodate = 0;
612 int write = (rq_data_dir(rq) == WRITE) ? 1 : 0, rc, nsectors; 611 int write = (rq_data_dir(rq) == WRITE) ? 1 : 0, rc = 0, nsectors;
613 int sense = blk_sense_request(rq); 612 int sense = blk_sense_request(rq);
614 unsigned int timeout; 613 unsigned int timeout;
615 u16 len; 614 u16 len;
diff --git a/drivers/ide/ide-gd.c b/drivers/ide/ide-gd.c
index 1aebdf1a4f58..4b6b71e2cdf5 100644
--- a/drivers/ide/ide-gd.c
+++ b/drivers/ide/ide-gd.c
@@ -7,6 +7,7 @@
7#include <linux/mutex.h> 7#include <linux/mutex.h>
8#include <linux/ide.h> 8#include <linux/ide.h>
9#include <linux/hdreg.h> 9#include <linux/hdreg.h>
10#include <linux/dmi.h>
10 11
11#if !defined(CONFIG_DEBUG_BLOCK_EXT_DEVT) 12#if !defined(CONFIG_DEBUG_BLOCK_EXT_DEVT)
12#define IDE_DISK_MINORS (1 << PARTN_BITS) 13#define IDE_DISK_MINORS (1 << PARTN_BITS)
@@ -99,6 +100,19 @@ static void ide_gd_resume(ide_drive_t *drive)
99 (void)drive->disk_ops->get_capacity(drive); 100 (void)drive->disk_ops->get_capacity(drive);
100} 101}
101 102
103static const struct dmi_system_id ide_coldreboot_table[] = {
104 {
105 /* Acer TravelMate 66x cuts power during reboot */
106 .ident = "Acer TravelMate 660",
107 .matches = {
108 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
109 DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 660"),
110 },
111 },
112
113 { } /* terminate list */
114};
115
102static void ide_gd_shutdown(ide_drive_t *drive) 116static void ide_gd_shutdown(ide_drive_t *drive)
103{ 117{
104#ifdef CONFIG_ALPHA 118#ifdef CONFIG_ALPHA
@@ -115,7 +129,8 @@ static void ide_gd_shutdown(ide_drive_t *drive)
115 the disk to expire its write cache. */ 129 the disk to expire its write cache. */
116 if (system_state != SYSTEM_POWER_OFF) { 130 if (system_state != SYSTEM_POWER_OFF) {
117#else 131#else
118 if (system_state == SYSTEM_RESTART) { 132 if (system_state == SYSTEM_RESTART &&
133 !dmi_check_system(ide_coldreboot_table)) {
119#endif 134#endif
120 drive->disk_ops->flush(drive); 135 drive->disk_ops->flush(drive);
121 return; 136 return;
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
index 2ae02b8d7f8e..35dc38d3b2c5 100644
--- a/drivers/ide/ide-io.c
+++ b/drivers/ide/ide-io.c
@@ -102,11 +102,14 @@ void ide_complete_cmd(ide_drive_t *drive, struct ide_cmd *cmd, u8 stat, u8 err)
102 drive->dev_flags |= IDE_DFLAG_PARKED; 102 drive->dev_flags |= IDE_DFLAG_PARKED;
103 } 103 }
104 104
105 if (rq && rq->cmd_type == REQ_TYPE_ATA_TASKFILE) 105 if (rq && rq->cmd_type == REQ_TYPE_ATA_TASKFILE) {
106 memcpy(rq->special, cmd, sizeof(*cmd)); 106 struct ide_cmd *orig_cmd = rq->special;
107 107
108 if (cmd->tf_flags & IDE_TFLAG_DYN) 108 if (cmd->tf_flags & IDE_TFLAG_DYN)
109 kfree(cmd); 109 kfree(orig_cmd);
110 else
111 memcpy(orig_cmd, cmd, sizeof(*cmd));
112 }
110} 113}
111 114
112/* obsolete, blk_rq_bytes() should be used instead */ 115/* obsolete, blk_rq_bytes() should be used instead */
diff --git a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c
index cb942a9b580f..3a53e0834cf7 100644
--- a/drivers/ide/ide-tape.c
+++ b/drivers/ide/ide-tape.c
@@ -614,12 +614,6 @@ static ide_startstop_t ide_tape_issue_pc(ide_drive_t *drive,
614{ 614{
615 idetape_tape_t *tape = drive->driver_data; 615 idetape_tape_t *tape = drive->driver_data;
616 616
617 if (drive->pc->c[0] == REQUEST_SENSE &&
618 pc->c[0] == REQUEST_SENSE) {
619 printk(KERN_ERR "ide-tape: possible ide-tape.c bug - "
620 "Two request sense in serial were issued\n");
621 }
622
623 if (drive->failed_pc == NULL && pc->c[0] != REQUEST_SENSE) 617 if (drive->failed_pc == NULL && pc->c[0] != REQUEST_SENSE)
624 drive->failed_pc = pc; 618 drive->failed_pc = pc;
625 619
diff --git a/drivers/ide/palm_bk3710.c b/drivers/ide/palm_bk3710.c
index c7acca0b8733..09d813d313f4 100644
--- a/drivers/ide/palm_bk3710.c
+++ b/drivers/ide/palm_bk3710.c
@@ -39,27 +39,12 @@
39/* Primary Control Offset */ 39/* Primary Control Offset */
40#define IDE_PALM_ATA_PRI_CTL_OFFSET 0x3F6 40#define IDE_PALM_ATA_PRI_CTL_OFFSET 0x3F6
41 41
42/*
43 * PalmChip 3710 IDE Controller UDMA timing structure Definition
44 */
45struct palm_bk3710_udmatiming {
46 unsigned int rptime; /* Ready to pause time */
47 unsigned int cycletime; /* Cycle Time */
48};
49
50#define BK3710_BMICP 0x00 42#define BK3710_BMICP 0x00
51#define BK3710_BMISP 0x02 43#define BK3710_BMISP 0x02
52#define BK3710_BMIDTP 0x04 44#define BK3710_BMIDTP 0x04
53#define BK3710_BMICS 0x08
54#define BK3710_BMISS 0x0A
55#define BK3710_BMIDTS 0x0C
56#define BK3710_IDETIMP 0x40 45#define BK3710_IDETIMP 0x40
57#define BK3710_IDETIMS 0x42
58#define BK3710_SIDETIM 0x44
59#define BK3710_SLEWCTL 0x45
60#define BK3710_IDESTATUS 0x47 46#define BK3710_IDESTATUS 0x47
61#define BK3710_UDMACTL 0x48 47#define BK3710_UDMACTL 0x48
62#define BK3710_UDMATIM 0x4A
63#define BK3710_MISCCTL 0x50 48#define BK3710_MISCCTL 0x50
64#define BK3710_REGSTB 0x54 49#define BK3710_REGSTB 0x54
65#define BK3710_REGRCVR 0x58 50#define BK3710_REGRCVR 0x58
@@ -71,17 +56,22 @@ struct palm_bk3710_udmatiming {
71#define BK3710_UDMATRP 0x70 56#define BK3710_UDMATRP 0x70
72#define BK3710_UDMAENV 0x74 57#define BK3710_UDMAENV 0x74
73#define BK3710_IORDYTMP 0x78 58#define BK3710_IORDYTMP 0x78
74#define BK3710_IORDYTMS 0x7C
75 59
76static unsigned ideclk_period; /* in nanoseconds */ 60static unsigned ideclk_period; /* in nanoseconds */
77 61
62struct palm_bk3710_udmatiming {
63 unsigned int rptime; /* tRP -- Ready to pause time (nsec) */
64 unsigned int cycletime; /* tCYCTYP2/2 -- avg Cycle Time (nsec) */
65 /* tENV is always a minimum of 20 nsec */
66};
67
78static const struct palm_bk3710_udmatiming palm_bk3710_udmatimings[6] = { 68static const struct palm_bk3710_udmatiming palm_bk3710_udmatimings[6] = {
79 {160, 240}, /* UDMA Mode 0 */ 69 { 160, 240 / 2 }, /* UDMA Mode 0 */
80 {125, 160}, /* UDMA Mode 1 */ 70 { 125, 160 / 2 }, /* UDMA Mode 1 */
81 {100, 120}, /* UDMA Mode 2 */ 71 { 100, 120 / 2 }, /* UDMA Mode 2 */
82 {100, 90}, /* UDMA Mode 3 */ 72 { 100, 90 / 2 }, /* UDMA Mode 3 */
83 {100, 60}, /* UDMA Mode 4 */ 73 { 100, 60 / 2 }, /* UDMA Mode 4 */
84 {85, 40}, /* UDMA Mode 5 */ 74 { 85, 40 / 2 }, /* UDMA Mode 5 */
85}; 75};
86 76
87static void palm_bk3710_setudmamode(void __iomem *base, unsigned int dev, 77static void palm_bk3710_setudmamode(void __iomem *base, unsigned int dev,
@@ -98,11 +88,6 @@ static void palm_bk3710_setudmamode(void __iomem *base, unsigned int dev,
98 trp = DIV_ROUND_UP(palm_bk3710_udmatimings[mode].rptime, 88 trp = DIV_ROUND_UP(palm_bk3710_udmatimings[mode].rptime,
99 ideclk_period) - 1; 89 ideclk_period) - 1;
100 90
101 /* udmatim Register */
102 val16 = readw(base + BK3710_UDMATIM) & (dev ? 0xFF0F : 0xFFF0);
103 val16 |= (mode << (dev ? 4 : 0));
104 writew(val16, base + BK3710_UDMATIM);
105
106 /* udmastb Ultra DMA Access Strobe Width */ 91 /* udmastb Ultra DMA Access Strobe Width */
107 val32 = readl(base + BK3710_UDMASTB) & (0xFF << (dev ? 0 : 8)); 92 val32 = readl(base + BK3710_UDMASTB) & (0xFF << (dev ? 0 : 8));
108 val32 |= (t0 << (dev ? 8 : 0)); 93 val32 |= (t0 << (dev ? 8 : 0));
@@ -163,10 +148,11 @@ static void palm_bk3710_setpiomode(void __iomem *base, ide_drive_t *mate,
163 u32 val32; 148 u32 val32;
164 struct ide_timing *t; 149 struct ide_timing *t;
165 150
151 t = ide_timing_find_mode(XFER_PIO_0 + mode);
152
166 /* PIO Data Setup */ 153 /* PIO Data Setup */
167 t0 = DIV_ROUND_UP(cycletime, ideclk_period); 154 t0 = DIV_ROUND_UP(cycletime, ideclk_period);
168 t2 = DIV_ROUND_UP(ide_timing_find_mode(XFER_PIO_0 + mode)->active, 155 t2 = DIV_ROUND_UP(t->active, ideclk_period);
169 ideclk_period);
170 156
171 t2i = t0 - t2 - 1; 157 t2i = t0 - t2 - 1;
172 t2 -= 1; 158 t2 -= 1;
@@ -187,7 +173,6 @@ static void palm_bk3710_setpiomode(void __iomem *base, ide_drive_t *mate,
187 } 173 }
188 174
189 /* TASKFILE Setup */ 175 /* TASKFILE Setup */
190 t = ide_timing_find_mode(XFER_PIO_0 + mode);
191 t0 = DIV_ROUND_UP(t->cyc8b, ideclk_period); 176 t0 = DIV_ROUND_UP(t->cyc8b, ideclk_period);
192 t2 = DIV_ROUND_UP(t->act8b, ideclk_period); 177 t2 = DIV_ROUND_UP(t->act8b, ideclk_period);
193 178
@@ -236,42 +221,23 @@ static void palm_bk3710_set_pio_mode(ide_drive_t *drive, u8 pio)
236static void __devinit palm_bk3710_chipinit(void __iomem *base) 221static void __devinit palm_bk3710_chipinit(void __iomem *base)
237{ 222{
238 /* 223 /*
239 * enable the reset_en of ATA controller so that when ata signals 224 * REVISIT: the ATA reset signal needs to be managed through a
240 * are brought out, by writing into device config. at that 225 * GPIO, which means it should come from platform_data. Until
241 * time por_n signal should not be 'Z' and have a stable value. 226 * we get and use such information, we have to trust that things
227 * have been reset before we get here.
242 */ 228 */
243 writel(0x0300, base + BK3710_MISCCTL);
244
245 /* wait for some time and deassert the reset of ATA Device. */
246 mdelay(100);
247
248 /* Deassert the Reset */
249 writel(0x0200, base + BK3710_MISCCTL);
250 229
251 /* 230 /*
252 * Program the IDETIMP Register Value based on the following assumptions 231 * Program the IDETIMP Register Value based on the following assumptions
253 * 232 *
254 * (ATA_IDETIMP_IDEEN , ENABLE ) | 233 * (ATA_IDETIMP_IDEEN , ENABLE ) |
255 * (ATA_IDETIMP_SLVTIMEN , DISABLE) |
256 * (ATA_IDETIMP_RDYSMPL , 70NS) |
257 * (ATA_IDETIMP_RDYRCVRY , 50NS) |
258 * (ATA_IDETIMP_DMAFTIM1 , PIOCOMP) |
259 * (ATA_IDETIMP_PREPOST1 , DISABLE) | 234 * (ATA_IDETIMP_PREPOST1 , DISABLE) |
260 * (ATA_IDETIMP_RDYSEN1 , DISABLE) |
261 * (ATA_IDETIMP_PIOFTIM1 , DISABLE) |
262 * (ATA_IDETIMP_DMAFTIM0 , PIOCOMP) |
263 * (ATA_IDETIMP_PREPOST0 , DISABLE) | 235 * (ATA_IDETIMP_PREPOST0 , DISABLE) |
264 * (ATA_IDETIMP_RDYSEN0 , DISABLE) | 236 *
265 * (ATA_IDETIMP_PIOFTIM0 , DISABLE) 237 * DM6446 silicon rev 2.1 and earlier have no observed net benefit
266 */ 238 * from enabling prefetch/postwrite.
267 writew(0xB388, base + BK3710_IDETIMP);
268
269 /*
270 * Configure SIDETIM Register
271 * (ATA_SIDETIM_RDYSMPS1 ,120NS ) |
272 * (ATA_SIDETIM_RDYRCYS1 ,120NS )
273 */ 239 */
274 writeb(0, base + BK3710_SIDETIM); 240 writew(BIT(15), base + BK3710_IDETIMP);
275 241
276 /* 242 /*
277 * UDMACTL Ultra-ATA DMA Control 243 * UDMACTL Ultra-ATA DMA Control
@@ -283,11 +249,11 @@ static void __devinit palm_bk3710_chipinit(void __iomem *base)
283 249
284 /* 250 /*
285 * MISCCTL Miscellaneous Conrol Register 251 * MISCCTL Miscellaneous Conrol Register
286 * (ATA_MISCCTL_RSTMODEP , 1) | 252 * (ATA_MISCCTL_HWNHLD1P , 1 cycle)
287 * (ATA_MISCCTL_RESETP , 0) | 253 * (ATA_MISCCTL_HWNHLD0P , 1 cycle)
288 * (ATA_MISCCTL_TIMORIDE , 1) 254 * (ATA_MISCCTL_TIMORIDE , 1)
289 */ 255 */
290 writel(0x201, base + BK3710_MISCCTL); 256 writel(0x001, base + BK3710_MISCCTL);
291 257
292 /* 258 /*
293 * IORDYTMP IORDY Timer for Primary Register 259 * IORDYTMP IORDY Timer for Primary Register
@@ -357,10 +323,9 @@ static int __init palm_bk3710_probe(struct platform_device *pdev)
357 323
358 clk_enable(clk); 324 clk_enable(clk);
359 rate = clk_get_rate(clk); 325 rate = clk_get_rate(clk);
360 ideclk_period = 1000000000UL / rate;
361 326
362 /* Register the IDE interface with Linux ATA Interface */ 327 /* NOTE: round *down* to meet minimum timings; we count in clocks */
363 memset(&hw, 0, sizeof(hw)); 328 ideclk_period = 1000000000UL / rate;
364 329
365 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 330 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
366 if (mem == NULL) { 331 if (mem == NULL) {
@@ -390,6 +355,7 @@ static int __init palm_bk3710_probe(struct platform_device *pdev)
390 /* Configure the Palm Chip controller */ 355 /* Configure the Palm Chip controller */
391 palm_bk3710_chipinit(base); 356 palm_bk3710_chipinit(base);
392 357
358 memset(&hw, 0, sizeof(hw));
393 for (i = 0; i < IDE_NR_PORTS - 2; i++) 359 for (i = 0; i < IDE_NR_PORTS - 2; i++)
394 hw.io_ports_array[i] = (unsigned long) 360 hw.io_ports_array[i] = (unsigned long)
395 (base + IDE_PALM_ATA_PRI_REG_OFFSET + i); 361 (base + IDE_PALM_ATA_PRI_REG_OFFSET + i);
@@ -402,6 +368,7 @@ static int __init palm_bk3710_probe(struct platform_device *pdev)
402 palm_bk3710_port_info.udma_mask = rate < 100000000 ? ATA_UDMA4 : 368 palm_bk3710_port_info.udma_mask = rate < 100000000 ? ATA_UDMA4 :
403 ATA_UDMA5; 369 ATA_UDMA5;
404 370
371 /* Register the IDE interface with Linux */
405 rc = ide_host_add(&palm_bk3710_port_info, hws, NULL); 372 rc = ide_host_add(&palm_bk3710_port_info, hws, NULL);
406 if (rc) 373 if (rc)
407 goto out; 374 goto out;
diff --git a/drivers/ide/piix.c b/drivers/ide/piix.c
index 2aa699933064..69860dea3820 100644
--- a/drivers/ide/piix.c
+++ b/drivers/ide/piix.c
@@ -263,6 +263,7 @@ static const struct ich_laptop ich_laptop[] = {
263 { 0x24CA, 0x1025, 0x003d }, /* ICH4 on ACER TM290 */ 263 { 0x24CA, 0x1025, 0x003d }, /* ICH4 on ACER TM290 */
264 { 0x266F, 0x1025, 0x0066 }, /* ICH6 on ACER Aspire 1694WLMi */ 264 { 0x266F, 0x1025, 0x0066 }, /* ICH6 on ACER Aspire 1694WLMi */
265 { 0x2653, 0x1043, 0x82D8 }, /* ICH6M on Asus Eee 701 */ 265 { 0x2653, 0x1043, 0x82D8 }, /* ICH6M on Asus Eee 701 */
266 { 0x27df, 0x104d, 0x900e }, /* ICH7 on Sony TZ-90 */
266 /* end marker */ 267 /* end marker */
267 { 0, } 268 { 0, }
268}; 269};
diff --git a/drivers/ide/pmac.c b/drivers/ide/pmac.c
index 052b9bf1f8fb..f76e4e6b408f 100644
--- a/drivers/ide/pmac.c
+++ b/drivers/ide/pmac.c
@@ -1682,7 +1682,7 @@ static int __devinit pmac_ide_init_dma(ide_hwif_t *hwif,
1682 * The +2 is +1 for the stop command and +1 to allow for 1682 * The +2 is +1 for the stop command and +1 to allow for
1683 * aligning the start address to a multiple of 16 bytes. 1683 * aligning the start address to a multiple of 16 bytes.
1684 */ 1684 */
1685 pmif->dma_table_cpu = (struct dbdma_cmd*)pci_alloc_consistent( 1685 pmif->dma_table_cpu = pci_alloc_consistent(
1686 dev, 1686 dev,
1687 (MAX_DCMDS + 2) * sizeof(struct dbdma_cmd), 1687 (MAX_DCMDS + 2) * sizeof(struct dbdma_cmd),
1688 &hwif->dmatable_dma); 1688 &hwif->dmatable_dma);
diff --git a/drivers/infiniband/hw/cxgb3/cxio_hal.c b/drivers/infiniband/hw/cxgb3/cxio_hal.c
index 8d71086f5a1c..62f9cf2f94ec 100644
--- a/drivers/infiniband/hw/cxgb3/cxio_hal.c
+++ b/drivers/infiniband/hw/cxgb3/cxio_hal.c
@@ -410,6 +410,7 @@ int cxio_flush_sq(struct t3_wq *wq, struct t3_cq *cq, int count)
410 ptr = wq->sq_rptr + count; 410 ptr = wq->sq_rptr + count;
411 sqp = wq->sq + Q_PTR2IDX(ptr, wq->sq_size_log2); 411 sqp = wq->sq + Q_PTR2IDX(ptr, wq->sq_size_log2);
412 while (ptr != wq->sq_wptr) { 412 while (ptr != wq->sq_wptr) {
413 sqp->signaled = 0;
413 insert_sq_cqe(wq, cq, sqp); 414 insert_sq_cqe(wq, cq, sqp);
414 ptr++; 415 ptr++;
415 sqp = wq->sq + Q_PTR2IDX(ptr, wq->sq_size_log2); 416 sqp = wq->sq + Q_PTR2IDX(ptr, wq->sq_size_log2);
diff --git a/drivers/infiniband/hw/cxgb3/iwch_cm.c b/drivers/infiniband/hw/cxgb3/iwch_cm.c
index fef3f1ae7225..52d7bb0c2a12 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_cm.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_cm.c
@@ -1830,6 +1830,10 @@ int iwch_accept_cr(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
1830 ep->com.rpl_err = 0; 1830 ep->com.rpl_err = 0;
1831 ep->ird = conn_param->ird; 1831 ep->ird = conn_param->ird;
1832 ep->ord = conn_param->ord; 1832 ep->ord = conn_param->ord;
1833
1834 if (peer2peer && ep->ird == 0)
1835 ep->ird = 1;
1836
1833 PDBG("%s %d ird %d ord %d\n", __func__, __LINE__, ep->ird, ep->ord); 1837 PDBG("%s %d ird %d ord %d\n", __func__, __LINE__, ep->ird, ep->ord);
1834 1838
1835 get_ep(&ep->com); 1839 get_ep(&ep->com);
@@ -1915,6 +1919,10 @@ int iwch_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
1915 conn_param->private_data, ep->plen); 1919 conn_param->private_data, ep->plen);
1916 ep->ird = conn_param->ird; 1920 ep->ird = conn_param->ird;
1917 ep->ord = conn_param->ord; 1921 ep->ord = conn_param->ord;
1922
1923 if (peer2peer && ep->ord == 0)
1924 ep->ord = 1;
1925
1918 ep->com.tdev = h->rdev.t3cdev_p; 1926 ep->com.tdev = h->rdev.t3cdev_p;
1919 1927
1920 cm_id->add_ref(cm_id); 1928 cm_id->add_ref(cm_id);
diff --git a/drivers/infiniband/hw/cxgb3/iwch_qp.c b/drivers/infiniband/hw/cxgb3/iwch_qp.c
index 2f546a625330..27bbdc8e773a 100644
--- a/drivers/infiniband/hw/cxgb3/iwch_qp.c
+++ b/drivers/infiniband/hw/cxgb3/iwch_qp.c
@@ -1069,7 +1069,6 @@ int iwch_modify_qp(struct iwch_dev *rhp, struct iwch_qp *qhp,
1069 goto out; 1069 goto out;
1070 } 1070 }
1071 qhp->attr.state = IWCH_QP_STATE_IDLE; 1071 qhp->attr.state = IWCH_QP_STATE_IDLE;
1072 memset(&qhp->attr, 0, sizeof(qhp->attr));
1073 break; 1072 break;
1074 case IWCH_QP_STATE_TERMINATE: 1073 case IWCH_QP_STATE_TERMINATE:
1075 if (!internal) { 1074 if (!internal) {
diff --git a/drivers/infiniband/hw/ipath/ipath_fs.c b/drivers/infiniband/hw/ipath/ipath_fs.c
index 8dc2bb781605..b3684060465e 100644
--- a/drivers/infiniband/hw/ipath/ipath_fs.c
+++ b/drivers/infiniband/hw/ipath/ipath_fs.c
@@ -347,7 +347,7 @@ static int ipathfs_fill_super(struct super_block *sb, void *data,
347 spin_unlock_irqrestore(&ipath_devs_lock, flags); 347 spin_unlock_irqrestore(&ipath_devs_lock, flags);
348 ret = create_device_files(sb, dd); 348 ret = create_device_files(sb, dd);
349 if (ret) { 349 if (ret) {
350 deactivate_super(sb); 350 deactivate_locked_super(sb);
351 goto bail; 351 goto bail;
352 } 352 }
353 spin_lock_irqsave(&ipath_devs_lock, flags); 353 spin_lock_irqsave(&ipath_devs_lock, flags);
diff --git a/drivers/infiniband/hw/mlx4/mlx4_ib.h b/drivers/infiniband/hw/mlx4/mlx4_ib.h
index 9974e886b8de..8a7dd6795fa0 100644
--- a/drivers/infiniband/hw/mlx4/mlx4_ib.h
+++ b/drivers/infiniband/hw/mlx4/mlx4_ib.h
@@ -86,6 +86,7 @@ struct mlx4_ib_mr {
86 86
87struct mlx4_ib_fast_reg_page_list { 87struct mlx4_ib_fast_reg_page_list {
88 struct ib_fast_reg_page_list ibfrpl; 88 struct ib_fast_reg_page_list ibfrpl;
89 __be64 *mapped_page_list;
89 dma_addr_t map; 90 dma_addr_t map;
90}; 91};
91 92
diff --git a/drivers/infiniband/hw/mlx4/mr.c b/drivers/infiniband/hw/mlx4/mr.c
index 8e4d26d56a95..8f3666b20ea4 100644
--- a/drivers/infiniband/hw/mlx4/mr.c
+++ b/drivers/infiniband/hw/mlx4/mr.c
@@ -231,7 +231,11 @@ struct ib_fast_reg_page_list *mlx4_ib_alloc_fast_reg_page_list(struct ib_device
231 if (!mfrpl) 231 if (!mfrpl)
232 return ERR_PTR(-ENOMEM); 232 return ERR_PTR(-ENOMEM);
233 233
234 mfrpl->ibfrpl.page_list = dma_alloc_coherent(&dev->dev->pdev->dev, 234 mfrpl->ibfrpl.page_list = kmalloc(size, GFP_KERNEL);
235 if (!mfrpl->ibfrpl.page_list)
236 goto err_free;
237
238 mfrpl->mapped_page_list = dma_alloc_coherent(&dev->dev->pdev->dev,
235 size, &mfrpl->map, 239 size, &mfrpl->map,
236 GFP_KERNEL); 240 GFP_KERNEL);
237 if (!mfrpl->ibfrpl.page_list) 241 if (!mfrpl->ibfrpl.page_list)
@@ -242,6 +246,7 @@ struct ib_fast_reg_page_list *mlx4_ib_alloc_fast_reg_page_list(struct ib_device
242 return &mfrpl->ibfrpl; 246 return &mfrpl->ibfrpl;
243 247
244err_free: 248err_free:
249 kfree(mfrpl->ibfrpl.page_list);
245 kfree(mfrpl); 250 kfree(mfrpl);
246 return ERR_PTR(-ENOMEM); 251 return ERR_PTR(-ENOMEM);
247} 252}
@@ -252,8 +257,9 @@ void mlx4_ib_free_fast_reg_page_list(struct ib_fast_reg_page_list *page_list)
252 struct mlx4_ib_fast_reg_page_list *mfrpl = to_mfrpl(page_list); 257 struct mlx4_ib_fast_reg_page_list *mfrpl = to_mfrpl(page_list);
253 int size = page_list->max_page_list_len * sizeof (u64); 258 int size = page_list->max_page_list_len * sizeof (u64);
254 259
255 dma_free_coherent(&dev->dev->pdev->dev, size, page_list->page_list, 260 dma_free_coherent(&dev->dev->pdev->dev, size, mfrpl->mapped_page_list,
256 mfrpl->map); 261 mfrpl->map);
262 kfree(mfrpl->ibfrpl.page_list);
257 kfree(mfrpl); 263 kfree(mfrpl);
258} 264}
259 265
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
index f385a24d31d2..20724aee76f4 100644
--- a/drivers/infiniband/hw/mlx4/qp.c
+++ b/drivers/infiniband/hw/mlx4/qp.c
@@ -1365,7 +1365,7 @@ static void set_fmr_seg(struct mlx4_wqe_fmr_seg *fseg, struct ib_send_wr *wr)
1365 int i; 1365 int i;
1366 1366
1367 for (i = 0; i < wr->wr.fast_reg.page_list_len; ++i) 1367 for (i = 0; i < wr->wr.fast_reg.page_list_len; ++i)
1368 wr->wr.fast_reg.page_list->page_list[i] = 1368 mfrpl->mapped_page_list[i] =
1369 cpu_to_be64(wr->wr.fast_reg.page_list->page_list[i] | 1369 cpu_to_be64(wr->wr.fast_reg.page_list->page_list[i] |
1370 MLX4_MTT_FLAG_PRESENT); 1370 MLX4_MTT_FLAG_PRESENT);
1371 1371
diff --git a/drivers/infiniband/hw/mthca/mthca_cmd.c b/drivers/infiniband/hw/mthca/mthca_cmd.c
index c33e1c53c799..6d55f9d748f6 100644
--- a/drivers/infiniband/hw/mthca/mthca_cmd.c
+++ b/drivers/infiniband/hw/mthca/mthca_cmd.c
@@ -157,13 +157,15 @@ enum {
157enum { 157enum {
158 CMD_TIME_CLASS_A = (HZ + 999) / 1000 + 1, 158 CMD_TIME_CLASS_A = (HZ + 999) / 1000 + 1,
159 CMD_TIME_CLASS_B = (HZ + 99) / 100 + 1, 159 CMD_TIME_CLASS_B = (HZ + 99) / 100 + 1,
160 CMD_TIME_CLASS_C = (HZ + 9) / 10 + 1 160 CMD_TIME_CLASS_C = (HZ + 9) / 10 + 1,
161 CMD_TIME_CLASS_D = 60 * HZ
161}; 162};
162#else 163#else
163enum { 164enum {
164 CMD_TIME_CLASS_A = 60 * HZ, 165 CMD_TIME_CLASS_A = 60 * HZ,
165 CMD_TIME_CLASS_B = 60 * HZ, 166 CMD_TIME_CLASS_B = 60 * HZ,
166 CMD_TIME_CLASS_C = 60 * HZ 167 CMD_TIME_CLASS_C = 60 * HZ,
168 CMD_TIME_CLASS_D = 60 * HZ
167}; 169};
168#endif 170#endif
169 171
@@ -598,7 +600,7 @@ int mthca_SYS_EN(struct mthca_dev *dev, u8 *status)
598 u64 out; 600 u64 out;
599 int ret; 601 int ret;
600 602
601 ret = mthca_cmd_imm(dev, 0, &out, 0, 0, CMD_SYS_EN, HZ, status); 603 ret = mthca_cmd_imm(dev, 0, &out, 0, 0, CMD_SYS_EN, CMD_TIME_CLASS_D, status);
602 604
603 if (*status == MTHCA_CMD_STAT_DDR_MEM_ERR) 605 if (*status == MTHCA_CMD_STAT_DDR_MEM_ERR)
604 mthca_warn(dev, "SYS_EN DDR error: syn=%x, sock=%d, " 606 mthca_warn(dev, "SYS_EN DDR error: syn=%x, sock=%d, "
@@ -611,7 +613,7 @@ int mthca_SYS_EN(struct mthca_dev *dev, u8 *status)
611 613
612int mthca_SYS_DIS(struct mthca_dev *dev, u8 *status) 614int mthca_SYS_DIS(struct mthca_dev *dev, u8 *status)
613{ 615{
614 return mthca_cmd(dev, 0, 0, 0, CMD_SYS_DIS, HZ, status); 616 return mthca_cmd(dev, 0, 0, 0, CMD_SYS_DIS, CMD_TIME_CLASS_C, status);
615} 617}
616 618
617static int mthca_map_cmd(struct mthca_dev *dev, u16 op, struct mthca_icm *icm, 619static int mthca_map_cmd(struct mthca_dev *dev, u16 op, struct mthca_icm *icm,
@@ -1390,7 +1392,7 @@ int mthca_INIT_HCA(struct mthca_dev *dev,
1390 MTHCA_PUT(inbox, param->uarc_base, INIT_HCA_UAR_CTX_BASE_OFFSET); 1392 MTHCA_PUT(inbox, param->uarc_base, INIT_HCA_UAR_CTX_BASE_OFFSET);
1391 } 1393 }
1392 1394
1393 err = mthca_cmd(dev, mailbox->dma, 0, 0, CMD_INIT_HCA, HZ, status); 1395 err = mthca_cmd(dev, mailbox->dma, 0, 0, CMD_INIT_HCA, CMD_TIME_CLASS_D, status);
1394 1396
1395 mthca_free_mailbox(dev, mailbox); 1397 mthca_free_mailbox(dev, mailbox);
1396 return err; 1398 return err;
@@ -1450,12 +1452,12 @@ int mthca_INIT_IB(struct mthca_dev *dev,
1450 1452
1451int mthca_CLOSE_IB(struct mthca_dev *dev, int port, u8 *status) 1453int mthca_CLOSE_IB(struct mthca_dev *dev, int port, u8 *status)
1452{ 1454{
1453 return mthca_cmd(dev, 0, port, 0, CMD_CLOSE_IB, HZ, status); 1455 return mthca_cmd(dev, 0, port, 0, CMD_CLOSE_IB, CMD_TIME_CLASS_A, status);
1454} 1456}
1455 1457
1456int mthca_CLOSE_HCA(struct mthca_dev *dev, int panic, u8 *status) 1458int mthca_CLOSE_HCA(struct mthca_dev *dev, int panic, u8 *status)
1457{ 1459{
1458 return mthca_cmd(dev, 0, 0, panic, CMD_CLOSE_HCA, HZ, status); 1460 return mthca_cmd(dev, 0, 0, panic, CMD_CLOSE_HCA, CMD_TIME_CLASS_C, status);
1459} 1461}
1460 1462
1461int mthca_SET_IB(struct mthca_dev *dev, struct mthca_set_ib_param *param, 1463int mthca_SET_IB(struct mthca_dev *dev, struct mthca_set_ib_param *param,
diff --git a/drivers/infiniband/hw/nes/nes.h b/drivers/infiniband/hw/nes/nes.h
index 17621de54a9f..bf1720f7f35f 100644
--- a/drivers/infiniband/hw/nes/nes.h
+++ b/drivers/infiniband/hw/nes/nes.h
@@ -56,10 +56,8 @@
56 56
57#define QUEUE_DISCONNECTS 57#define QUEUE_DISCONNECTS
58 58
59#define DRV_BUILD "1"
60
61#define DRV_NAME "iw_nes" 59#define DRV_NAME "iw_nes"
62#define DRV_VERSION "1.0 KO Build " DRV_BUILD 60#define DRV_VERSION "1.5.0.0"
63#define PFX DRV_NAME ": " 61#define PFX DRV_NAME ": "
64 62
65/* 63/*
diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c
index dbd9a75474e3..11c7d6642014 100644
--- a/drivers/infiniband/hw/nes/nes_cm.c
+++ b/drivers/infiniband/hw/nes/nes_cm.c
@@ -56,6 +56,7 @@
56#include <net/neighbour.h> 56#include <net/neighbour.h>
57#include <net/route.h> 57#include <net/route.h>
58#include <net/ip_fib.h> 58#include <net/ip_fib.h>
59#include <net/tcp.h>
59 60
60#include "nes.h" 61#include "nes.h"
61 62
@@ -540,6 +541,7 @@ static void nes_cm_timer_tick(unsigned long pass)
540 struct list_head *list_node; 541 struct list_head *list_node;
541 struct nes_cm_core *cm_core = g_cm_core; 542 struct nes_cm_core *cm_core = g_cm_core;
542 u32 settimer = 0; 543 u32 settimer = 0;
544 unsigned long timetosend;
543 int ret = NETDEV_TX_OK; 545 int ret = NETDEV_TX_OK;
544 546
545 struct list_head timer_list; 547 struct list_head timer_list;
@@ -644,8 +646,11 @@ static void nes_cm_timer_tick(unsigned long pass)
644 send_entry->retrycount); 646 send_entry->retrycount);
645 if (send_entry->send_retrans) { 647 if (send_entry->send_retrans) {
646 send_entry->retranscount--; 648 send_entry->retranscount--;
649 timetosend = (NES_RETRY_TIMEOUT <<
650 (NES_DEFAULT_RETRANS - send_entry->retranscount));
651
647 send_entry->timetosend = jiffies + 652 send_entry->timetosend = jiffies +
648 NES_RETRY_TIMEOUT; 653 min(timetosend, NES_MAX_TIMEOUT);
649 if (nexttimeout > send_entry->timetosend || 654 if (nexttimeout > send_entry->timetosend ||
650 !settimer) { 655 !settimer) {
651 nexttimeout = send_entry->timetosend; 656 nexttimeout = send_entry->timetosend;
@@ -854,7 +859,6 @@ static struct nes_cm_listener *find_listener(struct nes_cm_core *cm_core,
854{ 859{
855 unsigned long flags; 860 unsigned long flags;
856 struct nes_cm_listener *listen_node; 861 struct nes_cm_listener *listen_node;
857 __be32 tmp_addr = cpu_to_be32(dst_addr);
858 862
859 /* walk list and find cm_node associated with this session ID */ 863 /* walk list and find cm_node associated with this session ID */
860 spin_lock_irqsave(&cm_core->listen_list_lock, flags); 864 spin_lock_irqsave(&cm_core->listen_list_lock, flags);
@@ -871,9 +875,6 @@ static struct nes_cm_listener *find_listener(struct nes_cm_core *cm_core,
871 } 875 }
872 spin_unlock_irqrestore(&cm_core->listen_list_lock, flags); 876 spin_unlock_irqrestore(&cm_core->listen_list_lock, flags);
873 877
874 nes_debug(NES_DBG_CM, "Unable to find listener for %pI4:%x\n",
875 &tmp_addr, dst_port);
876
877 /* no listener */ 878 /* no listener */
878 return NULL; 879 return NULL;
879} 880}
@@ -1325,18 +1326,20 @@ static void handle_fin_pkt(struct nes_cm_node *cm_node)
1325 nes_debug(NES_DBG_CM, "Received FIN, cm_node = %p, state = %u. " 1326 nes_debug(NES_DBG_CM, "Received FIN, cm_node = %p, state = %u. "
1326 "refcnt=%d\n", cm_node, cm_node->state, 1327 "refcnt=%d\n", cm_node, cm_node->state,
1327 atomic_read(&cm_node->ref_count)); 1328 atomic_read(&cm_node->ref_count));
1328 cm_node->tcp_cntxt.rcv_nxt++;
1329 cleanup_retrans_entry(cm_node);
1330 switch (cm_node->state) { 1329 switch (cm_node->state) {
1331 case NES_CM_STATE_SYN_RCVD: 1330 case NES_CM_STATE_SYN_RCVD:
1332 case NES_CM_STATE_SYN_SENT: 1331 case NES_CM_STATE_SYN_SENT:
1333 case NES_CM_STATE_ESTABLISHED: 1332 case NES_CM_STATE_ESTABLISHED:
1334 case NES_CM_STATE_MPAREQ_SENT: 1333 case NES_CM_STATE_MPAREQ_SENT:
1335 case NES_CM_STATE_MPAREJ_RCVD: 1334 case NES_CM_STATE_MPAREJ_RCVD:
1335 cm_node->tcp_cntxt.rcv_nxt++;
1336 cleanup_retrans_entry(cm_node);
1336 cm_node->state = NES_CM_STATE_LAST_ACK; 1337 cm_node->state = NES_CM_STATE_LAST_ACK;
1337 send_fin(cm_node, NULL); 1338 send_fin(cm_node, NULL);
1338 break; 1339 break;
1339 case NES_CM_STATE_FIN_WAIT1: 1340 case NES_CM_STATE_FIN_WAIT1:
1341 cm_node->tcp_cntxt.rcv_nxt++;
1342 cleanup_retrans_entry(cm_node);
1340 cm_node->state = NES_CM_STATE_CLOSING; 1343 cm_node->state = NES_CM_STATE_CLOSING;
1341 send_ack(cm_node, NULL); 1344 send_ack(cm_node, NULL);
1342 /* Wait for ACK as this is simultanous close.. 1345 /* Wait for ACK as this is simultanous close..
@@ -1344,11 +1347,15 @@ static void handle_fin_pkt(struct nes_cm_node *cm_node)
1344 * Just rm the node.. Done.. */ 1347 * Just rm the node.. Done.. */
1345 break; 1348 break;
1346 case NES_CM_STATE_FIN_WAIT2: 1349 case NES_CM_STATE_FIN_WAIT2:
1350 cm_node->tcp_cntxt.rcv_nxt++;
1351 cleanup_retrans_entry(cm_node);
1347 cm_node->state = NES_CM_STATE_TIME_WAIT; 1352 cm_node->state = NES_CM_STATE_TIME_WAIT;
1348 send_ack(cm_node, NULL); 1353 send_ack(cm_node, NULL);
1349 schedule_nes_timer(cm_node, NULL, NES_TIMER_TYPE_CLOSE, 1, 0); 1354 schedule_nes_timer(cm_node, NULL, NES_TIMER_TYPE_CLOSE, 1, 0);
1350 break; 1355 break;
1351 case NES_CM_STATE_TIME_WAIT: 1356 case NES_CM_STATE_TIME_WAIT:
1357 cm_node->tcp_cntxt.rcv_nxt++;
1358 cleanup_retrans_entry(cm_node);
1352 cm_node->state = NES_CM_STATE_CLOSED; 1359 cm_node->state = NES_CM_STATE_CLOSED;
1353 rem_ref_cm_node(cm_node->cm_core, cm_node); 1360 rem_ref_cm_node(cm_node->cm_core, cm_node);
1354 break; 1361 break;
@@ -1384,7 +1391,6 @@ static void handle_rst_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb,
1384 passive_state = atomic_add_return(1, &cm_node->passive_state); 1391 passive_state = atomic_add_return(1, &cm_node->passive_state);
1385 if (passive_state == NES_SEND_RESET_EVENT) 1392 if (passive_state == NES_SEND_RESET_EVENT)
1386 create_event(cm_node, NES_CM_EVENT_RESET); 1393 create_event(cm_node, NES_CM_EVENT_RESET);
1387 cleanup_retrans_entry(cm_node);
1388 cm_node->state = NES_CM_STATE_CLOSED; 1394 cm_node->state = NES_CM_STATE_CLOSED;
1389 dev_kfree_skb_any(skb); 1395 dev_kfree_skb_any(skb);
1390 break; 1396 break;
@@ -1398,17 +1404,16 @@ static void handle_rst_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb,
1398 active_open_err(cm_node, skb, reset); 1404 active_open_err(cm_node, skb, reset);
1399 break; 1405 break;
1400 case NES_CM_STATE_CLOSED: 1406 case NES_CM_STATE_CLOSED:
1401 cleanup_retrans_entry(cm_node);
1402 drop_packet(skb); 1407 drop_packet(skb);
1403 break; 1408 break;
1409 case NES_CM_STATE_LAST_ACK:
1410 cm_node->cm_id->rem_ref(cm_node->cm_id);
1404 case NES_CM_STATE_TIME_WAIT: 1411 case NES_CM_STATE_TIME_WAIT:
1405 cleanup_retrans_entry(cm_node);
1406 cm_node->state = NES_CM_STATE_CLOSED; 1412 cm_node->state = NES_CM_STATE_CLOSED;
1407 rem_ref_cm_node(cm_node->cm_core, cm_node); 1413 rem_ref_cm_node(cm_node->cm_core, cm_node);
1408 drop_packet(skb); 1414 drop_packet(skb);
1409 break; 1415 break;
1410 case NES_CM_STATE_FIN_WAIT1: 1416 case NES_CM_STATE_FIN_WAIT1:
1411 cleanup_retrans_entry(cm_node);
1412 nes_debug(NES_DBG_CM, "Bad state %s[%u]\n", __func__, __LINE__); 1417 nes_debug(NES_DBG_CM, "Bad state %s[%u]\n", __func__, __LINE__);
1413 default: 1418 default:
1414 drop_packet(skb); 1419 drop_packet(skb);
@@ -1455,6 +1460,7 @@ static void handle_rcv_mpa(struct nes_cm_node *cm_node, struct sk_buff *skb)
1455 NES_PASSIVE_STATE_INDICATED); 1460 NES_PASSIVE_STATE_INDICATED);
1456 break; 1461 break;
1457 case NES_CM_STATE_MPAREQ_SENT: 1462 case NES_CM_STATE_MPAREQ_SENT:
1463 cleanup_retrans_entry(cm_node);
1458 if (res_type == NES_MPA_REQUEST_REJECT) { 1464 if (res_type == NES_MPA_REQUEST_REJECT) {
1459 type = NES_CM_EVENT_MPA_REJECT; 1465 type = NES_CM_EVENT_MPA_REJECT;
1460 cm_node->state = NES_CM_STATE_MPAREJ_RCVD; 1466 cm_node->state = NES_CM_STATE_MPAREJ_RCVD;
@@ -1518,7 +1524,7 @@ static int check_seq(struct nes_cm_node *cm_node, struct tcphdr *tcph,
1518 rcv_wnd = cm_node->tcp_cntxt.rcv_wnd; 1524 rcv_wnd = cm_node->tcp_cntxt.rcv_wnd;
1519 if (ack_seq != loc_seq_num) 1525 if (ack_seq != loc_seq_num)
1520 err = 1; 1526 err = 1;
1521 else if ((seq + rcv_wnd) < rcv_nxt) 1527 else if (!between(seq, rcv_nxt, (rcv_nxt+rcv_wnd)))
1522 err = 1; 1528 err = 1;
1523 if (err) { 1529 if (err) {
1524 nes_debug(NES_DBG_CM, "%s[%u] create abort for cm_node=%p " 1530 nes_debug(NES_DBG_CM, "%s[%u] create abort for cm_node=%p "
@@ -1652,49 +1658,39 @@ static void handle_synack_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb,
1652 } 1658 }
1653} 1659}
1654 1660
1655static void handle_ack_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb, 1661static int handle_ack_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb,
1656 struct tcphdr *tcph) 1662 struct tcphdr *tcph)
1657{ 1663{
1658 int datasize = 0; 1664 int datasize = 0;
1659 u32 inc_sequence; 1665 u32 inc_sequence;
1660 u32 rem_seq_ack; 1666 u32 rem_seq_ack;
1661 u32 rem_seq; 1667 u32 rem_seq;
1662 int ret; 1668 int ret = 0;
1663 int optionsize; 1669 int optionsize;
1664 optionsize = (tcph->doff << 2) - sizeof(struct tcphdr); 1670 optionsize = (tcph->doff << 2) - sizeof(struct tcphdr);
1665 1671
1666 if (check_seq(cm_node, tcph, skb)) 1672 if (check_seq(cm_node, tcph, skb))
1667 return; 1673 return -EINVAL;
1668 1674
1669 skb_pull(skb, tcph->doff << 2); 1675 skb_pull(skb, tcph->doff << 2);
1670 inc_sequence = ntohl(tcph->seq); 1676 inc_sequence = ntohl(tcph->seq);
1671 rem_seq = ntohl(tcph->seq); 1677 rem_seq = ntohl(tcph->seq);
1672 rem_seq_ack = ntohl(tcph->ack_seq); 1678 rem_seq_ack = ntohl(tcph->ack_seq);
1673 datasize = skb->len; 1679 datasize = skb->len;
1674 cleanup_retrans_entry(cm_node);
1675 switch (cm_node->state) { 1680 switch (cm_node->state) {
1676 case NES_CM_STATE_SYN_RCVD: 1681 case NES_CM_STATE_SYN_RCVD:
1677 /* Passive OPEN */ 1682 /* Passive OPEN */
1683 cleanup_retrans_entry(cm_node);
1678 ret = handle_tcp_options(cm_node, tcph, skb, optionsize, 1); 1684 ret = handle_tcp_options(cm_node, tcph, skb, optionsize, 1);
1679 if (ret) 1685 if (ret)
1680 break; 1686 break;
1681 cm_node->tcp_cntxt.rem_ack_num = ntohl(tcph->ack_seq); 1687 cm_node->tcp_cntxt.rem_ack_num = ntohl(tcph->ack_seq);
1682 if (cm_node->tcp_cntxt.rem_ack_num !=
1683 cm_node->tcp_cntxt.loc_seq_num) {
1684 nes_debug(NES_DBG_CM, "rem_ack_num != loc_seq_num\n");
1685 cleanup_retrans_entry(cm_node);
1686 send_reset(cm_node, skb);
1687 return;
1688 }
1689 cm_node->state = NES_CM_STATE_ESTABLISHED; 1688 cm_node->state = NES_CM_STATE_ESTABLISHED;
1690 cleanup_retrans_entry(cm_node);
1691 if (datasize) { 1689 if (datasize) {
1692 cm_node->tcp_cntxt.rcv_nxt = inc_sequence + datasize; 1690 cm_node->tcp_cntxt.rcv_nxt = inc_sequence + datasize;
1693 handle_rcv_mpa(cm_node, skb); 1691 handle_rcv_mpa(cm_node, skb);
1694 } else { /* rcvd ACK only */ 1692 } else /* rcvd ACK only */
1695 dev_kfree_skb_any(skb); 1693 dev_kfree_skb_any(skb);
1696 cleanup_retrans_entry(cm_node);
1697 }
1698 break; 1694 break;
1699 case NES_CM_STATE_ESTABLISHED: 1695 case NES_CM_STATE_ESTABLISHED:
1700 /* Passive OPEN */ 1696 /* Passive OPEN */
@@ -1706,15 +1702,12 @@ static void handle_ack_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb,
1706 drop_packet(skb); 1702 drop_packet(skb);
1707 break; 1703 break;
1708 case NES_CM_STATE_MPAREQ_SENT: 1704 case NES_CM_STATE_MPAREQ_SENT:
1709 cleanup_retrans_entry(cm_node);
1710 cm_node->tcp_cntxt.rem_ack_num = ntohl(tcph->ack_seq); 1705 cm_node->tcp_cntxt.rem_ack_num = ntohl(tcph->ack_seq);
1711 if (datasize) { 1706 if (datasize) {
1712 cm_node->tcp_cntxt.rcv_nxt = inc_sequence + datasize; 1707 cm_node->tcp_cntxt.rcv_nxt = inc_sequence + datasize;
1713 handle_rcv_mpa(cm_node, skb); 1708 handle_rcv_mpa(cm_node, skb);
1714 } else { /* Could be just an ack pkt.. */ 1709 } else /* Could be just an ack pkt.. */
1715 cleanup_retrans_entry(cm_node);
1716 dev_kfree_skb_any(skb); 1710 dev_kfree_skb_any(skb);
1717 }
1718 break; 1711 break;
1719 case NES_CM_STATE_LISTENING: 1712 case NES_CM_STATE_LISTENING:
1720 case NES_CM_STATE_CLOSED: 1713 case NES_CM_STATE_CLOSED:
@@ -1722,11 +1715,10 @@ static void handle_ack_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb,
1722 send_reset(cm_node, skb); 1715 send_reset(cm_node, skb);
1723 break; 1716 break;
1724 case NES_CM_STATE_LAST_ACK: 1717 case NES_CM_STATE_LAST_ACK:
1718 case NES_CM_STATE_CLOSING:
1725 cleanup_retrans_entry(cm_node); 1719 cleanup_retrans_entry(cm_node);
1726 cm_node->state = NES_CM_STATE_CLOSED; 1720 cm_node->state = NES_CM_STATE_CLOSED;
1727 cm_node->cm_id->rem_ref(cm_node->cm_id); 1721 cm_node->cm_id->rem_ref(cm_node->cm_id);
1728 case NES_CM_STATE_CLOSING:
1729 cleanup_retrans_entry(cm_node);
1730 rem_ref_cm_node(cm_node->cm_core, cm_node); 1722 rem_ref_cm_node(cm_node->cm_core, cm_node);
1731 drop_packet(skb); 1723 drop_packet(skb);
1732 break; 1724 break;
@@ -1741,9 +1733,11 @@ static void handle_ack_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb,
1741 case NES_CM_STATE_MPAREQ_RCVD: 1733 case NES_CM_STATE_MPAREQ_RCVD:
1742 case NES_CM_STATE_UNKNOWN: 1734 case NES_CM_STATE_UNKNOWN:
1743 default: 1735 default:
1736 cleanup_retrans_entry(cm_node);
1744 drop_packet(skb); 1737 drop_packet(skb);
1745 break; 1738 break;
1746 } 1739 }
1740 return ret;
1747} 1741}
1748 1742
1749 1743
@@ -1849,6 +1843,7 @@ static void process_packet(struct nes_cm_node *cm_node, struct sk_buff *skb,
1849 enum nes_tcpip_pkt_type pkt_type = NES_PKT_TYPE_UNKNOWN; 1843 enum nes_tcpip_pkt_type pkt_type = NES_PKT_TYPE_UNKNOWN;
1850 struct tcphdr *tcph = tcp_hdr(skb); 1844 struct tcphdr *tcph = tcp_hdr(skb);
1851 u32 fin_set = 0; 1845 u32 fin_set = 0;
1846 int ret = 0;
1852 skb_pull(skb, ip_hdr(skb)->ihl << 2); 1847 skb_pull(skb, ip_hdr(skb)->ihl << 2);
1853 1848
1854 nes_debug(NES_DBG_CM, "process_packet: cm_node=%p state =%d syn=%d " 1849 nes_debug(NES_DBG_CM, "process_packet: cm_node=%p state =%d syn=%d "
@@ -1874,17 +1869,17 @@ static void process_packet(struct nes_cm_node *cm_node, struct sk_buff *skb,
1874 handle_synack_pkt(cm_node, skb, tcph); 1869 handle_synack_pkt(cm_node, skb, tcph);
1875 break; 1870 break;
1876 case NES_PKT_TYPE_ACK: 1871 case NES_PKT_TYPE_ACK:
1877 handle_ack_pkt(cm_node, skb, tcph); 1872 ret = handle_ack_pkt(cm_node, skb, tcph);
1878 if (fin_set) 1873 if (fin_set && !ret)
1879 handle_fin_pkt(cm_node); 1874 handle_fin_pkt(cm_node);
1880 break; 1875 break;
1881 case NES_PKT_TYPE_RST: 1876 case NES_PKT_TYPE_RST:
1882 handle_rst_pkt(cm_node, skb, tcph); 1877 handle_rst_pkt(cm_node, skb, tcph);
1883 break; 1878 break;
1884 default: 1879 default:
1885 drop_packet(skb); 1880 if ((fin_set) && (!check_seq(cm_node, tcph, skb)))
1886 if (fin_set)
1887 handle_fin_pkt(cm_node); 1881 handle_fin_pkt(cm_node);
1882 drop_packet(skb);
1888 break; 1883 break;
1889 } 1884 }
1890} 1885}
@@ -2710,7 +2705,6 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
2710 /* associate the node with the QP */ 2705 /* associate the node with the QP */
2711 nesqp->cm_node = (void *)cm_node; 2706 nesqp->cm_node = (void *)cm_node;
2712 cm_node->nesqp = nesqp; 2707 cm_node->nesqp = nesqp;
2713 nes_add_ref(&nesqp->ibqp);
2714 2708
2715 nes_debug(NES_DBG_CM, "QP%u, cm_node=%p, jiffies = %lu listener = %p\n", 2709 nes_debug(NES_DBG_CM, "QP%u, cm_node=%p, jiffies = %lu listener = %p\n",
2716 nesqp->hwqp.qp_id, cm_node, jiffies, cm_node->listener); 2710 nesqp->hwqp.qp_id, cm_node, jiffies, cm_node->listener);
@@ -2763,6 +2757,9 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
2763 nes_debug(NES_DBG_CM, "Unable to register memory region" 2757 nes_debug(NES_DBG_CM, "Unable to register memory region"
2764 "for lSMM for cm_node = %p \n", 2758 "for lSMM for cm_node = %p \n",
2765 cm_node); 2759 cm_node);
2760 pci_free_consistent(nesdev->pcidev,
2761 nesqp->private_data_len+sizeof(struct ietf_mpa_frame),
2762 nesqp->ietf_frame, nesqp->ietf_frame_pbase);
2766 return -ENOMEM; 2763 return -ENOMEM;
2767 } 2764 }
2768 2765
@@ -2879,6 +2876,7 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
2879 2876
2880 /* notify OF layer that accept event was successful */ 2877 /* notify OF layer that accept event was successful */
2881 cm_id->add_ref(cm_id); 2878 cm_id->add_ref(cm_id);
2879 nes_add_ref(&nesqp->ibqp);
2882 2880
2883 cm_event.event = IW_CM_EVENT_ESTABLISHED; 2881 cm_event.event = IW_CM_EVENT_ESTABLISHED;
2884 cm_event.status = IW_CM_EVENT_STATUS_ACCEPTED; 2882 cm_event.status = IW_CM_EVENT_STATUS_ACCEPTED;
@@ -2959,6 +2957,7 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
2959 struct nes_device *nesdev; 2957 struct nes_device *nesdev;
2960 struct nes_cm_node *cm_node; 2958 struct nes_cm_node *cm_node;
2961 struct nes_cm_info cm_info; 2959 struct nes_cm_info cm_info;
2960 int apbvt_set = 0;
2962 2961
2963 ibqp = nes_get_qp(cm_id->device, conn_param->qpn); 2962 ibqp = nes_get_qp(cm_id->device, conn_param->qpn);
2964 if (!ibqp) 2963 if (!ibqp)
@@ -2996,9 +2995,11 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
2996 conn_param->private_data_len); 2995 conn_param->private_data_len);
2997 2996
2998 if (cm_id->local_addr.sin_addr.s_addr != 2997 if (cm_id->local_addr.sin_addr.s_addr !=
2999 cm_id->remote_addr.sin_addr.s_addr) 2998 cm_id->remote_addr.sin_addr.s_addr) {
3000 nes_manage_apbvt(nesvnic, ntohs(cm_id->local_addr.sin_port), 2999 nes_manage_apbvt(nesvnic, ntohs(cm_id->local_addr.sin_port),
3001 PCI_FUNC(nesdev->pcidev->devfn), NES_MANAGE_APBVT_ADD); 3000 PCI_FUNC(nesdev->pcidev->devfn), NES_MANAGE_APBVT_ADD);
3001 apbvt_set = 1;
3002 }
3002 3003
3003 /* set up the connection params for the node */ 3004 /* set up the connection params for the node */
3004 cm_info.loc_addr = htonl(cm_id->local_addr.sin_addr.s_addr); 3005 cm_info.loc_addr = htonl(cm_id->local_addr.sin_addr.s_addr);
@@ -3015,8 +3016,7 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
3015 conn_param->private_data_len, (void *)conn_param->private_data, 3016 conn_param->private_data_len, (void *)conn_param->private_data,
3016 &cm_info); 3017 &cm_info);
3017 if (!cm_node) { 3018 if (!cm_node) {
3018 if (cm_id->local_addr.sin_addr.s_addr != 3019 if (apbvt_set)
3019 cm_id->remote_addr.sin_addr.s_addr)
3020 nes_manage_apbvt(nesvnic, ntohs(cm_id->local_addr.sin_port), 3020 nes_manage_apbvt(nesvnic, ntohs(cm_id->local_addr.sin_port),
3021 PCI_FUNC(nesdev->pcidev->devfn), 3021 PCI_FUNC(nesdev->pcidev->devfn),
3022 NES_MANAGE_APBVT_DEL); 3022 NES_MANAGE_APBVT_DEL);
@@ -3025,7 +3025,7 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
3025 return -ENOMEM; 3025 return -ENOMEM;
3026 } 3026 }
3027 3027
3028 cm_node->apbvt_set = 1; 3028 cm_node->apbvt_set = apbvt_set;
3029 nesqp->cm_node = cm_node; 3029 nesqp->cm_node = cm_node;
3030 cm_node->nesqp = nesqp; 3030 cm_node->nesqp = nesqp;
3031 nes_add_ref(&nesqp->ibqp); 3031 nes_add_ref(&nesqp->ibqp);
diff --git a/drivers/infiniband/hw/nes/nes_cm.h b/drivers/infiniband/hw/nes/nes_cm.h
index 80bba1892571..8b7e7c0e496e 100644
--- a/drivers/infiniband/hw/nes/nes_cm.h
+++ b/drivers/infiniband/hw/nes/nes_cm.h
@@ -149,6 +149,7 @@ struct nes_timer_entry {
149#endif 149#endif
150#define NES_SHORT_TIME (10) 150#define NES_SHORT_TIME (10)
151#define NES_LONG_TIME (2000*HZ/1000) 151#define NES_LONG_TIME (2000*HZ/1000)
152#define NES_MAX_TIMEOUT ((unsigned long) (12*HZ))
152 153
153#define NES_CM_HASHTABLE_SIZE 1024 154#define NES_CM_HASHTABLE_SIZE 1024
154#define NES_CM_TCP_TIMER_INTERVAL 3000 155#define NES_CM_TCP_TIMER_INTERVAL 3000
diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c
index d6fc9ae44062..b832a7b814a2 100644
--- a/drivers/infiniband/hw/nes/nes_hw.c
+++ b/drivers/infiniband/hw/nes/nes_hw.c
@@ -550,11 +550,8 @@ struct nes_adapter *nes_init_adapter(struct nes_device *nesdev, u8 hw_rev) {
550 msleep(1); 550 msleep(1);
551 } 551 }
552 if (int_cnt > 1) { 552 if (int_cnt > 1) {
553 u32 sds;
554 spin_lock_irqsave(&nesadapter->phy_lock, flags); 553 spin_lock_irqsave(&nesadapter->phy_lock, flags);
555 sds = nes_read_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1); 554 nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1, 0x0000F0C8);
556 sds |= 0x00000040;
557 nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1, sds);
558 mh_detected++; 555 mh_detected++;
559 reset_value = nes_read32(nesdev->regs+NES_SOFTWARE_RESET); 556 reset_value = nes_read32(nesdev->regs+NES_SOFTWARE_RESET);
560 reset_value |= 0x0000003d; 557 reset_value |= 0x0000003d;
@@ -579,7 +576,7 @@ struct nes_adapter *nes_init_adapter(struct nes_device *nesdev, u8 hw_rev) {
579 if (++ext_cnt > int_cnt) { 576 if (++ext_cnt > int_cnt) {
580 spin_lock_irqsave(&nesadapter->phy_lock, flags); 577 spin_lock_irqsave(&nesadapter->phy_lock, flags);
581 nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1, 578 nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1,
582 0x0000F0C8); 579 0x0000F088);
583 mh_detected++; 580 mh_detected++;
584 reset_value = nes_read32(nesdev->regs+NES_SOFTWARE_RESET); 581 reset_value = nes_read32(nesdev->regs+NES_SOFTWARE_RESET);
585 reset_value |= 0x0000003d; 582 reset_value |= 0x0000003d;
@@ -764,6 +761,9 @@ static int nes_init_serdes(struct nes_device *nesdev, u8 hw_rev, u8 port_count,
764 return 0; 761 return 0;
765 762
766 /* init serdes 1 */ 763 /* init serdes 1 */
764 if (!(OneG_Mode && (nesadapter->phy_type[1] != NES_PHY_TYPE_PUMA_1G)))
765 nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_CDR_CONTROL1, 0x000000FF);
766
767 switch (nesadapter->phy_type[1]) { 767 switch (nesadapter->phy_type[1]) {
768 case NES_PHY_TYPE_ARGUS: 768 case NES_PHY_TYPE_ARGUS:
769 case NES_PHY_TYPE_SFP_D: 769 case NES_PHY_TYPE_SFP_D:
@@ -771,21 +771,20 @@ static int nes_init_serdes(struct nes_device *nesdev, u8 hw_rev, u8 port_count,
771 nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_TX_EMP1, 0x00000000); 771 nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_TX_EMP1, 0x00000000);
772 break; 772 break;
773 case NES_PHY_TYPE_CX4: 773 case NES_PHY_TYPE_CX4:
774 sds = nes_read_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1);
775 sds &= 0xFFFFFFBF;
776 nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1, sds);
777 if (wide_ppm_offset) 774 if (wide_ppm_offset)
778 nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_CDR_CONTROL1, 0x000FFFAA); 775 nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_CDR_CONTROL1, 0x000FFFAA);
779 else
780 nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_CDR_CONTROL1, 0x000000FF);
781 break; 776 break;
782 case NES_PHY_TYPE_PUMA_1G: 777 case NES_PHY_TYPE_PUMA_1G:
783 sds = nes_read_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1); 778 sds = nes_read_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1);
784 sds |= 0x000000100; 779 sds |= 0x000000100;
785 nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1, sds); 780 nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1, sds);
786 } 781 }
787 if (!OneG_Mode) 782 if (!OneG_Mode) {
788 nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_TX_HIGHZ_LANE_MODE1, 0x11110000); 783 nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_TX_HIGHZ_LANE_MODE1, 0x11110000);
784 sds = nes_read_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1);
785 sds &= 0xFFFFFFBF;
786 nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1, sds);
787 }
789 } else { 788 } else {
790 /* init serdes 0 */ 789 /* init serdes 0 */
791 nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL0, 0x00000008); 790 nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL0, 0x00000008);
@@ -913,6 +912,12 @@ static void nes_init_csr_ne020(struct nes_device *nesdev, u8 hw_rev, u8 port_cou
913 u32temp &= 0x7fffffff; 912 u32temp &= 0x7fffffff;
914 u32temp |= 0x7fff0010; 913 u32temp |= 0x7fff0010;
915 nes_write_indexed(nesdev, 0x000021f8, u32temp); 914 nes_write_indexed(nesdev, 0x000021f8, u32temp);
915 if (port_count > 1) {
916 u32temp = nes_read_indexed(nesdev, 0x000023f8);
917 u32temp &= 0x7fffffff;
918 u32temp |= 0x7fff0010;
919 nes_write_indexed(nesdev, 0x000023f8, u32temp);
920 }
916 } 921 }
917} 922}
918 923
@@ -1366,13 +1371,14 @@ int nes_init_phy(struct nes_device *nesdev)
1366 if (phy_type == NES_PHY_TYPE_ARGUS) { 1371 if (phy_type == NES_PHY_TYPE_ARGUS) {
1367 nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc302, 0x000C); 1372 nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc302, 0x000C);
1368 nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc319, 0x0008); 1373 nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc319, 0x0008);
1374 nes_write_10G_phy_reg(nesdev, phy_index, 0x3, 0x0027, 0x0001);
1369 } else { 1375 } else {
1370 nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc302, 0x0004); 1376 nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc302, 0x0004);
1371 nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc319, 0x0038); 1377 nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc319, 0x0038);
1378 nes_write_10G_phy_reg(nesdev, phy_index, 0x3, 0x0027, 0x0013);
1372 } 1379 }
1373 nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc31a, 0x0098); 1380 nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc31a, 0x0098);
1374 nes_write_10G_phy_reg(nesdev, phy_index, 0x3, 0x0026, 0x0E00); 1381 nes_write_10G_phy_reg(nesdev, phy_index, 0x3, 0x0026, 0x0E00);
1375 nes_write_10G_phy_reg(nesdev, phy_index, 0x3, 0x0027, 0x0001);
1376 1382
1377 /* setup LEDs */ 1383 /* setup LEDs */
1378 nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xd006, 0x0007); 1384 nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xd006, 0x0007);
diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c
index 7e5b5ba13a74..64d5cfd8f380 100644
--- a/drivers/infiniband/hw/nes/nes_verbs.c
+++ b/drivers/infiniband/hw/nes/nes_verbs.c
@@ -1627,6 +1627,7 @@ static struct ib_cq *nes_create_cq(struct ib_device *ibdev, int entries,
1627 nescq->hw_cq.cq_number = nes_ucontext->mcrqf & 0xffff; 1627 nescq->hw_cq.cq_number = nes_ucontext->mcrqf & 0xffff;
1628 else 1628 else
1629 nescq->hw_cq.cq_number = nesvnic->mcrq_qp_id + nes_ucontext->mcrqf-1; 1629 nescq->hw_cq.cq_number = nesvnic->mcrq_qp_id + nes_ucontext->mcrqf-1;
1630 nescq->mcrqf = nes_ucontext->mcrqf;
1630 nes_free_resource(nesadapter, nesadapter->allocated_cqs, cq_num); 1631 nes_free_resource(nesadapter, nesadapter->allocated_cqs, cq_num);
1631 } 1632 }
1632 nes_debug(NES_DBG_CQ, "CQ Virtual Address = %08lX, size = %u.\n", 1633 nes_debug(NES_DBG_CQ, "CQ Virtual Address = %08lX, size = %u.\n",
@@ -1682,6 +1683,12 @@ static struct ib_cq *nes_create_cq(struct ib_device *ibdev, int entries,
1682 if (!context) 1683 if (!context)
1683 pci_free_consistent(nesdev->pcidev, nescq->cq_mem_size, mem, 1684 pci_free_consistent(nesdev->pcidev, nescq->cq_mem_size, mem,
1684 nescq->hw_cq.cq_pbase); 1685 nescq->hw_cq.cq_pbase);
1686 else {
1687 pci_free_consistent(nesdev->pcidev, nespbl->pbl_size,
1688 nespbl->pbl_vbase, nespbl->pbl_pbase);
1689 kfree(nespbl);
1690 }
1691
1685 nes_free_resource(nesadapter, nesadapter->allocated_cqs, cq_num); 1692 nes_free_resource(nesadapter, nesadapter->allocated_cqs, cq_num);
1686 kfree(nescq); 1693 kfree(nescq);
1687 return ERR_PTR(-ENOMEM); 1694 return ERR_PTR(-ENOMEM);
@@ -1705,6 +1712,11 @@ static struct ib_cq *nes_create_cq(struct ib_device *ibdev, int entries,
1705 if (!context) 1712 if (!context)
1706 pci_free_consistent(nesdev->pcidev, nescq->cq_mem_size, mem, 1713 pci_free_consistent(nesdev->pcidev, nescq->cq_mem_size, mem,
1707 nescq->hw_cq.cq_pbase); 1714 nescq->hw_cq.cq_pbase);
1715 else {
1716 pci_free_consistent(nesdev->pcidev, nespbl->pbl_size,
1717 nespbl->pbl_vbase, nespbl->pbl_pbase);
1718 kfree(nespbl);
1719 }
1708 nes_free_resource(nesadapter, nesadapter->allocated_cqs, cq_num); 1720 nes_free_resource(nesadapter, nesadapter->allocated_cqs, cq_num);
1709 kfree(nescq); 1721 kfree(nescq);
1710 return ERR_PTR(-ENOMEM); 1722 return ERR_PTR(-ENOMEM);
@@ -1722,6 +1734,11 @@ static struct ib_cq *nes_create_cq(struct ib_device *ibdev, int entries,
1722 if (!context) 1734 if (!context)
1723 pci_free_consistent(nesdev->pcidev, nescq->cq_mem_size, mem, 1735 pci_free_consistent(nesdev->pcidev, nescq->cq_mem_size, mem,
1724 nescq->hw_cq.cq_pbase); 1736 nescq->hw_cq.cq_pbase);
1737 else {
1738 pci_free_consistent(nesdev->pcidev, nespbl->pbl_size,
1739 nespbl->pbl_vbase, nespbl->pbl_pbase);
1740 kfree(nespbl);
1741 }
1725 nes_free_resource(nesadapter, nesadapter->allocated_cqs, cq_num); 1742 nes_free_resource(nesadapter, nesadapter->allocated_cqs, cq_num);
1726 kfree(nescq); 1743 kfree(nescq);
1727 return ERR_PTR(-ENOMEM); 1744 return ERR_PTR(-ENOMEM);
@@ -1774,6 +1791,11 @@ static struct ib_cq *nes_create_cq(struct ib_device *ibdev, int entries,
1774 if (!context) 1791 if (!context)
1775 pci_free_consistent(nesdev->pcidev, nescq->cq_mem_size, mem, 1792 pci_free_consistent(nesdev->pcidev, nescq->cq_mem_size, mem,
1776 nescq->hw_cq.cq_pbase); 1793 nescq->hw_cq.cq_pbase);
1794 else {
1795 pci_free_consistent(nesdev->pcidev, nespbl->pbl_size,
1796 nespbl->pbl_vbase, nespbl->pbl_pbase);
1797 kfree(nespbl);
1798 }
1777 nes_free_resource(nesadapter, nesadapter->allocated_cqs, cq_num); 1799 nes_free_resource(nesadapter, nesadapter->allocated_cqs, cq_num);
1778 kfree(nescq); 1800 kfree(nescq);
1779 return ERR_PTR(-EIO); 1801 return ERR_PTR(-EIO);
@@ -1855,7 +1877,9 @@ static int nes_destroy_cq(struct ib_cq *ib_cq)
1855 set_wqe_32bit_value(cqp_wqe->wqe_words, NES_CQP_WQE_OPCODE_IDX, opcode); 1877 set_wqe_32bit_value(cqp_wqe->wqe_words, NES_CQP_WQE_OPCODE_IDX, opcode);
1856 set_wqe_32bit_value(cqp_wqe->wqe_words, NES_CQP_WQE_ID_IDX, 1878 set_wqe_32bit_value(cqp_wqe->wqe_words, NES_CQP_WQE_ID_IDX,
1857 (nescq->hw_cq.cq_number | ((u32)PCI_FUNC(nesdev->pcidev->devfn) << 16))); 1879 (nescq->hw_cq.cq_number | ((u32)PCI_FUNC(nesdev->pcidev->devfn) << 16)));
1858 nes_free_resource(nesadapter, nesadapter->allocated_cqs, nescq->hw_cq.cq_number); 1880 if (!nescq->mcrqf)
1881 nes_free_resource(nesadapter, nesadapter->allocated_cqs, nescq->hw_cq.cq_number);
1882
1859 atomic_set(&cqp_request->refcount, 2); 1883 atomic_set(&cqp_request->refcount, 2);
1860 nes_post_cqp_request(nesdev, cqp_request); 1884 nes_post_cqp_request(nesdev, cqp_request);
1861 1885
@@ -1895,8 +1919,7 @@ static int nes_destroy_cq(struct ib_cq *ib_cq)
1895static u32 root_256(struct nes_device *nesdev, 1919static u32 root_256(struct nes_device *nesdev,
1896 struct nes_root_vpbl *root_vpbl, 1920 struct nes_root_vpbl *root_vpbl,
1897 struct nes_root_vpbl *new_root, 1921 struct nes_root_vpbl *new_root,
1898 u16 pbl_count_4k, 1922 u16 pbl_count_4k)
1899 u16 pbl_count_256)
1900{ 1923{
1901 u64 leaf_pbl; 1924 u64 leaf_pbl;
1902 int i, j, k; 1925 int i, j, k;
@@ -1952,7 +1975,7 @@ static int nes_reg_mr(struct nes_device *nesdev, struct nes_pd *nespd,
1952 int ret; 1975 int ret;
1953 struct nes_adapter *nesadapter = nesdev->nesadapter; 1976 struct nes_adapter *nesadapter = nesdev->nesadapter;
1954 uint pg_cnt = 0; 1977 uint pg_cnt = 0;
1955 u16 pbl_count_256; 1978 u16 pbl_count_256 = 0;
1956 u16 pbl_count = 0; 1979 u16 pbl_count = 0;
1957 u8 use_256_pbls = 0; 1980 u8 use_256_pbls = 0;
1958 u8 use_4k_pbls = 0; 1981 u8 use_4k_pbls = 0;
@@ -2012,7 +2035,7 @@ static int nes_reg_mr(struct nes_device *nesdev, struct nes_pd *nespd,
2012 } 2035 }
2013 2036
2014 if (use_256_pbls && use_two_level) { 2037 if (use_256_pbls && use_two_level) {
2015 if (root_256(nesdev, root_vpbl, &new_root, pbl_count_4k, pbl_count_256) == 1) { 2038 if (root_256(nesdev, root_vpbl, &new_root, pbl_count_4k) == 1) {
2016 if (new_root.pbl_pbase != 0) 2039 if (new_root.pbl_pbase != 0)
2017 root_vpbl = &new_root; 2040 root_vpbl = &new_root;
2018 } else { 2041 } else {
@@ -2122,6 +2145,7 @@ static struct ib_mr *nes_reg_phys_mr(struct ib_pd *ib_pd,
2122 struct nes_root_vpbl root_vpbl; 2145 struct nes_root_vpbl root_vpbl;
2123 u32 stag; 2146 u32 stag;
2124 u32 i; 2147 u32 i;
2148 unsigned long mask;
2125 u32 stag_index = 0; 2149 u32 stag_index = 0;
2126 u32 next_stag_index = 0; 2150 u32 next_stag_index = 0;
2127 u32 driver_key = 0; 2151 u32 driver_key = 0;
@@ -2150,6 +2174,9 @@ static struct ib_mr *nes_reg_phys_mr(struct ib_pd *ib_pd,
2150 return ERR_PTR(-E2BIG); 2174 return ERR_PTR(-E2BIG);
2151 } 2175 }
2152 2176
2177 if ((buffer_list[0].addr ^ *iova_start) & ~PAGE_MASK)
2178 return ERR_PTR(-EINVAL);
2179
2153 err = nes_alloc_resource(nesadapter, nesadapter->allocated_mrs, nesadapter->max_mr, 2180 err = nes_alloc_resource(nesadapter, nesadapter->allocated_mrs, nesadapter->max_mr,
2154 &stag_index, &next_stag_index); 2181 &stag_index, &next_stag_index);
2155 if (err) { 2182 if (err) {
@@ -2215,19 +2242,16 @@ static struct ib_mr *nes_reg_phys_mr(struct ib_pd *ib_pd,
2215 root_pbl_index++; 2242 root_pbl_index++;
2216 cur_pbl_index = 0; 2243 cur_pbl_index = 0;
2217 } 2244 }
2218 if (buffer_list[i].addr & ~PAGE_MASK) {
2219 /* TODO: Unwind allocated buffers */
2220 nes_free_resource(nesadapter, nesadapter->allocated_mrs, stag_index);
2221 nes_debug(NES_DBG_MR, "Unaligned Memory Buffer: 0x%x\n",
2222 (unsigned int) buffer_list[i].addr);
2223 ibmr = ERR_PTR(-EINVAL);
2224 kfree(nesmr);
2225 goto reg_phys_err;
2226 }
2227 2245
2228 if (!buffer_list[i].size) { 2246 mask = !buffer_list[i].size;
2247 if (i != 0)
2248 mask |= buffer_list[i].addr;
2249 if (i != num_phys_buf - 1)
2250 mask |= buffer_list[i].addr + buffer_list[i].size;
2251
2252 if (mask & ~PAGE_MASK) {
2229 nes_free_resource(nesadapter, nesadapter->allocated_mrs, stag_index); 2253 nes_free_resource(nesadapter, nesadapter->allocated_mrs, stag_index);
2230 nes_debug(NES_DBG_MR, "Invalid Buffer Size\n"); 2254 nes_debug(NES_DBG_MR, "Invalid buffer addr or size\n");
2231 ibmr = ERR_PTR(-EINVAL); 2255 ibmr = ERR_PTR(-EINVAL);
2232 kfree(nesmr); 2256 kfree(nesmr);
2233 goto reg_phys_err; 2257 goto reg_phys_err;
@@ -2238,7 +2262,7 @@ static struct ib_mr *nes_reg_phys_mr(struct ib_pd *ib_pd,
2238 if ((buffer_list[i-1].addr+PAGE_SIZE) != buffer_list[i].addr) 2262 if ((buffer_list[i-1].addr+PAGE_SIZE) != buffer_list[i].addr)
2239 single_page = 0; 2263 single_page = 0;
2240 } 2264 }
2241 vpbl.pbl_vbase[cur_pbl_index].pa_low = cpu_to_le32((u32)buffer_list[i].addr); 2265 vpbl.pbl_vbase[cur_pbl_index].pa_low = cpu_to_le32((u32)buffer_list[i].addr & PAGE_MASK);
2242 vpbl.pbl_vbase[cur_pbl_index++].pa_high = 2266 vpbl.pbl_vbase[cur_pbl_index++].pa_high =
2243 cpu_to_le32((u32)((((u64)buffer_list[i].addr) >> 32))); 2267 cpu_to_le32((u32)((((u64)buffer_list[i].addr) >> 32)));
2244 } 2268 }
@@ -2251,8 +2275,6 @@ static struct ib_mr *nes_reg_phys_mr(struct ib_pd *ib_pd,
2251 " length = 0x%016lX, index = 0x%08X\n", 2275 " length = 0x%016lX, index = 0x%08X\n",
2252 stag, (unsigned long)*iova_start, (unsigned long)region_length, stag_index); 2276 stag, (unsigned long)*iova_start, (unsigned long)region_length, stag_index);
2253 2277
2254 region_length -= (*iova_start)&PAGE_MASK;
2255
2256 /* Make the leaf PBL the root if only one PBL */ 2278 /* Make the leaf PBL the root if only one PBL */
2257 if (root_pbl_index == 1) { 2279 if (root_pbl_index == 1) {
2258 root_vpbl.pbl_pbase = vpbl.pbl_pbase; 2280 root_vpbl.pbl_pbase = vpbl.pbl_pbase;
@@ -2786,10 +2808,9 @@ static ssize_t show_fw_ver(struct device *dev, struct device_attribute *attr,
2786 struct nes_vnic *nesvnic = nesibdev->nesvnic; 2808 struct nes_vnic *nesvnic = nesibdev->nesvnic;
2787 2809
2788 nes_debug(NES_DBG_INIT, "\n"); 2810 nes_debug(NES_DBG_INIT, "\n");
2789 return sprintf(buf, "%x.%x.%x\n", 2811 return sprintf(buf, "%u.%u\n",
2790 (int)(nesvnic->nesdev->nesadapter->fw_ver >> 32), 2812 (nesvnic->nesdev->nesadapter->firmware_version >> 16),
2791 (int)(nesvnic->nesdev->nesadapter->fw_ver >> 16) & 0xffff, 2813 (nesvnic->nesdev->nesadapter->firmware_version & 0x000000ff));
2792 (int)(nesvnic->nesdev->nesadapter->fw_ver & 0xffff));
2793} 2814}
2794 2815
2795 2816
diff --git a/drivers/infiniband/hw/nes/nes_verbs.h b/drivers/infiniband/hw/nes/nes_verbs.h
index 5e48f67fbe8d..41c07f29f7c9 100644
--- a/drivers/infiniband/hw/nes/nes_verbs.h
+++ b/drivers/infiniband/hw/nes/nes_verbs.h
@@ -112,6 +112,7 @@ struct nes_cq {
112 spinlock_t lock; 112 spinlock_t lock;
113 u8 virtual_cq; 113 u8 virtual_cq;
114 u8 pad[3]; 114 u8 pad[3];
115 u32 mcrqf;
115}; 116};
116 117
117struct nes_wq { 118struct nes_wq {
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
index da6082739839..e7e5adf84e84 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
@@ -685,7 +685,8 @@ int ipoib_ib_dev_open(struct net_device *dev)
685 queue_delayed_work(ipoib_workqueue, &priv->ah_reap_task, 685 queue_delayed_work(ipoib_workqueue, &priv->ah_reap_task,
686 round_jiffies_relative(HZ)); 686 round_jiffies_relative(HZ));
687 687
688 set_bit(IPOIB_FLAG_INITIALIZED, &priv->flags); 688 if (!test_and_set_bit(IPOIB_FLAG_INITIALIZED, &priv->flags))
689 napi_enable(&priv->napi);
689 690
690 return 0; 691 return 0;
691} 692}
@@ -804,7 +805,8 @@ int ipoib_ib_dev_stop(struct net_device *dev, int flush)
804 struct ipoib_tx_buf *tx_req; 805 struct ipoib_tx_buf *tx_req;
805 int i; 806 int i;
806 807
807 clear_bit(IPOIB_FLAG_INITIALIZED, &priv->flags); 808 if (test_and_clear_bit(IPOIB_FLAG_INITIALIZED, &priv->flags))
809 napi_disable(&priv->napi);
808 810
809 ipoib_cm_dev_stop(dev); 811 ipoib_cm_dev_stop(dev);
810 812
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
index 421a6640c9bd..ab2c192c76bc 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -106,8 +106,7 @@ int ipoib_open(struct net_device *dev)
106 106
107 ipoib_dbg(priv, "bringing up interface\n"); 107 ipoib_dbg(priv, "bringing up interface\n");
108 108
109 if (!test_and_set_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags)) 109 set_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags);
110 napi_enable(&priv->napi);
111 110
112 if (ipoib_pkey_dev_delay_open(dev)) 111 if (ipoib_pkey_dev_delay_open(dev))
113 return 0; 112 return 0;
@@ -143,7 +142,6 @@ err_stop:
143 ipoib_ib_dev_stop(dev, 1); 142 ipoib_ib_dev_stop(dev, 1);
144 143
145err_disable: 144err_disable:
146 napi_disable(&priv->napi);
147 clear_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags); 145 clear_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags);
148 146
149 return -EINVAL; 147 return -EINVAL;
@@ -156,7 +154,6 @@ static int ipoib_stop(struct net_device *dev)
156 ipoib_dbg(priv, "stopping interface\n"); 154 ipoib_dbg(priv, "stopping interface\n");
157 155
158 clear_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags); 156 clear_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags);
159 napi_disable(&priv->napi);
160 157
161 netif_stop_queue(dev); 158 netif_stop_queue(dev);
162 159
diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.c b/drivers/infiniband/ulp/iser/iscsi_iser.c
index 13d7674b293d..75223f50de58 100644
--- a/drivers/infiniband/ulp/iser/iscsi_iser.c
+++ b/drivers/infiniband/ulp/iser/iscsi_iser.c
@@ -599,6 +599,7 @@ static struct scsi_host_template iscsi_iser_sht = {
599 .eh_abort_handler = iscsi_eh_abort, 599 .eh_abort_handler = iscsi_eh_abort,
600 .eh_device_reset_handler= iscsi_eh_device_reset, 600 .eh_device_reset_handler= iscsi_eh_device_reset,
601 .eh_target_reset_handler= iscsi_eh_target_reset, 601 .eh_target_reset_handler= iscsi_eh_target_reset,
602 .target_alloc = iscsi_target_alloc,
602 .use_clustering = DISABLE_CLUSTERING, 603 .use_clustering = DISABLE_CLUSTERING,
603 .proc_name = "iscsi_iser", 604 .proc_name = "iscsi_iser",
604 .this_id = -1, 605 .this_id = -1,
diff --git a/drivers/input/ff-memless.c b/drivers/input/ff-memless.c
index bc4e40f3ede7..2d1415e16834 100644
--- a/drivers/input/ff-memless.c
+++ b/drivers/input/ff-memless.c
@@ -226,7 +226,7 @@ static int get_compatible_type(struct ff_device *ff, int effect_type)
226 */ 226 */
227static void ml_combine_effects(struct ff_effect *effect, 227static void ml_combine_effects(struct ff_effect *effect,
228 struct ml_effect_state *state, 228 struct ml_effect_state *state,
229 int gain) 229 unsigned int gain)
230{ 230{
231 struct ff_effect *new = state->effect; 231 struct ff_effect *new = state->effect;
232 unsigned int strong, weak, i; 232 unsigned int strong, weak, i;
diff --git a/drivers/input/gameport/gameport.c b/drivers/input/gameport/gameport.c
index ebf4be5b7c4e..2d175b5928ff 100644
--- a/drivers/input/gameport/gameport.c
+++ b/drivers/input/gameport/gameport.c
@@ -50,9 +50,8 @@ static LIST_HEAD(gameport_list);
50 50
51static struct bus_type gameport_bus; 51static struct bus_type gameport_bus;
52 52
53static void gameport_add_driver(struct gameport_driver *drv);
54static void gameport_add_port(struct gameport *gameport); 53static void gameport_add_port(struct gameport *gameport);
55static void gameport_destroy_port(struct gameport *gameport); 54static void gameport_attach_driver(struct gameport_driver *drv);
56static void gameport_reconnect_port(struct gameport *gameport); 55static void gameport_reconnect_port(struct gameport *gameport);
57static void gameport_disconnect_port(struct gameport *gameport); 56static void gameport_disconnect_port(struct gameport *gameport);
58 57
@@ -230,7 +229,6 @@ static void gameport_find_driver(struct gameport *gameport)
230 229
231enum gameport_event_type { 230enum gameport_event_type {
232 GAMEPORT_REGISTER_PORT, 231 GAMEPORT_REGISTER_PORT,
233 GAMEPORT_REGISTER_DRIVER,
234 GAMEPORT_ATTACH_DRIVER, 232 GAMEPORT_ATTACH_DRIVER,
235}; 233};
236 234
@@ -374,8 +372,8 @@ static void gameport_handle_event(void)
374 gameport_add_port(event->object); 372 gameport_add_port(event->object);
375 break; 373 break;
376 374
377 case GAMEPORT_REGISTER_DRIVER: 375 case GAMEPORT_ATTACH_DRIVER:
378 gameport_add_driver(event->object); 376 gameport_attach_driver(event->object);
379 break; 377 break;
380 378
381 default: 379 default:
@@ -706,14 +704,14 @@ static int gameport_driver_remove(struct device *dev)
706 return 0; 704 return 0;
707} 705}
708 706
709static void gameport_add_driver(struct gameport_driver *drv) 707static void gameport_attach_driver(struct gameport_driver *drv)
710{ 708{
711 int error; 709 int error;
712 710
713 error = driver_register(&drv->driver); 711 error = driver_attach(&drv->driver);
714 if (error) 712 if (error)
715 printk(KERN_ERR 713 printk(KERN_ERR
716 "gameport: driver_register() failed for %s, error: %d\n", 714 "gameport: driver_attach() failed for %s, error: %d\n",
717 drv->driver.name, error); 715 drv->driver.name, error);
718} 716}
719 717
diff --git a/drivers/input/input.c b/drivers/input/input.c
index d44065d2e662..e54e002665b0 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -29,6 +29,23 @@ MODULE_LICENSE("GPL");
29 29
30#define INPUT_DEVICES 256 30#define INPUT_DEVICES 256
31 31
32/*
33 * EV_ABS events which should not be cached are listed here.
34 */
35static unsigned int input_abs_bypass_init_data[] __initdata = {
36 ABS_MT_TOUCH_MAJOR,
37 ABS_MT_TOUCH_MINOR,
38 ABS_MT_WIDTH_MAJOR,
39 ABS_MT_WIDTH_MINOR,
40 ABS_MT_ORIENTATION,
41 ABS_MT_POSITION_X,
42 ABS_MT_POSITION_Y,
43 ABS_MT_TOOL_TYPE,
44 ABS_MT_BLOB_ID,
45 0
46};
47static unsigned long input_abs_bypass[BITS_TO_LONGS(ABS_CNT)];
48
32static LIST_HEAD(input_dev_list); 49static LIST_HEAD(input_dev_list);
33static LIST_HEAD(input_handler_list); 50static LIST_HEAD(input_handler_list);
34 51
@@ -161,6 +178,10 @@ static void input_handle_event(struct input_dev *dev,
161 disposition = INPUT_PASS_TO_HANDLERS; 178 disposition = INPUT_PASS_TO_HANDLERS;
162 } 179 }
163 break; 180 break;
181 case SYN_MT_REPORT:
182 dev->sync = 0;
183 disposition = INPUT_PASS_TO_HANDLERS;
184 break;
164 } 185 }
165 break; 186 break;
166 187
@@ -192,6 +213,11 @@ static void input_handle_event(struct input_dev *dev,
192 case EV_ABS: 213 case EV_ABS:
193 if (is_event_supported(code, dev->absbit, ABS_MAX)) { 214 if (is_event_supported(code, dev->absbit, ABS_MAX)) {
194 215
216 if (test_bit(code, input_abs_bypass)) {
217 disposition = INPUT_PASS_TO_HANDLERS;
218 break;
219 }
220
195 value = input_defuzz_abs_event(value, 221 value = input_defuzz_abs_event(value,
196 dev->abs[code], dev->absfuzz[code]); 222 dev->abs[code], dev->absfuzz[code]);
197 223
@@ -1549,7 +1575,6 @@ int input_register_handle(struct input_handle *handle)
1549 return error; 1575 return error;
1550 list_add_tail_rcu(&handle->d_node, &dev->h_list); 1576 list_add_tail_rcu(&handle->d_node, &dev->h_list);
1551 mutex_unlock(&dev->mutex); 1577 mutex_unlock(&dev->mutex);
1552 synchronize_rcu();
1553 1578
1554 /* 1579 /*
1555 * Since we are supposed to be called from ->connect() 1580 * Since we are supposed to be called from ->connect()
@@ -1635,10 +1660,20 @@ static const struct file_operations input_fops = {
1635 .open = input_open_file, 1660 .open = input_open_file,
1636}; 1661};
1637 1662
1663static void __init input_init_abs_bypass(void)
1664{
1665 const unsigned int *p;
1666
1667 for (p = input_abs_bypass_init_data; *p; p++)
1668 input_abs_bypass[BIT_WORD(*p)] |= BIT_MASK(*p);
1669}
1670
1638static int __init input_init(void) 1671static int __init input_init(void)
1639{ 1672{
1640 int err; 1673 int err;
1641 1674
1675 input_init_abs_bypass();
1676
1642 err = class_register(&input_class); 1677 err = class_register(&input_class);
1643 if (err) { 1678 if (err) {
1644 printk(KERN_ERR "input: unable to register input_dev class\n"); 1679 printk(KERN_ERR "input: unable to register input_dev class\n");
diff --git a/drivers/input/joydev.c b/drivers/input/joydev.c
index 4224f0112849..012a5e753991 100644
--- a/drivers/input/joydev.c
+++ b/drivers/input/joydev.c
@@ -843,7 +843,13 @@ static const struct input_device_id joydev_blacklist[] = {
843 INPUT_DEVICE_ID_MATCH_KEYBIT, 843 INPUT_DEVICE_ID_MATCH_KEYBIT,
844 .evbit = { BIT_MASK(EV_KEY) }, 844 .evbit = { BIT_MASK(EV_KEY) },
845 .keybit = { [BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH) }, 845 .keybit = { [BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH) },
846 }, /* Avoid itouchpads, touchscreens and tablets */ 846 }, /* Avoid itouchpads and touchscreens */
847 {
848 .flags = INPUT_DEVICE_ID_MATCH_EVBIT |
849 INPUT_DEVICE_ID_MATCH_KEYBIT,
850 .evbit = { BIT_MASK(EV_KEY) },
851 .keybit = { [BIT_WORD(BTN_DIGI)] = BIT_MASK(BTN_DIGI) },
852 }, /* Avoid tablets, digitisers and similar devices */
847 { } /* Terminating entry */ 853 { } /* Terminating entry */
848}; 854};
849 855
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
index f999dc60c3b8..df3f8aa68115 100644
--- a/drivers/input/keyboard/atkbd.c
+++ b/drivers/input/keyboard/atkbd.c
@@ -880,7 +880,7 @@ static unsigned int atkbd_hp_zv6100_forced_release_keys[] = {
880}; 880};
881 881
882/* 882/*
883 * Samsung NC10 with Fn+F? key release not working 883 * Samsung NC10,NC20 with Fn+F? key release not working
884 */ 884 */
885static unsigned int atkbd_samsung_forced_release_keys[] = { 885static unsigned int atkbd_samsung_forced_release_keys[] = {
886 0x82, 0x83, 0x84, 0x86, 0x88, 0x89, 0xb3, 0xf7, 0xf9, -1U 886 0x82, 0x83, 0x84, 0x86, 0x88, 0x89, 0xb3, 0xf7, 0xf9, -1U
@@ -895,6 +895,13 @@ static unsigned int atkbd_amilo_pa1510_forced_release_keys[] = {
895}; 895};
896 896
897/* 897/*
898 * Amilo Xi 3650 key release for light touch bar not working
899 */
900static unsigned int atkbd_amilo_xi3650_forced_release_keys[] = {
901 0x67, 0xed, 0x90, 0xa2, 0x99, 0xa4, 0xae, 0xb0, -1U
902};
903
904/*
898 * atkbd_set_keycode_table() initializes keyboard's keycode table 905 * atkbd_set_keycode_table() initializes keyboard's keycode table
899 * according to the selected scancode set 906 * according to the selected scancode set
900 */ 907 */
@@ -1534,6 +1541,24 @@ static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = {
1534 .driver_data = atkbd_samsung_forced_release_keys, 1541 .driver_data = atkbd_samsung_forced_release_keys,
1535 }, 1542 },
1536 { 1543 {
1544 .ident = "Samsung NC20",
1545 .matches = {
1546 DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
1547 DMI_MATCH(DMI_PRODUCT_NAME, "NC20"),
1548 },
1549 .callback = atkbd_setup_forced_release,
1550 .driver_data = atkbd_samsung_forced_release_keys,
1551 },
1552 {
1553 .ident = "Samsung SQ45S70S",
1554 .matches = {
1555 DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
1556 DMI_MATCH(DMI_PRODUCT_NAME, "SQ45S70S"),
1557 },
1558 .callback = atkbd_setup_forced_release,
1559 .driver_data = atkbd_samsung_forced_release_keys,
1560 },
1561 {
1537 .ident = "Fujitsu Amilo PA 1510", 1562 .ident = "Fujitsu Amilo PA 1510",
1538 .matches = { 1563 .matches = {
1539 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), 1564 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
@@ -1542,6 +1567,15 @@ static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = {
1542 .callback = atkbd_setup_forced_release, 1567 .callback = atkbd_setup_forced_release,
1543 .driver_data = atkbd_amilo_pa1510_forced_release_keys, 1568 .driver_data = atkbd_amilo_pa1510_forced_release_keys,
1544 }, 1569 },
1570 {
1571 .ident = "Fujitsu Amilo Xi 3650",
1572 .matches = {
1573 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
1574 DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Xi 3650"),
1575 },
1576 .callback = atkbd_setup_forced_release,
1577 .driver_data = atkbd_amilo_xi3650_forced_release_keys,
1578 },
1545 { } 1579 { }
1546}; 1580};
1547 1581
diff --git a/drivers/input/keyboard/bf54x-keys.c b/drivers/input/keyboard/bf54x-keys.c
index e94b7d735aca..d427f322e207 100644
--- a/drivers/input/keyboard/bf54x-keys.c
+++ b/drivers/input/keyboard/bf54x-keys.c
@@ -252,7 +252,7 @@ static int __devinit bfin_kpad_probe(struct platform_device *pdev)
252 } 252 }
253 253
254 error = request_irq(bf54x_kpad->irq, bfin_kpad_isr, 254 error = request_irq(bf54x_kpad->irq, bfin_kpad_isr,
255 IRQF_SAMPLE_RANDOM, DRV_NAME, pdev); 255 0, DRV_NAME, pdev);
256 if (error) { 256 if (error) {
257 printk(KERN_ERR DRV_NAME 257 printk(KERN_ERR DRV_NAME
258 ": unable to claim irq %d; error %d\n", 258 ": unable to claim irq %d; error %d\n",
diff --git a/drivers/input/keyboard/omap-keypad.c b/drivers/input/keyboard/omap-keypad.c
index 058fa8b02c21..87ec7b18ac69 100644
--- a/drivers/input/keyboard/omap-keypad.c
+++ b/drivers/input/keyboard/omap-keypad.c
@@ -100,8 +100,20 @@ static irqreturn_t omap_kp_interrupt(int irq, void *dev_id)
100 /* disable keyboard interrupt and schedule for handling */ 100 /* disable keyboard interrupt and schedule for handling */
101 if (cpu_is_omap24xx()) { 101 if (cpu_is_omap24xx()) {
102 int i; 102 int i;
103 for (i = 0; i < omap_kp->rows; i++) 103
104 disable_irq(gpio_to_irq(row_gpios[i])); 104 for (i = 0; i < omap_kp->rows; i++) {
105 int gpio_irq = gpio_to_irq(row_gpios[i]);
106 /*
107 * The interrupt which we're currently handling should
108 * be disabled _nosync() to avoid deadlocks waiting
109 * for this handler to complete. All others should
110 * be disabled the regular way for SMP safety.
111 */
112 if (gpio_irq == irq)
113 disable_irq_nosync(gpio_irq);
114 else
115 disable_irq(gpio_irq);
116 }
105 } else 117 } else
106 /* disable keyboard interrupt and schedule for handling */ 118 /* disable keyboard interrupt and schedule for handling */
107 omap_writew(1, OMAP_MPUIO_BASE + OMAP_MPUIO_KBD_MASKIT); 119 omap_writew(1, OMAP_MPUIO_BASE + OMAP_MPUIO_KBD_MASKIT);
diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
index 203abac1e23e..5c0a631d1455 100644
--- a/drivers/input/misc/Kconfig
+++ b/drivers/input/misc/Kconfig
@@ -214,7 +214,7 @@ config INPUT_SGI_BTNS
214 214
215config HP_SDC_RTC 215config HP_SDC_RTC
216 tristate "HP SDC Real Time Clock" 216 tristate "HP SDC Real Time Clock"
217 depends on GSC || HP300 217 depends on (GSC || HP300) && SERIO
218 select HP_SDC 218 select HP_SDC
219 help 219 help
220 Say Y here if you want to support the built-in real time clock 220 Say Y here if you want to support the built-in real time clock
diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
index cbedf957cc58..daecc75c72e6 100644
--- a/drivers/input/mouse/alps.c
+++ b/drivers/input/mouse/alps.c
@@ -37,6 +37,7 @@
37#define ALPS_FW_BK_2 0x40 37#define ALPS_FW_BK_2 0x40
38 38
39static const struct alps_model_info alps_model_data[] = { 39static const struct alps_model_info alps_model_data[] = {
40 { { 0x32, 0x02, 0x14 }, 0xf8, 0xf8, ALPS_PASS | ALPS_DUALPOINT }, /* Toshiba Salellite Pro M10 */
40 { { 0x33, 0x02, 0x0a }, 0x88, 0xf8, ALPS_OLDPROTO }, /* UMAX-530T */ 41 { { 0x33, 0x02, 0x0a }, 0x88, 0xf8, ALPS_OLDPROTO }, /* UMAX-530T */
41 { { 0x53, 0x02, 0x0a }, 0xf8, 0xf8, 0 }, 42 { { 0x53, 0x02, 0x0a }, 0xf8, 0xf8, 0 },
42 { { 0x53, 0x02, 0x14 }, 0xf8, 0xf8, 0 }, 43 { { 0x53, 0x02, 0x14 }, 0xf8, 0xf8, 0 },
diff --git a/drivers/input/mouse/appletouch.c b/drivers/input/mouse/appletouch.c
index 454b96112f03..e0140fdc02a5 100644
--- a/drivers/input/mouse/appletouch.c
+++ b/drivers/input/mouse/appletouch.c
@@ -255,15 +255,22 @@ MODULE_PARM_DESC(debug, "Activate debugging output");
255 */ 255 */
256static int atp_geyser_init(struct usb_device *udev) 256static int atp_geyser_init(struct usb_device *udev)
257{ 257{
258 char data[8]; 258 char *data;
259 int size; 259 int size;
260 int i; 260 int i;
261 int ret;
262
263 data = kmalloc(8, GFP_KERNEL);
264 if (!data) {
265 err("Out of memory");
266 return -ENOMEM;
267 }
261 268
262 size = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 269 size = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
263 ATP_GEYSER_MODE_READ_REQUEST_ID, 270 ATP_GEYSER_MODE_READ_REQUEST_ID,
264 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE, 271 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
265 ATP_GEYSER_MODE_REQUEST_VALUE, 272 ATP_GEYSER_MODE_REQUEST_VALUE,
266 ATP_GEYSER_MODE_REQUEST_INDEX, &data, 8, 5000); 273 ATP_GEYSER_MODE_REQUEST_INDEX, data, 8, 5000);
267 274
268 if (size != 8) { 275 if (size != 8) {
269 dprintk("atp_geyser_init: read error\n"); 276 dprintk("atp_geyser_init: read error\n");
@@ -271,7 +278,8 @@ static int atp_geyser_init(struct usb_device *udev)
271 dprintk("appletouch[%d]: %d\n", i, data[i]); 278 dprintk("appletouch[%d]: %d\n", i, data[i]);
272 279
273 err("Failed to read mode from device."); 280 err("Failed to read mode from device.");
274 return -EIO; 281 ret = -EIO;
282 goto out_free;
275 } 283 }
276 284
277 /* Apply the mode switch */ 285 /* Apply the mode switch */
@@ -281,7 +289,7 @@ static int atp_geyser_init(struct usb_device *udev)
281 ATP_GEYSER_MODE_WRITE_REQUEST_ID, 289 ATP_GEYSER_MODE_WRITE_REQUEST_ID,
282 USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE, 290 USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
283 ATP_GEYSER_MODE_REQUEST_VALUE, 291 ATP_GEYSER_MODE_REQUEST_VALUE,
284 ATP_GEYSER_MODE_REQUEST_INDEX, &data, 8, 5000); 292 ATP_GEYSER_MODE_REQUEST_INDEX, data, 8, 5000);
285 293
286 if (size != 8) { 294 if (size != 8) {
287 dprintk("atp_geyser_init: write error\n"); 295 dprintk("atp_geyser_init: write error\n");
@@ -289,9 +297,13 @@ static int atp_geyser_init(struct usb_device *udev)
289 dprintk("appletouch[%d]: %d\n", i, data[i]); 297 dprintk("appletouch[%d]: %d\n", i, data[i]);
290 298
291 err("Failed to request geyser raw mode"); 299 err("Failed to request geyser raw mode");
292 return -EIO; 300 ret = -EIO;
301 goto out_free;
293 } 302 }
294 return 0; 303 ret = 0;
304out_free:
305 kfree(data);
306 return ret;
295} 307}
296 308
297/* 309/*
diff --git a/drivers/input/mouse/bcm5974.c b/drivers/input/mouse/bcm5974.c
index 2998a6ac9ae4..2d8fc0bf6923 100644
--- a/drivers/input/mouse/bcm5974.c
+++ b/drivers/input/mouse/bcm5974.c
@@ -51,6 +51,10 @@
51#define USB_DEVICE_ID_APPLE_WELLSPRING2_ANSI 0x0230 51#define USB_DEVICE_ID_APPLE_WELLSPRING2_ANSI 0x0230
52#define USB_DEVICE_ID_APPLE_WELLSPRING2_ISO 0x0231 52#define USB_DEVICE_ID_APPLE_WELLSPRING2_ISO 0x0231
53#define USB_DEVICE_ID_APPLE_WELLSPRING2_JIS 0x0232 53#define USB_DEVICE_ID_APPLE_WELLSPRING2_JIS 0x0232
54/* Macbook5,1 (unibody), aka wellspring3 */
55#define USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI 0x0236
56#define USB_DEVICE_ID_APPLE_WELLSPRING3_ISO 0x0237
57#define USB_DEVICE_ID_APPLE_WELLSPRING3_JIS 0x0238
54 58
55#define BCM5974_DEVICE(prod) { \ 59#define BCM5974_DEVICE(prod) { \
56 .match_flags = (USB_DEVICE_ID_MATCH_DEVICE | \ 60 .match_flags = (USB_DEVICE_ID_MATCH_DEVICE | \
@@ -72,6 +76,10 @@ static const struct usb_device_id bcm5974_table[] = {
72 BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING2_ANSI), 76 BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING2_ANSI),
73 BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING2_ISO), 77 BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING2_ISO),
74 BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING2_JIS), 78 BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING2_JIS),
79 /* Macbook5,1 */
80 BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI),
81 BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING3_ISO),
82 BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING3_JIS),
75 /* Terminating entry */ 83 /* Terminating entry */
76 {} 84 {}
77}; 85};
@@ -96,14 +104,23 @@ struct bt_data {
96 u8 rel_y; /* relative y coordinate */ 104 u8 rel_y; /* relative y coordinate */
97}; 105};
98 106
99/* trackpad header structure */ 107/* trackpad header types */
100struct tp_header { 108enum tp_type {
101 u8 unknown1[16]; /* constants, timers, etc */ 109 TYPE1, /* plain trackpad */
102 u8 fingers; /* number of fingers on trackpad */ 110 TYPE2 /* button integrated in trackpad */
103 u8 unknown2[9]; /* constants, timers, etc */
104}; 111};
105 112
106/* trackpad finger structure */ 113/* trackpad finger data offsets, le16-aligned */
114#define FINGER_TYPE1 (13 * sizeof(__le16))
115#define FINGER_TYPE2 (15 * sizeof(__le16))
116
117/* trackpad button data offsets */
118#define BUTTON_TYPE2 15
119
120/* list of device capability bits */
121#define HAS_INTEGRATED_BUTTON 1
122
123/* trackpad finger structure, le16-aligned */
107struct tp_finger { 124struct tp_finger {
108 __le16 origin; /* zero when switching track finger */ 125 __le16 origin; /* zero when switching track finger */
109 __le16 abs_x; /* absolute x coodinate */ 126 __le16 abs_x; /* absolute x coodinate */
@@ -117,13 +134,11 @@ struct tp_finger {
117 __le16 force_minor; /* trackpad force, minor axis? */ 134 __le16 force_minor; /* trackpad force, minor axis? */
118 __le16 unused[3]; /* zeros */ 135 __le16 unused[3]; /* zeros */
119 __le16 multi; /* one finger: varies, more fingers: constant */ 136 __le16 multi; /* one finger: varies, more fingers: constant */
120}; 137} __attribute__((packed,aligned(2)));
121 138
122/* trackpad data structure, empirically at least ten fingers */ 139/* trackpad finger data size, empirically at least ten fingers */
123struct tp_data { 140#define SIZEOF_FINGER sizeof(struct tp_finger)
124 struct tp_header header; 141#define SIZEOF_ALL_FINGERS (16 * SIZEOF_FINGER)
125 struct tp_finger finger[16];
126};
127 142
128/* device-specific parameters */ 143/* device-specific parameters */
129struct bcm5974_param { 144struct bcm5974_param {
@@ -136,9 +151,12 @@ struct bcm5974_param {
136/* device-specific configuration */ 151/* device-specific configuration */
137struct bcm5974_config { 152struct bcm5974_config {
138 int ansi, iso, jis; /* the product id of this device */ 153 int ansi, iso, jis; /* the product id of this device */
154 int caps; /* device capability bitmask */
139 int bt_ep; /* the endpoint of the button interface */ 155 int bt_ep; /* the endpoint of the button interface */
140 int bt_datalen; /* data length of the button interface */ 156 int bt_datalen; /* data length of the button interface */
141 int tp_ep; /* the endpoint of the trackpad interface */ 157 int tp_ep; /* the endpoint of the trackpad interface */
158 enum tp_type tp_type; /* type of trackpad interface */
159 int tp_offset; /* offset to trackpad finger data */
142 int tp_datalen; /* data length of the trackpad interface */ 160 int tp_datalen; /* data length of the trackpad interface */
143 struct bcm5974_param p; /* finger pressure limits */ 161 struct bcm5974_param p; /* finger pressure limits */
144 struct bcm5974_param w; /* finger width limits */ 162 struct bcm5974_param w; /* finger width limits */
@@ -158,7 +176,7 @@ struct bcm5974 {
158 struct urb *bt_urb; /* button usb request block */ 176 struct urb *bt_urb; /* button usb request block */
159 struct bt_data *bt_data; /* button transferred data */ 177 struct bt_data *bt_data; /* button transferred data */
160 struct urb *tp_urb; /* trackpad usb request block */ 178 struct urb *tp_urb; /* trackpad usb request block */
161 struct tp_data *tp_data; /* trackpad transferred data */ 179 u8 *tp_data; /* trackpad transferred data */
162 int fingers; /* number of fingers on trackpad */ 180 int fingers; /* number of fingers on trackpad */
163}; 181};
164 182
@@ -183,8 +201,9 @@ static const struct bcm5974_config bcm5974_config_table[] = {
183 USB_DEVICE_ID_APPLE_WELLSPRING_ANSI, 201 USB_DEVICE_ID_APPLE_WELLSPRING_ANSI,
184 USB_DEVICE_ID_APPLE_WELLSPRING_ISO, 202 USB_DEVICE_ID_APPLE_WELLSPRING_ISO,
185 USB_DEVICE_ID_APPLE_WELLSPRING_JIS, 203 USB_DEVICE_ID_APPLE_WELLSPRING_JIS,
204 0,
186 0x84, sizeof(struct bt_data), 205 0x84, sizeof(struct bt_data),
187 0x81, sizeof(struct tp_data), 206 0x81, TYPE1, FINGER_TYPE1, FINGER_TYPE1 + SIZEOF_ALL_FINGERS,
188 { DIM_PRESSURE, DIM_PRESSURE / SN_PRESSURE, 0, 256 }, 207 { DIM_PRESSURE, DIM_PRESSURE / SN_PRESSURE, 0, 256 },
189 { DIM_WIDTH, DIM_WIDTH / SN_WIDTH, 0, 2048 }, 208 { DIM_WIDTH, DIM_WIDTH / SN_WIDTH, 0, 2048 },
190 { DIM_X, DIM_X / SN_COORD, -4824, 5342 }, 209 { DIM_X, DIM_X / SN_COORD, -4824, 5342 },
@@ -194,13 +213,26 @@ static const struct bcm5974_config bcm5974_config_table[] = {
194 USB_DEVICE_ID_APPLE_WELLSPRING2_ANSI, 213 USB_DEVICE_ID_APPLE_WELLSPRING2_ANSI,
195 USB_DEVICE_ID_APPLE_WELLSPRING2_ISO, 214 USB_DEVICE_ID_APPLE_WELLSPRING2_ISO,
196 USB_DEVICE_ID_APPLE_WELLSPRING2_JIS, 215 USB_DEVICE_ID_APPLE_WELLSPRING2_JIS,
216 0,
197 0x84, sizeof(struct bt_data), 217 0x84, sizeof(struct bt_data),
198 0x81, sizeof(struct tp_data), 218 0x81, TYPE1, FINGER_TYPE1, FINGER_TYPE1 + SIZEOF_ALL_FINGERS,
199 { DIM_PRESSURE, DIM_PRESSURE / SN_PRESSURE, 0, 256 }, 219 { DIM_PRESSURE, DIM_PRESSURE / SN_PRESSURE, 0, 256 },
200 { DIM_WIDTH, DIM_WIDTH / SN_WIDTH, 0, 2048 }, 220 { DIM_WIDTH, DIM_WIDTH / SN_WIDTH, 0, 2048 },
201 { DIM_X, DIM_X / SN_COORD, -4824, 4824 }, 221 { DIM_X, DIM_X / SN_COORD, -4824, 4824 },
202 { DIM_Y, DIM_Y / SN_COORD, -172, 4290 } 222 { DIM_Y, DIM_Y / SN_COORD, -172, 4290 }
203 }, 223 },
224 {
225 USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI,
226 USB_DEVICE_ID_APPLE_WELLSPRING3_ISO,
227 USB_DEVICE_ID_APPLE_WELLSPRING3_JIS,
228 HAS_INTEGRATED_BUTTON,
229 0x84, sizeof(struct bt_data),
230 0x81, TYPE2, FINGER_TYPE2, FINGER_TYPE2 + SIZEOF_ALL_FINGERS,
231 { DIM_PRESSURE, DIM_PRESSURE / SN_PRESSURE, 0, 300 },
232 { DIM_WIDTH, DIM_WIDTH / SN_WIDTH, 0, 2048 },
233 { DIM_X, DIM_X / SN_COORD, -4460, 5166 },
234 { DIM_Y, DIM_Y / SN_COORD, -75, 6700 }
235 },
204 {} 236 {}
205}; 237};
206 238
@@ -257,6 +289,7 @@ static void setup_events_to_report(struct input_dev *input_dev,
257 __set_bit(BTN_TOOL_FINGER, input_dev->keybit); 289 __set_bit(BTN_TOOL_FINGER, input_dev->keybit);
258 __set_bit(BTN_TOOL_DOUBLETAP, input_dev->keybit); 290 __set_bit(BTN_TOOL_DOUBLETAP, input_dev->keybit);
259 __set_bit(BTN_TOOL_TRIPLETAP, input_dev->keybit); 291 __set_bit(BTN_TOOL_TRIPLETAP, input_dev->keybit);
292 __set_bit(BTN_TOOL_QUADTAP, input_dev->keybit);
260 __set_bit(BTN_LEFT, input_dev->keybit); 293 __set_bit(BTN_LEFT, input_dev->keybit);
261} 294}
262 295
@@ -266,6 +299,11 @@ static int report_bt_state(struct bcm5974 *dev, int size)
266 if (size != sizeof(struct bt_data)) 299 if (size != sizeof(struct bt_data))
267 return -EIO; 300 return -EIO;
268 301
302 dprintk(7,
303 "bcm5974: button data: %x %x %x %x\n",
304 dev->bt_data->unknown1, dev->bt_data->button,
305 dev->bt_data->rel_x, dev->bt_data->rel_y);
306
269 input_report_key(dev->input, BTN_LEFT, dev->bt_data->button); 307 input_report_key(dev->input, BTN_LEFT, dev->bt_data->button);
270 input_sync(dev->input); 308 input_sync(dev->input);
271 309
@@ -276,29 +314,37 @@ static int report_bt_state(struct bcm5974 *dev, int size)
276static int report_tp_state(struct bcm5974 *dev, int size) 314static int report_tp_state(struct bcm5974 *dev, int size)
277{ 315{
278 const struct bcm5974_config *c = &dev->cfg; 316 const struct bcm5974_config *c = &dev->cfg;
279 const struct tp_finger *f = dev->tp_data->finger; 317 const struct tp_finger *f;
280 struct input_dev *input = dev->input; 318 struct input_dev *input = dev->input;
281 const int fingers = (size - 26) / 28; 319 int raw_p, raw_w, raw_x, raw_y, raw_n;
282 int raw_p, raw_w, raw_x, raw_y; 320 int ptest = 0, origin = 0, ibt = 0, nmin = 0, nmax = 0;
283 int ptest = 0, origin = 0, nmin = 0, nmax = 0;
284 int abs_p = 0, abs_w = 0, abs_x = 0, abs_y = 0; 321 int abs_p = 0, abs_w = 0, abs_x = 0, abs_y = 0;
285 322
286 if (size < 26 || (size - 26) % 28 != 0) 323 if (size < c->tp_offset || (size - c->tp_offset) % SIZEOF_FINGER != 0)
287 return -EIO; 324 return -EIO;
288 325
326 /* finger data, le16-aligned */
327 f = (const struct tp_finger *)(dev->tp_data + c->tp_offset);
328 raw_n = (size - c->tp_offset) / SIZEOF_FINGER;
329
289 /* always track the first finger; when detached, start over */ 330 /* always track the first finger; when detached, start over */
290 if (fingers) { 331 if (raw_n) {
291 raw_p = raw2int(f->force_major); 332 raw_p = raw2int(f->force_major);
292 raw_w = raw2int(f->size_major); 333 raw_w = raw2int(f->size_major);
293 raw_x = raw2int(f->abs_x); 334 raw_x = raw2int(f->abs_x);
294 raw_y = raw2int(f->abs_y); 335 raw_y = raw2int(f->abs_y);
295 336
296 dprintk(9, 337 dprintk(9,
297 "bcm5974: raw: p: %+05d w: %+05d x: %+05d y: %+05d\n", 338 "bcm5974: "
298 raw_p, raw_w, raw_x, raw_y); 339 "raw: p: %+05d w: %+05d x: %+05d y: %+05d n: %d\n",
340 raw_p, raw_w, raw_x, raw_y, raw_n);
299 341
300 ptest = int2bound(&c->p, raw_p); 342 ptest = int2bound(&c->p, raw_p);
301 origin = raw2int(f->origin); 343 origin = raw2int(f->origin);
344
345 /* set the integrated button if applicable */
346 if (c->tp_type == TYPE2)
347 ibt = raw2int(dev->tp_data[BUTTON_TYPE2]);
302 } 348 }
303 349
304 /* while tracking finger still valid, count all fingers */ 350 /* while tracking finger still valid, count all fingers */
@@ -307,12 +353,13 @@ static int report_tp_state(struct bcm5974 *dev, int size)
307 abs_w = int2bound(&c->w, raw_w); 353 abs_w = int2bound(&c->w, raw_w);
308 abs_x = int2bound(&c->x, raw_x - c->x.devmin); 354 abs_x = int2bound(&c->x, raw_x - c->x.devmin);
309 abs_y = int2bound(&c->y, c->y.devmax - raw_y); 355 abs_y = int2bound(&c->y, c->y.devmax - raw_y);
310 for (; f != dev->tp_data->finger + fingers; f++) { 356 while (raw_n--) {
311 ptest = int2bound(&c->p, raw2int(f->force_major)); 357 ptest = int2bound(&c->p, raw2int(f->force_major));
312 if (ptest > PRESSURE_LOW) 358 if (ptest > PRESSURE_LOW)
313 nmax++; 359 nmax++;
314 if (ptest > PRESSURE_HIGH) 360 if (ptest > PRESSURE_HIGH)
315 nmin++; 361 nmin++;
362 f++;
316 } 363 }
317 } 364 }
318 365
@@ -324,7 +371,8 @@ static int report_tp_state(struct bcm5974 *dev, int size)
324 input_report_key(input, BTN_TOUCH, dev->fingers > 0); 371 input_report_key(input, BTN_TOUCH, dev->fingers > 0);
325 input_report_key(input, BTN_TOOL_FINGER, dev->fingers == 1); 372 input_report_key(input, BTN_TOOL_FINGER, dev->fingers == 1);
326 input_report_key(input, BTN_TOOL_DOUBLETAP, dev->fingers == 2); 373 input_report_key(input, BTN_TOOL_DOUBLETAP, dev->fingers == 2);
327 input_report_key(input, BTN_TOOL_TRIPLETAP, dev->fingers > 2); 374 input_report_key(input, BTN_TOOL_TRIPLETAP, dev->fingers == 3);
375 input_report_key(input, BTN_TOOL_QUADTAP, dev->fingers > 3);
328 376
329 input_report_abs(input, ABS_PRESSURE, abs_p); 377 input_report_abs(input, ABS_PRESSURE, abs_p);
330 input_report_abs(input, ABS_TOOL_WIDTH, abs_w); 378 input_report_abs(input, ABS_TOOL_WIDTH, abs_w);
@@ -335,11 +383,15 @@ static int report_tp_state(struct bcm5974 *dev, int size)
335 383
336 dprintk(8, 384 dprintk(8,
337 "bcm5974: abs: p: %+05d w: %+05d x: %+05d y: %+05d " 385 "bcm5974: abs: p: %+05d w: %+05d x: %+05d y: %+05d "
338 "nmin: %d nmax: %d n: %d\n", 386 "nmin: %d nmax: %d n: %d ibt: %d\n", abs_p, abs_w,
339 abs_p, abs_w, abs_x, abs_y, nmin, nmax, dev->fingers); 387 abs_x, abs_y, nmin, nmax, dev->fingers, ibt);
340 388
341 } 389 }
342 390
391 /* type 2 reports button events via ibt only */
392 if (c->tp_type == TYPE2)
393 input_report_key(input, BTN_LEFT, ibt);
394
343 input_sync(input); 395 input_sync(input);
344 396
345 return 0; 397 return 0;
@@ -649,6 +701,8 @@ static int bcm5974_probe(struct usb_interface *iface,
649 input_dev->name = "bcm5974"; 701 input_dev->name = "bcm5974";
650 input_dev->phys = dev->phys; 702 input_dev->phys = dev->phys;
651 usb_to_input_id(dev->udev, &input_dev->id); 703 usb_to_input_id(dev->udev, &input_dev->id);
704 /* report driver capabilities via the version field */
705 input_dev->id.version = cfg->caps;
652 input_dev->dev.parent = &iface->dev; 706 input_dev->dev.parent = &iface->dev;
653 707
654 input_set_drvdata(input_dev, dev); 708 input_set_drvdata(input_dev, dev);
diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
index 6ab0eb1ada1c..4bc78892ba91 100644
--- a/drivers/input/mouse/elantech.c
+++ b/drivers/input/mouse/elantech.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * Elantech Touchpad driver (v5) 2 * Elantech Touchpad driver (v6)
3 * 3 *
4 * Copyright (C) 2007-2008 Arjan Opmeer <arjan@opmeer.net> 4 * Copyright (C) 2007-2009 Arjan Opmeer <arjan@opmeer.net>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify it 6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License version 2 as published 7 * under the terms of the GNU General Public License version 2 as published
@@ -178,6 +178,7 @@ static void elantech_report_absolute_v1(struct psmouse *psmouse)
178 struct elantech_data *etd = psmouse->private; 178 struct elantech_data *etd = psmouse->private;
179 unsigned char *packet = psmouse->packet; 179 unsigned char *packet = psmouse->packet;
180 int fingers; 180 int fingers;
181 static int old_fingers;
181 182
182 if (etd->fw_version_maj == 0x01) { 183 if (etd->fw_version_maj == 0x01) {
183 /* byte 0: D U p1 p2 1 p3 R L 184 /* byte 0: D U p1 p2 1 p3 R L
@@ -190,6 +191,14 @@ static void elantech_report_absolute_v1(struct psmouse *psmouse)
190 fingers = (packet[0] & 0xc0) >> 6; 191 fingers = (packet[0] & 0xc0) >> 6;
191 } 192 }
192 193
194 if (etd->jumpy_cursor) {
195 /* Discard packets that are likely to have bogus coordinates */
196 if (fingers > old_fingers) {
197 elantech_debug("elantech.c: discarding packet\n");
198 goto discard_packet_v1;
199 }
200 }
201
193 input_report_key(dev, BTN_TOUCH, fingers != 0); 202 input_report_key(dev, BTN_TOUCH, fingers != 0);
194 203
195 /* byte 2: x7 x6 x5 x4 x3 x2 x1 x0 204 /* byte 2: x7 x6 x5 x4 x3 x2 x1 x0
@@ -216,6 +225,9 @@ static void elantech_report_absolute_v1(struct psmouse *psmouse)
216 } 225 }
217 226
218 input_sync(dev); 227 input_sync(dev);
228
229 discard_packet_v1:
230 old_fingers = fingers;
219} 231}
220 232
221/* 233/*
@@ -363,9 +375,14 @@ static int elantech_set_absolute_mode(struct psmouse *psmouse)
363 rc = -1; 375 rc = -1;
364 break; 376 break;
365 } 377 }
378 }
379
380 if (rc == 0) {
366 /* 381 /*
367 * Read back reg 0x10. The touchpad is probably initalising 382 * Read back reg 0x10. For hardware version 1 we must make
368 * and not ready until we read back the value we just wrote. 383 * sure the absolute mode bit is set. For hardware version 2
384 * the touchpad is probably initalising and not ready until
385 * we read back the value we just wrote.
369 */ 386 */
370 do { 387 do {
371 rc = elantech_read_reg(psmouse, 0x10, &val); 388 rc = elantech_read_reg(psmouse, 0x10, &val);
@@ -373,12 +390,18 @@ static int elantech_set_absolute_mode(struct psmouse *psmouse)
373 break; 390 break;
374 tries--; 391 tries--;
375 elantech_debug("elantech.c: retrying read (%d).\n", 392 elantech_debug("elantech.c: retrying read (%d).\n",
376 tries); 393 tries);
377 msleep(ETP_READ_BACK_DELAY); 394 msleep(ETP_READ_BACK_DELAY);
378 } while (tries > 0); 395 } while (tries > 0);
379 if (rc) 396
397 if (rc) {
380 pr_err("elantech.c: failed to read back register 0x10.\n"); 398 pr_err("elantech.c: failed to read back register 0x10.\n");
381 break; 399 } else if (etd->hw_version == 1 &&
400 !(val & ETP_R10_ABSOLUTE_MODE)) {
401 pr_err("elantech.c: touchpad refuses "
402 "to switch to absolute mode.\n");
403 rc = -1;
404 }
382 } 405 }
383 406
384 if (rc) 407 if (rc)
@@ -662,6 +685,17 @@ int elantech_init(struct psmouse *psmouse)
662 param[0], param[1], param[2]); 685 param[0], param[1], param[2]);
663 etd->capabilities = param[0]; 686 etd->capabilities = param[0];
664 687
688 /*
689 * This firmware seems to suffer from misreporting coordinates when
690 * a touch action starts causing the mouse cursor or scrolled page
691 * to jump. Enable a workaround.
692 */
693 if (etd->fw_version_maj == 0x02 && etd->fw_version_min == 0x22) {
694 pr_info("elantech.c: firmware version 2.34 detected, "
695 "enabling jumpy cursor workaround\n");
696 etd->jumpy_cursor = 1;
697 }
698
665 if (elantech_set_absolute_mode(psmouse)) { 699 if (elantech_set_absolute_mode(psmouse)) {
666 pr_err("elantech.c: failed to put touchpad into absolute mode.\n"); 700 pr_err("elantech.c: failed to put touchpad into absolute mode.\n");
667 goto init_fail; 701 goto init_fail;
diff --git a/drivers/input/mouse/elantech.h b/drivers/input/mouse/elantech.h
index bee282b540bc..ed848cc80814 100644
--- a/drivers/input/mouse/elantech.h
+++ b/drivers/input/mouse/elantech.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * Elantech Touchpad driver (v5) 2 * Elantech Touchpad driver (v6)
3 * 3 *
4 * Copyright (C) 2007-2008 Arjan Opmeer <arjan@opmeer.net> 4 * Copyright (C) 2007-2009 Arjan Opmeer <arjan@opmeer.net>
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify it 6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License version 2 as published 7 * under the terms of the GNU General Public License version 2 as published
@@ -104,6 +104,7 @@ struct elantech_data {
104 unsigned char fw_version_min; 104 unsigned char fw_version_min;
105 unsigned char hw_version; 105 unsigned char hw_version;
106 unsigned char paritycheck; 106 unsigned char paritycheck;
107 unsigned char jumpy_cursor;
107 unsigned char parity[256]; 108 unsigned char parity[256];
108}; 109};
109 110
diff --git a/drivers/input/mouse/lifebook.c b/drivers/input/mouse/lifebook.c
index df81b0aaa9f8..15ac3205ac05 100644
--- a/drivers/input/mouse/lifebook.c
+++ b/drivers/input/mouse/lifebook.c
@@ -61,6 +61,12 @@ static const struct dmi_system_id lifebook_dmi_table[] = {
61 }, 61 },
62 }, 62 },
63 { 63 {
64 .ident = "Lifebook B-2130",
65 .matches = {
66 DMI_MATCH(DMI_BOARD_NAME, "ZEPHYR"),
67 },
68 },
69 {
64 .ident = "Lifebook B213x/B2150", 70 .ident = "Lifebook B213x/B2150",
65 .matches = { 71 .matches = {
66 DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook B2131/B2133/B2150"), 72 DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook B2131/B2133/B2150"),
diff --git a/drivers/input/mouse/maplemouse.c b/drivers/input/mouse/maplemouse.c
index d196abfb68bc..5f278176eb9b 100644
--- a/drivers/input/mouse/maplemouse.c
+++ b/drivers/input/mouse/maplemouse.c
@@ -2,8 +2,8 @@
2 * SEGA Dreamcast mouse driver 2 * SEGA Dreamcast mouse driver
3 * Based on drivers/usb/usbmouse.c 3 * Based on drivers/usb/usbmouse.c
4 * 4 *
5 * Copyright Yaegashi Takeshi, 2001 5 * Copyright (c) Yaegashi Takeshi, 2001
6 * Adrian McMenamin, 2008 6 * Copyright (c) Adrian McMenamin, 2008 - 2009
7 */ 7 */
8 8
9#include <linux/kernel.h> 9#include <linux/kernel.h>
@@ -29,7 +29,7 @@ static void dc_mouse_callback(struct mapleq *mq)
29 struct maple_device *mapledev = mq->dev; 29 struct maple_device *mapledev = mq->dev;
30 struct dc_mouse *mse = maple_get_drvdata(mapledev); 30 struct dc_mouse *mse = maple_get_drvdata(mapledev);
31 struct input_dev *dev = mse->dev; 31 struct input_dev *dev = mse->dev;
32 unsigned char *res = mq->recvbuf; 32 unsigned char *res = mq->recvbuf->buf;
33 33
34 buttons = ~res[8]; 34 buttons = ~res[8];
35 relx = *(unsigned short *)(res + 12) - 512; 35 relx = *(unsigned short *)(res + 12) - 512;
@@ -47,7 +47,7 @@ static void dc_mouse_callback(struct mapleq *mq)
47 47
48static int dc_mouse_open(struct input_dev *dev) 48static int dc_mouse_open(struct input_dev *dev)
49{ 49{
50 struct dc_mouse *mse = dev->dev.platform_data; 50 struct dc_mouse *mse = maple_get_drvdata(to_maple_dev(&dev->dev));
51 51
52 maple_getcond_callback(mse->mdev, dc_mouse_callback, HZ/50, 52 maple_getcond_callback(mse->mdev, dc_mouse_callback, HZ/50,
53 MAPLE_FUNC_MOUSE); 53 MAPLE_FUNC_MOUSE);
@@ -57,29 +57,33 @@ static int dc_mouse_open(struct input_dev *dev)
57 57
58static void dc_mouse_close(struct input_dev *dev) 58static void dc_mouse_close(struct input_dev *dev)
59{ 59{
60 struct dc_mouse *mse = dev->dev.platform_data; 60 struct dc_mouse *mse = maple_get_drvdata(to_maple_dev(&dev->dev));
61 61
62 maple_getcond_callback(mse->mdev, dc_mouse_callback, 0, 62 maple_getcond_callback(mse->mdev, dc_mouse_callback, 0,
63 MAPLE_FUNC_MOUSE); 63 MAPLE_FUNC_MOUSE);
64} 64}
65 65
66 66/* allow the mouse to be used */
67static int __devinit probe_maple_mouse(struct device *dev) 67static int __devinit probe_maple_mouse(struct device *dev)
68{ 68{
69 struct maple_device *mdev = to_maple_dev(dev); 69 struct maple_device *mdev = to_maple_dev(dev);
70 struct maple_driver *mdrv = to_maple_driver(dev->driver); 70 struct maple_driver *mdrv = to_maple_driver(dev->driver);
71 int error;
71 struct input_dev *input_dev; 72 struct input_dev *input_dev;
72 struct dc_mouse *mse; 73 struct dc_mouse *mse;
73 int error;
74 74
75 mse = kzalloc(sizeof(struct dc_mouse), GFP_KERNEL); 75 mse = kzalloc(sizeof(struct dc_mouse), GFP_KERNEL);
76 input_dev = input_allocate_device(); 76 if (!mse) {
77
78 if (!mse || !input_dev) {
79 error = -ENOMEM; 77 error = -ENOMEM;
80 goto fail; 78 goto fail;
81 } 79 }
82 80
81 input_dev = input_allocate_device();
82 if (!input_dev) {
83 error = -ENOMEM;
84 goto fail_nomem;
85 }
86
83 mse->dev = input_dev; 87 mse->dev = input_dev;
84 mse->mdev = mdev; 88 mse->mdev = mdev;
85 89
@@ -89,25 +93,24 @@ static int __devinit probe_maple_mouse(struct device *dev)
89 BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE); 93 BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE);
90 input_dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y) | 94 input_dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y) |
91 BIT_MASK(REL_WHEEL); 95 BIT_MASK(REL_WHEEL);
92 input_dev->name = mdev->product_name;
93 input_dev->id.bustype = BUS_HOST;
94 input_dev->open = dc_mouse_open; 96 input_dev->open = dc_mouse_open;
95 input_dev->close = dc_mouse_close; 97 input_dev->close = dc_mouse_close;
98 input_dev->name = mdev->product_name;
99 input_dev->id.bustype = BUS_HOST;
100 error = input_register_device(input_dev);
101 if (error)
102 goto fail_register;
96 103
97 mdev->driver = mdrv; 104 mdev->driver = mdrv;
98 maple_set_drvdata(mdev, mse); 105 maple_set_drvdata(mdev, mse);
99 106
100 error = input_register_device(input_dev); 107 return error;
101 if (error)
102 goto fail;
103
104 return 0;
105 108
106fail: 109fail_register:
107 input_free_device(input_dev); 110 input_free_device(input_dev);
108 maple_set_drvdata(mdev, NULL); 111fail_nomem:
109 kfree(mse); 112 kfree(mse);
110 mdev->driver = NULL; 113fail:
111 return error; 114 return error;
112} 115}
113 116
diff --git a/drivers/input/mouse/pc110pad.c b/drivers/input/mouse/pc110pad.c
index f63995f854ff..3941f97cfa60 100644
--- a/drivers/input/mouse/pc110pad.c
+++ b/drivers/input/mouse/pc110pad.c
@@ -108,7 +108,6 @@ static int pc110pad_open(struct input_dev *dev)
108 */ 108 */
109static int __init pc110pad_init(void) 109static int __init pc110pad_init(void)
110{ 110{
111 struct pci_dev *dev;
112 int err; 111 int err;
113 112
114 if (!no_pci_devices()) 113 if (!no_pci_devices())
diff --git a/drivers/input/serio/hp_sdc.c b/drivers/input/serio/hp_sdc.c
index bfe49243f38b..1c9410d1822c 100644
--- a/drivers/input/serio/hp_sdc.c
+++ b/drivers/input/serio/hp_sdc.c
@@ -819,6 +819,7 @@ static const struct parisc_device_id hp_sdc_tbl[] = {
819MODULE_DEVICE_TABLE(parisc, hp_sdc_tbl); 819MODULE_DEVICE_TABLE(parisc, hp_sdc_tbl);
820 820
821static int __init hp_sdc_init_hppa(struct parisc_device *d); 821static int __init hp_sdc_init_hppa(struct parisc_device *d);
822static struct delayed_work moduleloader_work;
822 823
823static struct parisc_driver hp_sdc_driver = { 824static struct parisc_driver hp_sdc_driver = {
824 .name = "hp_sdc", 825 .name = "hp_sdc",
@@ -930,8 +931,15 @@ static int __init hp_sdc_init(void)
930 931
931#if defined(__hppa__) 932#if defined(__hppa__)
932 933
934static void request_module_delayed(struct work_struct *work)
935{
936 request_module("hp_sdc_mlc");
937}
938
933static int __init hp_sdc_init_hppa(struct parisc_device *d) 939static int __init hp_sdc_init_hppa(struct parisc_device *d)
934{ 940{
941 int ret;
942
935 if (!d) 943 if (!d)
936 return 1; 944 return 1;
937 if (hp_sdc.dev != NULL) 945 if (hp_sdc.dev != NULL)
@@ -944,13 +952,26 @@ static int __init hp_sdc_init_hppa(struct parisc_device *d)
944 hp_sdc.data_io = d->hpa.start + 0x800; 952 hp_sdc.data_io = d->hpa.start + 0x800;
945 hp_sdc.status_io = d->hpa.start + 0x801; 953 hp_sdc.status_io = d->hpa.start + 0x801;
946 954
947 return hp_sdc_init(); 955 INIT_DELAYED_WORK(&moduleloader_work, request_module_delayed);
956
957 ret = hp_sdc_init();
958 /* after sucessfull initialization give SDC some time to settle
959 * and then load the hp_sdc_mlc upper layer driver */
960 if (!ret)
961 schedule_delayed_work(&moduleloader_work,
962 msecs_to_jiffies(2000));
963
964 return ret;
948} 965}
949 966
950#endif /* __hppa__ */ 967#endif /* __hppa__ */
951 968
952static void hp_sdc_exit(void) 969static void hp_sdc_exit(void)
953{ 970{
971 /* do nothing if we don't have a SDC */
972 if (!hp_sdc.dev)
973 return;
974
954 write_lock_irq(&hp_sdc.lock); 975 write_lock_irq(&hp_sdc.lock);
955 976
956 /* Turn off all maskable "sub-function" irq's. */ 977 /* Turn off all maskable "sub-function" irq's. */
@@ -969,6 +990,7 @@ static void hp_sdc_exit(void)
969 tasklet_kill(&hp_sdc.task); 990 tasklet_kill(&hp_sdc.task);
970 991
971#if defined(__hppa__) 992#if defined(__hppa__)
993 cancel_delayed_work_sync(&moduleloader_work);
972 if (unregister_parisc_driver(&hp_sdc_driver)) 994 if (unregister_parisc_driver(&hp_sdc_driver))
973 printk(KERN_WARNING PREFIX "Error unregistering HP SDC"); 995 printk(KERN_WARNING PREFIX "Error unregistering HP SDC");
974#endif 996#endif
diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
index 83ed2d56b924..fb8a3cd3ffd0 100644
--- a/drivers/input/serio/i8042-x86ia64io.h
+++ b/drivers/input/serio/i8042-x86ia64io.h
@@ -377,6 +377,24 @@ static struct dmi_system_id __initdata i8042_dmi_nomux_table[] = {
377 { } 377 { }
378}; 378};
379 379
380static struct dmi_system_id __initdata i8042_dmi_reset_table[] = {
381 {
382 .ident = "MSI Wind U-100",
383 .matches = {
384 DMI_MATCH(DMI_BOARD_NAME, "U-100"),
385 DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"),
386 },
387 },
388 {
389 .ident = "LG Electronics X110",
390 .matches = {
391 DMI_MATCH(DMI_BOARD_NAME, "X110"),
392 DMI_MATCH(DMI_BOARD_VENDOR, "LG Electronics Inc."),
393 },
394 },
395 { }
396};
397
380#ifdef CONFIG_PNP 398#ifdef CONFIG_PNP
381static struct dmi_system_id __initdata i8042_dmi_nopnp_table[] = { 399static struct dmi_system_id __initdata i8042_dmi_nopnp_table[] = {
382 { 400 {
@@ -386,6 +404,13 @@ static struct dmi_system_id __initdata i8042_dmi_nopnp_table[] = {
386 DMI_MATCH(DMI_BOARD_VENDOR, "Intel Corporation"), 404 DMI_MATCH(DMI_BOARD_VENDOR, "Intel Corporation"),
387 }, 405 },
388 }, 406 },
407 {
408 .ident = "MSI Wind U-100",
409 .matches = {
410 DMI_MATCH(DMI_BOARD_NAME, "U-100"),
411 DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"),
412 },
413 },
389 { } 414 { }
390}; 415};
391#endif 416#endif
@@ -698,6 +723,9 @@ static int __init i8042_platform_init(void)
698#endif 723#endif
699 724
700#ifdef CONFIG_X86 725#ifdef CONFIG_X86
726 if (dmi_check_system(i8042_dmi_reset_table))
727 i8042_reset = 1;
728
701 if (dmi_check_system(i8042_dmi_noloop_table)) 729 if (dmi_check_system(i8042_dmi_noloop_table))
702 i8042_noloop = 1; 730 i8042_noloop = 1;
703 731
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
index 170f71ee5772..3cffb704e374 100644
--- a/drivers/input/serio/i8042.c
+++ b/drivers/input/serio/i8042.c
@@ -712,22 +712,43 @@ static int i8042_controller_check(void)
712static int i8042_controller_selftest(void) 712static int i8042_controller_selftest(void)
713{ 713{
714 unsigned char param; 714 unsigned char param;
715 int i = 0;
715 716
716 if (!i8042_reset) 717 if (!i8042_reset)
717 return 0; 718 return 0;
718 719
719 if (i8042_command(&param, I8042_CMD_CTL_TEST)) { 720 /*
720 printk(KERN_ERR "i8042.c: i8042 controller self test timeout.\n"); 721 * We try this 5 times; on some really fragile systems this does not
721 return -ENODEV; 722 * take the first time...
722 } 723 */
724 do {
725
726 if (i8042_command(&param, I8042_CMD_CTL_TEST)) {
727 printk(KERN_ERR "i8042.c: i8042 controller self test timeout.\n");
728 return -ENODEV;
729 }
730
731 if (param == I8042_RET_CTL_TEST)
732 return 0;
723 733
724 if (param != I8042_RET_CTL_TEST) {
725 printk(KERN_ERR "i8042.c: i8042 controller selftest failed. (%#x != %#x)\n", 734 printk(KERN_ERR "i8042.c: i8042 controller selftest failed. (%#x != %#x)\n",
726 param, I8042_RET_CTL_TEST); 735 param, I8042_RET_CTL_TEST);
727 return -EIO; 736 msleep(50);
728 } 737 } while (i++ < 5);
729 738
739#ifdef CONFIG_X86
740 /*
741 * On x86, we don't fail entire i8042 initialization if controller
742 * reset fails in hopes that keyboard port will still be functional
743 * and user will still get a working keyboard. This is especially
744 * important on netbooks. On other arches we trust hardware more.
745 */
746 printk(KERN_INFO
747 "i8042: giving up on controller selftest, continuing anyway...\n");
730 return 0; 748 return 0;
749#else
750 return -EIO;
751#endif
731} 752}
732 753
733/* 754/*
diff --git a/drivers/input/serio/sa1111ps2.c b/drivers/input/serio/sa1111ps2.c
index 57953c0eb82f..f412c69478a8 100644
--- a/drivers/input/serio/sa1111ps2.c
+++ b/drivers/input/serio/sa1111ps2.c
@@ -77,7 +77,7 @@ static irqreturn_t ps2_txint(int irq, void *dev_id)
77 spin_lock(&ps2if->lock); 77 spin_lock(&ps2if->lock);
78 status = sa1111_readl(ps2if->base + SA1111_PS2STAT); 78 status = sa1111_readl(ps2if->base + SA1111_PS2STAT);
79 if (ps2if->head == ps2if->tail) { 79 if (ps2if->head == ps2if->tail) {
80 disable_irq(irq); 80 disable_irq_nosync(irq);
81 /* done */ 81 /* done */
82 } else if (status & PS2STAT_TXE) { 82 } else if (status & PS2STAT_TXE) {
83 sa1111_writel(ps2if->buf[ps2if->tail], ps2if->base + SA1111_PS2DATA); 83 sa1111_writel(ps2if->buf[ps2if->tail], ps2if->base + SA1111_PS2DATA);
diff --git a/drivers/input/tablet/wacom.h b/drivers/input/tablet/wacom.h
index 677680e9f54f..9710bfd49cf9 100644
--- a/drivers/input/tablet/wacom.h
+++ b/drivers/input/tablet/wacom.h
@@ -11,7 +11,7 @@
11 * Copyright (c) 2000 Daniel Egger <egger@suse.de> 11 * Copyright (c) 2000 Daniel Egger <egger@suse.de>
12 * Copyright (c) 2001 Frederic Lepied <flepied@mandrakesoft.com> 12 * Copyright (c) 2001 Frederic Lepied <flepied@mandrakesoft.com>
13 * Copyright (c) 2004 Panagiotis Issaris <panagiotis.issaris@mech.kuleuven.ac.be> 13 * Copyright (c) 2004 Panagiotis Issaris <panagiotis.issaris@mech.kuleuven.ac.be>
14 * Copyright (c) 2002-2008 Ping Cheng <pingc@wacom.com> 14 * Copyright (c) 2002-2009 Ping Cheng <pingc@wacom.com>
15 * 15 *
16 * ChangeLog: 16 * ChangeLog:
17 * v0.1 (vp) - Initial release 17 * v0.1 (vp) - Initial release
@@ -67,6 +67,7 @@
67 * v1.47 (pc) - Added support for Bamboo 67 * v1.47 (pc) - Added support for Bamboo
68 * v1.48 (pc) - Added support for Bamboo1, BambooFun, and Cintiq 12WX 68 * v1.48 (pc) - Added support for Bamboo1, BambooFun, and Cintiq 12WX
69 * v1.49 (pc) - Added support for USB Tablet PC (0x90, 0x93, and 0x9A) 69 * v1.49 (pc) - Added support for USB Tablet PC (0x90, 0x93, and 0x9A)
70 * v1.50 (pc) - Fixed a TabletPC touch bug in 2.6.28
70 */ 71 */
71 72
72/* 73/*
@@ -87,7 +88,7 @@
87/* 88/*
88 * Version Information 89 * Version Information
89 */ 90 */
90#define DRIVER_VERSION "v1.49" 91#define DRIVER_VERSION "v1.50"
91#define DRIVER_AUTHOR "Vojtech Pavlik <vojtech@ucw.cz>" 92#define DRIVER_AUTHOR "Vojtech Pavlik <vojtech@ucw.cz>"
92#define DRIVER_DESC "USB Wacom Graphire and Wacom Intuos tablet driver" 93#define DRIVER_DESC "USB Wacom Graphire and Wacom Intuos tablet driver"
93#define DRIVER_LICENSE "GPL" 94#define DRIVER_LICENSE "GPL"
diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c
index 484496daa0f3..b8624f27abf9 100644
--- a/drivers/input/tablet/wacom_sys.c
+++ b/drivers/input/tablet/wacom_sys.c
@@ -289,6 +289,7 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi
289 5000); /* 5 secs */ 289 5000); /* 5 secs */
290 } while (result < 0 && limit++ < 5); 290 } while (result < 0 && limit++ < 5);
291 291
292 /* No need to parse the Descriptor. It isn't an error though */
292 if (result < 0) 293 if (result < 0)
293 goto out; 294 goto out;
294 295
@@ -368,9 +369,8 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi
368 } 369 }
369 } 370 }
370 371
371 result = 0;
372
373 out: 372 out:
373 result = 0;
374 kfree(report); 374 kfree(report);
375 return result; 375 return result;
376} 376}
@@ -425,6 +425,15 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
425 425
426 endpoint = &intf->cur_altsetting->endpoint[0].desc; 426 endpoint = &intf->cur_altsetting->endpoint[0].desc;
427 427
428 /* Initialize touch_x_max and touch_y_max in case it is not defined */
429 if (wacom_wac->features->type == TABLETPC) {
430 features->touch_x_max = 1023;
431 features->touch_y_max = 1023;
432 } else {
433 features->touch_x_max = 0;
434 features->touch_y_max = 0;
435 }
436
428 /* TabletPC need to retrieve the physical and logical maximum from report descriptor */ 437 /* TabletPC need to retrieve the physical and logical maximum from report descriptor */
429 if (wacom_wac->features->type == TABLETPC) { 438 if (wacom_wac->features->type == TABLETPC) {
430 if (usb_get_extra_descriptor(interface, HID_DEVICET_HID, &hid_desc)) { 439 if (usb_get_extra_descriptor(interface, HID_DEVICET_HID, &hid_desc)) {
diff --git a/drivers/input/touchscreen/ad7877.c b/drivers/input/touchscreen/ad7877.c
index e4728a28f492..ecaeb7e8e75e 100644
--- a/drivers/input/touchscreen/ad7877.c
+++ b/drivers/input/touchscreen/ad7877.c
@@ -736,8 +736,8 @@ static int __devinit ad7877_probe(struct spi_device *spi)
736 736
737 /* Request AD7877 /DAV GPIO interrupt */ 737 /* Request AD7877 /DAV GPIO interrupt */
738 738
739 err = request_irq(spi->irq, ad7877_irq, IRQF_TRIGGER_FALLING | 739 err = request_irq(spi->irq, ad7877_irq, IRQF_TRIGGER_FALLING,
740 IRQF_SAMPLE_RANDOM, spi->dev.driver->name, ts); 740 spi->dev.driver->name, ts);
741 if (err) { 741 if (err) {
742 dev_dbg(&spi->dev, "irq %d busy?\n", spi->irq); 742 dev_dbg(&spi->dev, "irq %d busy?\n", spi->irq);
743 goto err_free_mem; 743 goto err_free_mem;
diff --git a/drivers/input/touchscreen/ad7879.c b/drivers/input/touchscreen/ad7879.c
index ea4c61d68683..5d8a70398807 100644
--- a/drivers/input/touchscreen/ad7879.c
+++ b/drivers/input/touchscreen/ad7879.c
@@ -448,8 +448,7 @@ static int __devinit ad7879_construct(bus_device *bus, struct ad7879 *ts)
448 ad7879_setup(ts); 448 ad7879_setup(ts);
449 449
450 err = request_irq(bus->irq, ad7879_irq, 450 err = request_irq(bus->irq, ad7879_irq,
451 IRQF_TRIGGER_FALLING | IRQF_SAMPLE_RANDOM, 451 IRQF_TRIGGER_FALLING, bus->dev.driver->name, ts);
452 bus->dev.driver->name, ts);
453 452
454 if (err) { 453 if (err) {
455 dev_err(&bus->dev, "irq %d busy?\n", bus->irq); 454 dev_err(&bus->dev, "irq %d busy?\n", bus->irq);
diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c
index 056ac77e2cf0..2b01e56568f8 100644
--- a/drivers/input/touchscreen/ads7846.c
+++ b/drivers/input/touchscreen/ads7846.c
@@ -127,6 +127,8 @@ struct ads7846 {
127 void (*filter_cleanup)(void *data); 127 void (*filter_cleanup)(void *data);
128 int (*get_pendown_state)(void); 128 int (*get_pendown_state)(void);
129 int gpio_pendown; 129 int gpio_pendown;
130
131 void (*wait_for_sync)(void);
130}; 132};
131 133
132/* leave chip selected when we're done, for quicker re-select? */ 134/* leave chip selected when we're done, for quicker re-select? */
@@ -511,6 +513,10 @@ static int get_pendown_state(struct ads7846 *ts)
511 return !gpio_get_value(ts->gpio_pendown); 513 return !gpio_get_value(ts->gpio_pendown);
512} 514}
513 515
516static void null_wait_for_sync(void)
517{
518}
519
514/* 520/*
515 * PENIRQ only kicks the timer. The timer only reissues the SPI transfer, 521 * PENIRQ only kicks the timer. The timer only reissues the SPI transfer,
516 * to retrieve touchscreen status. 522 * to retrieve touchscreen status.
@@ -686,6 +692,7 @@ static void ads7846_rx_val(void *ads)
686 default: 692 default:
687 BUG(); 693 BUG();
688 } 694 }
695 ts->wait_for_sync();
689 status = spi_async(ts->spi, m); 696 status = spi_async(ts->spi, m);
690 if (status) 697 if (status)
691 dev_err(&ts->spi->dev, "spi_async --> %d\n", 698 dev_err(&ts->spi->dev, "spi_async --> %d\n",
@@ -723,6 +730,7 @@ static enum hrtimer_restart ads7846_timer(struct hrtimer *handle)
723 } else { 730 } else {
724 /* pen is still down, continue with the measurement */ 731 /* pen is still down, continue with the measurement */
725 ts->msg_idx = 0; 732 ts->msg_idx = 0;
733 ts->wait_for_sync();
726 status = spi_async(ts->spi, &ts->msg[0]); 734 status = spi_async(ts->spi, &ts->msg[0]);
727 if (status) 735 if (status)
728 dev_err(&ts->spi->dev, "spi_async --> %d\n", status); 736 dev_err(&ts->spi->dev, "spi_async --> %d\n", status);
@@ -746,7 +754,7 @@ static irqreturn_t ads7846_irq(int irq, void *handle)
746 * that here. (The "generic irq" framework may help...) 754 * that here. (The "generic irq" framework may help...)
747 */ 755 */
748 ts->irq_disabled = 1; 756 ts->irq_disabled = 1;
749 disable_irq(ts->spi->irq); 757 disable_irq_nosync(ts->spi->irq);
750 ts->pending = 1; 758 ts->pending = 1;
751 hrtimer_start(&ts->timer, ktime_set(0, TS_POLL_DELAY), 759 hrtimer_start(&ts->timer, ktime_set(0, TS_POLL_DELAY),
752 HRTIMER_MODE_REL); 760 HRTIMER_MODE_REL);
@@ -947,6 +955,8 @@ static int __devinit ads7846_probe(struct spi_device *spi)
947 ts->penirq_recheck_delay_usecs = 955 ts->penirq_recheck_delay_usecs =
948 pdata->penirq_recheck_delay_usecs; 956 pdata->penirq_recheck_delay_usecs;
949 957
958 ts->wait_for_sync = pdata->wait_for_sync ? : null_wait_for_sync;
959
950 snprintf(ts->phys, sizeof(ts->phys), "%s/input0", dev_name(&spi->dev)); 960 snprintf(ts->phys, sizeof(ts->phys), "%s/input0", dev_name(&spi->dev));
951 961
952 input_dev->name = "ADS784x Touchscreen"; 962 input_dev->name = "ADS784x Touchscreen";
diff --git a/drivers/input/touchscreen/da9034-ts.c b/drivers/input/touchscreen/da9034-ts.c
index fa67d782c3c3..3ffd4c4b170c 100644
--- a/drivers/input/touchscreen/da9034-ts.c
+++ b/drivers/input/touchscreen/da9034-ts.c
@@ -3,6 +3,7 @@
3 * 3 *
4 * Copyright (C) 2006-2008 Marvell International Ltd. 4 * Copyright (C) 2006-2008 Marvell International Ltd.
5 * Fengwei Yin <fengwei.yin@marvell.com> 5 * Fengwei Yin <fengwei.yin@marvell.com>
6 * Bin Yang <bin.yang@marvell.com>
6 * Eric Miao <eric.miao@marvell.com> 7 * Eric Miao <eric.miao@marvell.com>
7 * 8 *
8 * This program is free software; you can redistribute it and/or modify 9 * This program is free software; you can redistribute it and/or modify
@@ -175,6 +176,16 @@ static void da9034_event_handler(struct da9034_touch *touch, int event)
175 goto err_reset; 176 goto err_reset;
176 177
177 touch->state = STATE_STOP; 178 touch->state = STATE_STOP;
179
180 /* FIXME: PEN_{UP/DOWN} events are expected to be
181 * available by stopping TSI, but this is found not
182 * always true, delay and simulate such an event
183 * here is more reliable
184 */
185 mdelay(1);
186 da9034_event_handler(touch,
187 is_pen_down(touch) ? EVENT_PEN_DOWN :
188 EVENT_PEN_UP);
178 break; 189 break;
179 190
180 case STATE_STOP: 191 case STATE_STOP:
@@ -189,8 +200,6 @@ static void da9034_event_handler(struct da9034_touch *touch, int event)
189 report_pen_up(touch); 200 report_pen_up(touch);
190 touch->state = STATE_IDLE; 201 touch->state = STATE_IDLE;
191 } 202 }
192
193 input_sync(touch->input_dev);
194 break; 203 break;
195 204
196 case STATE_WAIT: 205 case STATE_WAIT:
@@ -200,8 +209,10 @@ static void da9034_event_handler(struct da9034_touch *touch, int event)
200 if (is_pen_down(touch)) { 209 if (is_pen_down(touch)) {
201 start_tsi(touch); 210 start_tsi(touch);
202 touch->state = STATE_BUSY; 211 touch->state = STATE_BUSY;
203 } else 212 } else {
213 report_pen_up(touch);
204 touch->state = STATE_IDLE; 214 touch->state = STATE_IDLE;
215 }
205 break; 216 break;
206 } 217 }
207 return; 218 return;
@@ -226,16 +237,12 @@ static int da9034_touch_notifier(struct notifier_block *nb,
226 struct da9034_touch *touch = 237 struct da9034_touch *touch =
227 container_of(nb, struct da9034_touch, notifier); 238 container_of(nb, struct da9034_touch, notifier);
228 239
229 if (event & DA9034_EVENT_PEN_DOWN) {
230 if (is_pen_down(touch))
231 da9034_event_handler(touch, EVENT_PEN_DOWN);
232 else
233 da9034_event_handler(touch, EVENT_PEN_UP);
234 }
235
236 if (event & DA9034_EVENT_TSI_READY) 240 if (event & DA9034_EVENT_TSI_READY)
237 da9034_event_handler(touch, EVENT_TSI_READY); 241 da9034_event_handler(touch, EVENT_TSI_READY);
238 242
243 if ((event & DA9034_EVENT_PEN_DOWN) && touch->state == STATE_IDLE)
244 da9034_event_handler(touch, EVENT_PEN_DOWN);
245
239 return 0; 246 return 0;
240} 247}
241 248
@@ -385,6 +392,6 @@ static void __exit da9034_touch_exit(void)
385module_exit(da9034_touch_exit); 392module_exit(da9034_touch_exit);
386 393
387MODULE_DESCRIPTION("Touchscreen driver for Dialog Semiconductor DA9034"); 394MODULE_DESCRIPTION("Touchscreen driver for Dialog Semiconductor DA9034");
388MODULE_AUTHOR("Eric Miao <eric.miao@marvell.com>"); 395MODULE_AUTHOR("Eric Miao <eric.miao@marvell.com>, Bin Yang <bin.yang@marvell.com>");
389MODULE_LICENSE("GPL"); 396MODULE_LICENSE("GPL");
390MODULE_ALIAS("platform:da9034-touch"); 397MODULE_ALIAS("platform:da9034-touch");
diff --git a/drivers/input/touchscreen/mainstone-wm97xx.c b/drivers/input/touchscreen/mainstone-wm97xx.c
index dfa6a84ab50a..4cc047a5116e 100644
--- a/drivers/input/touchscreen/mainstone-wm97xx.c
+++ b/drivers/input/touchscreen/mainstone-wm97xx.c
@@ -111,13 +111,12 @@ static void wm97xx_acc_pen_up(struct wm97xx *wm)
111#else 111#else
112static void wm97xx_acc_pen_up(struct wm97xx *wm) 112static void wm97xx_acc_pen_up(struct wm97xx *wm)
113{ 113{
114 int count = 16; 114 unsigned int count;
115
115 schedule_timeout_uninterruptible(1); 116 schedule_timeout_uninterruptible(1);
116 117
117 while (count < 16) { 118 for (count = 0; count < 16; count++)
118 MODR; 119 MODR;
119 count--;
120 }
121} 120}
122#endif 121#endif
123 122
diff --git a/drivers/input/touchscreen/tsc2007.c b/drivers/input/touchscreen/tsc2007.c
index 4ab070246892..948e167557f1 100644
--- a/drivers/input/touchscreen/tsc2007.c
+++ b/drivers/input/touchscreen/tsc2007.c
@@ -200,8 +200,9 @@ static int tsc2007_read_values(struct tsc2007 *tsc)
200static enum hrtimer_restart tsc2007_timer(struct hrtimer *handle) 200static enum hrtimer_restart tsc2007_timer(struct hrtimer *handle)
201{ 201{
202 struct tsc2007 *ts = container_of(handle, struct tsc2007, timer); 202 struct tsc2007 *ts = container_of(handle, struct tsc2007, timer);
203 unsigned long flags;
203 204
204 spin_lock_irq(&ts->lock); 205 spin_lock_irqsave(&ts->lock, flags);
205 206
206 if (unlikely(!ts->get_pendown_state() && ts->pendown)) { 207 if (unlikely(!ts->get_pendown_state() && ts->pendown)) {
207 struct input_dev *input = ts->input; 208 struct input_dev *input = ts->input;
@@ -222,7 +223,7 @@ static enum hrtimer_restart tsc2007_timer(struct hrtimer *handle)
222 tsc2007_send_event(ts); 223 tsc2007_send_event(ts);
223 } 224 }
224 225
225 spin_unlock_irq(&ts->lock); 226 spin_unlock_irqrestore(&ts->lock, flags);
226 227
227 return HRTIMER_NORESTART; 228 return HRTIMER_NORESTART;
228} 229}
@@ -235,7 +236,7 @@ static irqreturn_t tsc2007_irq(int irq, void *handle)
235 spin_lock_irqsave(&ts->lock, flags); 236 spin_lock_irqsave(&ts->lock, flags);
236 237
237 if (likely(ts->get_pendown_state())) { 238 if (likely(ts->get_pendown_state())) {
238 disable_irq(ts->irq); 239 disable_irq_nosync(ts->irq);
239 hrtimer_start(&ts->timer, ktime_set(0, TS_POLL_DELAY), 240 hrtimer_start(&ts->timer, ktime_set(0, TS_POLL_DELAY),
240 HRTIMER_MODE_REL); 241 HRTIMER_MODE_REL);
241 } 242 }
diff --git a/drivers/input/touchscreen/ucb1400_ts.c b/drivers/input/touchscreen/ucb1400_ts.c
index e868264fe799..f100c7f4c1db 100644
--- a/drivers/input/touchscreen/ucb1400_ts.c
+++ b/drivers/input/touchscreen/ucb1400_ts.c
@@ -256,7 +256,7 @@ static irqreturn_t ucb1400_hard_irq(int irqnr, void *devid)
256 struct ucb1400_ts *ucb = devid; 256 struct ucb1400_ts *ucb = devid;
257 257
258 if (irqnr == ucb->irq) { 258 if (irqnr == ucb->irq) {
259 disable_irq(ucb->irq); 259 disable_irq_nosync(ucb->irq);
260 ucb->irq_pending = 1; 260 ucb->irq_pending = 1;
261 wake_up(&ucb->ts_wait); 261 wake_up(&ucb->ts_wait);
262 return IRQ_HANDLED; 262 return IRQ_HANDLED;
diff --git a/drivers/input/touchscreen/wm97xx-core.c b/drivers/input/touchscreen/wm97xx-core.c
index cec480bffe38..69af8385ab14 100644
--- a/drivers/input/touchscreen/wm97xx-core.c
+++ b/drivers/input/touchscreen/wm97xx-core.c
@@ -370,8 +370,7 @@ static int wm97xx_init_pen_irq(struct wm97xx *wm)
370 * provided. */ 370 * provided. */
371 BUG_ON(!wm->mach_ops->irq_enable); 371 BUG_ON(!wm->mach_ops->irq_enable);
372 372
373 if (request_irq(wm->pen_irq, wm97xx_pen_interrupt, 373 if (request_irq(wm->pen_irq, wm97xx_pen_interrupt, IRQF_SHARED,
374 IRQF_SHARED | IRQF_SAMPLE_RANDOM,
375 "wm97xx-pen", wm)) { 374 "wm97xx-pen", wm)) {
376 dev_err(wm->dev, 375 dev_err(wm->dev,
377 "Failed to register pen down interrupt, polling"); 376 "Failed to register pen down interrupt, polling");
diff --git a/drivers/isdn/capi/capifs.c b/drivers/isdn/capi/capifs.c
index b129409925af..bff72d81f263 100644
--- a/drivers/isdn/capi/capifs.c
+++ b/drivers/isdn/capi/capifs.c
@@ -75,15 +75,17 @@ static int capifs_remount(struct super_block *s, int *flags, char *data)
75 } 75 }
76 } 76 }
77 77
78 kfree(s->s_options); 78 mutex_lock(&s->s_root->d_inode->i_mutex);
79 s->s_options = new_opt;
80 79
80 replace_mount_options(s, new_opt);
81 config.setuid = setuid; 81 config.setuid = setuid;
82 config.setgid = setgid; 82 config.setgid = setgid;
83 config.uid = uid; 83 config.uid = uid;
84 config.gid = gid; 84 config.gid = gid;
85 config.mode = mode; 85 config.mode = mode;
86 86
87 mutex_unlock(&s->s_root->d_inode->i_mutex);
88
87 return 0; 89 return 0;
88} 90}
89 91
@@ -154,13 +156,16 @@ void capifs_new_ncci(unsigned int number, dev_t device)
154 if (!inode) 156 if (!inode)
155 return; 157 return;
156 inode->i_ino = number+2; 158 inode->i_ino = number+2;
159
160 dentry = get_node(number);
161
162 /* config contents is protected by root's i_mutex */
157 inode->i_uid = config.setuid ? config.uid : current_fsuid(); 163 inode->i_uid = config.setuid ? config.uid : current_fsuid();
158 inode->i_gid = config.setgid ? config.gid : current_fsgid(); 164 inode->i_gid = config.setgid ? config.gid : current_fsgid();
159 inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; 165 inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
160 init_special_inode(inode, S_IFCHR|config.mode, device); 166 init_special_inode(inode, S_IFCHR|config.mode, device);
161 //inode->i_op = &capifs_file_inode_operations; 167 //inode->i_op = &capifs_file_inode_operations;
162 168
163 dentry = get_node(number);
164 if (!IS_ERR(dentry) && !dentry->d_inode) 169 if (!IS_ERR(dentry) && !dentry->d_inode)
165 d_instantiate(dentry, inode); 170 d_instantiate(dentry, inode);
166 mutex_unlock(&capifs_root->d_inode->i_mutex); 171 mutex_unlock(&capifs_root->d_inode->i_mutex);
diff --git a/drivers/isdn/hisax/st5481_usb.c b/drivers/isdn/hisax/st5481_usb.c
index ec3c0e507669..2b3a055059ea 100644
--- a/drivers/isdn/hisax/st5481_usb.c
+++ b/drivers/isdn/hisax/st5481_usb.c
@@ -149,14 +149,7 @@ static void usb_ctrl_complete(struct urb *urb)
149 if (ctrl_msg->dr.bRequest == USB_REQ_CLEAR_FEATURE) { 149 if (ctrl_msg->dr.bRequest == USB_REQ_CLEAR_FEATURE) {
150 /* Special case handling for pipe reset */ 150 /* Special case handling for pipe reset */
151 le16_to_cpus(&ctrl_msg->dr.wIndex); 151 le16_to_cpus(&ctrl_msg->dr.wIndex);
152 152 usb_reset_endpoint(adapter->usb_dev, ctrl_msg->dr.wIndex);
153 /* toggle is reset on clear */
154 usb_settoggle(adapter->usb_dev,
155 ctrl_msg->dr.wIndex & ~USB_DIR_IN,
156 (ctrl_msg->dr.wIndex & USB_DIR_IN) == 0,
157 0);
158
159
160 } 153 }
161 154
162 if (ctrl_msg->complete) 155 if (ctrl_msg->complete)
diff --git a/drivers/lguest/lg.h b/drivers/lguest/lg.h
index ac8a4a3741b8..af92a176697f 100644
--- a/drivers/lguest/lg.h
+++ b/drivers/lguest/lg.h
@@ -158,7 +158,8 @@ void free_interrupts(void);
158/* segments.c: */ 158/* segments.c: */
159void setup_default_gdt_entries(struct lguest_ro_state *state); 159void setup_default_gdt_entries(struct lguest_ro_state *state);
160void setup_guest_gdt(struct lg_cpu *cpu); 160void setup_guest_gdt(struct lg_cpu *cpu);
161void load_guest_gdt(struct lg_cpu *cpu, unsigned long table, u32 num); 161void load_guest_gdt_entry(struct lg_cpu *cpu, unsigned int i,
162 u32 low, u32 hi);
162void guest_load_tls(struct lg_cpu *cpu, unsigned long tls_array); 163void guest_load_tls(struct lg_cpu *cpu, unsigned long tls_array);
163void copy_gdt(const struct lg_cpu *cpu, struct desc_struct *gdt); 164void copy_gdt(const struct lg_cpu *cpu, struct desc_struct *gdt);
164void copy_gdt_tls(const struct lg_cpu *cpu, struct desc_struct *gdt); 165void copy_gdt_tls(const struct lg_cpu *cpu, struct desc_struct *gdt);
diff --git a/drivers/lguest/segments.c b/drivers/lguest/segments.c
index 4f15439b7f12..7ede64ffeef9 100644
--- a/drivers/lguest/segments.c
+++ b/drivers/lguest/segments.c
@@ -144,18 +144,19 @@ void copy_gdt(const struct lg_cpu *cpu, struct desc_struct *gdt)
144 gdt[i] = cpu->arch.gdt[i]; 144 gdt[i] = cpu->arch.gdt[i];
145} 145}
146 146
147/*H:620 This is where the Guest asks us to load a new GDT (LHCALL_LOAD_GDT). 147/*H:620 This is where the Guest asks us to load a new GDT entry
148 * We copy it from the Guest and tweak the entries. */ 148 * (LHCALL_LOAD_GDT_ENTRY). We tweak the entry and copy it in. */
149void load_guest_gdt(struct lg_cpu *cpu, unsigned long table, u32 num) 149void load_guest_gdt_entry(struct lg_cpu *cpu, u32 num, u32 lo, u32 hi)
150{ 150{
151 /* We assume the Guest has the same number of GDT entries as the 151 /* We assume the Guest has the same number of GDT entries as the
152 * Host, otherwise we'd have to dynamically allocate the Guest GDT. */ 152 * Host, otherwise we'd have to dynamically allocate the Guest GDT. */
153 if (num > ARRAY_SIZE(cpu->arch.gdt)) 153 if (num > ARRAY_SIZE(cpu->arch.gdt))
154 kill_guest(cpu, "too many gdt entries %i", num); 154 kill_guest(cpu, "too many gdt entries %i", num);
155 155
156 /* We read the whole thing in, then fix it up. */ 156 /* Set it up, then fix it. */
157 __lgread(cpu, cpu->arch.gdt, table, num * sizeof(cpu->arch.gdt[0])); 157 cpu->arch.gdt[num].a = lo;
158 fixup_gdt_table(cpu, 0, ARRAY_SIZE(cpu->arch.gdt)); 158 cpu->arch.gdt[num].b = hi;
159 fixup_gdt_table(cpu, num, num+1);
159 /* Mark that the GDT changed so the core knows it has to copy it again, 160 /* Mark that the GDT changed so the core knows it has to copy it again,
160 * even if the Guest is run on the same CPU. */ 161 * even if the Guest is run on the same CPU. */
161 cpu->changed |= CHANGED_GDT; 162 cpu->changed |= CHANGED_GDT;
diff --git a/drivers/lguest/x86/core.c b/drivers/lguest/x86/core.c
index a6b717644be0..1a83910f674f 100644
--- a/drivers/lguest/x86/core.c
+++ b/drivers/lguest/x86/core.c
@@ -324,6 +324,11 @@ static void rewrite_hypercall(struct lg_cpu *cpu)
324 u8 insn[3] = {0xcd, 0x1f, 0x90}; 324 u8 insn[3] = {0xcd, 0x1f, 0x90};
325 325
326 __lgwrite(cpu, guest_pa(cpu, cpu->regs->eip), insn, sizeof(insn)); 326 __lgwrite(cpu, guest_pa(cpu, cpu->regs->eip), insn, sizeof(insn));
327 /* The above write might have caused a copy of that page to be made
328 * (if it was read-only). We need to make sure the Guest has
329 * up-to-date pagetables. As this doesn't happen often, we can just
330 * drop them all. */
331 guest_pagetable_clear_all(cpu);
327} 332}
328 333
329static bool is_hypercall(struct lg_cpu *cpu) 334static bool is_hypercall(struct lg_cpu *cpu)
@@ -563,8 +568,8 @@ void __exit lguest_arch_host_fini(void)
563int lguest_arch_do_hcall(struct lg_cpu *cpu, struct hcall_args *args) 568int lguest_arch_do_hcall(struct lg_cpu *cpu, struct hcall_args *args)
564{ 569{
565 switch (args->arg0) { 570 switch (args->arg0) {
566 case LHCALL_LOAD_GDT: 571 case LHCALL_LOAD_GDT_ENTRY:
567 load_guest_gdt(cpu, args->arg1, args->arg2); 572 load_guest_gdt_entry(cpu, args->arg1, args->arg2, args->arg3);
568 break; 573 break;
569 case LHCALL_LOAD_IDT_ENTRY: 574 case LHCALL_LOAD_IDT_ENTRY:
570 load_guest_idt_entry(cpu, args->arg1, args->arg2, args->arg3); 575 load_guest_idt_entry(cpu, args->arg1, args->arg2, args->arg3);
diff --git a/drivers/macintosh/Kconfig b/drivers/macintosh/Kconfig
index 173cf55c64d0..3d906833948d 100644
--- a/drivers/macintosh/Kconfig
+++ b/drivers/macintosh/Kconfig
@@ -123,7 +123,7 @@ config PMAC_APM_EMU
123 123
124config PMAC_MEDIABAY 124config PMAC_MEDIABAY
125 bool "Support PowerBook hotswap media bay" 125 bool "Support PowerBook hotswap media bay"
126 depends on PPC_PMAC && PPC32 126 depends on PPC_PMAC && PPC32 && BLOCK
127 help 127 help
128 This option adds support for older PowerBook's hotswap media bay 128 This option adds support for older PowerBook's hotswap media bay
129 that can contains batteries, floppy drives, or IDE devices. PCI 129 that can contains batteries, floppy drives, or IDE devices. PCI
diff --git a/drivers/macintosh/mediabay.c b/drivers/macintosh/mediabay.c
index d7e46d345d9e..029ad8ce8a7e 100644
--- a/drivers/macintosh/mediabay.c
+++ b/drivers/macintosh/mediabay.c
@@ -18,7 +18,6 @@
18#include <linux/timer.h> 18#include <linux/timer.h>
19#include <linux/stddef.h> 19#include <linux/stddef.h>
20#include <linux/init.h> 20#include <linux/init.h>
21#include <linux/ide.h>
22#include <linux/kthread.h> 21#include <linux/kthread.h>
23#include <linux/mutex.h> 22#include <linux/mutex.h>
24#include <asm/prom.h> 23#include <asm/prom.h>
@@ -447,6 +446,7 @@ int check_media_bay_by_base(unsigned long base, int what)
447 446
448 return -ENODEV; 447 return -ENODEV;
449} 448}
449EXPORT_SYMBOL_GPL(check_media_bay_by_base);
450 450
451int media_bay_set_ide_infos(struct device_node* which_bay, unsigned long base, 451int media_bay_set_ide_infos(struct device_node* which_bay, unsigned long base,
452 int irq, ide_hwif_t *hwif) 452 int irq, ide_hwif_t *hwif)
@@ -486,6 +486,7 @@ int media_bay_set_ide_infos(struct device_node* which_bay, unsigned long base,
486 486
487 return -ENODEV; 487 return -ENODEV;
488} 488}
489EXPORT_SYMBOL_GPL(media_bay_set_ide_infos);
489#endif /* CONFIG_BLK_DEV_IDE_PMAC */ 490#endif /* CONFIG_BLK_DEV_IDE_PMAC */
490 491
491static void media_bay_step(int i) 492static void media_bay_step(int i)
diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c
index f8a9f7ab2cb8..47c68bc75a17 100644
--- a/drivers/md/bitmap.c
+++ b/drivers/md/bitmap.c
@@ -986,6 +986,9 @@ static int bitmap_init_from_disk(struct bitmap *bitmap, sector_t start)
986 oldindex = index; 986 oldindex = index;
987 oldpage = page; 987 oldpage = page;
988 988
989 bitmap->filemap[bitmap->file_pages++] = page;
990 bitmap->last_page_size = count;
991
989 if (outofdate) { 992 if (outofdate) {
990 /* 993 /*
991 * if bitmap is out of date, dirty the 994 * if bitmap is out of date, dirty the
@@ -998,15 +1001,9 @@ static int bitmap_init_from_disk(struct bitmap *bitmap, sector_t start)
998 write_page(bitmap, page, 1); 1001 write_page(bitmap, page, 1);
999 1002
1000 ret = -EIO; 1003 ret = -EIO;
1001 if (bitmap->flags & BITMAP_WRITE_ERROR) { 1004 if (bitmap->flags & BITMAP_WRITE_ERROR)
1002 /* release, page not in filemap yet */
1003 put_page(page);
1004 goto err; 1005 goto err;
1005 }
1006 } 1006 }
1007
1008 bitmap->filemap[bitmap->file_pages++] = page;
1009 bitmap->last_page_size = count;
1010 } 1007 }
1011 paddr = kmap_atomic(page, KM_USER0); 1008 paddr = kmap_atomic(page, KM_USER0);
1012 if (bitmap->flags & BITMAP_HOSTENDIAN) 1009 if (bitmap->flags & BITMAP_HOSTENDIAN)
@@ -1016,9 +1013,11 @@ static int bitmap_init_from_disk(struct bitmap *bitmap, sector_t start)
1016 kunmap_atomic(paddr, KM_USER0); 1013 kunmap_atomic(paddr, KM_USER0);
1017 if (b) { 1014 if (b) {
1018 /* if the disk bit is set, set the memory bit */ 1015 /* if the disk bit is set, set the memory bit */
1019 bitmap_set_memory_bits(bitmap, i << CHUNK_BLOCK_SHIFT(bitmap), 1016 int needed = ((sector_t)(i+1) << (CHUNK_BLOCK_SHIFT(bitmap))
1020 ((i+1) << (CHUNK_BLOCK_SHIFT(bitmap)) >= start) 1017 >= start);
1021 ); 1018 bitmap_set_memory_bits(bitmap,
1019 (sector_t)i << CHUNK_BLOCK_SHIFT(bitmap),
1020 needed);
1022 bit_cnt++; 1021 bit_cnt++;
1023 set_page_attr(bitmap, page, BITMAP_PAGE_CLEAN); 1022 set_page_attr(bitmap, page, BITMAP_PAGE_CLEAN);
1024 } 1023 }
@@ -1154,8 +1153,9 @@ void bitmap_daemon_work(struct bitmap *bitmap)
1154 spin_lock_irqsave(&bitmap->lock, flags); 1153 spin_lock_irqsave(&bitmap->lock, flags);
1155 clear_page_attr(bitmap, page, BITMAP_PAGE_CLEAN); 1154 clear_page_attr(bitmap, page, BITMAP_PAGE_CLEAN);
1156 } 1155 }
1157 bmc = bitmap_get_counter(bitmap, j << CHUNK_BLOCK_SHIFT(bitmap), 1156 bmc = bitmap_get_counter(bitmap,
1158 &blocks, 0); 1157 (sector_t)j << CHUNK_BLOCK_SHIFT(bitmap),
1158 &blocks, 0);
1159 if (bmc) { 1159 if (bmc) {
1160/* 1160/*
1161 if (j < 100) printk("bitmap: j=%lu, *bmc = 0x%x\n", j, *bmc); 1161 if (j < 100) printk("bitmap: j=%lu, *bmc = 0x%x\n", j, *bmc);
@@ -1169,7 +1169,8 @@ void bitmap_daemon_work(struct bitmap *bitmap)
1169 } else if (*bmc == 1) { 1169 } else if (*bmc == 1) {
1170 /* we can clear the bit */ 1170 /* we can clear the bit */
1171 *bmc = 0; 1171 *bmc = 0;
1172 bitmap_count_page(bitmap, j << CHUNK_BLOCK_SHIFT(bitmap), 1172 bitmap_count_page(bitmap,
1173 (sector_t)j << CHUNK_BLOCK_SHIFT(bitmap),
1173 -1); 1174 -1);
1174 1175
1175 /* clear the bit */ 1176 /* clear the bit */
@@ -1479,6 +1480,7 @@ void bitmap_cond_end_sync(struct bitmap *bitmap, sector_t sector)
1479 s += blocks; 1480 s += blocks;
1480 } 1481 }
1481 bitmap->last_end_sync = jiffies; 1482 bitmap->last_end_sync = jiffies;
1483 sysfs_notify(&bitmap->mddev->kobj, NULL, "sync_completed");
1482} 1484}
1483 1485
1484static void bitmap_set_memory_bits(struct bitmap *bitmap, sector_t offset, int needed) 1486static void bitmap_set_memory_bits(struct bitmap *bitmap, sector_t offset, int needed)
@@ -1513,7 +1515,7 @@ void bitmap_dirty_bits(struct bitmap *bitmap, unsigned long s, unsigned long e)
1513 unsigned long chunk; 1515 unsigned long chunk;
1514 1516
1515 for (chunk = s; chunk <= e; chunk++) { 1517 for (chunk = s; chunk <= e; chunk++) {
1516 sector_t sec = chunk << CHUNK_BLOCK_SHIFT(bitmap); 1518 sector_t sec = (sector_t)chunk << CHUNK_BLOCK_SHIFT(bitmap);
1517 bitmap_set_memory_bits(bitmap, sec, 1); 1519 bitmap_set_memory_bits(bitmap, sec, 1);
1518 bitmap_file_set_bit(bitmap, sec); 1520 bitmap_file_set_bit(bitmap, sec);
1519 } 1521 }
@@ -1589,7 +1591,7 @@ void bitmap_destroy(mddev_t *mddev)
1589int bitmap_create(mddev_t *mddev) 1591int bitmap_create(mddev_t *mddev)
1590{ 1592{
1591 struct bitmap *bitmap; 1593 struct bitmap *bitmap;
1592 unsigned long blocks = mddev->resync_max_sectors; 1594 sector_t blocks = mddev->resync_max_sectors;
1593 unsigned long chunks; 1595 unsigned long chunks;
1594 unsigned long pages; 1596 unsigned long pages;
1595 struct file *file = mddev->bitmap_file; 1597 struct file *file = mddev->bitmap_file;
@@ -1631,8 +1633,8 @@ int bitmap_create(mddev_t *mddev)
1631 bitmap->chunkshift = ffz(~bitmap->chunksize); 1633 bitmap->chunkshift = ffz(~bitmap->chunksize);
1632 1634
1633 /* now that chunksize and chunkshift are set, we can use these macros */ 1635 /* now that chunksize and chunkshift are set, we can use these macros */
1634 chunks = (blocks + CHUNK_BLOCK_RATIO(bitmap) - 1) / 1636 chunks = (blocks + CHUNK_BLOCK_RATIO(bitmap) - 1) >>
1635 CHUNK_BLOCK_RATIO(bitmap); 1637 CHUNK_BLOCK_SHIFT(bitmap);
1636 pages = (chunks + PAGE_COUNTER_RATIO - 1) / PAGE_COUNTER_RATIO; 1638 pages = (chunks + PAGE_COUNTER_RATIO - 1) / PAGE_COUNTER_RATIO;
1637 1639
1638 BUG_ON(!pages); 1640 BUG_ON(!pages);
diff --git a/drivers/md/dm-bio-list.h b/drivers/md/dm-bio-list.h
deleted file mode 100644
index 345098b4ca77..000000000000
--- a/drivers/md/dm-bio-list.h
+++ /dev/null
@@ -1,117 +0,0 @@
1/*
2 * Copyright (C) 2004 Red Hat UK Ltd.
3 *
4 * This file is released under the GPL.
5 */
6
7#ifndef DM_BIO_LIST_H
8#define DM_BIO_LIST_H
9
10#include <linux/bio.h>
11
12#ifdef CONFIG_BLOCK
13
14struct bio_list {
15 struct bio *head;
16 struct bio *tail;
17};
18
19static inline int bio_list_empty(const struct bio_list *bl)
20{
21 return bl->head == NULL;
22}
23
24static inline void bio_list_init(struct bio_list *bl)
25{
26 bl->head = bl->tail = NULL;
27}
28
29#define bio_list_for_each(bio, bl) \
30 for (bio = (bl)->head; bio; bio = bio->bi_next)
31
32static inline unsigned bio_list_size(const struct bio_list *bl)
33{
34 unsigned sz = 0;
35 struct bio *bio;
36
37 bio_list_for_each(bio, bl)
38 sz++;
39
40 return sz;
41}
42
43static inline void bio_list_add(struct bio_list *bl, struct bio *bio)
44{
45 bio->bi_next = NULL;
46
47 if (bl->tail)
48 bl->tail->bi_next = bio;
49 else
50 bl->head = bio;
51
52 bl->tail = bio;
53}
54
55static inline void bio_list_add_head(struct bio_list *bl, struct bio *bio)
56{
57 bio->bi_next = bl->head;
58
59 bl->head = bio;
60
61 if (!bl->tail)
62 bl->tail = bio;
63}
64
65static inline void bio_list_merge(struct bio_list *bl, struct bio_list *bl2)
66{
67 if (!bl2->head)
68 return;
69
70 if (bl->tail)
71 bl->tail->bi_next = bl2->head;
72 else
73 bl->head = bl2->head;
74
75 bl->tail = bl2->tail;
76}
77
78static inline void bio_list_merge_head(struct bio_list *bl,
79 struct bio_list *bl2)
80{
81 if (!bl2->head)
82 return;
83
84 if (bl->head)
85 bl2->tail->bi_next = bl->head;
86 else
87 bl->tail = bl2->tail;
88
89 bl->head = bl2->head;
90}
91
92static inline struct bio *bio_list_pop(struct bio_list *bl)
93{
94 struct bio *bio = bl->head;
95
96 if (bio) {
97 bl->head = bl->head->bi_next;
98 if (!bl->head)
99 bl->tail = NULL;
100
101 bio->bi_next = NULL;
102 }
103
104 return bio;
105}
106
107static inline struct bio *bio_list_get(struct bio_list *bl)
108{
109 struct bio *bio = bl->head;
110
111 bl->head = bl->tail = NULL;
112
113 return bio;
114}
115
116#endif /* CONFIG_BLOCK */
117#endif
diff --git a/drivers/md/dm-delay.c b/drivers/md/dm-delay.c
index 59ee1b015d2d..559dbb52bc85 100644
--- a/drivers/md/dm-delay.c
+++ b/drivers/md/dm-delay.c
@@ -15,8 +15,6 @@
15 15
16#include <linux/device-mapper.h> 16#include <linux/device-mapper.h>
17 17
18#include "dm-bio-list.h"
19
20#define DM_MSG_PREFIX "delay" 18#define DM_MSG_PREFIX "delay"
21 19
22struct delay_c { 20struct delay_c {
diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c
index 095f77bf9681..6a386ab4f7eb 100644
--- a/drivers/md/dm-mpath.c
+++ b/drivers/md/dm-mpath.c
@@ -8,7 +8,6 @@
8#include <linux/device-mapper.h> 8#include <linux/device-mapper.h>
9 9
10#include "dm-path-selector.h" 10#include "dm-path-selector.h"
11#include "dm-bio-list.h"
12#include "dm-bio-record.h" 11#include "dm-bio-record.h"
13#include "dm-uevent.h" 12#include "dm-uevent.h"
14 13
diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c
index 536ef0bef154..076fbb4e967a 100644
--- a/drivers/md/dm-raid1.c
+++ b/drivers/md/dm-raid1.c
@@ -5,7 +5,6 @@
5 * This file is released under the GPL. 5 * This file is released under the GPL.
6 */ 6 */
7 7
8#include "dm-bio-list.h"
9#include "dm-bio-record.h" 8#include "dm-bio-record.h"
10 9
11#include <linux/init.h> 10#include <linux/init.h>
diff --git a/drivers/md/dm-region-hash.c b/drivers/md/dm-region-hash.c
index 59f8d9df9e1a..7b899be0b087 100644
--- a/drivers/md/dm-region-hash.c
+++ b/drivers/md/dm-region-hash.c
@@ -14,7 +14,6 @@
14#include <linux/vmalloc.h> 14#include <linux/vmalloc.h>
15 15
16#include "dm.h" 16#include "dm.h"
17#include "dm-bio-list.h"
18 17
19#define DM_MSG_PREFIX "region hash" 18#define DM_MSG_PREFIX "region hash"
20 19
diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c
index 981a0413068f..d73f17fc7778 100644
--- a/drivers/md/dm-snap.c
+++ b/drivers/md/dm-snap.c
@@ -22,7 +22,6 @@
22#include <linux/workqueue.h> 22#include <linux/workqueue.h>
23 23
24#include "dm-exception-store.h" 24#include "dm-exception-store.h"
25#include "dm-bio-list.h"
26 25
27#define DM_MSG_PREFIX "snapshots" 26#define DM_MSG_PREFIX "snapshots"
28 27
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index 8a994be035ba..424f7b048c30 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -6,7 +6,6 @@
6 */ 6 */
7 7
8#include "dm.h" 8#include "dm.h"
9#include "dm-bio-list.h"
10#include "dm-uevent.h" 9#include "dm-uevent.h"
11 10
12#include <linux/init.h> 11#include <linux/init.h>
diff --git a/drivers/md/md.c b/drivers/md/md.c
index ed5727c089a9..fccc8343a250 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -2017,6 +2017,8 @@ repeat:
2017 clear_bit(MD_CHANGE_PENDING, &mddev->flags); 2017 clear_bit(MD_CHANGE_PENDING, &mddev->flags);
2018 spin_unlock_irq(&mddev->write_lock); 2018 spin_unlock_irq(&mddev->write_lock);
2019 wake_up(&mddev->sb_wait); 2019 wake_up(&mddev->sb_wait);
2020 if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery))
2021 sysfs_notify(&mddev->kobj, NULL, "sync_completed");
2020 2022
2021} 2023}
2022 2024
@@ -2086,6 +2088,7 @@ state_store(mdk_rdev_t *rdev, const char *buf, size_t len)
2086 * -writemostly - clears write_mostly 2088 * -writemostly - clears write_mostly
2087 * blocked - sets the Blocked flag 2089 * blocked - sets the Blocked flag
2088 * -blocked - clears the Blocked flag 2090 * -blocked - clears the Blocked flag
2091 * insync - sets Insync providing device isn't active
2089 */ 2092 */
2090 int err = -EINVAL; 2093 int err = -EINVAL;
2091 if (cmd_match(buf, "faulty") && rdev->mddev->pers) { 2094 if (cmd_match(buf, "faulty") && rdev->mddev->pers) {
@@ -2118,6 +2121,9 @@ state_store(mdk_rdev_t *rdev, const char *buf, size_t len)
2118 md_wakeup_thread(rdev->mddev->thread); 2121 md_wakeup_thread(rdev->mddev->thread);
2119 2122
2120 err = 0; 2123 err = 0;
2124 } else if (cmd_match(buf, "insync") && rdev->raid_disk == -1) {
2125 set_bit(In_sync, &rdev->flags);
2126 err = 0;
2121 } 2127 }
2122 if (!err && rdev->sysfs_state) 2128 if (!err && rdev->sysfs_state)
2123 sysfs_notify_dirent(rdev->sysfs_state); 2129 sysfs_notify_dirent(rdev->sysfs_state);
@@ -2190,7 +2196,7 @@ slot_store(mdk_rdev_t *rdev, const char *buf, size_t len)
2190 } else if (rdev->mddev->pers) { 2196 } else if (rdev->mddev->pers) {
2191 mdk_rdev_t *rdev2; 2197 mdk_rdev_t *rdev2;
2192 /* Activating a spare .. or possibly reactivating 2198 /* Activating a spare .. or possibly reactivating
2193 * if we every get bitmaps working here. 2199 * if we ever get bitmaps working here.
2194 */ 2200 */
2195 2201
2196 if (rdev->raid_disk != -1) 2202 if (rdev->raid_disk != -1)
@@ -3060,11 +3066,8 @@ array_state_store(mddev_t *mddev, const char *buf, size_t len)
3060 } else 3066 } else
3061 err = -EBUSY; 3067 err = -EBUSY;
3062 spin_unlock_irq(&mddev->write_lock); 3068 spin_unlock_irq(&mddev->write_lock);
3063 } else { 3069 } else
3064 mddev->ro = 0; 3070 err = -EINVAL;
3065 mddev->recovery_cp = MaxSector;
3066 err = do_md_run(mddev);
3067 }
3068 break; 3071 break;
3069 case active: 3072 case active:
3070 if (mddev->pers) { 3073 if (mddev->pers) {
@@ -3482,12 +3485,15 @@ sync_completed_show(mddev_t *mddev, char *page)
3482{ 3485{
3483 unsigned long max_sectors, resync; 3486 unsigned long max_sectors, resync;
3484 3487
3488 if (!test_bit(MD_RECOVERY_RUNNING, &mddev->recovery))
3489 return sprintf(page, "none\n");
3490
3485 if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) 3491 if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery))
3486 max_sectors = mddev->resync_max_sectors; 3492 max_sectors = mddev->resync_max_sectors;
3487 else 3493 else
3488 max_sectors = mddev->dev_sectors; 3494 max_sectors = mddev->dev_sectors;
3489 3495
3490 resync = (mddev->curr_resync - atomic_read(&mddev->recovery_active)); 3496 resync = mddev->curr_resync_completed;
3491 return sprintf(page, "%lu / %lu\n", resync, max_sectors); 3497 return sprintf(page, "%lu / %lu\n", resync, max_sectors);
3492} 3498}
3493 3499
@@ -4288,6 +4294,7 @@ static int do_md_stop(mddev_t * mddev, int mode, int is_open)
4288{ 4294{
4289 int err = 0; 4295 int err = 0;
4290 struct gendisk *disk = mddev->gendisk; 4296 struct gendisk *disk = mddev->gendisk;
4297 mdk_rdev_t *rdev;
4291 4298
4292 if (atomic_read(&mddev->openers) > is_open) { 4299 if (atomic_read(&mddev->openers) > is_open) {
4293 printk("md: %s still in use.\n",mdname(mddev)); 4300 printk("md: %s still in use.\n",mdname(mddev));
@@ -4330,6 +4337,13 @@ static int do_md_stop(mddev_t * mddev, int mode, int is_open)
4330 /* tell userspace to handle 'inactive' */ 4337 /* tell userspace to handle 'inactive' */
4331 sysfs_notify_dirent(mddev->sysfs_state); 4338 sysfs_notify_dirent(mddev->sysfs_state);
4332 4339
4340 list_for_each_entry(rdev, &mddev->disks, same_set)
4341 if (rdev->raid_disk >= 0) {
4342 char nm[20];
4343 sprintf(nm, "rd%d", rdev->raid_disk);
4344 sysfs_remove_link(&mddev->kobj, nm);
4345 }
4346
4333 set_capacity(disk, 0); 4347 set_capacity(disk, 0);
4334 mddev->changed = 1; 4348 mddev->changed = 1;
4335 4349
@@ -4350,7 +4364,6 @@ static int do_md_stop(mddev_t * mddev, int mode, int is_open)
4350 * Free resources if final stop 4364 * Free resources if final stop
4351 */ 4365 */
4352 if (mode == 0) { 4366 if (mode == 0) {
4353 mdk_rdev_t *rdev;
4354 4367
4355 printk(KERN_INFO "md: %s stopped.\n", mdname(mddev)); 4368 printk(KERN_INFO "md: %s stopped.\n", mdname(mddev));
4356 4369
@@ -4362,13 +4375,6 @@ static int do_md_stop(mddev_t * mddev, int mode, int is_open)
4362 } 4375 }
4363 mddev->bitmap_offset = 0; 4376 mddev->bitmap_offset = 0;
4364 4377
4365 list_for_each_entry(rdev, &mddev->disks, same_set)
4366 if (rdev->raid_disk >= 0) {
4367 char nm[20];
4368 sprintf(nm, "rd%d", rdev->raid_disk);
4369 sysfs_remove_link(&mddev->kobj, nm);
4370 }
4371
4372 /* make sure all md_delayed_delete calls have finished */ 4378 /* make sure all md_delayed_delete calls have finished */
4373 flush_scheduled_work(); 4379 flush_scheduled_work();
4374 4380
@@ -5696,37 +5702,38 @@ static void status_unused(struct seq_file *seq)
5696 5702
5697static void status_resync(struct seq_file *seq, mddev_t * mddev) 5703static void status_resync(struct seq_file *seq, mddev_t * mddev)
5698{ 5704{
5699 sector_t max_blocks, resync, res; 5705 sector_t max_sectors, resync, res;
5700 unsigned long dt, db, rt; 5706 unsigned long dt, db;
5707 sector_t rt;
5701 int scale; 5708 int scale;
5702 unsigned int per_milli; 5709 unsigned int per_milli;
5703 5710
5704 resync = (mddev->curr_resync - atomic_read(&mddev->recovery_active))/2; 5711 resync = mddev->curr_resync - atomic_read(&mddev->recovery_active);
5705 5712
5706 if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) 5713 if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery))
5707 max_blocks = mddev->resync_max_sectors >> 1; 5714 max_sectors = mddev->resync_max_sectors;
5708 else 5715 else
5709 max_blocks = mddev->dev_sectors / 2; 5716 max_sectors = mddev->dev_sectors;
5710 5717
5711 /* 5718 /*
5712 * Should not happen. 5719 * Should not happen.
5713 */ 5720 */
5714 if (!max_blocks) { 5721 if (!max_sectors) {
5715 MD_BUG(); 5722 MD_BUG();
5716 return; 5723 return;
5717 } 5724 }
5718 /* Pick 'scale' such that (resync>>scale)*1000 will fit 5725 /* Pick 'scale' such that (resync>>scale)*1000 will fit
5719 * in a sector_t, and (max_blocks>>scale) will fit in a 5726 * in a sector_t, and (max_sectors>>scale) will fit in a
5720 * u32, as those are the requirements for sector_div. 5727 * u32, as those are the requirements for sector_div.
5721 * Thus 'scale' must be at least 10 5728 * Thus 'scale' must be at least 10
5722 */ 5729 */
5723 scale = 10; 5730 scale = 10;
5724 if (sizeof(sector_t) > sizeof(unsigned long)) { 5731 if (sizeof(sector_t) > sizeof(unsigned long)) {
5725 while ( max_blocks/2 > (1ULL<<(scale+32))) 5732 while ( max_sectors/2 > (1ULL<<(scale+32)))
5726 scale++; 5733 scale++;
5727 } 5734 }
5728 res = (resync>>scale)*1000; 5735 res = (resync>>scale)*1000;
5729 sector_div(res, (u32)((max_blocks>>scale)+1)); 5736 sector_div(res, (u32)((max_sectors>>scale)+1));
5730 5737
5731 per_milli = res; 5738 per_milli = res;
5732 { 5739 {
@@ -5747,25 +5754,35 @@ static void status_resync(struct seq_file *seq, mddev_t * mddev)
5747 (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) ? 5754 (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) ?
5748 "resync" : "recovery"))), 5755 "resync" : "recovery"))),
5749 per_milli/10, per_milli % 10, 5756 per_milli/10, per_milli % 10,
5750 (unsigned long long) resync, 5757 (unsigned long long) resync/2,
5751 (unsigned long long) max_blocks); 5758 (unsigned long long) max_sectors/2);
5752 5759
5753 /* 5760 /*
5754 * We do not want to overflow, so the order of operands and
5755 * the * 100 / 100 trick are important. We do a +1 to be
5756 * safe against division by zero. We only estimate anyway.
5757 *
5758 * dt: time from mark until now 5761 * dt: time from mark until now
5759 * db: blocks written from mark until now 5762 * db: blocks written from mark until now
5760 * rt: remaining time 5763 * rt: remaining time
5764 *
5765 * rt is a sector_t, so could be 32bit or 64bit.
5766 * So we divide before multiply in case it is 32bit and close
5767 * to the limit.
5768 * We scale the divisor (db) by 32 to avoid loosing precision
5769 * near the end of resync when the number of remaining sectors
5770 * is close to 'db'.
5771 * We then divide rt by 32 after multiplying by db to compensate.
5772 * The '+1' avoids division by zero if db is very small.
5761 */ 5773 */
5762 dt = ((jiffies - mddev->resync_mark) / HZ); 5774 dt = ((jiffies - mddev->resync_mark) / HZ);
5763 if (!dt) dt++; 5775 if (!dt) dt++;
5764 db = (mddev->curr_mark_cnt - atomic_read(&mddev->recovery_active)) 5776 db = (mddev->curr_mark_cnt - atomic_read(&mddev->recovery_active))
5765 - mddev->resync_mark_cnt; 5777 - mddev->resync_mark_cnt;
5766 rt = (dt * ((unsigned long)(max_blocks-resync) / (db/2/100+1)))/100;
5767 5778
5768 seq_printf(seq, " finish=%lu.%lumin", rt / 60, (rt % 60)/6); 5779 rt = max_sectors - resync; /* number of remaining sectors */
5780 sector_div(rt, db/32+1);
5781 rt *= dt;
5782 rt >>= 5;
5783
5784 seq_printf(seq, " finish=%lu.%lumin", (unsigned long)rt / 60,
5785 ((unsigned long)rt % 60)/6);
5769 5786
5770 seq_printf(seq, " speed=%ldK/sec", db/2/dt); 5787 seq_printf(seq, " speed=%ldK/sec", db/2/dt);
5771} 5788}
@@ -5956,7 +5973,7 @@ static int md_seq_show(struct seq_file *seq, void *v)
5956 return 0; 5973 return 0;
5957} 5974}
5958 5975
5959static struct seq_operations md_seq_ops = { 5976static const struct seq_operations md_seq_ops = {
5960 .start = md_seq_start, 5977 .start = md_seq_start,
5961 .next = md_seq_next, 5978 .next = md_seq_next,
5962 .stop = md_seq_stop, 5979 .stop = md_seq_stop,
@@ -6334,18 +6351,13 @@ void md_do_sync(mddev_t *mddev)
6334 sector_t sectors; 6351 sector_t sectors;
6335 6352
6336 skipped = 0; 6353 skipped = 0;
6337 if (j >= mddev->resync_max) {
6338 sysfs_notify(&mddev->kobj, NULL, "sync_completed");
6339 wait_event(mddev->recovery_wait,
6340 mddev->resync_max > j
6341 || kthread_should_stop());
6342 }
6343 if (kthread_should_stop())
6344 goto interrupted;
6345 6354
6346 if (mddev->curr_resync > mddev->curr_resync_completed && 6355 if ((mddev->curr_resync > mddev->curr_resync_completed &&
6347 (mddev->curr_resync - mddev->curr_resync_completed) 6356 (mddev->curr_resync - mddev->curr_resync_completed)
6348 > (max_sectors >> 4)) { 6357 > (max_sectors >> 4)) ||
6358 (j - mddev->curr_resync_completed)*2
6359 >= mddev->resync_max - mddev->curr_resync_completed
6360 ) {
6349 /* time to update curr_resync_completed */ 6361 /* time to update curr_resync_completed */
6350 blk_unplug(mddev->queue); 6362 blk_unplug(mddev->queue);
6351 wait_event(mddev->recovery_wait, 6363 wait_event(mddev->recovery_wait,
@@ -6353,7 +6365,17 @@ void md_do_sync(mddev_t *mddev)
6353 mddev->curr_resync_completed = 6365 mddev->curr_resync_completed =
6354 mddev->curr_resync; 6366 mddev->curr_resync;
6355 set_bit(MD_CHANGE_CLEAN, &mddev->flags); 6367 set_bit(MD_CHANGE_CLEAN, &mddev->flags);
6368 sysfs_notify(&mddev->kobj, NULL, "sync_completed");
6356 } 6369 }
6370
6371 if (j >= mddev->resync_max)
6372 wait_event(mddev->recovery_wait,
6373 mddev->resync_max > j
6374 || kthread_should_stop());
6375
6376 if (kthread_should_stop())
6377 goto interrupted;
6378
6357 sectors = mddev->pers->sync_request(mddev, j, &skipped, 6379 sectors = mddev->pers->sync_request(mddev, j, &skipped,
6358 currspeed < speed_min(mddev)); 6380 currspeed < speed_min(mddev));
6359 if (sectors == 0) { 6381 if (sectors == 0) {
@@ -6461,6 +6483,7 @@ void md_do_sync(mddev_t *mddev)
6461 6483
6462 skip: 6484 skip:
6463 mddev->curr_resync = 0; 6485 mddev->curr_resync = 0;
6486 mddev->curr_resync_completed = 0;
6464 mddev->resync_min = 0; 6487 mddev->resync_min = 0;
6465 mddev->resync_max = MaxSector; 6488 mddev->resync_max = MaxSector;
6466 sysfs_notify(&mddev->kobj, NULL, "sync_completed"); 6489 sysfs_notify(&mddev->kobj, NULL, "sync_completed");
diff --git a/drivers/md/md.h b/drivers/md/md.h
index e9b7f54c24d6..8227ab909d44 100644
--- a/drivers/md/md.h
+++ b/drivers/md/md.h
@@ -12,10 +12,17 @@
12 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 12 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
13*/ 13*/
14 14
15#ifndef _MD_K_H 15#ifndef _MD_MD_H
16#define _MD_K_H 16#define _MD_MD_H
17 17
18#ifdef CONFIG_BLOCK 18#include <linux/blkdev.h>
19#include <linux/kobject.h>
20#include <linux/list.h>
21#include <linux/mm.h>
22#include <linux/mutex.h>
23#include <linux/timer.h>
24#include <linux/wait.h>
25#include <linux/workqueue.h>
19 26
20#define MaxSector (~(sector_t)0) 27#define MaxSector (~(sector_t)0)
21 28
@@ -408,10 +415,6 @@ static inline void safe_put_page(struct page *p)
408 if (p) put_page(p); 415 if (p) put_page(p);
409} 416}
410 417
411#endif /* CONFIG_BLOCK */
412#endif
413
414
415extern int register_md_personality(struct mdk_personality *p); 418extern int register_md_personality(struct mdk_personality *p);
416extern int unregister_md_personality(struct mdk_personality *p); 419extern int unregister_md_personality(struct mdk_personality *p);
417extern mdk_thread_t * md_register_thread(void (*run) (mddev_t *mddev), 420extern mdk_thread_t * md_register_thread(void (*run) (mddev_t *mddev),
@@ -434,3 +437,5 @@ extern void md_new_event(mddev_t *mddev);
434extern int md_allow_write(mddev_t *mddev); 437extern int md_allow_write(mddev_t *mddev);
435extern void md_wait_for_blocked_rdev(mdk_rdev_t *rdev, mddev_t *mddev); 438extern void md_wait_for_blocked_rdev(mdk_rdev_t *rdev, mddev_t *mddev);
436extern void md_set_array_sectors(mddev_t *mddev, sector_t array_sectors); 439extern void md_set_array_sectors(mddev_t *mddev, sector_t array_sectors);
440
441#endif /* _MD_MD_H */
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index 274b491a11c1..36df9109cde1 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -35,7 +35,6 @@
35#include <linux/blkdev.h> 35#include <linux/blkdev.h>
36#include <linux/seq_file.h> 36#include <linux/seq_file.h>
37#include "md.h" 37#include "md.h"
38#include "dm-bio-list.h"
39#include "raid1.h" 38#include "raid1.h"
40#include "bitmap.h" 39#include "bitmap.h"
41 40
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index e293d92641ac..499620afb44b 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -22,7 +22,6 @@
22#include <linux/blkdev.h> 22#include <linux/blkdev.h>
23#include <linux/seq_file.h> 23#include <linux/seq_file.h>
24#include "md.h" 24#include "md.h"
25#include "dm-bio-list.h"
26#include "raid10.h" 25#include "raid10.h"
27#include "bitmap.h" 26#include "bitmap.h"
28 27
@@ -1810,17 +1809,17 @@ static sector_t sync_request(mddev_t *mddev, sector_t sector_nr, int *skipped, i
1810 r10_bio->sector = sect; 1809 r10_bio->sector = sect;
1811 1810
1812 raid10_find_phys(conf, r10_bio); 1811 raid10_find_phys(conf, r10_bio);
1813 /* Need to check if this section will still be 1812
1813 /* Need to check if the array will still be
1814 * degraded 1814 * degraded
1815 */ 1815 */
1816 for (j=0; j<conf->copies;j++) { 1816 for (j=0; j<conf->raid_disks; j++)
1817 int d = r10_bio->devs[j].devnum; 1817 if (conf->mirrors[j].rdev == NULL ||
1818 if (conf->mirrors[d].rdev == NULL || 1818 test_bit(Faulty, &conf->mirrors[j].rdev->flags)) {
1819 test_bit(Faulty, &conf->mirrors[d].rdev->flags)) {
1820 still_degraded = 1; 1819 still_degraded = 1;
1821 break; 1820 break;
1822 } 1821 }
1823 } 1822
1824 must_sync = bitmap_start_sync(mddev->bitmap, sect, 1823 must_sync = bitmap_start_sync(mddev->bitmap, sect,
1825 &sync_blocks, still_degraded); 1824 &sync_blocks, still_degraded);
1826 1825
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 3bbc6d647044..4616bc3a6e71 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -3845,6 +3845,7 @@ static sector_t reshape_request(mddev_t *mddev, sector_t sector_nr, int *skipped
3845 wait_event(conf->wait_for_overlap, 3845 wait_event(conf->wait_for_overlap,
3846 atomic_read(&conf->reshape_stripes)==0); 3846 atomic_read(&conf->reshape_stripes)==0);
3847 mddev->reshape_position = conf->reshape_progress; 3847 mddev->reshape_position = conf->reshape_progress;
3848 mddev->curr_resync_completed = mddev->curr_resync;
3848 conf->reshape_checkpoint = jiffies; 3849 conf->reshape_checkpoint = jiffies;
3849 set_bit(MD_CHANGE_DEVS, &mddev->flags); 3850 set_bit(MD_CHANGE_DEVS, &mddev->flags);
3850 md_wakeup_thread(mddev->thread); 3851 md_wakeup_thread(mddev->thread);
@@ -3854,6 +3855,7 @@ static sector_t reshape_request(mddev_t *mddev, sector_t sector_nr, int *skipped
3854 conf->reshape_safe = mddev->reshape_position; 3855 conf->reshape_safe = mddev->reshape_position;
3855 spin_unlock_irq(&conf->device_lock); 3856 spin_unlock_irq(&conf->device_lock);
3856 wake_up(&conf->wait_for_overlap); 3857 wake_up(&conf->wait_for_overlap);
3858 sysfs_notify(&mddev->kobj, NULL, "sync_completed");
3857 } 3859 }
3858 3860
3859 if (mddev->delta_disks < 0) { 3861 if (mddev->delta_disks < 0) {
@@ -3938,11 +3940,13 @@ static sector_t reshape_request(mddev_t *mddev, sector_t sector_nr, int *skipped
3938 * then we need to write out the superblock. 3940 * then we need to write out the superblock.
3939 */ 3941 */
3940 sector_nr += reshape_sectors; 3942 sector_nr += reshape_sectors;
3941 if (sector_nr >= mddev->resync_max) { 3943 if ((sector_nr - mddev->curr_resync_completed) * 2
3944 >= mddev->resync_max - mddev->curr_resync_completed) {
3942 /* Cannot proceed until we've updated the superblock... */ 3945 /* Cannot proceed until we've updated the superblock... */
3943 wait_event(conf->wait_for_overlap, 3946 wait_event(conf->wait_for_overlap,
3944 atomic_read(&conf->reshape_stripes) == 0); 3947 atomic_read(&conf->reshape_stripes) == 0);
3945 mddev->reshape_position = conf->reshape_progress; 3948 mddev->reshape_position = conf->reshape_progress;
3949 mddev->curr_resync_completed = mddev->curr_resync;
3946 conf->reshape_checkpoint = jiffies; 3950 conf->reshape_checkpoint = jiffies;
3947 set_bit(MD_CHANGE_DEVS, &mddev->flags); 3951 set_bit(MD_CHANGE_DEVS, &mddev->flags);
3948 md_wakeup_thread(mddev->thread); 3952 md_wakeup_thread(mddev->thread);
@@ -3953,6 +3957,7 @@ static sector_t reshape_request(mddev_t *mddev, sector_t sector_nr, int *skipped
3953 conf->reshape_safe = mddev->reshape_position; 3957 conf->reshape_safe = mddev->reshape_position;
3954 spin_unlock_irq(&conf->device_lock); 3958 spin_unlock_irq(&conf->device_lock);
3955 wake_up(&conf->wait_for_overlap); 3959 wake_up(&conf->wait_for_overlap);
3960 sysfs_notify(&mddev->kobj, NULL, "sync_completed");
3956 } 3961 }
3957 return reshape_sectors; 3962 return reshape_sectors;
3958} 3963}
diff --git a/drivers/media/radio/radio-sf16fmi.c b/drivers/media/radio/radio-sf16fmi.c
index 1dba8f0832a0..5cf6c45b91fe 100644
--- a/drivers/media/radio/radio-sf16fmi.c
+++ b/drivers/media/radio/radio-sf16fmi.c
@@ -153,7 +153,7 @@ static int vidioc_g_tuner(struct file *file, void *priv,
153 mult = (fmi->flags & V4L2_TUNER_CAP_LOW) ? 1 : 1000; 153 mult = (fmi->flags & V4L2_TUNER_CAP_LOW) ? 1 : 1000;
154 v->rangelow = RSF16_MINFREQ / mult; 154 v->rangelow = RSF16_MINFREQ / mult;
155 v->rangehigh = RSF16_MAXFREQ / mult; 155 v->rangehigh = RSF16_MAXFREQ / mult;
156 v->rxsubchans = V4L2_TUNER_SUB_MONO | V4L2_TUNER_MODE_STEREO; 156 v->rxsubchans = V4L2_TUNER_SUB_MONO | V4L2_TUNER_SUB_STEREO;
157 v->capability = fmi->flags & V4L2_TUNER_CAP_LOW; 157 v->capability = fmi->flags & V4L2_TUNER_CAP_LOW;
158 v->audmode = V4L2_TUNER_MODE_STEREO; 158 v->audmode = V4L2_TUNER_MODE_STEREO;
159 v->signal = fmi_getsigstr(fmi); 159 v->signal = fmi_getsigstr(fmi);
diff --git a/drivers/media/radio/radio-sf16fmr2.c b/drivers/media/radio/radio-sf16fmr2.c
index c09ca8600ea1..935ff9bcdfcc 100644
--- a/drivers/media/radio/radio-sf16fmr2.c
+++ b/drivers/media/radio/radio-sf16fmr2.c
@@ -233,7 +233,7 @@ static int vidioc_g_tuner(struct file *file, void *priv,
233 mult = (fmr2->flags & V4L2_TUNER_CAP_LOW) ? 1 : 1000; 233 mult = (fmr2->flags & V4L2_TUNER_CAP_LOW) ? 1 : 1000;
234 v->rangelow = RSF16_MINFREQ / mult; 234 v->rangelow = RSF16_MINFREQ / mult;
235 v->rangehigh = RSF16_MAXFREQ / mult; 235 v->rangehigh = RSF16_MAXFREQ / mult;
236 v->rxsubchans = V4L2_TUNER_SUB_MONO | V4L2_TUNER_MODE_STEREO; 236 v->rxsubchans = V4L2_TUNER_SUB_MONO | V4L2_TUNER_SUB_STEREO;
237 v->capability = fmr2->flags&V4L2_TUNER_CAP_LOW; 237 v->capability = fmr2->flags&V4L2_TUNER_CAP_LOW;
238 v->audmode = fmr2->stereo ? V4L2_TUNER_MODE_STEREO: 238 v->audmode = fmr2->stereo ? V4L2_TUNER_MODE_STEREO:
239 V4L2_TUNER_MODE_MONO; 239 V4L2_TUNER_MODE_MONO;
diff --git a/drivers/media/radio/radio-si470x.c b/drivers/media/radio/radio-si470x.c
index 92c297796a9f..bd945d04dc90 100644
--- a/drivers/media/radio/radio-si470x.c
+++ b/drivers/media/radio/radio-si470x.c
@@ -1200,7 +1200,7 @@ static int si470x_fops_release(struct file *file)
1200 video_unregister_device(radio->videodev); 1200 video_unregister_device(radio->videodev);
1201 kfree(radio->buffer); 1201 kfree(radio->buffer);
1202 kfree(radio); 1202 kfree(radio);
1203 goto unlock; 1203 goto done;
1204 } 1204 }
1205 1205
1206 /* stop rds reception */ 1206 /* stop rds reception */
diff --git a/drivers/media/video/au0828/au0828-core.c b/drivers/media/video/au0828/au0828-core.c
index 4cee0b92eeee..a1e4c0d769a6 100644
--- a/drivers/media/video/au0828/au0828-core.c
+++ b/drivers/media/video/au0828/au0828-core.c
@@ -192,8 +192,6 @@ static int au0828_usb_probe(struct usb_interface *interface,
192 dev->usbdev = usbdev; 192 dev->usbdev = usbdev;
193 dev->boardnr = id->driver_info; 193 dev->boardnr = id->driver_info;
194 194
195 usb_set_intfdata(interface, dev);
196
197 /* Create the v4l2_device */ 195 /* Create the v4l2_device */
198 retval = v4l2_device_register(&interface->dev, &dev->v4l2_dev); 196 retval = v4l2_device_register(&interface->dev, &dev->v4l2_dev);
199 if (retval) { 197 if (retval) {
@@ -222,6 +220,10 @@ static int au0828_usb_probe(struct usb_interface *interface,
222 /* Digital TV */ 220 /* Digital TV */
223 au0828_dvb_register(dev); 221 au0828_dvb_register(dev);
224 222
223 /* Store the pointer to the au0828_dev so it can be accessed in
224 au0828_usb_disconnect */
225 usb_set_intfdata(interface, dev);
226
225 printk(KERN_INFO "Registered device AU0828 [%s]\n", 227 printk(KERN_INFO "Registered device AU0828 [%s]\n",
226 dev->board.name == NULL ? "Unset" : dev->board.name); 228 dev->board.name == NULL ? "Unset" : dev->board.name);
227 229
diff --git a/drivers/media/video/cafe_ccic.c b/drivers/media/video/cafe_ccic.c
index 5f582726985d..c4d181dde1ca 100644
--- a/drivers/media/video/cafe_ccic.c
+++ b/drivers/media/video/cafe_ccic.c
@@ -774,6 +774,7 @@ static int cafe_cam_init(struct cafe_camera *cam)
774 ret = __cafe_cam_reset(cam); 774 ret = __cafe_cam_reset(cam);
775 if (ret) 775 if (ret)
776 goto out; 776 goto out;
777 chip.ident = V4L2_IDENT_NONE;
777 chip.match.type = V4L2_CHIP_MATCH_I2C_ADDR; 778 chip.match.type = V4L2_CHIP_MATCH_I2C_ADDR;
778 chip.match.addr = cam->sensor_addr; 779 chip.match.addr = cam->sensor_addr;
779 ret = sensor_call(cam, core, g_chip_ident, &chip); 780 ret = sensor_call(cam, core, g_chip_ident, &chip);
diff --git a/drivers/media/video/cx18/cx18-audio.c b/drivers/media/video/cx18/cx18-audio.c
index 1519e91c677a..7a8ad5963de8 100644
--- a/drivers/media/video/cx18/cx18-audio.c
+++ b/drivers/media/video/cx18/cx18-audio.c
@@ -44,7 +44,7 @@ int cx18_audio_set_io(struct cx18 *cx)
44 44
45 /* handle muxer chips */ 45 /* handle muxer chips */
46 v4l2_subdev_call(cx->sd_extmux, audio, s_routing, 46 v4l2_subdev_call(cx->sd_extmux, audio, s_routing,
47 in->audio_input, 0, 0); 47 (u32) in->muxer_input, 0, 0);
48 48
49 err = cx18_call_hw_err(cx, cx->card->hw_audio_ctrl, 49 err = cx18_call_hw_err(cx, cx->card->hw_audio_ctrl,
50 audio, s_routing, in->audio_input, 0, 0); 50 audio, s_routing, in->audio_input, 0, 0);
diff --git a/drivers/media/video/cx18/cx18-i2c.c b/drivers/media/video/cx18/cx18-i2c.c
index b9b7064a2be8..8591e4fc359f 100644
--- a/drivers/media/video/cx18/cx18-i2c.c
+++ b/drivers/media/video/cx18/cx18-i2c.c
@@ -211,7 +211,7 @@ static struct i2c_algo_bit_data cx18_i2c_algo_template = {
211/* init + register i2c algo-bit adapter */ 211/* init + register i2c algo-bit adapter */
212int init_cx18_i2c(struct cx18 *cx) 212int init_cx18_i2c(struct cx18 *cx)
213{ 213{
214 int i; 214 int i, err;
215 CX18_DEBUG_I2C("i2c init\n"); 215 CX18_DEBUG_I2C("i2c init\n");
216 216
217 for (i = 0; i < 2; i++) { 217 for (i = 0; i < 2; i++) {
@@ -268,8 +268,18 @@ int init_cx18_i2c(struct cx18 *cx)
268 cx18_call_hw(cx, CX18_HW_GPIO_RESET_CTRL, 268 cx18_call_hw(cx, CX18_HW_GPIO_RESET_CTRL,
269 core, reset, (u32) CX18_GPIO_RESET_I2C); 269 core, reset, (u32) CX18_GPIO_RESET_I2C);
270 270
271 return i2c_bit_add_bus(&cx->i2c_adap[0]) || 271 err = i2c_bit_add_bus(&cx->i2c_adap[0]);
272 i2c_bit_add_bus(&cx->i2c_adap[1]); 272 if (err)
273 goto err;
274 err = i2c_bit_add_bus(&cx->i2c_adap[1]);
275 if (err)
276 goto err_del_bus_0;
277 return 0;
278
279 err_del_bus_0:
280 i2c_del_adapter(&cx->i2c_adap[0]);
281 err:
282 return err;
273} 283}
274 284
275void exit_cx18_i2c(struct cx18 *cx) 285void exit_cx18_i2c(struct cx18 *cx)
diff --git a/drivers/media/video/cx231xx/Kconfig b/drivers/media/video/cx231xx/Kconfig
index 91156546a07a..477d4ab5e9ac 100644
--- a/drivers/media/video/cx231xx/Kconfig
+++ b/drivers/media/video/cx231xx/Kconfig
@@ -1,12 +1,11 @@
1config VIDEO_CX231XX 1config VIDEO_CX231XX
2 tristate "Conexant cx231xx USB video capture support" 2 tristate "Conexant cx231xx USB video capture support"
3 depends on VIDEO_DEV && I2C && INPUT 3 depends on VIDEO_DEV && I2C && INPUT
4 select VIDEO_TUNER 4 select VIDEO_TUNER
5 select VIDEO_TVEEPROM 5 select VIDEO_TVEEPROM
6 select VIDEO_IR 6 select VIDEO_IR
7 select VIDEOBUF_VMALLOC 7 select VIDEOBUF_VMALLOC
8 select VIDEO_CX25840 8 select VIDEO_CX25840
9 select VIDEO_CX231XX_ALSA
10 9
11 ---help--- 10 ---help---
12 This is a video4linux driver for Conexant 231xx USB based TV cards. 11 This is a video4linux driver for Conexant 231xx USB based TV cards.
@@ -15,21 +14,22 @@ config VIDEO_CX231XX
15 module will be called cx231xx 14 module will be called cx231xx
16 15
17config VIDEO_CX231XX_ALSA 16config VIDEO_CX231XX_ALSA
18 tristate "Conexant Cx231xx ALSA audio module" 17 tristate "Conexant Cx231xx ALSA audio module"
19 depends on VIDEO_CX231XX && SND 18 depends on VIDEO_CX231XX && SND
20 select SND_PCM 19 select SND_PCM
21 20
22 ---help--- 21 ---help---
23 This is an ALSA driver for Cx231xx USB based TV cards. 22 This is an ALSA driver for Cx231xx USB based TV cards.
24 23
25 To compile this driver as a module, choose M here: the 24 To compile this driver as a module, choose M here: the
26 module will be called cx231xx-alsa 25 module will be called cx231xx-alsa
27 26
28config VIDEO_CX231XX_DVB 27config VIDEO_CX231XX_DVB
29 tristate "DVB/ATSC Support for Cx231xx based TV cards" 28 tristate "DVB/ATSC Support for Cx231xx based TV cards"
30 depends on VIDEO_CX231XX && DVB_CORE 29 depends on VIDEO_CX231XX && DVB_CORE
31 select VIDEOBUF_DVB 30 select VIDEOBUF_DVB
32 select MEDIA_TUNER_XC5000 if !DVB_FE_CUSTOMISE 31 select MEDIA_TUNER_XC5000 if !DVB_FE_CUSTOMISE
33 ---help--- 32
34 This adds support for DVB cards based on the 33 ---help---
35 Conexant cx231xx chips. 34 This adds support for DVB cards based on the
35 Conexant cx231xx chips.
diff --git a/drivers/media/video/cx23885/cx23885-cards.c b/drivers/media/video/cx23885/cx23885-cards.c
index a3c0565be1a9..6d6293f7d428 100644
--- a/drivers/media/video/cx23885/cx23885-cards.c
+++ b/drivers/media/video/cx23885/cx23885-cards.c
@@ -441,9 +441,9 @@ int cx23885_tuner_callback(void *priv, int component, int command, int arg)
441 case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP: 441 case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP:
442 /* Two identical tuners on two different i2c buses, 442 /* Two identical tuners on two different i2c buses,
443 * we need to reset the correct gpio. */ 443 * we need to reset the correct gpio. */
444 if (port->nr == 0) 444 if (port->nr == 1)
445 bitmask = 0x01; 445 bitmask = 0x01;
446 else if (port->nr == 1) 446 else if (port->nr == 2)
447 bitmask = 0x04; 447 bitmask = 0x04;
448 break; 448 break;
449 } 449 }
diff --git a/drivers/media/video/cx23885/cx23885-dvb.c b/drivers/media/video/cx23885/cx23885-dvb.c
index f48454ab3900..1dc070da8652 100644
--- a/drivers/media/video/cx23885/cx23885-dvb.c
+++ b/drivers/media/video/cx23885/cx23885-dvb.c
@@ -314,6 +314,7 @@ static struct zl10353_config dvico_fusionhdtv_xc3028 = {
314 .demod_address = 0x0f, 314 .demod_address = 0x0f,
315 .if2 = 45600, 315 .if2 = 45600,
316 .no_tuner = 1, 316 .no_tuner = 1,
317 .disable_i2c_gate_ctrl = 1,
317}; 318};
318 319
319static struct stv0900_config netup_stv0900_config = { 320static struct stv0900_config netup_stv0900_config = {
@@ -471,7 +472,7 @@ static int dvb_register(struct cx23885_tsport *port)
471 static struct xc2028_ctrl ctl = { 472 static struct xc2028_ctrl ctl = {
472 .fname = XC2028_DEFAULT_FIRMWARE, 473 .fname = XC2028_DEFAULT_FIRMWARE,
473 .max_len = 64, 474 .max_len = 64,
474 .scode_table = XC3028_FE_OREN538, 475 .demod = XC3028_FE_OREN538,
475 }; 476 };
476 477
477 fe = dvb_attach(xc2028_attach, 478 fe = dvb_attach(xc2028_attach,
diff --git a/drivers/media/video/ivtv/ivtv-driver.c b/drivers/media/video/ivtv/ivtv-driver.c
index b0195e8ee4d1..db2ac9a99acd 100644
--- a/drivers/media/video/ivtv/ivtv-driver.c
+++ b/drivers/media/video/ivtv/ivtv-driver.c
@@ -305,14 +305,17 @@ int ivtv_waitq(wait_queue_head_t *waitq)
305/* Generic utility functions */ 305/* Generic utility functions */
306int ivtv_msleep_timeout(unsigned int msecs, int intr) 306int ivtv_msleep_timeout(unsigned int msecs, int intr)
307{ 307{
308 int ret;
309 int timeout = msecs_to_jiffies(msecs); 308 int timeout = msecs_to_jiffies(msecs);
310 309
311 do { 310 do {
312 set_current_state(intr ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE); 311 set_current_state(intr ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE);
313 timeout = schedule_timeout(timeout); 312 timeout = schedule_timeout(timeout);
314 if (intr && (ret = signal_pending(current))) 313 if (intr) {
315 return ret; 314 int ret = signal_pending(current);
315
316 if (ret)
317 return ret;
318 }
316 } while (timeout); 319 } while (timeout);
317 return 0; 320 return 0;
318} 321}
diff --git a/drivers/media/video/ivtv/ivtv-gpio.c b/drivers/media/video/ivtv/ivtv-gpio.c
index ceb05bdcaf62..85ac707228e7 100644
--- a/drivers/media/video/ivtv/ivtv-gpio.c
+++ b/drivers/media/video/ivtv/ivtv-gpio.c
@@ -190,8 +190,8 @@ static int subdev_g_tuner(struct v4l2_subdev *sd, struct v4l2_tuner *vt)
190 190
191 mask = itv->card->gpio_audio_detect.mask; 191 mask = itv->card->gpio_audio_detect.mask;
192 if (mask == 0 || (read_reg(IVTV_REG_GPIO_IN) & mask)) 192 if (mask == 0 || (read_reg(IVTV_REG_GPIO_IN) & mask))
193 vt->rxsubchans = V4L2_TUNER_MODE_STEREO | 193 vt->rxsubchans = V4L2_TUNER_SUB_STEREO |
194 V4L2_TUNER_MODE_LANG1 | V4L2_TUNER_MODE_LANG2; 194 V4L2_TUNER_SUB_LANG1 | V4L2_TUNER_SUB_LANG2;
195 else 195 else
196 vt->rxsubchans = V4L2_TUNER_SUB_MONO; 196 vt->rxsubchans = V4L2_TUNER_SUB_MONO;
197 return 0; 197 return 0;
diff --git a/drivers/media/video/ivtv/ivtv-ioctl.c b/drivers/media/video/ivtv/ivtv-ioctl.c
index 4a2d464f055e..c342a9fe983e 100644
--- a/drivers/media/video/ivtv/ivtv-ioctl.c
+++ b/drivers/media/video/ivtv/ivtv-ioctl.c
@@ -180,7 +180,7 @@ int ivtv_set_speed(struct ivtv *itv, int speed)
180 180
181 /* Wait for any DMA to finish */ 181 /* Wait for any DMA to finish */
182 prepare_to_wait(&itv->dma_waitq, &wait, TASK_INTERRUPTIBLE); 182 prepare_to_wait(&itv->dma_waitq, &wait, TASK_INTERRUPTIBLE);
183 while (itv->i_flags & IVTV_F_I_DMA) { 183 while (test_bit(IVTV_F_I_DMA, &itv->i_flags)) {
184 got_sig = signal_pending(current); 184 got_sig = signal_pending(current);
185 if (got_sig) 185 if (got_sig)
186 break; 186 break;
@@ -1710,7 +1710,8 @@ static int ivtv_decoder_ioctls(struct file *filp, unsigned int cmd, void *arg)
1710 we are waiting unlock first and later lock again. */ 1710 we are waiting unlock first and later lock again. */
1711 mutex_unlock(&itv->serialize_lock); 1711 mutex_unlock(&itv->serialize_lock);
1712 prepare_to_wait(&itv->event_waitq, &wait, TASK_INTERRUPTIBLE); 1712 prepare_to_wait(&itv->event_waitq, &wait, TASK_INTERRUPTIBLE);
1713 if ((itv->i_flags & (IVTV_F_I_EV_DEC_STOPPED|IVTV_F_I_EV_VSYNC)) == 0) 1713 if (!test_bit(IVTV_F_I_EV_DEC_STOPPED, &itv->i_flags) &&
1714 !test_bit(IVTV_F_I_EV_VSYNC, &itv->i_flags))
1714 schedule(); 1715 schedule();
1715 finish_wait(&itv->event_waitq, &wait); 1716 finish_wait(&itv->event_waitq, &wait);
1716 mutex_lock(&itv->serialize_lock); 1717 mutex_lock(&itv->serialize_lock);
diff --git a/drivers/media/video/ivtv/ivtv-irq.c b/drivers/media/video/ivtv/ivtv-irq.c
index 01c14d2b381a..cd9db0bf33bf 100644
--- a/drivers/media/video/ivtv/ivtv-irq.c
+++ b/drivers/media/video/ivtv/ivtv-irq.c
@@ -196,7 +196,7 @@ static int stream_enc_dma_append(struct ivtv_stream *s, u32 data[CX2341X_MBOX_MA
196 bytes_needed, s->name); 196 bytes_needed, s->name);
197 return -1; 197 return -1;
198 } 198 }
199 if (rc && !s->buffers_stolen && (s->s_flags & IVTV_F_S_APPL_IO)) { 199 if (rc && !s->buffers_stolen && test_bit(IVTV_F_S_APPL_IO, &s->s_flags)) {
200 IVTV_WARN("All %s stream buffers are full. Dropping data.\n", s->name); 200 IVTV_WARN("All %s stream buffers are full. Dropping data.\n", s->name);
201 IVTV_WARN("Cause: the application is not reading fast enough.\n"); 201 IVTV_WARN("Cause: the application is not reading fast enough.\n");
202 } 202 }
diff --git a/drivers/media/video/ivtv/ivtv-yuv.c b/drivers/media/video/ivtv/ivtv-yuv.c
index 7912ed6b72ee..c0875378acc2 100644
--- a/drivers/media/video/ivtv/ivtv-yuv.c
+++ b/drivers/media/video/ivtv/ivtv-yuv.c
@@ -1063,7 +1063,8 @@ static int ivtv_yuv_udma_frame(struct ivtv *itv, struct ivtv_dma_frame *args)
1063 prepare_to_wait(&itv->dma_waitq, &wait, TASK_INTERRUPTIBLE); 1063 prepare_to_wait(&itv->dma_waitq, &wait, TASK_INTERRUPTIBLE);
1064 /* if no UDMA is pending and no UDMA is in progress, then the DMA 1064 /* if no UDMA is pending and no UDMA is in progress, then the DMA
1065 is finished */ 1065 is finished */
1066 while (itv->i_flags & (IVTV_F_I_UDMA_PENDING | IVTV_F_I_UDMA)) { 1066 while (test_bit(IVTV_F_I_UDMA_PENDING, &itv->i_flags) ||
1067 test_bit(IVTV_F_I_UDMA, &itv->i_flags)) {
1067 /* don't interrupt if the DMA is in progress but break off 1068 /* don't interrupt if the DMA is in progress but break off
1068 a still pending DMA. */ 1069 a still pending DMA. */
1069 got_sig = signal_pending(current); 1070 got_sig = signal_pending(current);
diff --git a/drivers/media/video/ivtv/ivtvfb.c b/drivers/media/video/ivtv/ivtvfb.c
index 66e6eb513076..fa6bb85cb4b0 100644
--- a/drivers/media/video/ivtv/ivtvfb.c
+++ b/drivers/media/video/ivtv/ivtvfb.c
@@ -298,7 +298,8 @@ static int ivtvfb_prep_dec_dma_to_device(struct ivtv *itv,
298 prepare_to_wait(&itv->dma_waitq, &wait, TASK_INTERRUPTIBLE); 298 prepare_to_wait(&itv->dma_waitq, &wait, TASK_INTERRUPTIBLE);
299 /* if no UDMA is pending and no UDMA is in progress, then the DMA 299 /* if no UDMA is pending and no UDMA is in progress, then the DMA
300 is finished */ 300 is finished */
301 while (itv->i_flags & (IVTV_F_I_UDMA_PENDING | IVTV_F_I_UDMA)) { 301 while (test_bit(IVTV_F_I_UDMA_PENDING, &itv->i_flags) ||
302 test_bit(IVTV_F_I_UDMA, &itv->i_flags)) {
302 /* don't interrupt if the DMA is in progress but break off 303 /* don't interrupt if the DMA is in progress but break off
303 a still pending DMA. */ 304 a still pending DMA. */
304 got_sig = signal_pending(current); 305 got_sig = signal_pending(current);
diff --git a/drivers/media/video/mx3_camera.c b/drivers/media/video/mx3_camera.c
index c462b811e994..2d0781118eb0 100644
--- a/drivers/media/video/mx3_camera.c
+++ b/drivers/media/video/mx3_camera.c
@@ -1063,10 +1063,6 @@ static struct soc_camera_host_ops mx3_soc_camera_host_ops = {
1063 .owner = THIS_MODULE, 1063 .owner = THIS_MODULE,
1064 .add = mx3_camera_add_device, 1064 .add = mx3_camera_add_device,
1065 .remove = mx3_camera_remove_device, 1065 .remove = mx3_camera_remove_device,
1066#ifdef CONFIG_PM
1067 .suspend = mx3_camera_suspend,
1068 .resume = mx3_camera_resume,
1069#endif
1070 .set_crop = mx3_camera_set_crop, 1066 .set_crop = mx3_camera_set_crop,
1071 .set_fmt = mx3_camera_set_fmt, 1067 .set_fmt = mx3_camera_set_fmt,
1072 .try_fmt = mx3_camera_try_fmt, 1068 .try_fmt = mx3_camera_try_fmt,
diff --git a/drivers/media/video/pvrusb2/pvrusb2-hdw.c b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
index d9d974a8f52a..add3395d3248 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-hdw.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
@@ -1461,7 +1461,6 @@ static int pvr2_upload_firmware1(struct pvr2_hdw *hdw)
1461 return ret; 1461 return ret;
1462 } 1462 }
1463 1463
1464 usb_settoggle(hdw->usb_dev, 0 & 0xf, !(0 & USB_DIR_IN), 0);
1465 usb_clear_halt(hdw->usb_dev, usb_sndbulkpipe(hdw->usb_dev, 0 & 0x7f)); 1464 usb_clear_halt(hdw->usb_dev, usb_sndbulkpipe(hdw->usb_dev, 0 & 0x7f));
1466 1465
1467 pipe = usb_sndctrlpipe(hdw->usb_dev, 0); 1466 pipe = usb_sndctrlpipe(hdw->usb_dev, 0);
diff --git a/drivers/media/video/pwc/pwc-ctrl.c b/drivers/media/video/pwc/pwc-ctrl.c
index f9fbe02e0f69..50b415e07eda 100644
--- a/drivers/media/video/pwc/pwc-ctrl.c
+++ b/drivers/media/video/pwc/pwc-ctrl.c
@@ -159,35 +159,67 @@ static void pwc_set_image_buffer_size(struct pwc_device *pdev);
159 159
160/****************************************************************************/ 160/****************************************************************************/
161 161
162static int _send_control_msg(struct pwc_device *pdev,
163 u8 request, u16 value, int index, void *buf, int buflen, int timeout)
164{
165 int rc;
166 void *kbuf = NULL;
167
168 if (buflen) {
169 kbuf = kmalloc(buflen, GFP_KERNEL); /* not allowed on stack */
170 if (kbuf == NULL)
171 return -ENOMEM;
172 memcpy(kbuf, buf, buflen);
173 }
162 174
163#define SendControlMsg(request, value, buflen) \ 175 rc = usb_control_msg(pdev->udev, usb_sndctrlpipe(pdev->udev, 0),
164 usb_control_msg(pdev->udev, usb_sndctrlpipe(pdev->udev, 0), \ 176 request,
165 request, \ 177 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
166 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, \ 178 value,
167 value, \ 179 index,
168 pdev->vcinterface, \ 180 kbuf, buflen, timeout);
169 &buf, buflen, 500)
170 181
171#define RecvControlMsg(request, value, buflen) \ 182 kfree(kbuf);
172 usb_control_msg(pdev->udev, usb_rcvctrlpipe(pdev->udev, 0), \ 183 return rc;
173 request, \ 184}
174 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, \
175 value, \
176 pdev->vcinterface, \
177 &buf, buflen, 500)
178 185
186static int recv_control_msg(struct pwc_device *pdev,
187 u8 request, u16 value, void *buf, int buflen)
188{
189 int rc;
190 void *kbuf = kmalloc(buflen, GFP_KERNEL); /* not allowed on stack */
191
192 if (kbuf == NULL)
193 return -ENOMEM;
194
195 rc = usb_control_msg(pdev->udev, usb_rcvctrlpipe(pdev->udev, 0),
196 request,
197 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
198 value,
199 pdev->vcinterface,
200 kbuf, buflen, 500);
201 memcpy(buf, kbuf, buflen);
202 kfree(kbuf);
203 return rc;
204}
179 205
180static int send_video_command(struct usb_device *udev, int index, void *buf, int buflen) 206static inline int send_video_command(struct pwc_device *pdev,
207 int index, void *buf, int buflen)
181{ 208{
182 return usb_control_msg(udev, 209 return _send_control_msg(pdev,
183 usb_sndctrlpipe(udev, 0),
184 SET_EP_STREAM_CTL, 210 SET_EP_STREAM_CTL,
185 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
186 VIDEO_OUTPUT_CONTROL_FORMATTER, 211 VIDEO_OUTPUT_CONTROL_FORMATTER,
187 index, 212 index,
188 buf, buflen, 1000); 213 buf, buflen, 1000);
189} 214}
190 215
216static inline int send_control_msg(struct pwc_device *pdev,
217 u8 request, u16 value, void *buf, int buflen)
218{
219 return _send_control_msg(pdev,
220 request, value, pdev->vcinterface, buf, buflen, 500);
221}
222
191 223
192 224
193static int set_video_mode_Nala(struct pwc_device *pdev, int size, int frames) 225static int set_video_mode_Nala(struct pwc_device *pdev, int size, int frames)
@@ -224,7 +256,7 @@ static int set_video_mode_Nala(struct pwc_device *pdev, int size, int frames)
224 return -EINVAL; 256 return -EINVAL;
225 257
226 memcpy(buf, pEntry->mode, 3); 258 memcpy(buf, pEntry->mode, 3);
227 ret = send_video_command(pdev->udev, pdev->vendpoint, buf, 3); 259 ret = send_video_command(pdev, pdev->vendpoint, buf, 3);
228 if (ret < 0) { 260 if (ret < 0) {
229 PWC_DEBUG_MODULE("Failed to send video command... %d\n", ret); 261 PWC_DEBUG_MODULE("Failed to send video command... %d\n", ret);
230 return ret; 262 return ret;
@@ -285,7 +317,7 @@ static int set_video_mode_Timon(struct pwc_device *pdev, int size, int frames, i
285 memcpy(buf, pChoose->mode, 13); 317 memcpy(buf, pChoose->mode, 13);
286 if (snapshot) 318 if (snapshot)
287 buf[0] |= 0x80; 319 buf[0] |= 0x80;
288 ret = send_video_command(pdev->udev, pdev->vendpoint, buf, 13); 320 ret = send_video_command(pdev, pdev->vendpoint, buf, 13);
289 if (ret < 0) 321 if (ret < 0)
290 return ret; 322 return ret;
291 323
@@ -358,7 +390,7 @@ static int set_video_mode_Kiara(struct pwc_device *pdev, int size, int frames, i
358 buf[0] |= 0x80; 390 buf[0] |= 0x80;
359 391
360 /* Firmware bug: video endpoint is 5, but commands are sent to endpoint 4 */ 392 /* Firmware bug: video endpoint is 5, but commands are sent to endpoint 4 */
361 ret = send_video_command(pdev->udev, 4 /* pdev->vendpoint */, buf, 12); 393 ret = send_video_command(pdev, 4 /* pdev->vendpoint */, buf, 12);
362 if (ret < 0) 394 if (ret < 0)
363 return ret; 395 return ret;
364 396
@@ -530,7 +562,8 @@ int pwc_get_brightness(struct pwc_device *pdev)
530 char buf; 562 char buf;
531 int ret; 563 int ret;
532 564
533 ret = RecvControlMsg(GET_LUM_CTL, BRIGHTNESS_FORMATTER, 1); 565 ret = recv_control_msg(pdev,
566 GET_LUM_CTL, BRIGHTNESS_FORMATTER, &buf, sizeof(buf));
534 if (ret < 0) 567 if (ret < 0)
535 return ret; 568 return ret;
536 return buf; 569 return buf;
@@ -545,7 +578,8 @@ int pwc_set_brightness(struct pwc_device *pdev, int value)
545 if (value > 0xffff) 578 if (value > 0xffff)
546 value = 0xffff; 579 value = 0xffff;
547 buf = (value >> 9) & 0x7f; 580 buf = (value >> 9) & 0x7f;
548 return SendControlMsg(SET_LUM_CTL, BRIGHTNESS_FORMATTER, 1); 581 return send_control_msg(pdev,
582 SET_LUM_CTL, BRIGHTNESS_FORMATTER, &buf, sizeof(buf));
549} 583}
550 584
551/* CONTRAST */ 585/* CONTRAST */
@@ -555,7 +589,8 @@ int pwc_get_contrast(struct pwc_device *pdev)
555 char buf; 589 char buf;
556 int ret; 590 int ret;
557 591
558 ret = RecvControlMsg(GET_LUM_CTL, CONTRAST_FORMATTER, 1); 592 ret = recv_control_msg(pdev,
593 GET_LUM_CTL, CONTRAST_FORMATTER, &buf, sizeof(buf));
559 if (ret < 0) 594 if (ret < 0)
560 return ret; 595 return ret;
561 return buf; 596 return buf;
@@ -570,7 +605,8 @@ int pwc_set_contrast(struct pwc_device *pdev, int value)
570 if (value > 0xffff) 605 if (value > 0xffff)
571 value = 0xffff; 606 value = 0xffff;
572 buf = (value >> 10) & 0x3f; 607 buf = (value >> 10) & 0x3f;
573 return SendControlMsg(SET_LUM_CTL, CONTRAST_FORMATTER, 1); 608 return send_control_msg(pdev,
609 SET_LUM_CTL, CONTRAST_FORMATTER, &buf, sizeof(buf));
574} 610}
575 611
576/* GAMMA */ 612/* GAMMA */
@@ -580,7 +616,8 @@ int pwc_get_gamma(struct pwc_device *pdev)
580 char buf; 616 char buf;
581 int ret; 617 int ret;
582 618
583 ret = RecvControlMsg(GET_LUM_CTL, GAMMA_FORMATTER, 1); 619 ret = recv_control_msg(pdev,
620 GET_LUM_CTL, GAMMA_FORMATTER, &buf, sizeof(buf));
584 if (ret < 0) 621 if (ret < 0)
585 return ret; 622 return ret;
586 return buf; 623 return buf;
@@ -595,7 +632,8 @@ int pwc_set_gamma(struct pwc_device *pdev, int value)
595 if (value > 0xffff) 632 if (value > 0xffff)
596 value = 0xffff; 633 value = 0xffff;
597 buf = (value >> 11) & 0x1f; 634 buf = (value >> 11) & 0x1f;
598 return SendControlMsg(SET_LUM_CTL, GAMMA_FORMATTER, 1); 635 return send_control_msg(pdev,
636 SET_LUM_CTL, GAMMA_FORMATTER, &buf, sizeof(buf));
599} 637}
600 638
601 639
@@ -613,7 +651,8 @@ int pwc_get_saturation(struct pwc_device *pdev, int *value)
613 saturation_register = SATURATION_MODE_FORMATTER2; 651 saturation_register = SATURATION_MODE_FORMATTER2;
614 else 652 else
615 saturation_register = SATURATION_MODE_FORMATTER1; 653 saturation_register = SATURATION_MODE_FORMATTER1;
616 ret = RecvControlMsg(GET_CHROM_CTL, saturation_register, 1); 654 ret = recv_control_msg(pdev,
655 GET_CHROM_CTL, saturation_register, &buf, sizeof(buf));
617 if (ret < 0) 656 if (ret < 0)
618 return ret; 657 return ret;
619 *value = (signed)buf; 658 *value = (signed)buf;
@@ -636,7 +675,8 @@ int pwc_set_saturation(struct pwc_device *pdev, int value)
636 saturation_register = SATURATION_MODE_FORMATTER2; 675 saturation_register = SATURATION_MODE_FORMATTER2;
637 else 676 else
638 saturation_register = SATURATION_MODE_FORMATTER1; 677 saturation_register = SATURATION_MODE_FORMATTER1;
639 return SendControlMsg(SET_CHROM_CTL, saturation_register, 1); 678 return send_control_msg(pdev,
679 SET_CHROM_CTL, saturation_register, &buf, sizeof(buf));
640} 680}
641 681
642/* AGC */ 682/* AGC */
@@ -651,7 +691,8 @@ int pwc_set_agc(struct pwc_device *pdev, int mode, int value)
651 else 691 else
652 buf = 0xff; /* fixed */ 692 buf = 0xff; /* fixed */
653 693
654 ret = SendControlMsg(SET_LUM_CTL, AGC_MODE_FORMATTER, 1); 694 ret = send_control_msg(pdev,
695 SET_LUM_CTL, AGC_MODE_FORMATTER, &buf, sizeof(buf));
655 696
656 if (!mode && ret >= 0) { 697 if (!mode && ret >= 0) {
657 if (value < 0) 698 if (value < 0)
@@ -659,7 +700,8 @@ int pwc_set_agc(struct pwc_device *pdev, int mode, int value)
659 if (value > 0xffff) 700 if (value > 0xffff)
660 value = 0xffff; 701 value = 0xffff;
661 buf = (value >> 10) & 0x3F; 702 buf = (value >> 10) & 0x3F;
662 ret = SendControlMsg(SET_LUM_CTL, PRESET_AGC_FORMATTER, 1); 703 ret = send_control_msg(pdev,
704 SET_LUM_CTL, PRESET_AGC_FORMATTER, &buf, sizeof(buf));
663 } 705 }
664 if (ret < 0) 706 if (ret < 0)
665 return ret; 707 return ret;
@@ -671,12 +713,14 @@ int pwc_get_agc(struct pwc_device *pdev, int *value)
671 unsigned char buf; 713 unsigned char buf;
672 int ret; 714 int ret;
673 715
674 ret = RecvControlMsg(GET_LUM_CTL, AGC_MODE_FORMATTER, 1); 716 ret = recv_control_msg(pdev,
717 GET_LUM_CTL, AGC_MODE_FORMATTER, &buf, sizeof(buf));
675 if (ret < 0) 718 if (ret < 0)
676 return ret; 719 return ret;
677 720
678 if (buf != 0) { /* fixed */ 721 if (buf != 0) { /* fixed */
679 ret = RecvControlMsg(GET_LUM_CTL, PRESET_AGC_FORMATTER, 1); 722 ret = recv_control_msg(pdev,
723 GET_LUM_CTL, PRESET_AGC_FORMATTER, &buf, sizeof(buf));
680 if (ret < 0) 724 if (ret < 0)
681 return ret; 725 return ret;
682 if (buf > 0x3F) 726 if (buf > 0x3F)
@@ -684,7 +728,8 @@ int pwc_get_agc(struct pwc_device *pdev, int *value)
684 *value = (buf << 10); 728 *value = (buf << 10);
685 } 729 }
686 else { /* auto */ 730 else { /* auto */
687 ret = RecvControlMsg(GET_STATUS_CTL, READ_AGC_FORMATTER, 1); 731 ret = recv_control_msg(pdev,
732 GET_STATUS_CTL, READ_AGC_FORMATTER, &buf, sizeof(buf));
688 if (ret < 0) 733 if (ret < 0)
689 return ret; 734 return ret;
690 /* Gah... this value ranges from 0x00 ... 0x9F */ 735 /* Gah... this value ranges from 0x00 ... 0x9F */
@@ -707,7 +752,8 @@ int pwc_set_shutter_speed(struct pwc_device *pdev, int mode, int value)
707 else 752 else
708 buf[0] = 0xff; /* fixed */ 753 buf[0] = 0xff; /* fixed */
709 754
710 ret = SendControlMsg(SET_LUM_CTL, SHUTTER_MODE_FORMATTER, 1); 755 ret = send_control_msg(pdev,
756 SET_LUM_CTL, SHUTTER_MODE_FORMATTER, &buf, sizeof(buf));
711 757
712 if (!mode && ret >= 0) { 758 if (!mode && ret >= 0) {
713 if (value < 0) 759 if (value < 0)
@@ -726,7 +772,9 @@ int pwc_set_shutter_speed(struct pwc_device *pdev, int mode, int value)
726 buf[0] = value >> 8; 772 buf[0] = value >> 8;
727 } 773 }
728 774
729 ret = SendControlMsg(SET_LUM_CTL, PRESET_SHUTTER_FORMATTER, 2); 775 ret = send_control_msg(pdev,
776 SET_LUM_CTL, PRESET_SHUTTER_FORMATTER,
777 &buf, sizeof(buf));
730 } 778 }
731 return ret; 779 return ret;
732} 780}
@@ -737,7 +785,8 @@ int pwc_get_shutter_speed(struct pwc_device *pdev, int *value)
737 unsigned char buf[2]; 785 unsigned char buf[2];
738 int ret; 786 int ret;
739 787
740 ret = RecvControlMsg(GET_STATUS_CTL, READ_SHUTTER_FORMATTER, 2); 788 ret = recv_control_msg(pdev,
789 GET_STATUS_CTL, READ_SHUTTER_FORMATTER, &buf, sizeof(buf));
741 if (ret < 0) 790 if (ret < 0)
742 return ret; 791 return ret;
743 *value = buf[0] + (buf[1] << 8); 792 *value = buf[0] + (buf[1] << 8);
@@ -764,7 +813,9 @@ int pwc_camera_power(struct pwc_device *pdev, int power)
764 buf = 0x00; /* active */ 813 buf = 0x00; /* active */
765 else 814 else
766 buf = 0xFF; /* power save */ 815 buf = 0xFF; /* power save */
767 return SendControlMsg(SET_STATUS_CTL, SET_POWER_SAVE_MODE_FORMATTER, 1); 816 return send_control_msg(pdev,
817 SET_STATUS_CTL, SET_POWER_SAVE_MODE_FORMATTER,
818 &buf, sizeof(buf));
768} 819}
769 820
770 821
@@ -773,20 +824,20 @@ int pwc_camera_power(struct pwc_device *pdev, int power)
773 824
774int pwc_restore_user(struct pwc_device *pdev) 825int pwc_restore_user(struct pwc_device *pdev)
775{ 826{
776 char buf; /* dummy */ 827 return send_control_msg(pdev,
777 return SendControlMsg(SET_STATUS_CTL, RESTORE_USER_DEFAULTS_FORMATTER, 0); 828 SET_STATUS_CTL, RESTORE_USER_DEFAULTS_FORMATTER, NULL, 0);
778} 829}
779 830
780int pwc_save_user(struct pwc_device *pdev) 831int pwc_save_user(struct pwc_device *pdev)
781{ 832{
782 char buf; /* dummy */ 833 return send_control_msg(pdev,
783 return SendControlMsg(SET_STATUS_CTL, SAVE_USER_DEFAULTS_FORMATTER, 0); 834 SET_STATUS_CTL, SAVE_USER_DEFAULTS_FORMATTER, NULL, 0);
784} 835}
785 836
786int pwc_restore_factory(struct pwc_device *pdev) 837int pwc_restore_factory(struct pwc_device *pdev)
787{ 838{
788 char buf; /* dummy */ 839 return send_control_msg(pdev,
789 return SendControlMsg(SET_STATUS_CTL, RESTORE_FACTORY_DEFAULTS_FORMATTER, 0); 840 SET_STATUS_CTL, RESTORE_FACTORY_DEFAULTS_FORMATTER, NULL, 0);
790} 841}
791 842
792 /* ************************************************* */ 843 /* ************************************************* */
@@ -814,7 +865,8 @@ int pwc_set_awb(struct pwc_device *pdev, int mode)
814 865
815 buf = mode & 0x07; /* just the lowest three bits */ 866 buf = mode & 0x07; /* just the lowest three bits */
816 867
817 ret = SendControlMsg(SET_CHROM_CTL, WB_MODE_FORMATTER, 1); 868 ret = send_control_msg(pdev,
869 SET_CHROM_CTL, WB_MODE_FORMATTER, &buf, sizeof(buf));
818 870
819 if (ret < 0) 871 if (ret < 0)
820 return ret; 872 return ret;
@@ -826,7 +878,8 @@ int pwc_get_awb(struct pwc_device *pdev)
826 unsigned char buf; 878 unsigned char buf;
827 int ret; 879 int ret;
828 880
829 ret = RecvControlMsg(GET_CHROM_CTL, WB_MODE_FORMATTER, 1); 881 ret = recv_control_msg(pdev,
882 GET_CHROM_CTL, WB_MODE_FORMATTER, &buf, sizeof(buf));
830 883
831 if (ret < 0) 884 if (ret < 0)
832 return ret; 885 return ret;
@@ -843,7 +896,9 @@ int pwc_set_red_gain(struct pwc_device *pdev, int value)
843 value = 0xffff; 896 value = 0xffff;
844 /* only the msb is considered */ 897 /* only the msb is considered */
845 buf = value >> 8; 898 buf = value >> 8;
846 return SendControlMsg(SET_CHROM_CTL, PRESET_MANUAL_RED_GAIN_FORMATTER, 1); 899 return send_control_msg(pdev,
900 SET_CHROM_CTL, PRESET_MANUAL_RED_GAIN_FORMATTER,
901 &buf, sizeof(buf));
847} 902}
848 903
849int pwc_get_red_gain(struct pwc_device *pdev, int *value) 904int pwc_get_red_gain(struct pwc_device *pdev, int *value)
@@ -851,7 +906,9 @@ int pwc_get_red_gain(struct pwc_device *pdev, int *value)
851 unsigned char buf; 906 unsigned char buf;
852 int ret; 907 int ret;
853 908
854 ret = RecvControlMsg(GET_CHROM_CTL, PRESET_MANUAL_RED_GAIN_FORMATTER, 1); 909 ret = recv_control_msg(pdev,
910 GET_CHROM_CTL, PRESET_MANUAL_RED_GAIN_FORMATTER,
911 &buf, sizeof(buf));
855 if (ret < 0) 912 if (ret < 0)
856 return ret; 913 return ret;
857 *value = buf << 8; 914 *value = buf << 8;
@@ -869,7 +926,9 @@ int pwc_set_blue_gain(struct pwc_device *pdev, int value)
869 value = 0xffff; 926 value = 0xffff;
870 /* only the msb is considered */ 927 /* only the msb is considered */
871 buf = value >> 8; 928 buf = value >> 8;
872 return SendControlMsg(SET_CHROM_CTL, PRESET_MANUAL_BLUE_GAIN_FORMATTER, 1); 929 return send_control_msg(pdev,
930 SET_CHROM_CTL, PRESET_MANUAL_BLUE_GAIN_FORMATTER,
931 &buf, sizeof(buf));
873} 932}
874 933
875int pwc_get_blue_gain(struct pwc_device *pdev, int *value) 934int pwc_get_blue_gain(struct pwc_device *pdev, int *value)
@@ -877,7 +936,9 @@ int pwc_get_blue_gain(struct pwc_device *pdev, int *value)
877 unsigned char buf; 936 unsigned char buf;
878 int ret; 937 int ret;
879 938
880 ret = RecvControlMsg(GET_CHROM_CTL, PRESET_MANUAL_BLUE_GAIN_FORMATTER, 1); 939 ret = recv_control_msg(pdev,
940 GET_CHROM_CTL, PRESET_MANUAL_BLUE_GAIN_FORMATTER,
941 &buf, sizeof(buf));
881 if (ret < 0) 942 if (ret < 0)
882 return ret; 943 return ret;
883 *value = buf << 8; 944 *value = buf << 8;
@@ -894,7 +955,8 @@ static int pwc_read_red_gain(struct pwc_device *pdev, int *value)
894 unsigned char buf; 955 unsigned char buf;
895 int ret; 956 int ret;
896 957
897 ret = RecvControlMsg(GET_STATUS_CTL, READ_RED_GAIN_FORMATTER, 1); 958 ret = recv_control_msg(pdev,
959 GET_STATUS_CTL, READ_RED_GAIN_FORMATTER, &buf, sizeof(buf));
898 if (ret < 0) 960 if (ret < 0)
899 return ret; 961 return ret;
900 *value = buf << 8; 962 *value = buf << 8;
@@ -906,7 +968,8 @@ static int pwc_read_blue_gain(struct pwc_device *pdev, int *value)
906 unsigned char buf; 968 unsigned char buf;
907 int ret; 969 int ret;
908 970
909 ret = RecvControlMsg(GET_STATUS_CTL, READ_BLUE_GAIN_FORMATTER, 1); 971 ret = recv_control_msg(pdev,
972 GET_STATUS_CTL, READ_BLUE_GAIN_FORMATTER, &buf, sizeof(buf));
910 if (ret < 0) 973 if (ret < 0)
911 return ret; 974 return ret;
912 *value = buf << 8; 975 *value = buf << 8;
@@ -920,7 +983,8 @@ static int pwc_set_wb_speed(struct pwc_device *pdev, int speed)
920 983
921 /* useful range is 0x01..0x20 */ 984 /* useful range is 0x01..0x20 */
922 buf = speed / 0x7f0; 985 buf = speed / 0x7f0;
923 return SendControlMsg(SET_CHROM_CTL, AWB_CONTROL_SPEED_FORMATTER, 1); 986 return send_control_msg(pdev,
987 SET_CHROM_CTL, AWB_CONTROL_SPEED_FORMATTER, &buf, sizeof(buf));
924} 988}
925 989
926static int pwc_get_wb_speed(struct pwc_device *pdev, int *value) 990static int pwc_get_wb_speed(struct pwc_device *pdev, int *value)
@@ -928,7 +992,8 @@ static int pwc_get_wb_speed(struct pwc_device *pdev, int *value)
928 unsigned char buf; 992 unsigned char buf;
929 int ret; 993 int ret;
930 994
931 ret = RecvControlMsg(GET_CHROM_CTL, AWB_CONTROL_SPEED_FORMATTER, 1); 995 ret = recv_control_msg(pdev,
996 GET_CHROM_CTL, AWB_CONTROL_SPEED_FORMATTER, &buf, sizeof(buf));
932 if (ret < 0) 997 if (ret < 0)
933 return ret; 998 return ret;
934 *value = buf * 0x7f0; 999 *value = buf * 0x7f0;
@@ -942,7 +1007,8 @@ static int pwc_set_wb_delay(struct pwc_device *pdev, int delay)
942 1007
943 /* useful range is 0x01..0x3F */ 1008 /* useful range is 0x01..0x3F */
944 buf = (delay >> 10); 1009 buf = (delay >> 10);
945 return SendControlMsg(SET_CHROM_CTL, AWB_CONTROL_DELAY_FORMATTER, 1); 1010 return send_control_msg(pdev,
1011 SET_CHROM_CTL, AWB_CONTROL_DELAY_FORMATTER, &buf, sizeof(buf));
946} 1012}
947 1013
948static int pwc_get_wb_delay(struct pwc_device *pdev, int *value) 1014static int pwc_get_wb_delay(struct pwc_device *pdev, int *value)
@@ -950,7 +1016,8 @@ static int pwc_get_wb_delay(struct pwc_device *pdev, int *value)
950 unsigned char buf; 1016 unsigned char buf;
951 int ret; 1017 int ret;
952 1018
953 ret = RecvControlMsg(GET_CHROM_CTL, AWB_CONTROL_DELAY_FORMATTER, 1); 1019 ret = recv_control_msg(pdev,
1020 GET_CHROM_CTL, AWB_CONTROL_DELAY_FORMATTER, &buf, sizeof(buf));
954 if (ret < 0) 1021 if (ret < 0)
955 return ret; 1022 return ret;
956 *value = buf << 10; 1023 *value = buf << 10;
@@ -978,7 +1045,8 @@ int pwc_set_leds(struct pwc_device *pdev, int on_value, int off_value)
978 buf[0] = on_value; 1045 buf[0] = on_value;
979 buf[1] = off_value; 1046 buf[1] = off_value;
980 1047
981 return SendControlMsg(SET_STATUS_CTL, LED_FORMATTER, 2); 1048 return send_control_msg(pdev,
1049 SET_STATUS_CTL, LED_FORMATTER, &buf, sizeof(buf));
982} 1050}
983 1051
984static int pwc_get_leds(struct pwc_device *pdev, int *on_value, int *off_value) 1052static int pwc_get_leds(struct pwc_device *pdev, int *on_value, int *off_value)
@@ -992,7 +1060,8 @@ static int pwc_get_leds(struct pwc_device *pdev, int *on_value, int *off_value)
992 return 0; 1060 return 0;
993 } 1061 }
994 1062
995 ret = RecvControlMsg(GET_STATUS_CTL, LED_FORMATTER, 2); 1063 ret = recv_control_msg(pdev,
1064 GET_STATUS_CTL, LED_FORMATTER, &buf, sizeof(buf));
996 if (ret < 0) 1065 if (ret < 0)
997 return ret; 1066 return ret;
998 *on_value = buf[0] * 100; 1067 *on_value = buf[0] * 100;
@@ -1009,7 +1078,8 @@ int pwc_set_contour(struct pwc_device *pdev, int contour)
1009 buf = 0xff; /* auto contour on */ 1078 buf = 0xff; /* auto contour on */
1010 else 1079 else
1011 buf = 0x0; /* auto contour off */ 1080 buf = 0x0; /* auto contour off */
1012 ret = SendControlMsg(SET_LUM_CTL, AUTO_CONTOUR_FORMATTER, 1); 1081 ret = send_control_msg(pdev,
1082 SET_LUM_CTL, AUTO_CONTOUR_FORMATTER, &buf, sizeof(buf));
1013 if (ret < 0) 1083 if (ret < 0)
1014 return ret; 1084 return ret;
1015 1085
@@ -1019,7 +1089,8 @@ int pwc_set_contour(struct pwc_device *pdev, int contour)
1019 contour = 0xffff; 1089 contour = 0xffff;
1020 1090
1021 buf = (contour >> 10); /* contour preset is [0..3f] */ 1091 buf = (contour >> 10); /* contour preset is [0..3f] */
1022 ret = SendControlMsg(SET_LUM_CTL, PRESET_CONTOUR_FORMATTER, 1); 1092 ret = send_control_msg(pdev,
1093 SET_LUM_CTL, PRESET_CONTOUR_FORMATTER, &buf, sizeof(buf));
1023 if (ret < 0) 1094 if (ret < 0)
1024 return ret; 1095 return ret;
1025 return 0; 1096 return 0;
@@ -1030,13 +1101,16 @@ int pwc_get_contour(struct pwc_device *pdev, int *contour)
1030 unsigned char buf; 1101 unsigned char buf;
1031 int ret; 1102 int ret;
1032 1103
1033 ret = RecvControlMsg(GET_LUM_CTL, AUTO_CONTOUR_FORMATTER, 1); 1104 ret = recv_control_msg(pdev,
1105 GET_LUM_CTL, AUTO_CONTOUR_FORMATTER, &buf, sizeof(buf));
1034 if (ret < 0) 1106 if (ret < 0)
1035 return ret; 1107 return ret;
1036 1108
1037 if (buf == 0) { 1109 if (buf == 0) {
1038 /* auto mode off, query current preset value */ 1110 /* auto mode off, query current preset value */
1039 ret = RecvControlMsg(GET_LUM_CTL, PRESET_CONTOUR_FORMATTER, 1); 1111 ret = recv_control_msg(pdev,
1112 GET_LUM_CTL, PRESET_CONTOUR_FORMATTER,
1113 &buf, sizeof(buf));
1040 if (ret < 0) 1114 if (ret < 0)
1041 return ret; 1115 return ret;
1042 *contour = buf << 10; 1116 *contour = buf << 10;
@@ -1055,7 +1129,9 @@ int pwc_set_backlight(struct pwc_device *pdev, int backlight)
1055 buf = 0xff; 1129 buf = 0xff;
1056 else 1130 else
1057 buf = 0x0; 1131 buf = 0x0;
1058 return SendControlMsg(SET_LUM_CTL, BACK_LIGHT_COMPENSATION_FORMATTER, 1); 1132 return send_control_msg(pdev,
1133 SET_LUM_CTL, BACK_LIGHT_COMPENSATION_FORMATTER,
1134 &buf, sizeof(buf));
1059} 1135}
1060 1136
1061int pwc_get_backlight(struct pwc_device *pdev, int *backlight) 1137int pwc_get_backlight(struct pwc_device *pdev, int *backlight)
@@ -1063,7 +1139,9 @@ int pwc_get_backlight(struct pwc_device *pdev, int *backlight)
1063 int ret; 1139 int ret;
1064 unsigned char buf; 1140 unsigned char buf;
1065 1141
1066 ret = RecvControlMsg(GET_LUM_CTL, BACK_LIGHT_COMPENSATION_FORMATTER, 1); 1142 ret = recv_control_msg(pdev,
1143 GET_LUM_CTL, BACK_LIGHT_COMPENSATION_FORMATTER,
1144 &buf, sizeof(buf));
1067 if (ret < 0) 1145 if (ret < 0)
1068 return ret; 1146 return ret;
1069 *backlight = !!buf; 1147 *backlight = !!buf;
@@ -1078,7 +1156,8 @@ int pwc_set_colour_mode(struct pwc_device *pdev, int colour)
1078 buf = 0xff; 1156 buf = 0xff;
1079 else 1157 else
1080 buf = 0x0; 1158 buf = 0x0;
1081 return SendControlMsg(SET_CHROM_CTL, COLOUR_MODE_FORMATTER, 1); 1159 return send_control_msg(pdev,
1160 SET_CHROM_CTL, COLOUR_MODE_FORMATTER, &buf, sizeof(buf));
1082} 1161}
1083 1162
1084int pwc_get_colour_mode(struct pwc_device *pdev, int *colour) 1163int pwc_get_colour_mode(struct pwc_device *pdev, int *colour)
@@ -1086,7 +1165,8 @@ int pwc_get_colour_mode(struct pwc_device *pdev, int *colour)
1086 int ret; 1165 int ret;
1087 unsigned char buf; 1166 unsigned char buf;
1088 1167
1089 ret = RecvControlMsg(GET_CHROM_CTL, COLOUR_MODE_FORMATTER, 1); 1168 ret = recv_control_msg(pdev,
1169 GET_CHROM_CTL, COLOUR_MODE_FORMATTER, &buf, sizeof(buf));
1090 if (ret < 0) 1170 if (ret < 0)
1091 return ret; 1171 return ret;
1092 *colour = !!buf; 1172 *colour = !!buf;
@@ -1102,7 +1182,8 @@ int pwc_set_flicker(struct pwc_device *pdev, int flicker)
1102 buf = 0xff; 1182 buf = 0xff;
1103 else 1183 else
1104 buf = 0x0; 1184 buf = 0x0;
1105 return SendControlMsg(SET_LUM_CTL, FLICKERLESS_MODE_FORMATTER, 1); 1185 return send_control_msg(pdev,
1186 SET_LUM_CTL, FLICKERLESS_MODE_FORMATTER, &buf, sizeof(buf));
1106} 1187}
1107 1188
1108int pwc_get_flicker(struct pwc_device *pdev, int *flicker) 1189int pwc_get_flicker(struct pwc_device *pdev, int *flicker)
@@ -1110,7 +1191,8 @@ int pwc_get_flicker(struct pwc_device *pdev, int *flicker)
1110 int ret; 1191 int ret;
1111 unsigned char buf; 1192 unsigned char buf;
1112 1193
1113 ret = RecvControlMsg(GET_LUM_CTL, FLICKERLESS_MODE_FORMATTER, 1); 1194 ret = recv_control_msg(pdev,
1195 GET_LUM_CTL, FLICKERLESS_MODE_FORMATTER, &buf, sizeof(buf));
1114 if (ret < 0) 1196 if (ret < 0)
1115 return ret; 1197 return ret;
1116 *flicker = !!buf; 1198 *flicker = !!buf;
@@ -1126,7 +1208,9 @@ int pwc_set_dynamic_noise(struct pwc_device *pdev, int noise)
1126 if (noise > 3) 1208 if (noise > 3)
1127 noise = 3; 1209 noise = 3;
1128 buf = noise; 1210 buf = noise;
1129 return SendControlMsg(SET_LUM_CTL, DYNAMIC_NOISE_CONTROL_FORMATTER, 1); 1211 return send_control_msg(pdev,
1212 SET_LUM_CTL, DYNAMIC_NOISE_CONTROL_FORMATTER,
1213 &buf, sizeof(buf));
1130} 1214}
1131 1215
1132int pwc_get_dynamic_noise(struct pwc_device *pdev, int *noise) 1216int pwc_get_dynamic_noise(struct pwc_device *pdev, int *noise)
@@ -1134,7 +1218,9 @@ int pwc_get_dynamic_noise(struct pwc_device *pdev, int *noise)
1134 int ret; 1218 int ret;
1135 unsigned char buf; 1219 unsigned char buf;
1136 1220
1137 ret = RecvControlMsg(GET_LUM_CTL, DYNAMIC_NOISE_CONTROL_FORMATTER, 1); 1221 ret = recv_control_msg(pdev,
1222 GET_LUM_CTL, DYNAMIC_NOISE_CONTROL_FORMATTER,
1223 &buf, sizeof(buf));
1138 if (ret < 0) 1224 if (ret < 0)
1139 return ret; 1225 return ret;
1140 *noise = buf; 1226 *noise = buf;
@@ -1146,7 +1232,8 @@ static int _pwc_mpt_reset(struct pwc_device *pdev, int flags)
1146 unsigned char buf; 1232 unsigned char buf;
1147 1233
1148 buf = flags & 0x03; // only lower two bits are currently used 1234 buf = flags & 0x03; // only lower two bits are currently used
1149 return SendControlMsg(SET_MPT_CTL, PT_RESET_CONTROL_FORMATTER, 1); 1235 return send_control_msg(pdev,
1236 SET_MPT_CTL, PT_RESET_CONTROL_FORMATTER, &buf, sizeof(buf));
1150} 1237}
1151 1238
1152int pwc_mpt_reset(struct pwc_device *pdev, int flags) 1239int pwc_mpt_reset(struct pwc_device *pdev, int flags)
@@ -1175,7 +1262,8 @@ static int _pwc_mpt_set_angle(struct pwc_device *pdev, int pan, int tilt)
1175 buf[1] = (pan >> 8) & 0xFF; 1262 buf[1] = (pan >> 8) & 0xFF;
1176 buf[2] = tilt & 0xFF; 1263 buf[2] = tilt & 0xFF;
1177 buf[3] = (tilt >> 8) & 0xFF; 1264 buf[3] = (tilt >> 8) & 0xFF;
1178 return SendControlMsg(SET_MPT_CTL, PT_RELATIVE_CONTROL_FORMATTER, 4); 1265 return send_control_msg(pdev,
1266 SET_MPT_CTL, PT_RELATIVE_CONTROL_FORMATTER, &buf, sizeof(buf));
1179} 1267}
1180 1268
1181int pwc_mpt_set_angle(struct pwc_device *pdev, int pan, int tilt) 1269int pwc_mpt_set_angle(struct pwc_device *pdev, int pan, int tilt)
@@ -1211,7 +1299,8 @@ static int pwc_mpt_get_status(struct pwc_device *pdev, struct pwc_mpt_status *st
1211 int ret; 1299 int ret;
1212 unsigned char buf[5]; 1300 unsigned char buf[5];
1213 1301
1214 ret = RecvControlMsg(GET_MPT_CTL, PT_STATUS_FORMATTER, 5); 1302 ret = recv_control_msg(pdev,
1303 GET_MPT_CTL, PT_STATUS_FORMATTER, &buf, sizeof(buf));
1215 if (ret < 0) 1304 if (ret < 0)
1216 return ret; 1305 return ret;
1217 status->status = buf[0] & 0x7; // 3 bits are used for reporting 1306 status->status = buf[0] & 0x7; // 3 bits are used for reporting
@@ -1233,7 +1322,8 @@ int pwc_get_cmos_sensor(struct pwc_device *pdev, int *sensor)
1233 else 1322 else
1234 request = SENSOR_TYPE_FORMATTER2; 1323 request = SENSOR_TYPE_FORMATTER2;
1235 1324
1236 ret = RecvControlMsg(GET_STATUS_CTL, request, 1); 1325 ret = recv_control_msg(pdev,
1326 GET_STATUS_CTL, request, &buf, sizeof(buf));
1237 if (ret < 0) 1327 if (ret < 0)
1238 return ret; 1328 return ret;
1239 if (pdev->type < 675) 1329 if (pdev->type < 675)
diff --git a/drivers/media/video/s2255drv.c b/drivers/media/video/s2255drv.c
index 5202cadb2aae..30f4698be90a 100644
--- a/drivers/media/video/s2255drv.c
+++ b/drivers/media/video/s2255drv.c
@@ -1237,6 +1237,7 @@ static int s2255_set_mode(struct s2255_dev *dev, unsigned long chn,
1237 buffer[1] = (u32) chn_rev; 1237 buffer[1] = (u32) chn_rev;
1238 buffer[2] = CMD_SET_MODE; 1238 buffer[2] = CMD_SET_MODE;
1239 memcpy(&buffer[3], &dev->mode[chn], sizeof(struct s2255_mode)); 1239 memcpy(&buffer[3], &dev->mode[chn], sizeof(struct s2255_mode));
1240 dev->setmode_ready[chn] = 0;
1240 res = s2255_write_config(dev->udev, (unsigned char *)buffer, 512); 1241 res = s2255_write_config(dev->udev, (unsigned char *)buffer, 512);
1241 if (debug) 1242 if (debug)
1242 dump_verify_mode(dev, mode); 1243 dump_verify_mode(dev, mode);
@@ -1245,7 +1246,6 @@ static int s2255_set_mode(struct s2255_dev *dev, unsigned long chn,
1245 1246
1246 /* wait at least 3 frames before continuing */ 1247 /* wait at least 3 frames before continuing */
1247 if (mode->restart) { 1248 if (mode->restart) {
1248 dev->setmode_ready[chn] = 0;
1249 wait_event_timeout(dev->wait_setmode[chn], 1249 wait_event_timeout(dev->wait_setmode[chn],
1250 (dev->setmode_ready[chn] != 0), 1250 (dev->setmode_ready[chn] != 0),
1251 msecs_to_jiffies(S2255_SETMODE_TIMEOUT)); 1251 msecs_to_jiffies(S2255_SETMODE_TIMEOUT));
diff --git a/drivers/media/video/saa5246a.c b/drivers/media/video/saa5246a.c
index da47b2f05288..155804b061e9 100644
--- a/drivers/media/video/saa5246a.c
+++ b/drivers/media/video/saa5246a.c
@@ -1092,9 +1092,8 @@ static int saa5246a_probe(struct i2c_client *client,
1092 /* Register it */ 1092 /* Register it */
1093 err = video_register_device(t->vdev, VFL_TYPE_VTX, -1); 1093 err = video_register_device(t->vdev, VFL_TYPE_VTX, -1);
1094 if (err < 0) { 1094 if (err < 0) {
1095 kfree(t);
1096 video_device_release(t->vdev); 1095 video_device_release(t->vdev);
1097 t->vdev = NULL; 1096 kfree(t);
1098 return err; 1097 return err;
1099 } 1098 }
1100 return 0; 1099 return 0;
diff --git a/drivers/media/video/saa5249.c b/drivers/media/video/saa5249.c
index 48b27fe48087..271d6e931b75 100644
--- a/drivers/media/video/saa5249.c
+++ b/drivers/media/video/saa5249.c
@@ -598,6 +598,7 @@ static int saa5249_probe(struct i2c_client *client,
598 /* Now create a video4linux device */ 598 /* Now create a video4linux device */
599 t->vdev = video_device_alloc(); 599 t->vdev = video_device_alloc();
600 if (t->vdev == NULL) { 600 if (t->vdev == NULL) {
601 kfree(t);
601 kfree(client); 602 kfree(client);
602 return -ENOMEM; 603 return -ENOMEM;
603 } 604 }
@@ -617,9 +618,8 @@ static int saa5249_probe(struct i2c_client *client,
617 /* Register it */ 618 /* Register it */
618 err = video_register_device(t->vdev, VFL_TYPE_VTX, -1); 619 err = video_register_device(t->vdev, VFL_TYPE_VTX, -1);
619 if (err < 0) { 620 if (err < 0) {
620 kfree(t);
621 video_device_release(t->vdev); 621 video_device_release(t->vdev);
622 t->vdev = NULL; 622 kfree(t);
623 return err; 623 return err;
624 } 624 }
625 return 0; 625 return 0;
diff --git a/drivers/media/video/uvc/uvc_driver.c b/drivers/media/video/uvc/uvc_driver.c
index 399412d7f020..507dc85646b2 100644
--- a/drivers/media/video/uvc/uvc_driver.c
+++ b/drivers/media/video/uvc/uvc_driver.c
@@ -1726,14 +1726,17 @@ static int uvc_suspend(struct usb_interface *intf, pm_message_t message)
1726static int __uvc_resume(struct usb_interface *intf, int reset) 1726static int __uvc_resume(struct usb_interface *intf, int reset)
1727{ 1727{
1728 struct uvc_device *dev = usb_get_intfdata(intf); 1728 struct uvc_device *dev = usb_get_intfdata(intf);
1729 int ret;
1730 1729
1731 uvc_trace(UVC_TRACE_SUSPEND, "Resuming interface %u\n", 1730 uvc_trace(UVC_TRACE_SUSPEND, "Resuming interface %u\n",
1732 intf->cur_altsetting->desc.bInterfaceNumber); 1731 intf->cur_altsetting->desc.bInterfaceNumber);
1733 1732
1734 if (intf->cur_altsetting->desc.bInterfaceSubClass == SC_VIDEOCONTROL) { 1733 if (intf->cur_altsetting->desc.bInterfaceSubClass == SC_VIDEOCONTROL) {
1735 if (reset && (ret = uvc_ctrl_resume_device(dev)) < 0) 1734 if (reset) {
1736 return ret; 1735 int ret = uvc_ctrl_resume_device(dev);
1736
1737 if (ret < 0)
1738 return ret;
1739 }
1737 1740
1738 return uvc_status_resume(dev); 1741 return uvc_status_resume(dev);
1739 } 1742 }
diff --git a/drivers/media/video/uvc/uvc_video.c b/drivers/media/video/uvc/uvc_video.c
index a95e17329c5b..6ce974d7362f 100644
--- a/drivers/media/video/uvc/uvc_video.c
+++ b/drivers/media/video/uvc/uvc_video.c
@@ -742,7 +742,7 @@ static int uvc_alloc_urb_buffers(struct uvc_video_device *video,
742 742
743 /* Buffers are already allocated, bail out. */ 743 /* Buffers are already allocated, bail out. */
744 if (video->urb_size) 744 if (video->urb_size)
745 return 0; 745 return video->urb_size / psize;
746 746
747 /* Compute the number of packets. Bulk endpoints might transfer UVC 747 /* Compute the number of packets. Bulk endpoints might transfer UVC
748 * payloads accross multiple URBs. 748 * payloads accross multiple URBs.
diff --git a/drivers/media/video/v4l2-ioctl.c b/drivers/media/video/v4l2-ioctl.c
index 88f10d6cbc92..be64a502ea27 100644
--- a/drivers/media/video/v4l2-ioctl.c
+++ b/drivers/media/video/v4l2-ioctl.c
@@ -42,6 +42,12 @@
42 printk(KERN_DEBUG "%s: " fmt, vfd->name, ## arg);\ 42 printk(KERN_DEBUG "%s: " fmt, vfd->name, ## arg);\
43 } while (0) 43 } while (0)
44 44
45/* Zero out the end of the struct pointed to by p. Everthing after, but
46 * not including, the specified field is cleared. */
47#define CLEAR_AFTER_FIELD(p, field) \
48 memset((u8 *)(p) + offsetof(typeof(*(p)), field) + sizeof((p)->field), \
49 0, sizeof(*(p)) - offsetof(typeof(*(p)), field) - sizeof((p)->field))
50
45struct std_descr { 51struct std_descr {
46 v4l2_std_id std; 52 v4l2_std_id std;
47 const char *descr; 53 const char *descr;
@@ -544,39 +550,39 @@ static int check_fmt(const struct v4l2_ioctl_ops *ops, enum v4l2_buf_type type)
544 550
545 switch (type) { 551 switch (type) {
546 case V4L2_BUF_TYPE_VIDEO_CAPTURE: 552 case V4L2_BUF_TYPE_VIDEO_CAPTURE:
547 if (ops->vidioc_try_fmt_vid_cap) 553 if (ops->vidioc_g_fmt_vid_cap)
548 return 0; 554 return 0;
549 break; 555 break;
550 case V4L2_BUF_TYPE_VIDEO_OVERLAY: 556 case V4L2_BUF_TYPE_VIDEO_OVERLAY:
551 if (ops->vidioc_try_fmt_vid_overlay) 557 if (ops->vidioc_g_fmt_vid_overlay)
552 return 0; 558 return 0;
553 break; 559 break;
554 case V4L2_BUF_TYPE_VIDEO_OUTPUT: 560 case V4L2_BUF_TYPE_VIDEO_OUTPUT:
555 if (ops->vidioc_try_fmt_vid_out) 561 if (ops->vidioc_g_fmt_vid_out)
556 return 0; 562 return 0;
557 break; 563 break;
558 case V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY: 564 case V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY:
559 if (ops->vidioc_try_fmt_vid_out_overlay) 565 if (ops->vidioc_g_fmt_vid_out_overlay)
560 return 0; 566 return 0;
561 break; 567 break;
562 case V4L2_BUF_TYPE_VBI_CAPTURE: 568 case V4L2_BUF_TYPE_VBI_CAPTURE:
563 if (ops->vidioc_try_fmt_vbi_cap) 569 if (ops->vidioc_g_fmt_vbi_cap)
564 return 0; 570 return 0;
565 break; 571 break;
566 case V4L2_BUF_TYPE_VBI_OUTPUT: 572 case V4L2_BUF_TYPE_VBI_OUTPUT:
567 if (ops->vidioc_try_fmt_vbi_out) 573 if (ops->vidioc_g_fmt_vbi_out)
568 return 0; 574 return 0;
569 break; 575 break;
570 case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE: 576 case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE:
571 if (ops->vidioc_try_fmt_sliced_vbi_cap) 577 if (ops->vidioc_g_fmt_sliced_vbi_cap)
572 return 0; 578 return 0;
573 break; 579 break;
574 case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT: 580 case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT:
575 if (ops->vidioc_try_fmt_sliced_vbi_out) 581 if (ops->vidioc_g_fmt_sliced_vbi_out)
576 return 0; 582 return 0;
577 break; 583 break;
578 case V4L2_BUF_TYPE_PRIVATE: 584 case V4L2_BUF_TYPE_PRIVATE:
579 if (ops->vidioc_try_fmt_type_private) 585 if (ops->vidioc_g_fmt_type_private)
580 return 0; 586 return 0;
581 break; 587 break;
582 } 588 }
@@ -782,44 +788,53 @@ static long __video_do_ioctl(struct file *file,
782 788
783 switch (f->type) { 789 switch (f->type) {
784 case V4L2_BUF_TYPE_VIDEO_CAPTURE: 790 case V4L2_BUF_TYPE_VIDEO_CAPTURE:
791 CLEAR_AFTER_FIELD(f, fmt.pix);
785 v4l_print_pix_fmt(vfd, &f->fmt.pix); 792 v4l_print_pix_fmt(vfd, &f->fmt.pix);
786 if (ops->vidioc_s_fmt_vid_cap) 793 if (ops->vidioc_s_fmt_vid_cap)
787 ret = ops->vidioc_s_fmt_vid_cap(file, fh, f); 794 ret = ops->vidioc_s_fmt_vid_cap(file, fh, f);
788 break; 795 break;
789 case V4L2_BUF_TYPE_VIDEO_OVERLAY: 796 case V4L2_BUF_TYPE_VIDEO_OVERLAY:
797 CLEAR_AFTER_FIELD(f, fmt.win);
790 if (ops->vidioc_s_fmt_vid_overlay) 798 if (ops->vidioc_s_fmt_vid_overlay)
791 ret = ops->vidioc_s_fmt_vid_overlay(file, 799 ret = ops->vidioc_s_fmt_vid_overlay(file,
792 fh, f); 800 fh, f);
793 break; 801 break;
794 case V4L2_BUF_TYPE_VIDEO_OUTPUT: 802 case V4L2_BUF_TYPE_VIDEO_OUTPUT:
803 CLEAR_AFTER_FIELD(f, fmt.pix);
795 v4l_print_pix_fmt(vfd, &f->fmt.pix); 804 v4l_print_pix_fmt(vfd, &f->fmt.pix);
796 if (ops->vidioc_s_fmt_vid_out) 805 if (ops->vidioc_s_fmt_vid_out)
797 ret = ops->vidioc_s_fmt_vid_out(file, fh, f); 806 ret = ops->vidioc_s_fmt_vid_out(file, fh, f);
798 break; 807 break;
799 case V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY: 808 case V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY:
809 CLEAR_AFTER_FIELD(f, fmt.win);
800 if (ops->vidioc_s_fmt_vid_out_overlay) 810 if (ops->vidioc_s_fmt_vid_out_overlay)
801 ret = ops->vidioc_s_fmt_vid_out_overlay(file, 811 ret = ops->vidioc_s_fmt_vid_out_overlay(file,
802 fh, f); 812 fh, f);
803 break; 813 break;
804 case V4L2_BUF_TYPE_VBI_CAPTURE: 814 case V4L2_BUF_TYPE_VBI_CAPTURE:
815 CLEAR_AFTER_FIELD(f, fmt.vbi);
805 if (ops->vidioc_s_fmt_vbi_cap) 816 if (ops->vidioc_s_fmt_vbi_cap)
806 ret = ops->vidioc_s_fmt_vbi_cap(file, fh, f); 817 ret = ops->vidioc_s_fmt_vbi_cap(file, fh, f);
807 break; 818 break;
808 case V4L2_BUF_TYPE_VBI_OUTPUT: 819 case V4L2_BUF_TYPE_VBI_OUTPUT:
820 CLEAR_AFTER_FIELD(f, fmt.vbi);
809 if (ops->vidioc_s_fmt_vbi_out) 821 if (ops->vidioc_s_fmt_vbi_out)
810 ret = ops->vidioc_s_fmt_vbi_out(file, fh, f); 822 ret = ops->vidioc_s_fmt_vbi_out(file, fh, f);
811 break; 823 break;
812 case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE: 824 case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE:
825 CLEAR_AFTER_FIELD(f, fmt.sliced);
813 if (ops->vidioc_s_fmt_sliced_vbi_cap) 826 if (ops->vidioc_s_fmt_sliced_vbi_cap)
814 ret = ops->vidioc_s_fmt_sliced_vbi_cap(file, 827 ret = ops->vidioc_s_fmt_sliced_vbi_cap(file,
815 fh, f); 828 fh, f);
816 break; 829 break;
817 case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT: 830 case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT:
831 CLEAR_AFTER_FIELD(f, fmt.sliced);
818 if (ops->vidioc_s_fmt_sliced_vbi_out) 832 if (ops->vidioc_s_fmt_sliced_vbi_out)
819 ret = ops->vidioc_s_fmt_sliced_vbi_out(file, 833 ret = ops->vidioc_s_fmt_sliced_vbi_out(file,
820 fh, f); 834 fh, f);
821 break; 835 break;
822 case V4L2_BUF_TYPE_PRIVATE: 836 case V4L2_BUF_TYPE_PRIVATE:
837 /* CLEAR_AFTER_FIELD(f, fmt.raw_data); <- does nothing */
823 if (ops->vidioc_s_fmt_type_private) 838 if (ops->vidioc_s_fmt_type_private)
824 ret = ops->vidioc_s_fmt_type_private(file, 839 ret = ops->vidioc_s_fmt_type_private(file,
825 fh, f); 840 fh, f);
@@ -836,46 +851,55 @@ static long __video_do_ioctl(struct file *file,
836 v4l2_type_names)); 851 v4l2_type_names));
837 switch (f->type) { 852 switch (f->type) {
838 case V4L2_BUF_TYPE_VIDEO_CAPTURE: 853 case V4L2_BUF_TYPE_VIDEO_CAPTURE:
854 CLEAR_AFTER_FIELD(f, fmt.pix);
839 if (ops->vidioc_try_fmt_vid_cap) 855 if (ops->vidioc_try_fmt_vid_cap)
840 ret = ops->vidioc_try_fmt_vid_cap(file, fh, f); 856 ret = ops->vidioc_try_fmt_vid_cap(file, fh, f);
841 if (!ret) 857 if (!ret)
842 v4l_print_pix_fmt(vfd, &f->fmt.pix); 858 v4l_print_pix_fmt(vfd, &f->fmt.pix);
843 break; 859 break;
844 case V4L2_BUF_TYPE_VIDEO_OVERLAY: 860 case V4L2_BUF_TYPE_VIDEO_OVERLAY:
861 CLEAR_AFTER_FIELD(f, fmt.win);
845 if (ops->vidioc_try_fmt_vid_overlay) 862 if (ops->vidioc_try_fmt_vid_overlay)
846 ret = ops->vidioc_try_fmt_vid_overlay(file, 863 ret = ops->vidioc_try_fmt_vid_overlay(file,
847 fh, f); 864 fh, f);
848 break; 865 break;
849 case V4L2_BUF_TYPE_VIDEO_OUTPUT: 866 case V4L2_BUF_TYPE_VIDEO_OUTPUT:
867 CLEAR_AFTER_FIELD(f, fmt.pix);
850 if (ops->vidioc_try_fmt_vid_out) 868 if (ops->vidioc_try_fmt_vid_out)
851 ret = ops->vidioc_try_fmt_vid_out(file, fh, f); 869 ret = ops->vidioc_try_fmt_vid_out(file, fh, f);
852 if (!ret) 870 if (!ret)
853 v4l_print_pix_fmt(vfd, &f->fmt.pix); 871 v4l_print_pix_fmt(vfd, &f->fmt.pix);
854 break; 872 break;
855 case V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY: 873 case V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY:
874 CLEAR_AFTER_FIELD(f, fmt.win);
856 if (ops->vidioc_try_fmt_vid_out_overlay) 875 if (ops->vidioc_try_fmt_vid_out_overlay)
857 ret = ops->vidioc_try_fmt_vid_out_overlay(file, 876 ret = ops->vidioc_try_fmt_vid_out_overlay(file,
858 fh, f); 877 fh, f);
859 break; 878 break;
860 case V4L2_BUF_TYPE_VBI_CAPTURE: 879 case V4L2_BUF_TYPE_VBI_CAPTURE:
880 CLEAR_AFTER_FIELD(f, fmt.vbi);
861 if (ops->vidioc_try_fmt_vbi_cap) 881 if (ops->vidioc_try_fmt_vbi_cap)
862 ret = ops->vidioc_try_fmt_vbi_cap(file, fh, f); 882 ret = ops->vidioc_try_fmt_vbi_cap(file, fh, f);
863 break; 883 break;
864 case V4L2_BUF_TYPE_VBI_OUTPUT: 884 case V4L2_BUF_TYPE_VBI_OUTPUT:
885 CLEAR_AFTER_FIELD(f, fmt.vbi);
865 if (ops->vidioc_try_fmt_vbi_out) 886 if (ops->vidioc_try_fmt_vbi_out)
866 ret = ops->vidioc_try_fmt_vbi_out(file, fh, f); 887 ret = ops->vidioc_try_fmt_vbi_out(file, fh, f);
867 break; 888 break;
868 case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE: 889 case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE:
890 CLEAR_AFTER_FIELD(f, fmt.sliced);
869 if (ops->vidioc_try_fmt_sliced_vbi_cap) 891 if (ops->vidioc_try_fmt_sliced_vbi_cap)
870 ret = ops->vidioc_try_fmt_sliced_vbi_cap(file, 892 ret = ops->vidioc_try_fmt_sliced_vbi_cap(file,
871 fh, f); 893 fh, f);
872 break; 894 break;
873 case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT: 895 case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT:
896 CLEAR_AFTER_FIELD(f, fmt.sliced);
874 if (ops->vidioc_try_fmt_sliced_vbi_out) 897 if (ops->vidioc_try_fmt_sliced_vbi_out)
875 ret = ops->vidioc_try_fmt_sliced_vbi_out(file, 898 ret = ops->vidioc_try_fmt_sliced_vbi_out(file,
876 fh, f); 899 fh, f);
877 break; 900 break;
878 case V4L2_BUF_TYPE_PRIVATE: 901 case V4L2_BUF_TYPE_PRIVATE:
902 /* CLEAR_AFTER_FIELD(f, fmt.raw_data); <- does nothing */
879 if (ops->vidioc_try_fmt_type_private) 903 if (ops->vidioc_try_fmt_type_private)
880 ret = ops->vidioc_try_fmt_type_private(file, 904 ret = ops->vidioc_try_fmt_type_private(file,
881 fh, f); 905 fh, f);
@@ -898,6 +922,9 @@ static long __video_do_ioctl(struct file *file,
898 if (ret) 922 if (ret)
899 break; 923 break;
900 924
925 if (p->type < V4L2_BUF_TYPE_PRIVATE)
926 CLEAR_AFTER_FIELD(p, memory);
927
901 ret = ops->vidioc_reqbufs(file, fh, p); 928 ret = ops->vidioc_reqbufs(file, fh, p);
902 dbgarg(cmd, "count=%d, type=%s, memory=%s\n", 929 dbgarg(cmd, "count=%d, type=%s, memory=%s\n",
903 p->count, 930 p->count,
diff --git a/drivers/media/video/zoran/zoran_driver.c b/drivers/media/video/zoran/zoran_driver.c
index 092333b1c34f..643cccaa1aab 100644
--- a/drivers/media/video/zoran/zoran_driver.c
+++ b/drivers/media/video/zoran/zoran_driver.c
@@ -1863,22 +1863,20 @@ static int zoran_querycap(struct file *file, void *__fh, struct v4l2_capability
1863 1863
1864static int zoran_enum_fmt(struct zoran *zr, struct v4l2_fmtdesc *fmt, int flag) 1864static int zoran_enum_fmt(struct zoran *zr, struct v4l2_fmtdesc *fmt, int flag)
1865{ 1865{
1866 int num = -1, i; 1866 unsigned int num, i;
1867 1867
1868 for (i = 0; i < NUM_FORMATS; i++) { 1868 for (num = i = 0; i < NUM_FORMATS; i++) {
1869 if (zoran_formats[i].flags & flag) 1869 if (zoran_formats[i].flags & flag && num++ == fmt->index) {
1870 num++; 1870 strncpy(fmt->description, zoran_formats[i].name,
1871 if (num == fmt->index) 1871 sizeof(fmt->description) - 1);
1872 break; 1872 /* fmt struct pre-zeroed, so adding '\0' not neeed */
1873 fmt->pixelformat = zoran_formats[i].fourcc;
1874 if (zoran_formats[i].flags & ZORAN_FORMAT_COMPRESSED)
1875 fmt->flags |= V4L2_FMT_FLAG_COMPRESSED;
1876 return 0;
1877 }
1873 } 1878 }
1874 if (fmt->index < 0 /* late, but not too late */ || i == NUM_FORMATS) 1879 return -EINVAL;
1875 return -EINVAL;
1876
1877 strncpy(fmt->description, zoran_formats[i].name, sizeof(fmt->description)-1);
1878 fmt->pixelformat = zoran_formats[i].fourcc;
1879 if (zoran_formats[i].flags & ZORAN_FORMAT_COMPRESSED)
1880 fmt->flags |= V4L2_FMT_FLAG_COMPRESSED;
1881 return 0;
1882} 1880}
1883 1881
1884static int zoran_enum_fmt_vid_cap(struct file *file, void *__fh, 1882static int zoran_enum_fmt_vid_cap(struct file *file, void *__fh,
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c
index d0d126c69354..5d496a99e034 100644
--- a/drivers/message/fusion/mptbase.c
+++ b/drivers/message/fusion/mptbase.c
@@ -5934,7 +5934,7 @@ mpt_config(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg)
5934 5934
5935 /* Initalize the timer 5935 /* Initalize the timer
5936 */ 5936 */
5937 init_timer(&pCfg->timer); 5937 init_timer_on_stack(&pCfg->timer);
5938 pCfg->timer.data = (unsigned long) ioc; 5938 pCfg->timer.data = (unsigned long) ioc;
5939 pCfg->timer.function = mpt_timer_expired; 5939 pCfg->timer.function = mpt_timer_expired;
5940 pCfg->wait_done = 0; 5940 pCfg->wait_done = 0;
diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c
index d184dfab9631..db39f4a52f53 100644
--- a/drivers/misc/eeprom/at24.c
+++ b/drivers/misc/eeprom/at24.c
@@ -278,7 +278,7 @@ static ssize_t at24_bin_read(struct kobject *kobj, struct bin_attribute *attr,
278 * We only use page mode writes; the alternative is sloooow. This routine 278 * We only use page mode writes; the alternative is sloooow. This routine
279 * writes at most one page. 279 * writes at most one page.
280 */ 280 */
281static ssize_t at24_eeprom_write(struct at24_data *at24, char *buf, 281static ssize_t at24_eeprom_write(struct at24_data *at24, const char *buf,
282 unsigned offset, size_t count) 282 unsigned offset, size_t count)
283{ 283{
284 struct i2c_client *client; 284 struct i2c_client *client;
@@ -347,8 +347,8 @@ static ssize_t at24_eeprom_write(struct at24_data *at24, char *buf,
347 return -ETIMEDOUT; 347 return -ETIMEDOUT;
348} 348}
349 349
350static ssize_t at24_write(struct at24_data *at24, 350static ssize_t at24_write(struct at24_data *at24, const char *buf, loff_t off,
351 char *buf, loff_t off, size_t count) 351 size_t count)
352{ 352{
353 ssize_t retval = 0; 353 ssize_t retval = 0;
354 354
@@ -406,7 +406,7 @@ static ssize_t at24_macc_read(struct memory_accessor *macc, char *buf,
406 return at24_read(at24, buf, offset, count); 406 return at24_read(at24, buf, offset, count);
407} 407}
408 408
409static ssize_t at24_macc_write(struct memory_accessor *macc, char *buf, 409static ssize_t at24_macc_write(struct memory_accessor *macc, const char *buf,
410 off_t offset, size_t count) 410 off_t offset, size_t count)
411{ 411{
412 struct at24_data *at24 = container_of(macc, struct at24_data, macc); 412 struct at24_data *at24 = container_of(macc, struct at24_data, macc);
diff --git a/drivers/misc/eeprom/at25.c b/drivers/misc/eeprom/at25.c
index 6bc0dac5c1e8..b34cb5f79eea 100644
--- a/drivers/misc/eeprom/at25.c
+++ b/drivers/misc/eeprom/at25.c
@@ -140,7 +140,8 @@ at25_bin_read(struct kobject *kobj, struct bin_attribute *bin_attr,
140 140
141 141
142static ssize_t 142static ssize_t
143at25_ee_write(struct at25_data *at25, char *buf, loff_t off, size_t count) 143at25_ee_write(struct at25_data *at25, const char *buf, loff_t off,
144 size_t count)
144{ 145{
145 ssize_t status = 0; 146 ssize_t status = 0;
146 unsigned written = 0; 147 unsigned written = 0;
@@ -276,7 +277,7 @@ static ssize_t at25_mem_read(struct memory_accessor *mem, char *buf,
276 return at25_ee_read(at25, buf, offset, count); 277 return at25_ee_read(at25, buf, offset, count);
277} 278}
278 279
279static ssize_t at25_mem_write(struct memory_accessor *mem, char *buf, 280static ssize_t at25_mem_write(struct memory_accessor *mem, const char *buf,
280 off_t offset, size_t count) 281 off_t offset, size_t count)
281{ 282{
282 struct at25_data *at25 = container_of(mem, struct at25_data, mem); 283 struct at25_data *at25 = container_of(mem, struct at25_data, mem);
diff --git a/drivers/misc/isl29003.c b/drivers/misc/isl29003.c
index 2e2a5923d4c2..a71e245801ee 100644
--- a/drivers/misc/isl29003.c
+++ b/drivers/misc/isl29003.c
@@ -64,6 +64,7 @@ struct isl29003_data {
64 struct i2c_client *client; 64 struct i2c_client *client;
65 struct mutex lock; 65 struct mutex lock;
66 u8 reg_cache[ISL29003_NUM_CACHABLE_REGS]; 66 u8 reg_cache[ISL29003_NUM_CACHABLE_REGS];
67 u8 power_state_before_suspend;
67}; 68};
68 69
69static int gain_range[] = { 70static int gain_range[] = {
@@ -411,6 +412,9 @@ static int __devexit isl29003_remove(struct i2c_client *client)
411#ifdef CONFIG_PM 412#ifdef CONFIG_PM
412static int isl29003_suspend(struct i2c_client *client, pm_message_t mesg) 413static int isl29003_suspend(struct i2c_client *client, pm_message_t mesg)
413{ 414{
415 struct isl29003_data *data = i2c_get_clientdata(client);
416
417 data->power_state_before_suspend = isl29003_get_power_state(client);
414 return isl29003_set_power_state(client, 0); 418 return isl29003_set_power_state(client, 0);
415} 419}
416 420
@@ -421,10 +425,11 @@ static int isl29003_resume(struct i2c_client *client)
421 425
422 /* restore registers from cache */ 426 /* restore registers from cache */
423 for (i = 0; i < ARRAY_SIZE(data->reg_cache); i++) 427 for (i = 0; i < ARRAY_SIZE(data->reg_cache); i++)
424 if (!i2c_smbus_write_byte_data(client, i, data->reg_cache[i])) 428 if (i2c_smbus_write_byte_data(client, i, data->reg_cache[i]))
425 return -EIO; 429 return -EIO;
426 430
427 return 0; 431 return isl29003_set_power_state(client,
432 data->power_state_before_suspend);
428} 433}
429 434
430#else 435#else
diff --git a/drivers/misc/sgi-gru/grufile.c b/drivers/misc/sgi-gru/grufile.c
index 3e6e42d2f01b..bbefe77c67a9 100644
--- a/drivers/misc/sgi-gru/grufile.c
+++ b/drivers/misc/sgi-gru/grufile.c
@@ -375,7 +375,7 @@ static int __init gru_init(void)
375 void *gru_start_vaddr; 375 void *gru_start_vaddr;
376 376
377 if (!is_uv_system()) 377 if (!is_uv_system())
378 return -ENODEV; 378 return 0;
379 379
380#if defined CONFIG_IA64 380#if defined CONFIG_IA64
381 gru_start_paddr = 0xd000000000UL; /* ZZZZZZZZZZZZZZZZZZZ fixme */ 381 gru_start_paddr = 0xd000000000UL; /* ZZZZZZZZZZZZZZZZZZZ fixme */
diff --git a/drivers/misc/sgi-xp/xp_main.c b/drivers/misc/sgi-xp/xp_main.c
index 16f8dcab2da4..7896849b16dc 100644
--- a/drivers/misc/sgi-xp/xp_main.c
+++ b/drivers/misc/sgi-xp/xp_main.c
@@ -248,19 +248,19 @@ xp_init(void)
248 enum xp_retval ret; 248 enum xp_retval ret;
249 int ch_number; 249 int ch_number;
250 250
251 /* initialize the connection registration mutex */
252 for (ch_number = 0; ch_number < XPC_MAX_NCHANNELS; ch_number++)
253 mutex_init(&xpc_registrations[ch_number].mutex);
254
251 if (is_shub()) 255 if (is_shub())
252 ret = xp_init_sn2(); 256 ret = xp_init_sn2();
253 else if (is_uv()) 257 else if (is_uv())
254 ret = xp_init_uv(); 258 ret = xp_init_uv();
255 else 259 else
256 ret = xpUnsupported; 260 ret = 0;
257 261
258 if (ret != xpSuccess) 262 if (ret != xpSuccess)
259 return -ENODEV; 263 return ret;
260
261 /* initialize the connection registration mutex */
262 for (ch_number = 0; ch_number < XPC_MAX_NCHANNELS; ch_number++)
263 mutex_init(&xpc_registrations[ch_number].mutex);
264 264
265 return 0; 265 return 0;
266} 266}
diff --git a/drivers/misc/sgi-xp/xpc.h b/drivers/misc/sgi-xp/xpc.h
index 114444cfd496..b94d5f767703 100644
--- a/drivers/misc/sgi-xp/xpc.h
+++ b/drivers/misc/sgi-xp/xpc.h
@@ -90,18 +90,21 @@ struct xpc_rsvd_page {
90 short max_npartitions; /* value of XPC_MAX_PARTITIONS */ 90 short max_npartitions; /* value of XPC_MAX_PARTITIONS */
91 u8 version; 91 u8 version;
92 u8 pad1[3]; /* align to next u64 in 1st 64-byte cacheline */ 92 u8 pad1[3]; /* align to next u64 in 1st 64-byte cacheline */
93 unsigned long ts_jiffies; /* timestamp when rsvd pg was setup by XPC */
93 union { 94 union {
94 unsigned long vars_pa; /* phys address of struct xpc_vars */ 95 struct {
95 unsigned long activate_gru_mq_desc_gpa; /* phys addr of */ 96 unsigned long vars_pa; /* phys addr */
96 /* activate mq's */ 97 } sn2;
97 /* gru mq descriptor */ 98 struct {
99 unsigned long heartbeat_gpa; /* phys addr */
100 unsigned long activate_gru_mq_desc_gpa; /* phys addr */
101 } uv;
98 } sn; 102 } sn;
99 unsigned long ts_jiffies; /* timestamp when rsvd pg was setup by XPC */ 103 u64 pad2[9]; /* align to last u64 in 2nd 64-byte cacheline */
100 u64 pad2[10]; /* align to last u64 in 2nd 64-byte cacheline */
101 u64 SAL_nasids_size; /* SAL: size of each nasid mask in bytes */ 104 u64 SAL_nasids_size; /* SAL: size of each nasid mask in bytes */
102}; 105};
103 106
104#define XPC_RP_VERSION _XPC_VERSION(2, 0) /* version 2.0 of the reserved page */ 107#define XPC_RP_VERSION _XPC_VERSION(3, 0) /* version 3.0 of the reserved page */
105 108
106/* 109/*
107 * Define the structures by which XPC variables can be exported to other 110 * Define the structures by which XPC variables can be exported to other
@@ -182,6 +185,17 @@ struct xpc_vars_part_sn2 {
182 (XPC_RP_MACH_NASIDS(_rp) + \ 185 (XPC_RP_MACH_NASIDS(_rp) + \
183 xpc_nasid_mask_nlongs)) 186 xpc_nasid_mask_nlongs))
184 187
188
189/*
190 * The following structure describes the partition's heartbeat info which
191 * will be periodically read by other partitions to determine whether this
192 * XPC is still 'alive'.
193 */
194struct xpc_heartbeat_uv {
195 unsigned long value;
196 unsigned long offline; /* if 0, heartbeat should be changing */
197};
198
185/* 199/*
186 * Info pertinent to a GRU message queue using a watch list for irq generation. 200 * Info pertinent to a GRU message queue using a watch list for irq generation.
187 */ 201 */
@@ -198,7 +212,7 @@ struct xpc_gru_mq_uv {
198 212
199/* 213/*
200 * The activate_mq is used to send/receive GRU messages that affect XPC's 214 * The activate_mq is used to send/receive GRU messages that affect XPC's
201 * heartbeat, partition active state, and channel state. This is UV only. 215 * partition active state and channel state. This is uv only.
202 */ 216 */
203struct xpc_activate_mq_msghdr_uv { 217struct xpc_activate_mq_msghdr_uv {
204 unsigned int gru_msg_hdr; /* FOR GRU INTERNAL USE ONLY */ 218 unsigned int gru_msg_hdr; /* FOR GRU INTERNAL USE ONLY */
@@ -210,33 +224,27 @@ struct xpc_activate_mq_msghdr_uv {
210 224
211/* activate_mq defined message types */ 225/* activate_mq defined message types */
212#define XPC_ACTIVATE_MQ_MSG_SYNC_ACT_STATE_UV 0 226#define XPC_ACTIVATE_MQ_MSG_SYNC_ACT_STATE_UV 0
213#define XPC_ACTIVATE_MQ_MSG_INC_HEARTBEAT_UV 1
214#define XPC_ACTIVATE_MQ_MSG_OFFLINE_HEARTBEAT_UV 2
215#define XPC_ACTIVATE_MQ_MSG_ONLINE_HEARTBEAT_UV 3
216 227
217#define XPC_ACTIVATE_MQ_MSG_ACTIVATE_REQ_UV 4 228#define XPC_ACTIVATE_MQ_MSG_ACTIVATE_REQ_UV 1
218#define XPC_ACTIVATE_MQ_MSG_DEACTIVATE_REQ_UV 5 229#define XPC_ACTIVATE_MQ_MSG_DEACTIVATE_REQ_UV 2
219 230
220#define XPC_ACTIVATE_MQ_MSG_CHCTL_CLOSEREQUEST_UV 6 231#define XPC_ACTIVATE_MQ_MSG_CHCTL_CLOSEREQUEST_UV 3
221#define XPC_ACTIVATE_MQ_MSG_CHCTL_CLOSEREPLY_UV 7 232#define XPC_ACTIVATE_MQ_MSG_CHCTL_CLOSEREPLY_UV 4
222#define XPC_ACTIVATE_MQ_MSG_CHCTL_OPENREQUEST_UV 8 233#define XPC_ACTIVATE_MQ_MSG_CHCTL_OPENREQUEST_UV 5
223#define XPC_ACTIVATE_MQ_MSG_CHCTL_OPENREPLY_UV 9 234#define XPC_ACTIVATE_MQ_MSG_CHCTL_OPENREPLY_UV 6
235#define XPC_ACTIVATE_MQ_MSG_CHCTL_OPENCOMPLETE_UV 7
224 236
225#define XPC_ACTIVATE_MQ_MSG_MARK_ENGAGED_UV 10 237#define XPC_ACTIVATE_MQ_MSG_MARK_ENGAGED_UV 8
226#define XPC_ACTIVATE_MQ_MSG_MARK_DISENGAGED_UV 11 238#define XPC_ACTIVATE_MQ_MSG_MARK_DISENGAGED_UV 9
227 239
228struct xpc_activate_mq_msg_uv { 240struct xpc_activate_mq_msg_uv {
229 struct xpc_activate_mq_msghdr_uv hdr; 241 struct xpc_activate_mq_msghdr_uv hdr;
230}; 242};
231 243
232struct xpc_activate_mq_msg_heartbeat_req_uv {
233 struct xpc_activate_mq_msghdr_uv hdr;
234 u64 heartbeat;
235};
236
237struct xpc_activate_mq_msg_activate_req_uv { 244struct xpc_activate_mq_msg_activate_req_uv {
238 struct xpc_activate_mq_msghdr_uv hdr; 245 struct xpc_activate_mq_msghdr_uv hdr;
239 unsigned long rp_gpa; 246 unsigned long rp_gpa;
247 unsigned long heartbeat_gpa;
240 unsigned long activate_gru_mq_desc_gpa; 248 unsigned long activate_gru_mq_desc_gpa;
241}; 249};
242 250
@@ -271,6 +279,11 @@ struct xpc_activate_mq_msg_chctl_openreply_uv {
271 unsigned long notify_gru_mq_desc_gpa; 279 unsigned long notify_gru_mq_desc_gpa;
272}; 280};
273 281
282struct xpc_activate_mq_msg_chctl_opencomplete_uv {
283 struct xpc_activate_mq_msghdr_uv hdr;
284 short ch_number;
285};
286
274/* 287/*
275 * Functions registered by add_timer() or called by kernel_thread() only 288 * Functions registered by add_timer() or called by kernel_thread() only
276 * allow for a single 64-bit argument. The following macros can be used to 289 * allow for a single 64-bit argument. The following macros can be used to
@@ -576,30 +589,32 @@ struct xpc_channel {
576 589
577#define XPC_C_WASCONNECTED 0x00000001 /* channel was connected */ 590#define XPC_C_WASCONNECTED 0x00000001 /* channel was connected */
578 591
579#define XPC_C_ROPENREPLY 0x00000002 /* remote open channel reply */ 592#define XPC_C_ROPENCOMPLETE 0x00000002 /* remote open channel complete */
580#define XPC_C_OPENREPLY 0x00000004 /* local open channel reply */ 593#define XPC_C_OPENCOMPLETE 0x00000004 /* local open channel complete */
581#define XPC_C_ROPENREQUEST 0x00000008 /* remote open channel request */ 594#define XPC_C_ROPENREPLY 0x00000008 /* remote open channel reply */
582#define XPC_C_OPENREQUEST 0x00000010 /* local open channel request */ 595#define XPC_C_OPENREPLY 0x00000010 /* local open channel reply */
596#define XPC_C_ROPENREQUEST 0x00000020 /* remote open channel request */
597#define XPC_C_OPENREQUEST 0x00000040 /* local open channel request */
583 598
584#define XPC_C_SETUP 0x00000020 /* channel's msgqueues are alloc'd */ 599#define XPC_C_SETUP 0x00000080 /* channel's msgqueues are alloc'd */
585#define XPC_C_CONNECTEDCALLOUT 0x00000040 /* connected callout initiated */ 600#define XPC_C_CONNECTEDCALLOUT 0x00000100 /* connected callout initiated */
586#define XPC_C_CONNECTEDCALLOUT_MADE \ 601#define XPC_C_CONNECTEDCALLOUT_MADE \
587 0x00000080 /* connected callout completed */ 602 0x00000200 /* connected callout completed */
588#define XPC_C_CONNECTED 0x00000100 /* local channel is connected */ 603#define XPC_C_CONNECTED 0x00000400 /* local channel is connected */
589#define XPC_C_CONNECTING 0x00000200 /* channel is being connected */ 604#define XPC_C_CONNECTING 0x00000800 /* channel is being connected */
590 605
591#define XPC_C_RCLOSEREPLY 0x00000400 /* remote close channel reply */ 606#define XPC_C_RCLOSEREPLY 0x00001000 /* remote close channel reply */
592#define XPC_C_CLOSEREPLY 0x00000800 /* local close channel reply */ 607#define XPC_C_CLOSEREPLY 0x00002000 /* local close channel reply */
593#define XPC_C_RCLOSEREQUEST 0x00001000 /* remote close channel request */ 608#define XPC_C_RCLOSEREQUEST 0x00004000 /* remote close channel request */
594#define XPC_C_CLOSEREQUEST 0x00002000 /* local close channel request */ 609#define XPC_C_CLOSEREQUEST 0x00008000 /* local close channel request */
595 610
596#define XPC_C_DISCONNECTED 0x00004000 /* channel is disconnected */ 611#define XPC_C_DISCONNECTED 0x00010000 /* channel is disconnected */
597#define XPC_C_DISCONNECTING 0x00008000 /* channel is being disconnected */ 612#define XPC_C_DISCONNECTING 0x00020000 /* channel is being disconnected */
598#define XPC_C_DISCONNECTINGCALLOUT \ 613#define XPC_C_DISCONNECTINGCALLOUT \
599 0x00010000 /* disconnecting callout initiated */ 614 0x00040000 /* disconnecting callout initiated */
600#define XPC_C_DISCONNECTINGCALLOUT_MADE \ 615#define XPC_C_DISCONNECTINGCALLOUT_MADE \
601 0x00020000 /* disconnecting callout completed */ 616 0x00080000 /* disconnecting callout completed */
602#define XPC_C_WDISCONNECT 0x00040000 /* waiting for channel disconnect */ 617#define XPC_C_WDISCONNECT 0x00100000 /* waiting for channel disconnect */
603 618
604/* 619/*
605 * The channel control flags (chctl) union consists of a 64-bit variable which 620 * The channel control flags (chctl) union consists of a 64-bit variable which
@@ -618,11 +633,13 @@ union xpc_channel_ctl_flags {
618#define XPC_CHCTL_CLOSEREPLY 0x02 633#define XPC_CHCTL_CLOSEREPLY 0x02
619#define XPC_CHCTL_OPENREQUEST 0x04 634#define XPC_CHCTL_OPENREQUEST 0x04
620#define XPC_CHCTL_OPENREPLY 0x08 635#define XPC_CHCTL_OPENREPLY 0x08
621#define XPC_CHCTL_MSGREQUEST 0x10 636#define XPC_CHCTL_OPENCOMPLETE 0x10
637#define XPC_CHCTL_MSGREQUEST 0x20
622 638
623#define XPC_OPENCLOSE_CHCTL_FLAGS \ 639#define XPC_OPENCLOSE_CHCTL_FLAGS \
624 (XPC_CHCTL_CLOSEREQUEST | XPC_CHCTL_CLOSEREPLY | \ 640 (XPC_CHCTL_CLOSEREQUEST | XPC_CHCTL_CLOSEREPLY | \
625 XPC_CHCTL_OPENREQUEST | XPC_CHCTL_OPENREPLY) 641 XPC_CHCTL_OPENREQUEST | XPC_CHCTL_OPENREPLY | \
642 XPC_CHCTL_OPENCOMPLETE)
626#define XPC_MSG_CHCTL_FLAGS XPC_CHCTL_MSGREQUEST 643#define XPC_MSG_CHCTL_FLAGS XPC_CHCTL_MSGREQUEST
627 644
628static inline int 645static inline int
@@ -687,6 +704,9 @@ struct xpc_partition_sn2 {
687}; 704};
688 705
689struct xpc_partition_uv { 706struct xpc_partition_uv {
707 unsigned long heartbeat_gpa; /* phys addr of partition's heartbeat */
708 struct xpc_heartbeat_uv cached_heartbeat; /* cached copy of */
709 /* partition's heartbeat */
690 unsigned long activate_gru_mq_desc_gpa; /* phys addr of parititon's */ 710 unsigned long activate_gru_mq_desc_gpa; /* phys addr of parititon's */
691 /* activate mq's gru mq */ 711 /* activate mq's gru mq */
692 /* descriptor */ 712 /* descriptor */
@@ -698,14 +718,12 @@ struct xpc_partition_uv {
698 u8 remote_act_state; /* remote partition's act_state */ 718 u8 remote_act_state; /* remote partition's act_state */
699 u8 act_state_req; /* act_state request from remote partition */ 719 u8 act_state_req; /* act_state request from remote partition */
700 enum xp_retval reason; /* reason for deactivate act_state request */ 720 enum xp_retval reason; /* reason for deactivate act_state request */
701 u64 heartbeat; /* incremented by remote partition */
702}; 721};
703 722
704/* struct xpc_partition_uv flags */ 723/* struct xpc_partition_uv flags */
705 724
706#define XPC_P_HEARTBEAT_OFFLINE_UV 0x00000001 725#define XPC_P_CACHED_ACTIVATE_GRU_MQ_DESC_UV 0x00000001
707#define XPC_P_ENGAGED_UV 0x00000002 726#define XPC_P_ENGAGED_UV 0x00000002
708#define XPC_P_CACHED_ACTIVATE_GRU_MQ_DESC_UV 0x00000004
709 727
710/* struct xpc_partition_uv act_state change requests */ 728/* struct xpc_partition_uv act_state change requests */
711 729
@@ -762,6 +780,62 @@ struct xpc_partition {
762 780
763} ____cacheline_aligned; 781} ____cacheline_aligned;
764 782
783struct xpc_arch_operations {
784 int (*setup_partitions) (void);
785 void (*teardown_partitions) (void);
786 void (*process_activate_IRQ_rcvd) (void);
787 enum xp_retval (*get_partition_rsvd_page_pa)
788 (void *, u64 *, unsigned long *, size_t *);
789 int (*setup_rsvd_page) (struct xpc_rsvd_page *);
790
791 void (*allow_hb) (short);
792 void (*disallow_hb) (short);
793 void (*disallow_all_hbs) (void);
794 void (*increment_heartbeat) (void);
795 void (*offline_heartbeat) (void);
796 void (*online_heartbeat) (void);
797 void (*heartbeat_init) (void);
798 void (*heartbeat_exit) (void);
799 enum xp_retval (*get_remote_heartbeat) (struct xpc_partition *);
800
801 void (*request_partition_activation) (struct xpc_rsvd_page *,
802 unsigned long, int);
803 void (*request_partition_reactivation) (struct xpc_partition *);
804 void (*request_partition_deactivation) (struct xpc_partition *);
805 void (*cancel_partition_deactivation_request) (struct xpc_partition *);
806 enum xp_retval (*setup_ch_structures) (struct xpc_partition *);
807 void (*teardown_ch_structures) (struct xpc_partition *);
808
809 enum xp_retval (*make_first_contact) (struct xpc_partition *);
810
811 u64 (*get_chctl_all_flags) (struct xpc_partition *);
812 void (*send_chctl_closerequest) (struct xpc_channel *, unsigned long *);
813 void (*send_chctl_closereply) (struct xpc_channel *, unsigned long *);
814 void (*send_chctl_openrequest) (struct xpc_channel *, unsigned long *);
815 void (*send_chctl_openreply) (struct xpc_channel *, unsigned long *);
816 void (*send_chctl_opencomplete) (struct xpc_channel *, unsigned long *);
817 void (*process_msg_chctl_flags) (struct xpc_partition *, int);
818
819 enum xp_retval (*save_remote_msgqueue_pa) (struct xpc_channel *,
820 unsigned long);
821
822 enum xp_retval (*setup_msg_structures) (struct xpc_channel *);
823 void (*teardown_msg_structures) (struct xpc_channel *);
824
825 void (*indicate_partition_engaged) (struct xpc_partition *);
826 void (*indicate_partition_disengaged) (struct xpc_partition *);
827 void (*assume_partition_disengaged) (short);
828 int (*partition_engaged) (short);
829 int (*any_partition_engaged) (void);
830
831 int (*n_of_deliverable_payloads) (struct xpc_channel *);
832 enum xp_retval (*send_payload) (struct xpc_channel *, u32, void *,
833 u16, u8, xpc_notify_func, void *);
834 void *(*get_deliverable_payload) (struct xpc_channel *);
835 void (*received_payload) (struct xpc_channel *, void *);
836 void (*notify_senders_of_disconnect) (struct xpc_channel *);
837};
838
765/* struct xpc_partition act_state values (for XPC HB) */ 839/* struct xpc_partition act_state values (for XPC HB) */
766 840
767#define XPC_P_AS_INACTIVE 0x00 /* partition is not active */ 841#define XPC_P_AS_INACTIVE 0x00 /* partition is not active */
@@ -802,67 +876,17 @@ extern struct xpc_registration xpc_registrations[];
802/* found in xpc_main.c */ 876/* found in xpc_main.c */
803extern struct device *xpc_part; 877extern struct device *xpc_part;
804extern struct device *xpc_chan; 878extern struct device *xpc_chan;
879extern struct xpc_arch_operations xpc_arch_ops;
805extern int xpc_disengage_timelimit; 880extern int xpc_disengage_timelimit;
806extern int xpc_disengage_timedout; 881extern int xpc_disengage_timedout;
807extern int xpc_activate_IRQ_rcvd; 882extern int xpc_activate_IRQ_rcvd;
808extern spinlock_t xpc_activate_IRQ_rcvd_lock; 883extern spinlock_t xpc_activate_IRQ_rcvd_lock;
809extern wait_queue_head_t xpc_activate_IRQ_wq; 884extern wait_queue_head_t xpc_activate_IRQ_wq;
810extern void *xpc_heartbeating_to_mask;
811extern void *xpc_kzalloc_cacheline_aligned(size_t, gfp_t, void **); 885extern void *xpc_kzalloc_cacheline_aligned(size_t, gfp_t, void **);
812extern void xpc_activate_partition(struct xpc_partition *); 886extern void xpc_activate_partition(struct xpc_partition *);
813extern void xpc_activate_kthreads(struct xpc_channel *, int); 887extern void xpc_activate_kthreads(struct xpc_channel *, int);
814extern void xpc_create_kthreads(struct xpc_channel *, int, int); 888extern void xpc_create_kthreads(struct xpc_channel *, int, int);
815extern void xpc_disconnect_wait(int); 889extern void xpc_disconnect_wait(int);
816extern int (*xpc_setup_partitions_sn) (void);
817extern void (*xpc_teardown_partitions_sn) (void);
818extern enum xp_retval (*xpc_get_partition_rsvd_page_pa) (void *, u64 *,
819 unsigned long *,
820 size_t *);
821extern int (*xpc_setup_rsvd_page_sn) (struct xpc_rsvd_page *);
822extern void (*xpc_heartbeat_init) (void);
823extern void (*xpc_heartbeat_exit) (void);
824extern void (*xpc_increment_heartbeat) (void);
825extern void (*xpc_offline_heartbeat) (void);
826extern void (*xpc_online_heartbeat) (void);
827extern enum xp_retval (*xpc_get_remote_heartbeat) (struct xpc_partition *);
828extern enum xp_retval (*xpc_make_first_contact) (struct xpc_partition *);
829extern u64 (*xpc_get_chctl_all_flags) (struct xpc_partition *);
830extern enum xp_retval (*xpc_setup_msg_structures) (struct xpc_channel *);
831extern void (*xpc_teardown_msg_structures) (struct xpc_channel *);
832extern void (*xpc_notify_senders_of_disconnect) (struct xpc_channel *);
833extern void (*xpc_process_msg_chctl_flags) (struct xpc_partition *, int);
834extern int (*xpc_n_of_deliverable_payloads) (struct xpc_channel *);
835extern void *(*xpc_get_deliverable_payload) (struct xpc_channel *);
836extern void (*xpc_request_partition_activation) (struct xpc_rsvd_page *,
837 unsigned long, int);
838extern void (*xpc_request_partition_reactivation) (struct xpc_partition *);
839extern void (*xpc_request_partition_deactivation) (struct xpc_partition *);
840extern void (*xpc_cancel_partition_deactivation_request) (
841 struct xpc_partition *);
842extern void (*xpc_process_activate_IRQ_rcvd) (void);
843extern enum xp_retval (*xpc_setup_ch_structures_sn) (struct xpc_partition *);
844extern void (*xpc_teardown_ch_structures_sn) (struct xpc_partition *);
845
846extern void (*xpc_indicate_partition_engaged) (struct xpc_partition *);
847extern int (*xpc_partition_engaged) (short);
848extern int (*xpc_any_partition_engaged) (void);
849extern void (*xpc_indicate_partition_disengaged) (struct xpc_partition *);
850extern void (*xpc_assume_partition_disengaged) (short);
851
852extern void (*xpc_send_chctl_closerequest) (struct xpc_channel *,
853 unsigned long *);
854extern void (*xpc_send_chctl_closereply) (struct xpc_channel *,
855 unsigned long *);
856extern void (*xpc_send_chctl_openrequest) (struct xpc_channel *,
857 unsigned long *);
858extern void (*xpc_send_chctl_openreply) (struct xpc_channel *, unsigned long *);
859
860extern enum xp_retval (*xpc_save_remote_msgqueue_pa) (struct xpc_channel *,
861 unsigned long);
862
863extern enum xp_retval (*xpc_send_payload) (struct xpc_channel *, u32, void *,
864 u16, u8, xpc_notify_func, void *);
865extern void (*xpc_received_payload) (struct xpc_channel *, void *);
866 890
867/* found in xpc_sn2.c */ 891/* found in xpc_sn2.c */
868extern int xpc_init_sn2(void); 892extern int xpc_init_sn2(void);
@@ -909,40 +933,6 @@ extern void xpc_disconnect_channel(const int, struct xpc_channel *,
909extern void xpc_disconnect_callout(struct xpc_channel *, enum xp_retval); 933extern void xpc_disconnect_callout(struct xpc_channel *, enum xp_retval);
910extern void xpc_partition_going_down(struct xpc_partition *, enum xp_retval); 934extern void xpc_partition_going_down(struct xpc_partition *, enum xp_retval);
911 935
912static inline int
913xpc_hb_allowed(short partid, void *heartbeating_to_mask)
914{
915 return test_bit(partid, heartbeating_to_mask);
916}
917
918static inline int
919xpc_any_hbs_allowed(void)
920{
921 DBUG_ON(xpc_heartbeating_to_mask == NULL);
922 return !bitmap_empty(xpc_heartbeating_to_mask, xp_max_npartitions);
923}
924
925static inline void
926xpc_allow_hb(short partid)
927{
928 DBUG_ON(xpc_heartbeating_to_mask == NULL);
929 set_bit(partid, xpc_heartbeating_to_mask);
930}
931
932static inline void
933xpc_disallow_hb(short partid)
934{
935 DBUG_ON(xpc_heartbeating_to_mask == NULL);
936 clear_bit(partid, xpc_heartbeating_to_mask);
937}
938
939static inline void
940xpc_disallow_all_hbs(void)
941{
942 DBUG_ON(xpc_heartbeating_to_mask == NULL);
943 bitmap_zero(xpc_heartbeating_to_mask, xp_max_npartitions);
944}
945
946static inline void 936static inline void
947xpc_wakeup_channel_mgr(struct xpc_partition *part) 937xpc_wakeup_channel_mgr(struct xpc_partition *part)
948{ 938{
diff --git a/drivers/misc/sgi-xp/xpc_channel.c b/drivers/misc/sgi-xp/xpc_channel.c
index 99a2534c38a1..652593fc486d 100644
--- a/drivers/misc/sgi-xp/xpc_channel.c
+++ b/drivers/misc/sgi-xp/xpc_channel.c
@@ -3,7 +3,7 @@
3 * License. See the file "COPYING" in the main directory of this archive 3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (c) 2004-2008 Silicon Graphics, Inc. All Rights Reserved. 6 * Copyright (c) 2004-2009 Silicon Graphics, Inc. All Rights Reserved.
7 */ 7 */
8 8
9/* 9/*
@@ -39,34 +39,38 @@ xpc_process_connect(struct xpc_channel *ch, unsigned long *irq_flags)
39 39
40 if (!(ch->flags & XPC_C_SETUP)) { 40 if (!(ch->flags & XPC_C_SETUP)) {
41 spin_unlock_irqrestore(&ch->lock, *irq_flags); 41 spin_unlock_irqrestore(&ch->lock, *irq_flags);
42 ret = xpc_setup_msg_structures(ch); 42 ret = xpc_arch_ops.setup_msg_structures(ch);
43 spin_lock_irqsave(&ch->lock, *irq_flags); 43 spin_lock_irqsave(&ch->lock, *irq_flags);
44 44
45 if (ret != xpSuccess) 45 if (ret != xpSuccess)
46 XPC_DISCONNECT_CHANNEL(ch, ret, irq_flags); 46 XPC_DISCONNECT_CHANNEL(ch, ret, irq_flags);
47 else
48 ch->flags |= XPC_C_SETUP;
47 49
48 ch->flags |= XPC_C_SETUP; 50 if (ch->flags & XPC_C_DISCONNECTING)
49
50 if (ch->flags & (XPC_C_CONNECTED | XPC_C_DISCONNECTING))
51 return; 51 return;
52 } 52 }
53 53
54 if (!(ch->flags & XPC_C_OPENREPLY)) { 54 if (!(ch->flags & XPC_C_OPENREPLY)) {
55 ch->flags |= XPC_C_OPENREPLY; 55 ch->flags |= XPC_C_OPENREPLY;
56 xpc_send_chctl_openreply(ch, irq_flags); 56 xpc_arch_ops.send_chctl_openreply(ch, irq_flags);
57 } 57 }
58 58
59 if (!(ch->flags & XPC_C_ROPENREPLY)) 59 if (!(ch->flags & XPC_C_ROPENREPLY))
60 return; 60 return;
61 61
62 ch->flags = (XPC_C_CONNECTED | XPC_C_SETUP); /* clear all else */ 62 if (!(ch->flags & XPC_C_OPENCOMPLETE)) {
63 ch->flags |= (XPC_C_OPENCOMPLETE | XPC_C_CONNECTED);
64 xpc_arch_ops.send_chctl_opencomplete(ch, irq_flags);
65 }
66
67 if (!(ch->flags & XPC_C_ROPENCOMPLETE))
68 return;
63 69
64 dev_info(xpc_chan, "channel %d to partition %d connected\n", 70 dev_info(xpc_chan, "channel %d to partition %d connected\n",
65 ch->number, ch->partid); 71 ch->number, ch->partid);
66 72
67 spin_unlock_irqrestore(&ch->lock, *irq_flags); 73 ch->flags = (XPC_C_CONNECTED | XPC_C_SETUP); /* clear all else */
68 xpc_create_kthreads(ch, 1, 0);
69 spin_lock_irqsave(&ch->lock, *irq_flags);
70} 74}
71 75
72/* 76/*
@@ -96,7 +100,7 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags)
96 100
97 if (part->act_state == XPC_P_AS_DEACTIVATING) { 101 if (part->act_state == XPC_P_AS_DEACTIVATING) {
98 /* can't proceed until the other side disengages from us */ 102 /* can't proceed until the other side disengages from us */
99 if (xpc_partition_engaged(ch->partid)) 103 if (xpc_arch_ops.partition_engaged(ch->partid))
100 return; 104 return;
101 105
102 } else { 106 } else {
@@ -108,7 +112,7 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags)
108 112
109 if (!(ch->flags & XPC_C_CLOSEREPLY)) { 113 if (!(ch->flags & XPC_C_CLOSEREPLY)) {
110 ch->flags |= XPC_C_CLOSEREPLY; 114 ch->flags |= XPC_C_CLOSEREPLY;
111 xpc_send_chctl_closereply(ch, irq_flags); 115 xpc_arch_ops.send_chctl_closereply(ch, irq_flags);
112 } 116 }
113 117
114 if (!(ch->flags & XPC_C_RCLOSEREPLY)) 118 if (!(ch->flags & XPC_C_RCLOSEREPLY))
@@ -118,7 +122,7 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags)
118 /* wake those waiting for notify completion */ 122 /* wake those waiting for notify completion */
119 if (atomic_read(&ch->n_to_notify) > 0) { 123 if (atomic_read(&ch->n_to_notify) > 0) {
120 /* we do callout while holding ch->lock, callout can't block */ 124 /* we do callout while holding ch->lock, callout can't block */
121 xpc_notify_senders_of_disconnect(ch); 125 xpc_arch_ops.notify_senders_of_disconnect(ch);
122 } 126 }
123 127
124 /* both sides are disconnected now */ 128 /* both sides are disconnected now */
@@ -132,7 +136,7 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags)
132 DBUG_ON(atomic_read(&ch->n_to_notify) != 0); 136 DBUG_ON(atomic_read(&ch->n_to_notify) != 0);
133 137
134 /* it's now safe to free the channel's message queues */ 138 /* it's now safe to free the channel's message queues */
135 xpc_teardown_msg_structures(ch); 139 xpc_arch_ops.teardown_msg_structures(ch);
136 140
137 ch->func = NULL; 141 ch->func = NULL;
138 ch->key = NULL; 142 ch->key = NULL;
@@ -144,8 +148,9 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags)
144 148
145 /* 149 /*
146 * Mark the channel disconnected and clear all other flags, including 150 * Mark the channel disconnected and clear all other flags, including
147 * XPC_C_SETUP (because of call to xpc_teardown_msg_structures()) but 151 * XPC_C_SETUP (because of call to
148 * not including XPC_C_WDISCONNECT (if it was set). 152 * xpc_arch_ops.teardown_msg_structures()) but not including
153 * XPC_C_WDISCONNECT (if it was set).
149 */ 154 */
150 ch->flags = (XPC_C_DISCONNECTED | (ch->flags & XPC_C_WDISCONNECT)); 155 ch->flags = (XPC_C_DISCONNECTED | (ch->flags & XPC_C_WDISCONNECT));
151 156
@@ -184,6 +189,7 @@ xpc_process_openclose_chctl_flags(struct xpc_partition *part, int ch_number,
184 struct xpc_channel *ch = &part->channels[ch_number]; 189 struct xpc_channel *ch = &part->channels[ch_number];
185 enum xp_retval reason; 190 enum xp_retval reason;
186 enum xp_retval ret; 191 enum xp_retval ret;
192 int create_kthread = 0;
187 193
188 spin_lock_irqsave(&ch->lock, irq_flags); 194 spin_lock_irqsave(&ch->lock, irq_flags);
189 195
@@ -196,8 +202,7 @@ again:
196 * has had a chance to see that the channel is disconnected. 202 * has had a chance to see that the channel is disconnected.
197 */ 203 */
198 ch->delayed_chctl_flags |= chctl_flags; 204 ch->delayed_chctl_flags |= chctl_flags;
199 spin_unlock_irqrestore(&ch->lock, irq_flags); 205 goto out;
200 return;
201 } 206 }
202 207
203 if (chctl_flags & XPC_CHCTL_CLOSEREQUEST) { 208 if (chctl_flags & XPC_CHCTL_CLOSEREQUEST) {
@@ -239,8 +244,7 @@ again:
239 XPC_CHCTL_CLOSEREQUEST; 244 XPC_CHCTL_CLOSEREQUEST;
240 spin_unlock(&part->chctl_lock); 245 spin_unlock(&part->chctl_lock);
241 } 246 }
242 spin_unlock_irqrestore(&ch->lock, irq_flags); 247 goto out;
243 return;
244 } 248 }
245 249
246 XPC_SET_REASON(ch, 0, 0); 250 XPC_SET_REASON(ch, 0, 0);
@@ -250,7 +254,8 @@ again:
250 ch->flags |= (XPC_C_CONNECTING | XPC_C_ROPENREQUEST); 254 ch->flags |= (XPC_C_CONNECTING | XPC_C_ROPENREQUEST);
251 } 255 }
252 256
253 chctl_flags &= ~(XPC_CHCTL_OPENREQUEST | XPC_CHCTL_OPENREPLY); 257 chctl_flags &= ~(XPC_CHCTL_OPENREQUEST | XPC_CHCTL_OPENREPLY |
258 XPC_CHCTL_OPENCOMPLETE);
254 259
255 /* 260 /*
256 * The meaningful CLOSEREQUEST connection state fields are: 261 * The meaningful CLOSEREQUEST connection state fields are:
@@ -269,8 +274,7 @@ again:
269 XPC_DISCONNECT_CHANNEL(ch, reason, &irq_flags); 274 XPC_DISCONNECT_CHANNEL(ch, reason, &irq_flags);
270 275
271 DBUG_ON(chctl_flags & XPC_CHCTL_CLOSEREPLY); 276 DBUG_ON(chctl_flags & XPC_CHCTL_CLOSEREPLY);
272 spin_unlock_irqrestore(&ch->lock, irq_flags); 277 goto out;
273 return;
274 } 278 }
275 279
276 xpc_process_disconnect(ch, &irq_flags); 280 xpc_process_disconnect(ch, &irq_flags);
@@ -283,8 +287,7 @@ again:
283 287
284 if (ch->flags & XPC_C_DISCONNECTED) { 288 if (ch->flags & XPC_C_DISCONNECTED) {
285 DBUG_ON(part->act_state != XPC_P_AS_DEACTIVATING); 289 DBUG_ON(part->act_state != XPC_P_AS_DEACTIVATING);
286 spin_unlock_irqrestore(&ch->lock, irq_flags); 290 goto out;
287 return;
288 } 291 }
289 292
290 DBUG_ON(!(ch->flags & XPC_C_CLOSEREQUEST)); 293 DBUG_ON(!(ch->flags & XPC_C_CLOSEREQUEST));
@@ -299,8 +302,7 @@ again:
299 XPC_CHCTL_CLOSEREPLY; 302 XPC_CHCTL_CLOSEREPLY;
300 spin_unlock(&part->chctl_lock); 303 spin_unlock(&part->chctl_lock);
301 } 304 }
302 spin_unlock_irqrestore(&ch->lock, irq_flags); 305 goto out;
303 return;
304 } 306 }
305 307
306 ch->flags |= XPC_C_RCLOSEREPLY; 308 ch->flags |= XPC_C_RCLOSEREPLY;
@@ -320,14 +322,12 @@ again:
320 322
321 if (part->act_state == XPC_P_AS_DEACTIVATING || 323 if (part->act_state == XPC_P_AS_DEACTIVATING ||
322 (ch->flags & XPC_C_ROPENREQUEST)) { 324 (ch->flags & XPC_C_ROPENREQUEST)) {
323 spin_unlock_irqrestore(&ch->lock, irq_flags); 325 goto out;
324 return;
325 } 326 }
326 327
327 if (ch->flags & (XPC_C_DISCONNECTING | XPC_C_WDISCONNECT)) { 328 if (ch->flags & (XPC_C_DISCONNECTING | XPC_C_WDISCONNECT)) {
328 ch->delayed_chctl_flags |= XPC_CHCTL_OPENREQUEST; 329 ch->delayed_chctl_flags |= XPC_CHCTL_OPENREQUEST;
329 spin_unlock_irqrestore(&ch->lock, irq_flags); 330 goto out;
330 return;
331 } 331 }
332 DBUG_ON(!(ch->flags & (XPC_C_DISCONNECTED | 332 DBUG_ON(!(ch->flags & (XPC_C_DISCONNECTED |
333 XPC_C_OPENREQUEST))); 333 XPC_C_OPENREQUEST)));
@@ -341,8 +341,7 @@ again:
341 */ 341 */
342 if (args->entry_size == 0 || args->local_nentries == 0) { 342 if (args->entry_size == 0 || args->local_nentries == 0) {
343 /* assume OPENREQUEST was delayed by mistake */ 343 /* assume OPENREQUEST was delayed by mistake */
344 spin_unlock_irqrestore(&ch->lock, irq_flags); 344 goto out;
345 return;
346 } 345 }
347 346
348 ch->flags |= (XPC_C_ROPENREQUEST | XPC_C_CONNECTING); 347 ch->flags |= (XPC_C_ROPENREQUEST | XPC_C_CONNECTING);
@@ -352,8 +351,7 @@ again:
352 if (args->entry_size != ch->entry_size) { 351 if (args->entry_size != ch->entry_size) {
353 XPC_DISCONNECT_CHANNEL(ch, xpUnequalMsgSizes, 352 XPC_DISCONNECT_CHANNEL(ch, xpUnequalMsgSizes,
354 &irq_flags); 353 &irq_flags);
355 spin_unlock_irqrestore(&ch->lock, irq_flags); 354 goto out;
356 return;
357 } 355 }
358 } else { 356 } else {
359 ch->entry_size = args->entry_size; 357 ch->entry_size = args->entry_size;
@@ -375,15 +373,13 @@ again:
375 args->local_msgqueue_pa, args->local_nentries, 373 args->local_msgqueue_pa, args->local_nentries,
376 args->remote_nentries, ch->partid, ch->number); 374 args->remote_nentries, ch->partid, ch->number);
377 375
378 if (ch->flags & (XPC_C_DISCONNECTING | XPC_C_DISCONNECTED)) { 376 if (ch->flags & (XPC_C_DISCONNECTING | XPC_C_DISCONNECTED))
379 spin_unlock_irqrestore(&ch->lock, irq_flags); 377 goto out;
380 return; 378
381 }
382 if (!(ch->flags & XPC_C_OPENREQUEST)) { 379 if (!(ch->flags & XPC_C_OPENREQUEST)) {
383 XPC_DISCONNECT_CHANNEL(ch, xpOpenCloseError, 380 XPC_DISCONNECT_CHANNEL(ch, xpOpenCloseError,
384 &irq_flags); 381 &irq_flags);
385 spin_unlock_irqrestore(&ch->lock, irq_flags); 382 goto out;
386 return;
387 } 383 }
388 384
389 DBUG_ON(!(ch->flags & XPC_C_ROPENREQUEST)); 385 DBUG_ON(!(ch->flags & XPC_C_ROPENREQUEST));
@@ -400,11 +396,11 @@ again:
400 DBUG_ON(args->local_nentries == 0); 396 DBUG_ON(args->local_nentries == 0);
401 DBUG_ON(args->remote_nentries == 0); 397 DBUG_ON(args->remote_nentries == 0);
402 398
403 ret = xpc_save_remote_msgqueue_pa(ch, args->local_msgqueue_pa); 399 ret = xpc_arch_ops.save_remote_msgqueue_pa(ch,
400 args->local_msgqueue_pa);
404 if (ret != xpSuccess) { 401 if (ret != xpSuccess) {
405 XPC_DISCONNECT_CHANNEL(ch, ret, &irq_flags); 402 XPC_DISCONNECT_CHANNEL(ch, ret, &irq_flags);
406 spin_unlock_irqrestore(&ch->lock, irq_flags); 403 goto out;
407 return;
408 } 404 }
409 ch->flags |= XPC_C_ROPENREPLY; 405 ch->flags |= XPC_C_ROPENREPLY;
410 406
@@ -430,7 +426,36 @@ again:
430 xpc_process_connect(ch, &irq_flags); 426 xpc_process_connect(ch, &irq_flags);
431 } 427 }
432 428
429 if (chctl_flags & XPC_CHCTL_OPENCOMPLETE) {
430
431 dev_dbg(xpc_chan, "XPC_CHCTL_OPENCOMPLETE received from "
432 "partid=%d, channel=%d\n", ch->partid, ch->number);
433
434 if (ch->flags & (XPC_C_DISCONNECTING | XPC_C_DISCONNECTED))
435 goto out;
436
437 if (!(ch->flags & XPC_C_OPENREQUEST) ||
438 !(ch->flags & XPC_C_OPENREPLY)) {
439 XPC_DISCONNECT_CHANNEL(ch, xpOpenCloseError,
440 &irq_flags);
441 goto out;
442 }
443
444 DBUG_ON(!(ch->flags & XPC_C_ROPENREQUEST));
445 DBUG_ON(!(ch->flags & XPC_C_ROPENREPLY));
446 DBUG_ON(!(ch->flags & XPC_C_CONNECTED));
447
448 ch->flags |= XPC_C_ROPENCOMPLETE;
449
450 xpc_process_connect(ch, &irq_flags);
451 create_kthread = 1;
452 }
453
454out:
433 spin_unlock_irqrestore(&ch->lock, irq_flags); 455 spin_unlock_irqrestore(&ch->lock, irq_flags);
456
457 if (create_kthread)
458 xpc_create_kthreads(ch, 1, 0);
434} 459}
435 460
436/* 461/*
@@ -508,7 +533,7 @@ xpc_connect_channel(struct xpc_channel *ch)
508 /* initiate the connection */ 533 /* initiate the connection */
509 534
510 ch->flags |= (XPC_C_OPENREQUEST | XPC_C_CONNECTING); 535 ch->flags |= (XPC_C_OPENREQUEST | XPC_C_CONNECTING);
511 xpc_send_chctl_openrequest(ch, &irq_flags); 536 xpc_arch_ops.send_chctl_openrequest(ch, &irq_flags);
512 537
513 xpc_process_connect(ch, &irq_flags); 538 xpc_process_connect(ch, &irq_flags);
514 539
@@ -526,7 +551,7 @@ xpc_process_sent_chctl_flags(struct xpc_partition *part)
526 int ch_number; 551 int ch_number;
527 u32 ch_flags; 552 u32 ch_flags;
528 553
529 chctl.all_flags = xpc_get_chctl_all_flags(part); 554 chctl.all_flags = xpc_arch_ops.get_chctl_all_flags(part);
530 555
531 /* 556 /*
532 * Initiate channel connections for registered channels. 557 * Initiate channel connections for registered channels.
@@ -564,10 +589,6 @@ xpc_process_sent_chctl_flags(struct xpc_partition *part)
564 if (!(ch_flags & XPC_C_OPENREQUEST)) { 589 if (!(ch_flags & XPC_C_OPENREQUEST)) {
565 DBUG_ON(ch_flags & XPC_C_SETUP); 590 DBUG_ON(ch_flags & XPC_C_SETUP);
566 (void)xpc_connect_channel(ch); 591 (void)xpc_connect_channel(ch);
567 } else {
568 spin_lock_irqsave(&ch->lock, irq_flags);
569 xpc_process_connect(ch, &irq_flags);
570 spin_unlock_irqrestore(&ch->lock, irq_flags);
571 } 592 }
572 continue; 593 continue;
573 } 594 }
@@ -579,7 +600,7 @@ xpc_process_sent_chctl_flags(struct xpc_partition *part)
579 */ 600 */
580 601
581 if (chctl.flags[ch_number] & XPC_MSG_CHCTL_FLAGS) 602 if (chctl.flags[ch_number] & XPC_MSG_CHCTL_FLAGS)
582 xpc_process_msg_chctl_flags(part, ch_number); 603 xpc_arch_ops.process_msg_chctl_flags(part, ch_number);
583 } 604 }
584} 605}
585 606
@@ -755,7 +776,7 @@ xpc_disconnect_channel(const int line, struct xpc_channel *ch,
755 XPC_C_ROPENREQUEST | XPC_C_ROPENREPLY | 776 XPC_C_ROPENREQUEST | XPC_C_ROPENREPLY |
756 XPC_C_CONNECTING | XPC_C_CONNECTED); 777 XPC_C_CONNECTING | XPC_C_CONNECTED);
757 778
758 xpc_send_chctl_closerequest(ch, irq_flags); 779 xpc_arch_ops.send_chctl_closerequest(ch, irq_flags);
759 780
760 if (channel_was_connected) 781 if (channel_was_connected)
761 ch->flags |= XPC_C_WASCONNECTED; 782 ch->flags |= XPC_C_WASCONNECTED;
@@ -862,8 +883,8 @@ xpc_initiate_send(short partid, int ch_number, u32 flags, void *payload,
862 DBUG_ON(payload == NULL); 883 DBUG_ON(payload == NULL);
863 884
864 if (xpc_part_ref(part)) { 885 if (xpc_part_ref(part)) {
865 ret = xpc_send_payload(&part->channels[ch_number], flags, 886 ret = xpc_arch_ops.send_payload(&part->channels[ch_number],
866 payload, payload_size, 0, NULL, NULL); 887 flags, payload, payload_size, 0, NULL, NULL);
867 xpc_part_deref(part); 888 xpc_part_deref(part);
868 } 889 }
869 890
@@ -914,9 +935,8 @@ xpc_initiate_send_notify(short partid, int ch_number, u32 flags, void *payload,
914 DBUG_ON(func == NULL); 935 DBUG_ON(func == NULL);
915 936
916 if (xpc_part_ref(part)) { 937 if (xpc_part_ref(part)) {
917 ret = xpc_send_payload(&part->channels[ch_number], flags, 938 ret = xpc_arch_ops.send_payload(&part->channels[ch_number],
918 payload, payload_size, XPC_N_CALL, func, 939 flags, payload, payload_size, XPC_N_CALL, func, key);
919 key);
920 xpc_part_deref(part); 940 xpc_part_deref(part);
921 } 941 }
922 return ret; 942 return ret;
@@ -930,7 +950,7 @@ xpc_deliver_payload(struct xpc_channel *ch)
930{ 950{
931 void *payload; 951 void *payload;
932 952
933 payload = xpc_get_deliverable_payload(ch); 953 payload = xpc_arch_ops.get_deliverable_payload(ch);
934 if (payload != NULL) { 954 if (payload != NULL) {
935 955
936 /* 956 /*
@@ -984,7 +1004,7 @@ xpc_initiate_received(short partid, int ch_number, void *payload)
984 DBUG_ON(ch_number < 0 || ch_number >= part->nchannels); 1004 DBUG_ON(ch_number < 0 || ch_number >= part->nchannels);
985 1005
986 ch = &part->channels[ch_number]; 1006 ch = &part->channels[ch_number];
987 xpc_received_payload(ch, payload); 1007 xpc_arch_ops.received_payload(ch, payload);
988 1008
989 /* the call to xpc_msgqueue_ref() was done by xpc_deliver_payload() */ 1009 /* the call to xpc_msgqueue_ref() was done by xpc_deliver_payload() */
990 xpc_msgqueue_deref(ch); 1010 xpc_msgqueue_deref(ch);
diff --git a/drivers/misc/sgi-xp/xpc_main.c b/drivers/misc/sgi-xp/xpc_main.c
index 1ab9fda87fab..fd3688a3e23f 100644
--- a/drivers/misc/sgi-xp/xpc_main.c
+++ b/drivers/misc/sgi-xp/xpc_main.c
@@ -3,7 +3,7 @@
3 * License. See the file "COPYING" in the main directory of this archive 3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (c) 2004-2008 Silicon Graphics, Inc. All Rights Reserved. 6 * Copyright (c) 2004-2009 Silicon Graphics, Inc. All Rights Reserved.
7 */ 7 */
8 8
9/* 9/*
@@ -150,7 +150,6 @@ DECLARE_WAIT_QUEUE_HEAD(xpc_activate_IRQ_wq);
150 150
151static unsigned long xpc_hb_check_timeout; 151static unsigned long xpc_hb_check_timeout;
152static struct timer_list xpc_hb_timer; 152static struct timer_list xpc_hb_timer;
153void *xpc_heartbeating_to_mask;
154 153
155/* notification that the xpc_hb_checker thread has exited */ 154/* notification that the xpc_hb_checker thread has exited */
156static DECLARE_COMPLETION(xpc_hb_checker_exited); 155static DECLARE_COMPLETION(xpc_hb_checker_exited);
@@ -170,62 +169,7 @@ static struct notifier_block xpc_die_notifier = {
170 .notifier_call = xpc_system_die, 169 .notifier_call = xpc_system_die,
171}; 170};
172 171
173int (*xpc_setup_partitions_sn) (void); 172struct xpc_arch_operations xpc_arch_ops;
174void (*xpc_teardown_partitions_sn) (void);
175enum xp_retval (*xpc_get_partition_rsvd_page_pa) (void *buf, u64 *cookie,
176 unsigned long *rp_pa,
177 size_t *len);
178int (*xpc_setup_rsvd_page_sn) (struct xpc_rsvd_page *rp);
179void (*xpc_heartbeat_init) (void);
180void (*xpc_heartbeat_exit) (void);
181void (*xpc_increment_heartbeat) (void);
182void (*xpc_offline_heartbeat) (void);
183void (*xpc_online_heartbeat) (void);
184enum xp_retval (*xpc_get_remote_heartbeat) (struct xpc_partition *part);
185
186enum xp_retval (*xpc_make_first_contact) (struct xpc_partition *part);
187void (*xpc_notify_senders_of_disconnect) (struct xpc_channel *ch);
188u64 (*xpc_get_chctl_all_flags) (struct xpc_partition *part);
189enum xp_retval (*xpc_setup_msg_structures) (struct xpc_channel *ch);
190void (*xpc_teardown_msg_structures) (struct xpc_channel *ch);
191void (*xpc_process_msg_chctl_flags) (struct xpc_partition *part, int ch_number);
192int (*xpc_n_of_deliverable_payloads) (struct xpc_channel *ch);
193void *(*xpc_get_deliverable_payload) (struct xpc_channel *ch);
194
195void (*xpc_request_partition_activation) (struct xpc_rsvd_page *remote_rp,
196 unsigned long remote_rp_pa,
197 int nasid);
198void (*xpc_request_partition_reactivation) (struct xpc_partition *part);
199void (*xpc_request_partition_deactivation) (struct xpc_partition *part);
200void (*xpc_cancel_partition_deactivation_request) (struct xpc_partition *part);
201
202void (*xpc_process_activate_IRQ_rcvd) (void);
203enum xp_retval (*xpc_setup_ch_structures_sn) (struct xpc_partition *part);
204void (*xpc_teardown_ch_structures_sn) (struct xpc_partition *part);
205
206void (*xpc_indicate_partition_engaged) (struct xpc_partition *part);
207int (*xpc_partition_engaged) (short partid);
208int (*xpc_any_partition_engaged) (void);
209void (*xpc_indicate_partition_disengaged) (struct xpc_partition *part);
210void (*xpc_assume_partition_disengaged) (short partid);
211
212void (*xpc_send_chctl_closerequest) (struct xpc_channel *ch,
213 unsigned long *irq_flags);
214void (*xpc_send_chctl_closereply) (struct xpc_channel *ch,
215 unsigned long *irq_flags);
216void (*xpc_send_chctl_openrequest) (struct xpc_channel *ch,
217 unsigned long *irq_flags);
218void (*xpc_send_chctl_openreply) (struct xpc_channel *ch,
219 unsigned long *irq_flags);
220
221enum xp_retval (*xpc_save_remote_msgqueue_pa) (struct xpc_channel *ch,
222 unsigned long msgqueue_pa);
223
224enum xp_retval (*xpc_send_payload) (struct xpc_channel *ch, u32 flags,
225 void *payload, u16 payload_size,
226 u8 notify_type, xpc_notify_func func,
227 void *key);
228void (*xpc_received_payload) (struct xpc_channel *ch, void *payload);
229 173
230/* 174/*
231 * Timer function to enforce the timelimit on the partition disengage. 175 * Timer function to enforce the timelimit on the partition disengage.
@@ -240,7 +184,7 @@ xpc_timeout_partition_disengage(unsigned long data)
240 (void)xpc_partition_disengaged(part); 184 (void)xpc_partition_disengaged(part);
241 185
242 DBUG_ON(part->disengage_timeout != 0); 186 DBUG_ON(part->disengage_timeout != 0);
243 DBUG_ON(xpc_partition_engaged(XPC_PARTID(part))); 187 DBUG_ON(xpc_arch_ops.partition_engaged(XPC_PARTID(part)));
244} 188}
245 189
246/* 190/*
@@ -251,7 +195,7 @@ xpc_timeout_partition_disengage(unsigned long data)
251static void 195static void
252xpc_hb_beater(unsigned long dummy) 196xpc_hb_beater(unsigned long dummy)
253{ 197{
254 xpc_increment_heartbeat(); 198 xpc_arch_ops.increment_heartbeat();
255 199
256 if (time_is_before_eq_jiffies(xpc_hb_check_timeout)) 200 if (time_is_before_eq_jiffies(xpc_hb_check_timeout))
257 wake_up_interruptible(&xpc_activate_IRQ_wq); 201 wake_up_interruptible(&xpc_activate_IRQ_wq);
@@ -263,7 +207,7 @@ xpc_hb_beater(unsigned long dummy)
263static void 207static void
264xpc_start_hb_beater(void) 208xpc_start_hb_beater(void)
265{ 209{
266 xpc_heartbeat_init(); 210 xpc_arch_ops.heartbeat_init();
267 init_timer(&xpc_hb_timer); 211 init_timer(&xpc_hb_timer);
268 xpc_hb_timer.function = xpc_hb_beater; 212 xpc_hb_timer.function = xpc_hb_beater;
269 xpc_hb_beater(0); 213 xpc_hb_beater(0);
@@ -273,7 +217,7 @@ static void
273xpc_stop_hb_beater(void) 217xpc_stop_hb_beater(void)
274{ 218{
275 del_timer_sync(&xpc_hb_timer); 219 del_timer_sync(&xpc_hb_timer);
276 xpc_heartbeat_exit(); 220 xpc_arch_ops.heartbeat_exit();
277} 221}
278 222
279/* 223/*
@@ -302,7 +246,7 @@ xpc_check_remote_hb(void)
302 continue; 246 continue;
303 } 247 }
304 248
305 ret = xpc_get_remote_heartbeat(part); 249 ret = xpc_arch_ops.get_remote_heartbeat(part);
306 if (ret != xpSuccess) 250 if (ret != xpSuccess)
307 XPC_DEACTIVATE_PARTITION(part, ret); 251 XPC_DEACTIVATE_PARTITION(part, ret);
308 } 252 }
@@ -353,7 +297,7 @@ xpc_hb_checker(void *ignore)
353 force_IRQ = 0; 297 force_IRQ = 0;
354 dev_dbg(xpc_part, "processing activate IRQs " 298 dev_dbg(xpc_part, "processing activate IRQs "
355 "received\n"); 299 "received\n");
356 xpc_process_activate_IRQ_rcvd(); 300 xpc_arch_ops.process_activate_IRQ_rcvd();
357 } 301 }
358 302
359 /* wait for IRQ or timeout */ 303 /* wait for IRQ or timeout */
@@ -528,7 +472,7 @@ xpc_setup_ch_structures(struct xpc_partition *part)
528 init_waitqueue_head(&ch->idle_wq); 472 init_waitqueue_head(&ch->idle_wq);
529 } 473 }
530 474
531 ret = xpc_setup_ch_structures_sn(part); 475 ret = xpc_arch_ops.setup_ch_structures(part);
532 if (ret != xpSuccess) 476 if (ret != xpSuccess)
533 goto out_2; 477 goto out_2;
534 478
@@ -572,7 +516,7 @@ xpc_teardown_ch_structures(struct xpc_partition *part)
572 516
573 /* now we can begin tearing down the infrastructure */ 517 /* now we can begin tearing down the infrastructure */
574 518
575 xpc_teardown_ch_structures_sn(part); 519 xpc_arch_ops.teardown_ch_structures(part);
576 520
577 kfree(part->remote_openclose_args_base); 521 kfree(part->remote_openclose_args_base);
578 part->remote_openclose_args = NULL; 522 part->remote_openclose_args = NULL;
@@ -620,12 +564,12 @@ xpc_activating(void *__partid)
620 564
621 dev_dbg(xpc_part, "activating partition %d\n", partid); 565 dev_dbg(xpc_part, "activating partition %d\n", partid);
622 566
623 xpc_allow_hb(partid); 567 xpc_arch_ops.allow_hb(partid);
624 568
625 if (xpc_setup_ch_structures(part) == xpSuccess) { 569 if (xpc_setup_ch_structures(part) == xpSuccess) {
626 (void)xpc_part_ref(part); /* this will always succeed */ 570 (void)xpc_part_ref(part); /* this will always succeed */
627 571
628 if (xpc_make_first_contact(part) == xpSuccess) { 572 if (xpc_arch_ops.make_first_contact(part) == xpSuccess) {
629 xpc_mark_partition_active(part); 573 xpc_mark_partition_active(part);
630 xpc_channel_mgr(part); 574 xpc_channel_mgr(part);
631 /* won't return until partition is deactivating */ 575 /* won't return until partition is deactivating */
@@ -635,12 +579,12 @@ xpc_activating(void *__partid)
635 xpc_teardown_ch_structures(part); 579 xpc_teardown_ch_structures(part);
636 } 580 }
637 581
638 xpc_disallow_hb(partid); 582 xpc_arch_ops.disallow_hb(partid);
639 xpc_mark_partition_inactive(part); 583 xpc_mark_partition_inactive(part);
640 584
641 if (part->reason == xpReactivating) { 585 if (part->reason == xpReactivating) {
642 /* interrupting ourselves results in activating partition */ 586 /* interrupting ourselves results in activating partition */
643 xpc_request_partition_reactivation(part); 587 xpc_arch_ops.request_partition_reactivation(part);
644 } 588 }
645 589
646 return 0; 590 return 0;
@@ -713,10 +657,13 @@ xpc_activate_kthreads(struct xpc_channel *ch, int needed)
713static void 657static void
714xpc_kthread_waitmsgs(struct xpc_partition *part, struct xpc_channel *ch) 658xpc_kthread_waitmsgs(struct xpc_partition *part, struct xpc_channel *ch)
715{ 659{
660 int (*n_of_deliverable_payloads) (struct xpc_channel *) =
661 xpc_arch_ops.n_of_deliverable_payloads;
662
716 do { 663 do {
717 /* deliver messages to their intended recipients */ 664 /* deliver messages to their intended recipients */
718 665
719 while (xpc_n_of_deliverable_payloads(ch) > 0 && 666 while (n_of_deliverable_payloads(ch) > 0 &&
720 !(ch->flags & XPC_C_DISCONNECTING)) { 667 !(ch->flags & XPC_C_DISCONNECTING)) {
721 xpc_deliver_payload(ch); 668 xpc_deliver_payload(ch);
722 } 669 }
@@ -732,7 +679,7 @@ xpc_kthread_waitmsgs(struct xpc_partition *part, struct xpc_channel *ch)
732 "wait_event_interruptible_exclusive()\n"); 679 "wait_event_interruptible_exclusive()\n");
733 680
734 (void)wait_event_interruptible_exclusive(ch->idle_wq, 681 (void)wait_event_interruptible_exclusive(ch->idle_wq,
735 (xpc_n_of_deliverable_payloads(ch) > 0 || 682 (n_of_deliverable_payloads(ch) > 0 ||
736 (ch->flags & XPC_C_DISCONNECTING))); 683 (ch->flags & XPC_C_DISCONNECTING)));
737 684
738 atomic_dec(&ch->kthreads_idle); 685 atomic_dec(&ch->kthreads_idle);
@@ -749,6 +696,8 @@ xpc_kthread_start(void *args)
749 struct xpc_channel *ch; 696 struct xpc_channel *ch;
750 int n_needed; 697 int n_needed;
751 unsigned long irq_flags; 698 unsigned long irq_flags;
699 int (*n_of_deliverable_payloads) (struct xpc_channel *) =
700 xpc_arch_ops.n_of_deliverable_payloads;
752 701
753 dev_dbg(xpc_chan, "kthread starting, partid=%d, channel=%d\n", 702 dev_dbg(xpc_chan, "kthread starting, partid=%d, channel=%d\n",
754 partid, ch_number); 703 partid, ch_number);
@@ -777,7 +726,7 @@ xpc_kthread_start(void *args)
777 * additional kthreads to help deliver them. We only 726 * additional kthreads to help deliver them. We only
778 * need one less than total #of messages to deliver. 727 * need one less than total #of messages to deliver.
779 */ 728 */
780 n_needed = xpc_n_of_deliverable_payloads(ch) - 1; 729 n_needed = n_of_deliverable_payloads(ch) - 1;
781 if (n_needed > 0 && !(ch->flags & XPC_C_DISCONNECTING)) 730 if (n_needed > 0 && !(ch->flags & XPC_C_DISCONNECTING))
782 xpc_activate_kthreads(ch, n_needed); 731 xpc_activate_kthreads(ch, n_needed);
783 732
@@ -805,7 +754,7 @@ xpc_kthread_start(void *args)
805 754
806 if (atomic_dec_return(&ch->kthreads_assigned) == 0 && 755 if (atomic_dec_return(&ch->kthreads_assigned) == 0 &&
807 atomic_dec_return(&part->nchannels_engaged) == 0) { 756 atomic_dec_return(&part->nchannels_engaged) == 0) {
808 xpc_indicate_partition_disengaged(part); 757 xpc_arch_ops.indicate_partition_disengaged(part);
809 } 758 }
810 759
811 xpc_msgqueue_deref(ch); 760 xpc_msgqueue_deref(ch);
@@ -837,6 +786,8 @@ xpc_create_kthreads(struct xpc_channel *ch, int needed,
837 u64 args = XPC_PACK_ARGS(ch->partid, ch->number); 786 u64 args = XPC_PACK_ARGS(ch->partid, ch->number);
838 struct xpc_partition *part = &xpc_partitions[ch->partid]; 787 struct xpc_partition *part = &xpc_partitions[ch->partid];
839 struct task_struct *kthread; 788 struct task_struct *kthread;
789 void (*indicate_partition_disengaged) (struct xpc_partition *) =
790 xpc_arch_ops.indicate_partition_disengaged;
840 791
841 while (needed-- > 0) { 792 while (needed-- > 0) {
842 793
@@ -858,7 +809,7 @@ xpc_create_kthreads(struct xpc_channel *ch, int needed,
858 809
859 } else if (atomic_inc_return(&ch->kthreads_assigned) == 1 && 810 } else if (atomic_inc_return(&ch->kthreads_assigned) == 1 &&
860 atomic_inc_return(&part->nchannels_engaged) == 1) { 811 atomic_inc_return(&part->nchannels_engaged) == 1) {
861 xpc_indicate_partition_engaged(part); 812 xpc_arch_ops.indicate_partition_engaged(part);
862 } 813 }
863 (void)xpc_part_ref(part); 814 (void)xpc_part_ref(part);
864 xpc_msgqueue_ref(ch); 815 xpc_msgqueue_ref(ch);
@@ -880,7 +831,7 @@ xpc_create_kthreads(struct xpc_channel *ch, int needed,
880 831
881 if (atomic_dec_return(&ch->kthreads_assigned) == 0 && 832 if (atomic_dec_return(&ch->kthreads_assigned) == 0 &&
882 atomic_dec_return(&part->nchannels_engaged) == 0) { 833 atomic_dec_return(&part->nchannels_engaged) == 0) {
883 xpc_indicate_partition_disengaged(part); 834 indicate_partition_disengaged(part);
884 } 835 }
885 xpc_msgqueue_deref(ch); 836 xpc_msgqueue_deref(ch);
886 xpc_part_deref(part); 837 xpc_part_deref(part);
@@ -993,13 +944,13 @@ xpc_setup_partitions(void)
993 atomic_set(&part->references, 0); 944 atomic_set(&part->references, 0);
994 } 945 }
995 946
996 return xpc_setup_partitions_sn(); 947 return xpc_arch_ops.setup_partitions();
997} 948}
998 949
999static void 950static void
1000xpc_teardown_partitions(void) 951xpc_teardown_partitions(void)
1001{ 952{
1002 xpc_teardown_partitions_sn(); 953 xpc_arch_ops.teardown_partitions();
1003 kfree(xpc_partitions); 954 kfree(xpc_partitions);
1004} 955}
1005 956
@@ -1055,7 +1006,7 @@ xpc_do_exit(enum xp_retval reason)
1055 disengage_timeout = part->disengage_timeout; 1006 disengage_timeout = part->disengage_timeout;
1056 } 1007 }
1057 1008
1058 if (xpc_any_partition_engaged()) { 1009 if (xpc_arch_ops.any_partition_engaged()) {
1059 if (time_is_before_jiffies(printmsg_time)) { 1010 if (time_is_before_jiffies(printmsg_time)) {
1060 dev_info(xpc_part, "waiting for remote " 1011 dev_info(xpc_part, "waiting for remote "
1061 "partitions to deactivate, timeout in " 1012 "partitions to deactivate, timeout in "
@@ -1086,8 +1037,7 @@ xpc_do_exit(enum xp_retval reason)
1086 1037
1087 } while (1); 1038 } while (1);
1088 1039
1089 DBUG_ON(xpc_any_partition_engaged()); 1040 DBUG_ON(xpc_arch_ops.any_partition_engaged());
1090 DBUG_ON(xpc_any_hbs_allowed() != 0);
1091 1041
1092 xpc_teardown_rsvd_page(); 1042 xpc_teardown_rsvd_page();
1093 1043
@@ -1152,15 +1102,15 @@ xpc_die_deactivate(void)
1152 /* keep xpc_hb_checker thread from doing anything (just in case) */ 1102 /* keep xpc_hb_checker thread from doing anything (just in case) */
1153 xpc_exiting = 1; 1103 xpc_exiting = 1;
1154 1104
1155 xpc_disallow_all_hbs(); /*indicate we're deactivated */ 1105 xpc_arch_ops.disallow_all_hbs(); /*indicate we're deactivated */
1156 1106
1157 for (partid = 0; partid < xp_max_npartitions; partid++) { 1107 for (partid = 0; partid < xp_max_npartitions; partid++) {
1158 part = &xpc_partitions[partid]; 1108 part = &xpc_partitions[partid];
1159 1109
1160 if (xpc_partition_engaged(partid) || 1110 if (xpc_arch_ops.partition_engaged(partid) ||
1161 part->act_state != XPC_P_AS_INACTIVE) { 1111 part->act_state != XPC_P_AS_INACTIVE) {
1162 xpc_request_partition_deactivation(part); 1112 xpc_arch_ops.request_partition_deactivation(part);
1163 xpc_indicate_partition_disengaged(part); 1113 xpc_arch_ops.indicate_partition_disengaged(part);
1164 } 1114 }
1165 } 1115 }
1166 1116
@@ -1177,7 +1127,7 @@ xpc_die_deactivate(void)
1177 wait_to_print = XPC_DEACTIVATE_PRINTMSG_INTERVAL * 1000 * 5; 1127 wait_to_print = XPC_DEACTIVATE_PRINTMSG_INTERVAL * 1000 * 5;
1178 1128
1179 while (1) { 1129 while (1) {
1180 any_engaged = xpc_any_partition_engaged(); 1130 any_engaged = xpc_arch_ops.any_partition_engaged();
1181 if (!any_engaged) { 1131 if (!any_engaged) {
1182 dev_info(xpc_part, "all partitions have deactivated\n"); 1132 dev_info(xpc_part, "all partitions have deactivated\n");
1183 break; 1133 break;
@@ -1186,7 +1136,7 @@ xpc_die_deactivate(void)
1186 if (!keep_waiting--) { 1136 if (!keep_waiting--) {
1187 for (partid = 0; partid < xp_max_npartitions; 1137 for (partid = 0; partid < xp_max_npartitions;
1188 partid++) { 1138 partid++) {
1189 if (xpc_partition_engaged(partid)) { 1139 if (xpc_arch_ops.partition_engaged(partid)) {
1190 dev_info(xpc_part, "deactivate from " 1140 dev_info(xpc_part, "deactivate from "
1191 "remote partition %d timed " 1141 "remote partition %d timed "
1192 "out\n", partid); 1142 "out\n", partid);
@@ -1233,7 +1183,7 @@ xpc_system_die(struct notifier_block *nb, unsigned long event, void *unused)
1233 /* fall through */ 1183 /* fall through */
1234 case DIE_MCA_MONARCH_ENTER: 1184 case DIE_MCA_MONARCH_ENTER:
1235 case DIE_INIT_MONARCH_ENTER: 1185 case DIE_INIT_MONARCH_ENTER:
1236 xpc_offline_heartbeat(); 1186 xpc_arch_ops.offline_heartbeat();
1237 break; 1187 break;
1238 1188
1239 case DIE_KDEBUG_LEAVE: 1189 case DIE_KDEBUG_LEAVE:
@@ -1244,7 +1194,7 @@ xpc_system_die(struct notifier_block *nb, unsigned long event, void *unused)
1244 /* fall through */ 1194 /* fall through */
1245 case DIE_MCA_MONARCH_LEAVE: 1195 case DIE_MCA_MONARCH_LEAVE:
1246 case DIE_INIT_MONARCH_LEAVE: 1196 case DIE_INIT_MONARCH_LEAVE:
1247 xpc_online_heartbeat(); 1197 xpc_arch_ops.online_heartbeat();
1248 break; 1198 break;
1249 } 1199 }
1250#else 1200#else
diff --git a/drivers/misc/sgi-xp/xpc_partition.c b/drivers/misc/sgi-xp/xpc_partition.c
index 6722f6fe4dc7..65877bc5edaa 100644
--- a/drivers/misc/sgi-xp/xpc_partition.c
+++ b/drivers/misc/sgi-xp/xpc_partition.c
@@ -70,6 +70,9 @@ xpc_get_rsvd_page_pa(int nasid)
70 size_t buf_len = 0; 70 size_t buf_len = 0;
71 void *buf = buf; 71 void *buf = buf;
72 void *buf_base = NULL; 72 void *buf_base = NULL;
73 enum xp_retval (*get_partition_rsvd_page_pa)
74 (void *, u64 *, unsigned long *, size_t *) =
75 xpc_arch_ops.get_partition_rsvd_page_pa;
73 76
74 while (1) { 77 while (1) {
75 78
@@ -79,8 +82,7 @@ xpc_get_rsvd_page_pa(int nasid)
79 * ??? function or have two versions? Rename rp_pa for UV to 82 * ??? function or have two versions? Rename rp_pa for UV to
80 * ??? rp_gpa? 83 * ??? rp_gpa?
81 */ 84 */
82 ret = xpc_get_partition_rsvd_page_pa(buf, &cookie, &rp_pa, 85 ret = get_partition_rsvd_page_pa(buf, &cookie, &rp_pa, &len);
83 &len);
84 86
85 dev_dbg(xpc_part, "SAL returned with ret=%d, cookie=0x%016lx, " 87 dev_dbg(xpc_part, "SAL returned with ret=%d, cookie=0x%016lx, "
86 "address=0x%016lx, len=0x%016lx\n", ret, 88 "address=0x%016lx, len=0x%016lx\n", ret,
@@ -172,7 +174,7 @@ xpc_setup_rsvd_page(void)
172 xpc_part_nasids = XPC_RP_PART_NASIDS(rp); 174 xpc_part_nasids = XPC_RP_PART_NASIDS(rp);
173 xpc_mach_nasids = XPC_RP_MACH_NASIDS(rp); 175 xpc_mach_nasids = XPC_RP_MACH_NASIDS(rp);
174 176
175 ret = xpc_setup_rsvd_page_sn(rp); 177 ret = xpc_arch_ops.setup_rsvd_page(rp);
176 if (ret != 0) 178 if (ret != 0)
177 return ret; 179 return ret;
178 180
@@ -264,7 +266,7 @@ xpc_partition_disengaged(struct xpc_partition *part)
264 short partid = XPC_PARTID(part); 266 short partid = XPC_PARTID(part);
265 int disengaged; 267 int disengaged;
266 268
267 disengaged = !xpc_partition_engaged(partid); 269 disengaged = !xpc_arch_ops.partition_engaged(partid);
268 if (part->disengage_timeout) { 270 if (part->disengage_timeout) {
269 if (!disengaged) { 271 if (!disengaged) {
270 if (time_is_after_jiffies(part->disengage_timeout)) { 272 if (time_is_after_jiffies(part->disengage_timeout)) {
@@ -280,7 +282,7 @@ xpc_partition_disengaged(struct xpc_partition *part)
280 dev_info(xpc_part, "deactivate request to remote " 282 dev_info(xpc_part, "deactivate request to remote "
281 "partition %d timed out\n", partid); 283 "partition %d timed out\n", partid);
282 xpc_disengage_timedout = 1; 284 xpc_disengage_timedout = 1;
283 xpc_assume_partition_disengaged(partid); 285 xpc_arch_ops.assume_partition_disengaged(partid);
284 disengaged = 1; 286 disengaged = 1;
285 } 287 }
286 part->disengage_timeout = 0; 288 part->disengage_timeout = 0;
@@ -294,7 +296,7 @@ xpc_partition_disengaged(struct xpc_partition *part)
294 if (part->act_state != XPC_P_AS_INACTIVE) 296 if (part->act_state != XPC_P_AS_INACTIVE)
295 xpc_wakeup_channel_mgr(part); 297 xpc_wakeup_channel_mgr(part);
296 298
297 xpc_cancel_partition_deactivation_request(part); 299 xpc_arch_ops.cancel_partition_deactivation_request(part);
298 } 300 }
299 return disengaged; 301 return disengaged;
300} 302}
@@ -339,7 +341,7 @@ xpc_deactivate_partition(const int line, struct xpc_partition *part,
339 spin_unlock_irqrestore(&part->act_lock, irq_flags); 341 spin_unlock_irqrestore(&part->act_lock, irq_flags);
340 if (reason == xpReactivating) { 342 if (reason == xpReactivating) {
341 /* we interrupt ourselves to reactivate partition */ 343 /* we interrupt ourselves to reactivate partition */
342 xpc_request_partition_reactivation(part); 344 xpc_arch_ops.request_partition_reactivation(part);
343 } 345 }
344 return; 346 return;
345 } 347 }
@@ -358,7 +360,7 @@ xpc_deactivate_partition(const int line, struct xpc_partition *part,
358 spin_unlock_irqrestore(&part->act_lock, irq_flags); 360 spin_unlock_irqrestore(&part->act_lock, irq_flags);
359 361
360 /* ask remote partition to deactivate with regard to us */ 362 /* ask remote partition to deactivate with regard to us */
361 xpc_request_partition_deactivation(part); 363 xpc_arch_ops.request_partition_deactivation(part);
362 364
363 /* set a timelimit on the disengage phase of the deactivation request */ 365 /* set a timelimit on the disengage phase of the deactivation request */
364 part->disengage_timeout = jiffies + (xpc_disengage_timelimit * HZ); 366 part->disengage_timeout = jiffies + (xpc_disengage_timelimit * HZ);
@@ -496,7 +498,7 @@ xpc_discovery(void)
496 continue; 498 continue;
497 } 499 }
498 500
499 xpc_request_partition_activation(remote_rp, 501 xpc_arch_ops.request_partition_activation(remote_rp,
500 remote_rp_pa, nasid); 502 remote_rp_pa, nasid);
501 } 503 }
502 } 504 }
diff --git a/drivers/misc/sgi-xp/xpc_sn2.c b/drivers/misc/sgi-xp/xpc_sn2.c
index eaaa964942de..915a3b495da5 100644
--- a/drivers/misc/sgi-xp/xpc_sn2.c
+++ b/drivers/misc/sgi-xp/xpc_sn2.c
@@ -3,7 +3,7 @@
3 * License. See the file "COPYING" in the main directory of this archive 3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details. 4 * for more details.
5 * 5 *
6 * Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved. 6 * Copyright (c) 2008-2009 Silicon Graphics, Inc. All Rights Reserved.
7 */ 7 */
8 8
9/* 9/*
@@ -60,14 +60,14 @@ static struct xpc_vars_sn2 *xpc_vars_sn2;
60static struct xpc_vars_part_sn2 *xpc_vars_part_sn2; 60static struct xpc_vars_part_sn2 *xpc_vars_part_sn2;
61 61
62static int 62static int
63xpc_setup_partitions_sn_sn2(void) 63xpc_setup_partitions_sn2(void)
64{ 64{
65 /* nothing needs to be done */ 65 /* nothing needs to be done */
66 return 0; 66 return 0;
67} 67}
68 68
69static void 69static void
70xpc_teardown_partitions_sn_sn2(void) 70xpc_teardown_partitions_sn2(void)
71{ 71{
72 /* nothing needs to be done */ 72 /* nothing needs to be done */
73} 73}
@@ -431,6 +431,13 @@ xpc_send_chctl_openreply_sn2(struct xpc_channel *ch, unsigned long *irq_flags)
431} 431}
432 432
433static void 433static void
434xpc_send_chctl_opencomplete_sn2(struct xpc_channel *ch,
435 unsigned long *irq_flags)
436{
437 XPC_SEND_NOTIFY_IRQ_SN2(ch, XPC_CHCTL_OPENCOMPLETE, irq_flags);
438}
439
440static void
434xpc_send_chctl_msgrequest_sn2(struct xpc_channel *ch) 441xpc_send_chctl_msgrequest_sn2(struct xpc_channel *ch)
435{ 442{
436 XPC_SEND_NOTIFY_IRQ_SN2(ch, XPC_CHCTL_MSGREQUEST, NULL); 443 XPC_SEND_NOTIFY_IRQ_SN2(ch, XPC_CHCTL_MSGREQUEST, NULL);
@@ -621,7 +628,7 @@ xpc_get_partition_rsvd_page_pa_sn2(void *buf, u64 *cookie, unsigned long *rp_pa,
621 628
622 629
623static int 630static int
624xpc_setup_rsvd_page_sn_sn2(struct xpc_rsvd_page *rp) 631xpc_setup_rsvd_page_sn2(struct xpc_rsvd_page *rp)
625{ 632{
626 struct amo *amos_page; 633 struct amo *amos_page;
627 int i; 634 int i;
@@ -629,7 +636,7 @@ xpc_setup_rsvd_page_sn_sn2(struct xpc_rsvd_page *rp)
629 636
630 xpc_vars_sn2 = XPC_RP_VARS(rp); 637 xpc_vars_sn2 = XPC_RP_VARS(rp);
631 638
632 rp->sn.vars_pa = xp_pa(xpc_vars_sn2); 639 rp->sn.sn2.vars_pa = xp_pa(xpc_vars_sn2);
633 640
634 /* vars_part array follows immediately after vars */ 641 /* vars_part array follows immediately after vars */
635 xpc_vars_part_sn2 = (struct xpc_vars_part_sn2 *)((u8 *)XPC_RP_VARS(rp) + 642 xpc_vars_part_sn2 = (struct xpc_vars_part_sn2 *)((u8 *)XPC_RP_VARS(rp) +
@@ -693,6 +700,33 @@ xpc_setup_rsvd_page_sn_sn2(struct xpc_rsvd_page *rp)
693 return 0; 700 return 0;
694} 701}
695 702
703static int
704xpc_hb_allowed_sn2(short partid, void *heartbeating_to_mask)
705{
706 return test_bit(partid, heartbeating_to_mask);
707}
708
709static void
710xpc_allow_hb_sn2(short partid)
711{
712 DBUG_ON(xpc_vars_sn2 == NULL);
713 set_bit(partid, xpc_vars_sn2->heartbeating_to_mask);
714}
715
716static void
717xpc_disallow_hb_sn2(short partid)
718{
719 DBUG_ON(xpc_vars_sn2 == NULL);
720 clear_bit(partid, xpc_vars_sn2->heartbeating_to_mask);
721}
722
723static void
724xpc_disallow_all_hbs_sn2(void)
725{
726 DBUG_ON(xpc_vars_sn2 == NULL);
727 bitmap_zero(xpc_vars_sn2->heartbeating_to_mask, xp_max_npartitions);
728}
729
696static void 730static void
697xpc_increment_heartbeat_sn2(void) 731xpc_increment_heartbeat_sn2(void)
698{ 732{
@@ -719,7 +753,6 @@ xpc_heartbeat_init_sn2(void)
719 DBUG_ON(xpc_vars_sn2 == NULL); 753 DBUG_ON(xpc_vars_sn2 == NULL);
720 754
721 bitmap_zero(xpc_vars_sn2->heartbeating_to_mask, XP_MAX_NPARTITIONS_SN2); 755 bitmap_zero(xpc_vars_sn2->heartbeating_to_mask, XP_MAX_NPARTITIONS_SN2);
722 xpc_heartbeating_to_mask = &xpc_vars_sn2->heartbeating_to_mask[0];
723 xpc_online_heartbeat_sn2(); 756 xpc_online_heartbeat_sn2();
724} 757}
725 758
@@ -751,9 +784,9 @@ xpc_get_remote_heartbeat_sn2(struct xpc_partition *part)
751 remote_vars->heartbeating_to_mask[0]); 784 remote_vars->heartbeating_to_mask[0]);
752 785
753 if ((remote_vars->heartbeat == part->last_heartbeat && 786 if ((remote_vars->heartbeat == part->last_heartbeat &&
754 remote_vars->heartbeat_offline == 0) || 787 !remote_vars->heartbeat_offline) ||
755 !xpc_hb_allowed(sn_partition_id, 788 !xpc_hb_allowed_sn2(sn_partition_id,
756 &remote_vars->heartbeating_to_mask)) { 789 remote_vars->heartbeating_to_mask)) {
757 ret = xpNoHeartbeat; 790 ret = xpNoHeartbeat;
758 } else { 791 } else {
759 part->last_heartbeat = remote_vars->heartbeat; 792 part->last_heartbeat = remote_vars->heartbeat;
@@ -972,7 +1005,7 @@ xpc_identify_activate_IRQ_req_sn2(int nasid)
972 return; 1005 return;
973 } 1006 }
974 1007
975 remote_vars_pa = remote_rp->sn.vars_pa; 1008 remote_vars_pa = remote_rp->sn.sn2.vars_pa;
976 remote_rp_version = remote_rp->version; 1009 remote_rp_version = remote_rp->version;
977 remote_rp_ts_jiffies = remote_rp->ts_jiffies; 1010 remote_rp_ts_jiffies = remote_rp->ts_jiffies;
978 1011
@@ -1129,7 +1162,7 @@ xpc_process_activate_IRQ_rcvd_sn2(void)
1129 * Setup the channel structures that are sn2 specific. 1162 * Setup the channel structures that are sn2 specific.
1130 */ 1163 */
1131static enum xp_retval 1164static enum xp_retval
1132xpc_setup_ch_structures_sn_sn2(struct xpc_partition *part) 1165xpc_setup_ch_structures_sn2(struct xpc_partition *part)
1133{ 1166{
1134 struct xpc_partition_sn2 *part_sn2 = &part->sn.sn2; 1167 struct xpc_partition_sn2 *part_sn2 = &part->sn.sn2;
1135 struct xpc_channel_sn2 *ch_sn2; 1168 struct xpc_channel_sn2 *ch_sn2;
@@ -1251,7 +1284,7 @@ out_1:
1251 * Teardown the channel structures that are sn2 specific. 1284 * Teardown the channel structures that are sn2 specific.
1252 */ 1285 */
1253static void 1286static void
1254xpc_teardown_ch_structures_sn_sn2(struct xpc_partition *part) 1287xpc_teardown_ch_structures_sn2(struct xpc_partition *part)
1255{ 1288{
1256 struct xpc_partition_sn2 *part_sn2 = &part->sn.sn2; 1289 struct xpc_partition_sn2 *part_sn2 = &part->sn.sn2;
1257 short partid = XPC_PARTID(part); 1290 short partid = XPC_PARTID(part);
@@ -2315,61 +2348,70 @@ xpc_received_payload_sn2(struct xpc_channel *ch, void *payload)
2315 xpc_acknowledge_msgs_sn2(ch, get, msg->flags); 2348 xpc_acknowledge_msgs_sn2(ch, get, msg->flags);
2316} 2349}
2317 2350
2351static struct xpc_arch_operations xpc_arch_ops_sn2 = {
2352 .setup_partitions = xpc_setup_partitions_sn2,
2353 .teardown_partitions = xpc_teardown_partitions_sn2,
2354 .process_activate_IRQ_rcvd = xpc_process_activate_IRQ_rcvd_sn2,
2355 .get_partition_rsvd_page_pa = xpc_get_partition_rsvd_page_pa_sn2,
2356 .setup_rsvd_page = xpc_setup_rsvd_page_sn2,
2357
2358 .allow_hb = xpc_allow_hb_sn2,
2359 .disallow_hb = xpc_disallow_hb_sn2,
2360 .disallow_all_hbs = xpc_disallow_all_hbs_sn2,
2361 .increment_heartbeat = xpc_increment_heartbeat_sn2,
2362 .offline_heartbeat = xpc_offline_heartbeat_sn2,
2363 .online_heartbeat = xpc_online_heartbeat_sn2,
2364 .heartbeat_init = xpc_heartbeat_init_sn2,
2365 .heartbeat_exit = xpc_heartbeat_exit_sn2,
2366 .get_remote_heartbeat = xpc_get_remote_heartbeat_sn2,
2367
2368 .request_partition_activation =
2369 xpc_request_partition_activation_sn2,
2370 .request_partition_reactivation =
2371 xpc_request_partition_reactivation_sn2,
2372 .request_partition_deactivation =
2373 xpc_request_partition_deactivation_sn2,
2374 .cancel_partition_deactivation_request =
2375 xpc_cancel_partition_deactivation_request_sn2,
2376
2377 .setup_ch_structures = xpc_setup_ch_structures_sn2,
2378 .teardown_ch_structures = xpc_teardown_ch_structures_sn2,
2379
2380 .make_first_contact = xpc_make_first_contact_sn2,
2381
2382 .get_chctl_all_flags = xpc_get_chctl_all_flags_sn2,
2383 .send_chctl_closerequest = xpc_send_chctl_closerequest_sn2,
2384 .send_chctl_closereply = xpc_send_chctl_closereply_sn2,
2385 .send_chctl_openrequest = xpc_send_chctl_openrequest_sn2,
2386 .send_chctl_openreply = xpc_send_chctl_openreply_sn2,
2387 .send_chctl_opencomplete = xpc_send_chctl_opencomplete_sn2,
2388 .process_msg_chctl_flags = xpc_process_msg_chctl_flags_sn2,
2389
2390 .save_remote_msgqueue_pa = xpc_save_remote_msgqueue_pa_sn2,
2391
2392 .setup_msg_structures = xpc_setup_msg_structures_sn2,
2393 .teardown_msg_structures = xpc_teardown_msg_structures_sn2,
2394
2395 .indicate_partition_engaged = xpc_indicate_partition_engaged_sn2,
2396 .indicate_partition_disengaged = xpc_indicate_partition_disengaged_sn2,
2397 .partition_engaged = xpc_partition_engaged_sn2,
2398 .any_partition_engaged = xpc_any_partition_engaged_sn2,
2399 .assume_partition_disengaged = xpc_assume_partition_disengaged_sn2,
2400
2401 .n_of_deliverable_payloads = xpc_n_of_deliverable_payloads_sn2,
2402 .send_payload = xpc_send_payload_sn2,
2403 .get_deliverable_payload = xpc_get_deliverable_payload_sn2,
2404 .received_payload = xpc_received_payload_sn2,
2405 .notify_senders_of_disconnect = xpc_notify_senders_of_disconnect_sn2,
2406};
2407
2318int 2408int
2319xpc_init_sn2(void) 2409xpc_init_sn2(void)
2320{ 2410{
2321 int ret; 2411 int ret;
2322 size_t buf_size; 2412 size_t buf_size;
2323 2413
2324 xpc_setup_partitions_sn = xpc_setup_partitions_sn_sn2; 2414 xpc_arch_ops = xpc_arch_ops_sn2;
2325 xpc_teardown_partitions_sn = xpc_teardown_partitions_sn_sn2;
2326 xpc_get_partition_rsvd_page_pa = xpc_get_partition_rsvd_page_pa_sn2;
2327 xpc_setup_rsvd_page_sn = xpc_setup_rsvd_page_sn_sn2;
2328 xpc_increment_heartbeat = xpc_increment_heartbeat_sn2;
2329 xpc_offline_heartbeat = xpc_offline_heartbeat_sn2;
2330 xpc_online_heartbeat = xpc_online_heartbeat_sn2;
2331 xpc_heartbeat_init = xpc_heartbeat_init_sn2;
2332 xpc_heartbeat_exit = xpc_heartbeat_exit_sn2;
2333 xpc_get_remote_heartbeat = xpc_get_remote_heartbeat_sn2;
2334
2335 xpc_request_partition_activation = xpc_request_partition_activation_sn2;
2336 xpc_request_partition_reactivation =
2337 xpc_request_partition_reactivation_sn2;
2338 xpc_request_partition_deactivation =
2339 xpc_request_partition_deactivation_sn2;
2340 xpc_cancel_partition_deactivation_request =
2341 xpc_cancel_partition_deactivation_request_sn2;
2342
2343 xpc_process_activate_IRQ_rcvd = xpc_process_activate_IRQ_rcvd_sn2;
2344 xpc_setup_ch_structures_sn = xpc_setup_ch_structures_sn_sn2;
2345 xpc_teardown_ch_structures_sn = xpc_teardown_ch_structures_sn_sn2;
2346 xpc_make_first_contact = xpc_make_first_contact_sn2;
2347
2348 xpc_get_chctl_all_flags = xpc_get_chctl_all_flags_sn2;
2349 xpc_send_chctl_closerequest = xpc_send_chctl_closerequest_sn2;
2350 xpc_send_chctl_closereply = xpc_send_chctl_closereply_sn2;
2351 xpc_send_chctl_openrequest = xpc_send_chctl_openrequest_sn2;
2352 xpc_send_chctl_openreply = xpc_send_chctl_openreply_sn2;
2353
2354 xpc_save_remote_msgqueue_pa = xpc_save_remote_msgqueue_pa_sn2;
2355
2356 xpc_setup_msg_structures = xpc_setup_msg_structures_sn2;
2357 xpc_teardown_msg_structures = xpc_teardown_msg_structures_sn2;
2358
2359 xpc_notify_senders_of_disconnect = xpc_notify_senders_of_disconnect_sn2;
2360 xpc_process_msg_chctl_flags = xpc_process_msg_chctl_flags_sn2;
2361 xpc_n_of_deliverable_payloads = xpc_n_of_deliverable_payloads_sn2;
2362 xpc_get_deliverable_payload = xpc_get_deliverable_payload_sn2;
2363
2364 xpc_indicate_partition_engaged = xpc_indicate_partition_engaged_sn2;
2365 xpc_indicate_partition_disengaged =
2366 xpc_indicate_partition_disengaged_sn2;
2367 xpc_partition_engaged = xpc_partition_engaged_sn2;
2368 xpc_any_partition_engaged = xpc_any_partition_engaged_sn2;
2369 xpc_assume_partition_disengaged = xpc_assume_partition_disengaged_sn2;
2370
2371 xpc_send_payload = xpc_send_payload_sn2;
2372 xpc_received_payload = xpc_received_payload_sn2;
2373 2415
2374 if (offsetof(struct xpc_msg_sn2, payload) > XPC_MSG_HDR_MAX_SIZE) { 2416 if (offsetof(struct xpc_msg_sn2, payload) > XPC_MSG_HDR_MAX_SIZE) {
2375 dev_err(xpc_part, "header portion of struct xpc_msg_sn2 is " 2417 dev_err(xpc_part, "header portion of struct xpc_msg_sn2 is "
diff --git a/drivers/misc/sgi-xp/xpc_uv.c b/drivers/misc/sgi-xp/xpc_uv.c
index f7fff4727edb..9172fcdee4e2 100644
--- a/drivers/misc/sgi-xp/xpc_uv.c
+++ b/drivers/misc/sgi-xp/xpc_uv.c
@@ -46,8 +46,7 @@ struct uv_IO_APIC_route_entry {
46}; 46};
47#endif 47#endif
48 48
49static atomic64_t xpc_heartbeat_uv; 49static struct xpc_heartbeat_uv *xpc_heartbeat_uv;
50static DECLARE_BITMAP(xpc_heartbeating_to_mask_uv, XP_MAX_NPARTITIONS_UV);
51 50
52#define XPC_ACTIVATE_MSG_SIZE_UV (1 * GRU_CACHE_LINE_BYTES) 51#define XPC_ACTIVATE_MSG_SIZE_UV (1 * GRU_CACHE_LINE_BYTES)
53#define XPC_ACTIVATE_MQ_SIZE_UV (4 * XP_MAX_NPARTITIONS_UV * \ 52#define XPC_ACTIVATE_MQ_SIZE_UV (4 * XP_MAX_NPARTITIONS_UV * \
@@ -63,7 +62,7 @@ static struct xpc_gru_mq_uv *xpc_activate_mq_uv;
63static struct xpc_gru_mq_uv *xpc_notify_mq_uv; 62static struct xpc_gru_mq_uv *xpc_notify_mq_uv;
64 63
65static int 64static int
66xpc_setup_partitions_sn_uv(void) 65xpc_setup_partitions_uv(void)
67{ 66{
68 short partid; 67 short partid;
69 struct xpc_partition_uv *part_uv; 68 struct xpc_partition_uv *part_uv;
@@ -79,7 +78,7 @@ xpc_setup_partitions_sn_uv(void)
79} 78}
80 79
81static void 80static void
82xpc_teardown_partitions_sn_uv(void) 81xpc_teardown_partitions_uv(void)
83{ 82{
84 short partid; 83 short partid;
85 struct xpc_partition_uv *part_uv; 84 struct xpc_partition_uv *part_uv;
@@ -423,41 +422,6 @@ xpc_handle_activate_mq_msg_uv(struct xpc_partition *part,
423 /* syncing of remote_act_state was just done above */ 422 /* syncing of remote_act_state was just done above */
424 break; 423 break;
425 424
426 case XPC_ACTIVATE_MQ_MSG_INC_HEARTBEAT_UV: {
427 struct xpc_activate_mq_msg_heartbeat_req_uv *msg;
428
429 msg = container_of(msg_hdr,
430 struct xpc_activate_mq_msg_heartbeat_req_uv,
431 hdr);
432 part_uv->heartbeat = msg->heartbeat;
433 break;
434 }
435 case XPC_ACTIVATE_MQ_MSG_OFFLINE_HEARTBEAT_UV: {
436 struct xpc_activate_mq_msg_heartbeat_req_uv *msg;
437
438 msg = container_of(msg_hdr,
439 struct xpc_activate_mq_msg_heartbeat_req_uv,
440 hdr);
441 part_uv->heartbeat = msg->heartbeat;
442
443 spin_lock_irqsave(&part_uv->flags_lock, irq_flags);
444 part_uv->flags |= XPC_P_HEARTBEAT_OFFLINE_UV;
445 spin_unlock_irqrestore(&part_uv->flags_lock, irq_flags);
446 break;
447 }
448 case XPC_ACTIVATE_MQ_MSG_ONLINE_HEARTBEAT_UV: {
449 struct xpc_activate_mq_msg_heartbeat_req_uv *msg;
450
451 msg = container_of(msg_hdr,
452 struct xpc_activate_mq_msg_heartbeat_req_uv,
453 hdr);
454 part_uv->heartbeat = msg->heartbeat;
455
456 spin_lock_irqsave(&part_uv->flags_lock, irq_flags);
457 part_uv->flags &= ~XPC_P_HEARTBEAT_OFFLINE_UV;
458 spin_unlock_irqrestore(&part_uv->flags_lock, irq_flags);
459 break;
460 }
461 case XPC_ACTIVATE_MQ_MSG_ACTIVATE_REQ_UV: { 425 case XPC_ACTIVATE_MQ_MSG_ACTIVATE_REQ_UV: {
462 struct xpc_activate_mq_msg_activate_req_uv *msg; 426 struct xpc_activate_mq_msg_activate_req_uv *msg;
463 427
@@ -475,6 +439,7 @@ xpc_handle_activate_mq_msg_uv(struct xpc_partition *part,
475 part_uv->act_state_req = XPC_P_ASR_ACTIVATE_UV; 439 part_uv->act_state_req = XPC_P_ASR_ACTIVATE_UV;
476 part->remote_rp_pa = msg->rp_gpa; /* !!! _pa is _gpa */ 440 part->remote_rp_pa = msg->rp_gpa; /* !!! _pa is _gpa */
477 part->remote_rp_ts_jiffies = msg_hdr->rp_ts_jiffies; 441 part->remote_rp_ts_jiffies = msg_hdr->rp_ts_jiffies;
442 part_uv->heartbeat_gpa = msg->heartbeat_gpa;
478 443
479 if (msg->activate_gru_mq_desc_gpa != 444 if (msg->activate_gru_mq_desc_gpa !=
480 part_uv->activate_gru_mq_desc_gpa) { 445 part_uv->activate_gru_mq_desc_gpa) {
@@ -569,6 +534,17 @@ xpc_handle_activate_mq_msg_uv(struct xpc_partition *part,
569 xpc_wakeup_channel_mgr(part); 534 xpc_wakeup_channel_mgr(part);
570 break; 535 break;
571 } 536 }
537 case XPC_ACTIVATE_MQ_MSG_CHCTL_OPENCOMPLETE_UV: {
538 struct xpc_activate_mq_msg_chctl_opencomplete_uv *msg;
539
540 msg = container_of(msg_hdr, struct
541 xpc_activate_mq_msg_chctl_opencomplete_uv, hdr);
542 spin_lock_irqsave(&part->chctl_lock, irq_flags);
543 part->chctl.flags[msg->ch_number] |= XPC_CHCTL_OPENCOMPLETE;
544 spin_unlock_irqrestore(&part->chctl_lock, irq_flags);
545
546 xpc_wakeup_channel_mgr(part);
547 }
572 case XPC_ACTIVATE_MQ_MSG_MARK_ENGAGED_UV: 548 case XPC_ACTIVATE_MQ_MSG_MARK_ENGAGED_UV:
573 spin_lock_irqsave(&part_uv->flags_lock, irq_flags); 549 spin_lock_irqsave(&part_uv->flags_lock, irq_flags);
574 part_uv->flags |= XPC_P_ENGAGED_UV; 550 part_uv->flags |= XPC_P_ENGAGED_UV;
@@ -759,7 +735,7 @@ xpc_send_local_activate_IRQ_uv(struct xpc_partition *part, int act_state_req)
759 735
760 /* 736 /*
761 * !!! Make our side think that the remote partition sent an activate 737 * !!! Make our side think that the remote partition sent an activate
762 * !!! message our way by doing what the activate IRQ handler would 738 * !!! mq message our way by doing what the activate IRQ handler would
763 * !!! do had one really been sent. 739 * !!! do had one really been sent.
764 */ 740 */
765 741
@@ -806,90 +782,82 @@ xpc_get_partition_rsvd_page_pa_uv(void *buf, u64 *cookie, unsigned long *rp_pa,
806} 782}
807 783
808static int 784static int
809xpc_setup_rsvd_page_sn_uv(struct xpc_rsvd_page *rp) 785xpc_setup_rsvd_page_uv(struct xpc_rsvd_page *rp)
810{ 786{
811 rp->sn.activate_gru_mq_desc_gpa = 787 xpc_heartbeat_uv =
788 &xpc_partitions[sn_partition_id].sn.uv.cached_heartbeat;
789 rp->sn.uv.heartbeat_gpa = uv_gpa(xpc_heartbeat_uv);
790 rp->sn.uv.activate_gru_mq_desc_gpa =
812 uv_gpa(xpc_activate_mq_uv->gru_mq_desc); 791 uv_gpa(xpc_activate_mq_uv->gru_mq_desc);
813 return 0; 792 return 0;
814} 793}
815 794
816static void 795static void
817xpc_send_heartbeat_uv(int msg_type) 796xpc_allow_hb_uv(short partid)
818{ 797{
819 short partid; 798}
820 struct xpc_partition *part;
821 struct xpc_activate_mq_msg_heartbeat_req_uv msg;
822
823 /*
824 * !!! On uv we're broadcasting a heartbeat message every 5 seconds.
825 * !!! Whereas on sn2 we're bte_copy'ng the heartbeat info every 20
826 * !!! seconds. This is an increase in numalink traffic.
827 * ??? Is this good?
828 */
829
830 msg.heartbeat = atomic64_inc_return(&xpc_heartbeat_uv);
831
832 partid = find_first_bit(xpc_heartbeating_to_mask_uv,
833 XP_MAX_NPARTITIONS_UV);
834
835 while (partid < XP_MAX_NPARTITIONS_UV) {
836 part = &xpc_partitions[partid];
837 799
838 xpc_send_activate_IRQ_part_uv(part, &msg, sizeof(msg), 800static void
839 msg_type); 801xpc_disallow_hb_uv(short partid)
802{
803}
840 804
841 partid = find_next_bit(xpc_heartbeating_to_mask_uv, 805static void
842 XP_MAX_NPARTITIONS_UV, partid + 1); 806xpc_disallow_all_hbs_uv(void)
843 } 807{
844} 808}
845 809
846static void 810static void
847xpc_increment_heartbeat_uv(void) 811xpc_increment_heartbeat_uv(void)
848{ 812{
849 xpc_send_heartbeat_uv(XPC_ACTIVATE_MQ_MSG_INC_HEARTBEAT_UV); 813 xpc_heartbeat_uv->value++;
850} 814}
851 815
852static void 816static void
853xpc_offline_heartbeat_uv(void) 817xpc_offline_heartbeat_uv(void)
854{ 818{
855 xpc_send_heartbeat_uv(XPC_ACTIVATE_MQ_MSG_OFFLINE_HEARTBEAT_UV); 819 xpc_increment_heartbeat_uv();
820 xpc_heartbeat_uv->offline = 1;
856} 821}
857 822
858static void 823static void
859xpc_online_heartbeat_uv(void) 824xpc_online_heartbeat_uv(void)
860{ 825{
861 xpc_send_heartbeat_uv(XPC_ACTIVATE_MQ_MSG_ONLINE_HEARTBEAT_UV); 826 xpc_increment_heartbeat_uv();
827 xpc_heartbeat_uv->offline = 0;
862} 828}
863 829
864static void 830static void
865xpc_heartbeat_init_uv(void) 831xpc_heartbeat_init_uv(void)
866{ 832{
867 atomic64_set(&xpc_heartbeat_uv, 0); 833 xpc_heartbeat_uv->value = 1;
868 bitmap_zero(xpc_heartbeating_to_mask_uv, XP_MAX_NPARTITIONS_UV); 834 xpc_heartbeat_uv->offline = 0;
869 xpc_heartbeating_to_mask = &xpc_heartbeating_to_mask_uv[0];
870} 835}
871 836
872static void 837static void
873xpc_heartbeat_exit_uv(void) 838xpc_heartbeat_exit_uv(void)
874{ 839{
875 xpc_send_heartbeat_uv(XPC_ACTIVATE_MQ_MSG_OFFLINE_HEARTBEAT_UV); 840 xpc_offline_heartbeat_uv();
876} 841}
877 842
878static enum xp_retval 843static enum xp_retval
879xpc_get_remote_heartbeat_uv(struct xpc_partition *part) 844xpc_get_remote_heartbeat_uv(struct xpc_partition *part)
880{ 845{
881 struct xpc_partition_uv *part_uv = &part->sn.uv; 846 struct xpc_partition_uv *part_uv = &part->sn.uv;
882 enum xp_retval ret = xpNoHeartbeat; 847 enum xp_retval ret;
883 848
884 if (part_uv->remote_act_state != XPC_P_AS_INACTIVE && 849 ret = xp_remote_memcpy(uv_gpa(&part_uv->cached_heartbeat),
885 part_uv->remote_act_state != XPC_P_AS_DEACTIVATING) { 850 part_uv->heartbeat_gpa,
851 sizeof(struct xpc_heartbeat_uv));
852 if (ret != xpSuccess)
853 return ret;
886 854
887 if (part_uv->heartbeat != part->last_heartbeat || 855 if (part_uv->cached_heartbeat.value == part->last_heartbeat &&
888 (part_uv->flags & XPC_P_HEARTBEAT_OFFLINE_UV)) { 856 !part_uv->cached_heartbeat.offline) {
889 857
890 part->last_heartbeat = part_uv->heartbeat; 858 ret = xpNoHeartbeat;
891 ret = xpSuccess; 859 } else {
892 } 860 part->last_heartbeat = part_uv->cached_heartbeat.value;
893 } 861 }
894 return ret; 862 return ret;
895} 863}
@@ -904,8 +872,9 @@ xpc_request_partition_activation_uv(struct xpc_rsvd_page *remote_rp,
904 872
905 part->remote_rp_pa = remote_rp_gpa; /* !!! _pa here is really _gpa */ 873 part->remote_rp_pa = remote_rp_gpa; /* !!! _pa here is really _gpa */
906 part->remote_rp_ts_jiffies = remote_rp->ts_jiffies; 874 part->remote_rp_ts_jiffies = remote_rp->ts_jiffies;
875 part->sn.uv.heartbeat_gpa = remote_rp->sn.uv.heartbeat_gpa;
907 part->sn.uv.activate_gru_mq_desc_gpa = 876 part->sn.uv.activate_gru_mq_desc_gpa =
908 remote_rp->sn.activate_gru_mq_desc_gpa; 877 remote_rp->sn.uv.activate_gru_mq_desc_gpa;
909 878
910 /* 879 /*
911 * ??? Is it a good idea to make this conditional on what is 880 * ??? Is it a good idea to make this conditional on what is
@@ -913,8 +882,9 @@ xpc_request_partition_activation_uv(struct xpc_rsvd_page *remote_rp,
913 */ 882 */
914 if (part->sn.uv.remote_act_state == XPC_P_AS_INACTIVE) { 883 if (part->sn.uv.remote_act_state == XPC_P_AS_INACTIVE) {
915 msg.rp_gpa = uv_gpa(xpc_rsvd_page); 884 msg.rp_gpa = uv_gpa(xpc_rsvd_page);
885 msg.heartbeat_gpa = xpc_rsvd_page->sn.uv.heartbeat_gpa;
916 msg.activate_gru_mq_desc_gpa = 886 msg.activate_gru_mq_desc_gpa =
917 xpc_rsvd_page->sn.activate_gru_mq_desc_gpa; 887 xpc_rsvd_page->sn.uv.activate_gru_mq_desc_gpa;
918 xpc_send_activate_IRQ_part_uv(part, &msg, sizeof(msg), 888 xpc_send_activate_IRQ_part_uv(part, &msg, sizeof(msg),
919 XPC_ACTIVATE_MQ_MSG_ACTIVATE_REQ_UV); 889 XPC_ACTIVATE_MQ_MSG_ACTIVATE_REQ_UV);
920 } 890 }
@@ -1010,7 +980,7 @@ xpc_n_of_fifo_entries_uv(struct xpc_fifo_head_uv *head)
1010 * Setup the channel structures that are uv specific. 980 * Setup the channel structures that are uv specific.
1011 */ 981 */
1012static enum xp_retval 982static enum xp_retval
1013xpc_setup_ch_structures_sn_uv(struct xpc_partition *part) 983xpc_setup_ch_structures_uv(struct xpc_partition *part)
1014{ 984{
1015 struct xpc_channel_uv *ch_uv; 985 struct xpc_channel_uv *ch_uv;
1016 int ch_number; 986 int ch_number;
@@ -1029,7 +999,7 @@ xpc_setup_ch_structures_sn_uv(struct xpc_partition *part)
1029 * Teardown the channel structures that are uv specific. 999 * Teardown the channel structures that are uv specific.
1030 */ 1000 */
1031static void 1001static void
1032xpc_teardown_ch_structures_sn_uv(struct xpc_partition *part) 1002xpc_teardown_ch_structures_uv(struct xpc_partition *part)
1033{ 1003{
1034 /* nothing needs to be done */ 1004 /* nothing needs to be done */
1035 return; 1005 return;
@@ -1243,6 +1213,16 @@ xpc_send_chctl_openreply_uv(struct xpc_channel *ch, unsigned long *irq_flags)
1243} 1213}
1244 1214
1245static void 1215static void
1216xpc_send_chctl_opencomplete_uv(struct xpc_channel *ch, unsigned long *irq_flags)
1217{
1218 struct xpc_activate_mq_msg_chctl_opencomplete_uv msg;
1219
1220 msg.ch_number = ch->number;
1221 xpc_send_activate_IRQ_ch_uv(ch, irq_flags, &msg, sizeof(msg),
1222 XPC_ACTIVATE_MQ_MSG_CHCTL_OPENCOMPLETE_UV);
1223}
1224
1225static void
1246xpc_send_chctl_local_msgrequest_uv(struct xpc_partition *part, int ch_number) 1226xpc_send_chctl_local_msgrequest_uv(struct xpc_partition *part, int ch_number)
1247{ 1227{
1248 unsigned long irq_flags; 1228 unsigned long irq_flags;
@@ -1669,58 +1649,67 @@ xpc_received_payload_uv(struct xpc_channel *ch, void *payload)
1669 msg->hdr.msg_slot_number += ch->remote_nentries; 1649 msg->hdr.msg_slot_number += ch->remote_nentries;
1670} 1650}
1671 1651
1652static struct xpc_arch_operations xpc_arch_ops_uv = {
1653 .setup_partitions = xpc_setup_partitions_uv,
1654 .teardown_partitions = xpc_teardown_partitions_uv,
1655 .process_activate_IRQ_rcvd = xpc_process_activate_IRQ_rcvd_uv,
1656 .get_partition_rsvd_page_pa = xpc_get_partition_rsvd_page_pa_uv,
1657 .setup_rsvd_page = xpc_setup_rsvd_page_uv,
1658
1659 .allow_hb = xpc_allow_hb_uv,
1660 .disallow_hb = xpc_disallow_hb_uv,
1661 .disallow_all_hbs = xpc_disallow_all_hbs_uv,
1662 .increment_heartbeat = xpc_increment_heartbeat_uv,
1663 .offline_heartbeat = xpc_offline_heartbeat_uv,
1664 .online_heartbeat = xpc_online_heartbeat_uv,
1665 .heartbeat_init = xpc_heartbeat_init_uv,
1666 .heartbeat_exit = xpc_heartbeat_exit_uv,
1667 .get_remote_heartbeat = xpc_get_remote_heartbeat_uv,
1668
1669 .request_partition_activation =
1670 xpc_request_partition_activation_uv,
1671 .request_partition_reactivation =
1672 xpc_request_partition_reactivation_uv,
1673 .request_partition_deactivation =
1674 xpc_request_partition_deactivation_uv,
1675 .cancel_partition_deactivation_request =
1676 xpc_cancel_partition_deactivation_request_uv,
1677
1678 .setup_ch_structures = xpc_setup_ch_structures_uv,
1679 .teardown_ch_structures = xpc_teardown_ch_structures_uv,
1680
1681 .make_first_contact = xpc_make_first_contact_uv,
1682
1683 .get_chctl_all_flags = xpc_get_chctl_all_flags_uv,
1684 .send_chctl_closerequest = xpc_send_chctl_closerequest_uv,
1685 .send_chctl_closereply = xpc_send_chctl_closereply_uv,
1686 .send_chctl_openrequest = xpc_send_chctl_openrequest_uv,
1687 .send_chctl_openreply = xpc_send_chctl_openreply_uv,
1688 .send_chctl_opencomplete = xpc_send_chctl_opencomplete_uv,
1689 .process_msg_chctl_flags = xpc_process_msg_chctl_flags_uv,
1690
1691 .save_remote_msgqueue_pa = xpc_save_remote_msgqueue_pa_uv,
1692
1693 .setup_msg_structures = xpc_setup_msg_structures_uv,
1694 .teardown_msg_structures = xpc_teardown_msg_structures_uv,
1695
1696 .indicate_partition_engaged = xpc_indicate_partition_engaged_uv,
1697 .indicate_partition_disengaged = xpc_indicate_partition_disengaged_uv,
1698 .assume_partition_disengaged = xpc_assume_partition_disengaged_uv,
1699 .partition_engaged = xpc_partition_engaged_uv,
1700 .any_partition_engaged = xpc_any_partition_engaged_uv,
1701
1702 .n_of_deliverable_payloads = xpc_n_of_deliverable_payloads_uv,
1703 .send_payload = xpc_send_payload_uv,
1704 .get_deliverable_payload = xpc_get_deliverable_payload_uv,
1705 .received_payload = xpc_received_payload_uv,
1706 .notify_senders_of_disconnect = xpc_notify_senders_of_disconnect_uv,
1707};
1708
1672int 1709int
1673xpc_init_uv(void) 1710xpc_init_uv(void)
1674{ 1711{
1675 xpc_setup_partitions_sn = xpc_setup_partitions_sn_uv; 1712 xpc_arch_ops = xpc_arch_ops_uv;
1676 xpc_teardown_partitions_sn = xpc_teardown_partitions_sn_uv;
1677 xpc_process_activate_IRQ_rcvd = xpc_process_activate_IRQ_rcvd_uv;
1678 xpc_get_partition_rsvd_page_pa = xpc_get_partition_rsvd_page_pa_uv;
1679 xpc_setup_rsvd_page_sn = xpc_setup_rsvd_page_sn_uv;
1680 xpc_increment_heartbeat = xpc_increment_heartbeat_uv;
1681 xpc_offline_heartbeat = xpc_offline_heartbeat_uv;
1682 xpc_online_heartbeat = xpc_online_heartbeat_uv;
1683 xpc_heartbeat_init = xpc_heartbeat_init_uv;
1684 xpc_heartbeat_exit = xpc_heartbeat_exit_uv;
1685 xpc_get_remote_heartbeat = xpc_get_remote_heartbeat_uv;
1686
1687 xpc_request_partition_activation = xpc_request_partition_activation_uv;
1688 xpc_request_partition_reactivation =
1689 xpc_request_partition_reactivation_uv;
1690 xpc_request_partition_deactivation =
1691 xpc_request_partition_deactivation_uv;
1692 xpc_cancel_partition_deactivation_request =
1693 xpc_cancel_partition_deactivation_request_uv;
1694
1695 xpc_setup_ch_structures_sn = xpc_setup_ch_structures_sn_uv;
1696 xpc_teardown_ch_structures_sn = xpc_teardown_ch_structures_sn_uv;
1697
1698 xpc_make_first_contact = xpc_make_first_contact_uv;
1699
1700 xpc_get_chctl_all_flags = xpc_get_chctl_all_flags_uv;
1701 xpc_send_chctl_closerequest = xpc_send_chctl_closerequest_uv;
1702 xpc_send_chctl_closereply = xpc_send_chctl_closereply_uv;
1703 xpc_send_chctl_openrequest = xpc_send_chctl_openrequest_uv;
1704 xpc_send_chctl_openreply = xpc_send_chctl_openreply_uv;
1705
1706 xpc_save_remote_msgqueue_pa = xpc_save_remote_msgqueue_pa_uv;
1707
1708 xpc_setup_msg_structures = xpc_setup_msg_structures_uv;
1709 xpc_teardown_msg_structures = xpc_teardown_msg_structures_uv;
1710
1711 xpc_indicate_partition_engaged = xpc_indicate_partition_engaged_uv;
1712 xpc_indicate_partition_disengaged =
1713 xpc_indicate_partition_disengaged_uv;
1714 xpc_assume_partition_disengaged = xpc_assume_partition_disengaged_uv;
1715 xpc_partition_engaged = xpc_partition_engaged_uv;
1716 xpc_any_partition_engaged = xpc_any_partition_engaged_uv;
1717
1718 xpc_n_of_deliverable_payloads = xpc_n_of_deliverable_payloads_uv;
1719 xpc_process_msg_chctl_flags = xpc_process_msg_chctl_flags_uv;
1720 xpc_send_payload = xpc_send_payload_uv;
1721 xpc_notify_senders_of_disconnect = xpc_notify_senders_of_disconnect_uv;
1722 xpc_get_deliverable_payload = xpc_get_deliverable_payload_uv;
1723 xpc_received_payload = xpc_received_payload_uv;
1724 1713
1725 if (sizeof(struct xpc_notify_mq_msghdr_uv) > XPC_MSG_HDR_MAX_SIZE) { 1714 if (sizeof(struct xpc_notify_mq_msghdr_uv) > XPC_MSG_HDR_MAX_SIZE) {
1726 dev_err(xpc_part, "xpc_notify_mq_msghdr_uv is larger than %d\n", 1715 dev_err(xpc_part, "xpc_notify_mq_msghdr_uv is larger than %d\n",
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
index fe8041e619ea..b25e9b6516ae 100644
--- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c
@@ -254,6 +254,14 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
254 brq.data.blocks = req->nr_sectors; 254 brq.data.blocks = req->nr_sectors;
255 255
256 /* 256 /*
257 * The block layer doesn't support all sector count
258 * restrictions, so we need to be prepared for too big
259 * requests.
260 */
261 if (brq.data.blocks > card->host->max_blk_count)
262 brq.data.blocks = card->host->max_blk_count;
263
264 /*
257 * After a read error, we redo the request one sector at a time 265 * After a read error, we redo the request one sector at a time
258 * in order to accurately determine which sectors can be read 266 * in order to accurately determine which sectors can be read
259 * successfully. 267 * successfully.
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index fa073ab3fa34..264911732756 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -706,7 +706,7 @@ static void mmc_power_up(struct mmc_host *host)
706 * This delay should be sufficient to allow the power supply 706 * This delay should be sufficient to allow the power supply
707 * to reach the minimum voltage. 707 * to reach the minimum voltage.
708 */ 708 */
709 mmc_delay(2); 709 mmc_delay(10);
710 710
711 host->ios.clock = host->f_min; 711 host->ios.clock = host->f_min;
712 host->ios.power_mode = MMC_POWER_ON; 712 host->ios.power_mode = MMC_POWER_ON;
@@ -716,7 +716,7 @@ static void mmc_power_up(struct mmc_host *host)
716 * This delay must be at least 74 clock sizes, or 1 ms, or the 716 * This delay must be at least 74 clock sizes, or 1 ms, or the
717 * time required to reach a stable voltage. 717 * time required to reach a stable voltage.
718 */ 718 */
719 mmc_delay(2); 719 mmc_delay(10);
720} 720}
721 721
722static void mmc_power_off(struct mmc_host *host) 722static void mmc_power_off(struct mmc_host *host)
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index a663429b3d55..36875dcfa492 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -514,6 +514,7 @@ static int __devinit mmci_probe(struct amba_device *dev, void *id)
514 } 514 }
515 515
516 host = mmc_priv(mmc); 516 host = mmc_priv(mmc);
517 host->mmc = mmc;
517 /* Bits 12 thru 19 is the designer */ 518 /* Bits 12 thru 19 is the designer */
518 host->hw_designer = (dev->periphid >> 12) & 0xff; 519 host->hw_designer = (dev->periphid >> 12) & 0xff;
519 /* Bits 20 thru 23 is the revison */ 520 /* Bits 20 thru 23 is the revison */
@@ -545,7 +546,6 @@ static int __devinit mmci_probe(struct amba_device *dev, void *id)
545 host->mclk = clk_get_rate(host->clk); 546 host->mclk = clk_get_rate(host->clk);
546 DBG(host, "eventual mclk rate: %u Hz\n", host->mclk); 547 DBG(host, "eventual mclk rate: %u Hz\n", host->mclk);
547 } 548 }
548 host->mmc = mmc;
549 host->base = ioremap(dev->res.start, SZ_4K); 549 host->base = ioremap(dev->res.start, SZ_4K);
550 if (!host->base) { 550 if (!host->base) {
551 ret = -ENOMEM; 551 ret = -ENOMEM;
diff --git a/drivers/mmc/host/mvsdio.c b/drivers/mmc/host/mvsdio.c
index b5c375d94ab3..c643d0fe118f 100644
--- a/drivers/mmc/host/mvsdio.c
+++ b/drivers/mmc/host/mvsdio.c
@@ -825,24 +825,23 @@ static int __exit mvsd_remove(struct platform_device *pdev)
825} 825}
826 826
827#ifdef CONFIG_PM 827#ifdef CONFIG_PM
828static int mvsd_suspend(struct platform_device *dev, pm_message_t state, 828static int mvsd_suspend(struct platform_device *dev, pm_message_t state)
829 u32 level)
830{ 829{
831 struct mmc_host *mmc = platform_get_drvdata(dev); 830 struct mmc_host *mmc = platform_get_drvdata(dev);
832 int ret = 0; 831 int ret = 0;
833 832
834 if (mmc && level == SUSPEND_DISABLE) 833 if (mmc)
835 ret = mmc_suspend_host(mmc, state); 834 ret = mmc_suspend_host(mmc, state);
836 835
837 return ret; 836 return ret;
838} 837}
839 838
840static int mvsd_resume(struct platform_device *dev, u32 level) 839static int mvsd_resume(struct platform_device *dev)
841{ 840{
842 struct mmc_host *mmc = platform_dev_get_drvdata(dev); 841 struct mmc_host *mmc = platform_get_drvdata(dev);
843 int ret = 0; 842 int ret = 0;
844 843
845 if (mmc && level == RESUME_ENABLE) 844 if (mmc)
846 ret = mmc_resume_host(mmc); 845 ret = mmc_resume_host(mmc);
847 846
848 return ret; 847 return ret;
diff --git a/drivers/mmc/host/omap.c b/drivers/mmc/host/omap.c
index 5570849188cc..bfa25c01c872 100644
--- a/drivers/mmc/host/omap.c
+++ b/drivers/mmc/host/omap.c
@@ -157,8 +157,6 @@ struct mmc_omap_host {
157 struct timer_list dma_timer; 157 struct timer_list dma_timer;
158 unsigned dma_len; 158 unsigned dma_len;
159 159
160 short power_pin;
161
162 struct mmc_omap_slot *slots[OMAP_MMC_MAX_SLOTS]; 160 struct mmc_omap_slot *slots[OMAP_MMC_MAX_SLOTS];
163 struct mmc_omap_slot *current_slot; 161 struct mmc_omap_slot *current_slot;
164 spinlock_t slot_lock; 162 spinlock_t slot_lock;
diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c
index cd37962ec44f..65be27995d5c 100644
--- a/drivers/mmc/host/sdhci-pci.c
+++ b/drivers/mmc/host/sdhci-pci.c
@@ -522,8 +522,8 @@ static struct sdhci_pci_slot * __devinit sdhci_pci_probe_slot(
522 522
523 host = sdhci_alloc_host(&pdev->dev, sizeof(struct sdhci_pci_slot)); 523 host = sdhci_alloc_host(&pdev->dev, sizeof(struct sdhci_pci_slot));
524 if (IS_ERR(host)) { 524 if (IS_ERR(host)) {
525 ret = PTR_ERR(host); 525 dev_err(&pdev->dev, "cannot allocate host\n");
526 goto unmap; 526 return ERR_PTR(PTR_ERR(host));
527 } 527 }
528 528
529 slot = sdhci_priv(host); 529 slot = sdhci_priv(host);
@@ -541,7 +541,7 @@ static struct sdhci_pci_slot * __devinit sdhci_pci_probe_slot(
541 ret = pci_request_region(pdev, bar, mmc_hostname(host->mmc)); 541 ret = pci_request_region(pdev, bar, mmc_hostname(host->mmc));
542 if (ret) { 542 if (ret) {
543 dev_err(&pdev->dev, "cannot request region\n"); 543 dev_err(&pdev->dev, "cannot request region\n");
544 return ERR_PTR(ret); 544 goto free;
545 } 545 }
546 546
547 addr = pci_resource_start(pdev, bar); 547 addr = pci_resource_start(pdev, bar);
@@ -572,6 +572,8 @@ unmap:
572 572
573release: 573release:
574 pci_release_region(pdev, bar); 574 pci_release_region(pdev, bar);
575
576free:
575 sdhci_free_host(host); 577 sdhci_free_host(host);
576 578
577 return ERR_PTR(ret); 579 return ERR_PTR(ret);
diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
index f20a834f4309..65c6f996bbd3 100644
--- a/drivers/mmc/host/sdhci.h
+++ b/drivers/mmc/host/sdhci.h
@@ -125,7 +125,7 @@
125#define SDHCI_INT_DATA_MASK (SDHCI_INT_DATA_END | SDHCI_INT_DMA_END | \ 125#define SDHCI_INT_DATA_MASK (SDHCI_INT_DATA_END | SDHCI_INT_DMA_END | \
126 SDHCI_INT_DATA_AVAIL | SDHCI_INT_SPACE_AVAIL | \ 126 SDHCI_INT_DATA_AVAIL | SDHCI_INT_SPACE_AVAIL | \
127 SDHCI_INT_DATA_TIMEOUT | SDHCI_INT_DATA_CRC | \ 127 SDHCI_INT_DATA_TIMEOUT | SDHCI_INT_DATA_CRC | \
128 SDHCI_INT_DATA_END_BIT) 128 SDHCI_INT_DATA_END_BIT | SDHCI_ADMA_ERROR)
129#define SDHCI_INT_ALL_MASK ((unsigned int)-1) 129#define SDHCI_INT_ALL_MASK ((unsigned int)-1)
130 130
131#define SDHCI_ACMD12_ERR 0x3C 131#define SDHCI_ACMD12_ERR 0x3C
diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c
index 8185b1f3e5e6..cc6369ea67dd 100644
--- a/drivers/mtd/devices/m25p80.c
+++ b/drivers/mtd/devices/m25p80.c
@@ -54,7 +54,7 @@
54#define SR_SRWD 0x80 /* SR write protect */ 54#define SR_SRWD 0x80 /* SR write protect */
55 55
56/* Define max times to check status register before we give up. */ 56/* Define max times to check status register before we give up. */
57#define MAX_READY_WAIT_COUNT 100000 57#define MAX_READY_WAIT_JIFFIES (10 * HZ) /* eg. M25P128 specs 6s max sector erase */
58#define CMD_SIZE 4 58#define CMD_SIZE 4
59 59
60#ifdef CONFIG_M25PXX_USE_FAST_READ 60#ifdef CONFIG_M25PXX_USE_FAST_READ
@@ -139,20 +139,20 @@ static inline int write_enable(struct m25p *flash)
139 */ 139 */
140static int wait_till_ready(struct m25p *flash) 140static int wait_till_ready(struct m25p *flash)
141{ 141{
142 int count; 142 unsigned long deadline;
143 int sr; 143 int sr;
144 144
145 /* one chip guarantees max 5 msec wait here after page writes, 145 deadline = jiffies + MAX_READY_WAIT_JIFFIES;
146 * but potentially three seconds (!) after page erase. 146
147 */ 147 do {
148 for (count = 0; count < MAX_READY_WAIT_COUNT; count++) {
149 if ((sr = read_sr(flash)) < 0) 148 if ((sr = read_sr(flash)) < 0)
150 break; 149 break;
151 else if (!(sr & SR_WIP)) 150 else if (!(sr & SR_WIP))
152 return 0; 151 return 0;
153 152
154 /* REVISIT sometimes sleeping would be best */ 153 cond_resched();
155 } 154
155 } while (!time_after_eq(jiffies, deadline));
156 156
157 return 1; 157 return 1;
158} 158}
@@ -246,10 +246,12 @@ static int m25p80_erase(struct mtd_info *mtd, struct erase_info *instr)
246 mutex_lock(&flash->lock); 246 mutex_lock(&flash->lock);
247 247
248 /* whole-chip erase? */ 248 /* whole-chip erase? */
249 if (len == flash->mtd.size && erase_chip(flash)) { 249 if (len == flash->mtd.size) {
250 instr->state = MTD_ERASE_FAILED; 250 if (erase_chip(flash)) {
251 mutex_unlock(&flash->lock); 251 instr->state = MTD_ERASE_FAILED;
252 return -EIO; 252 mutex_unlock(&flash->lock);
253 return -EIO;
254 }
253 255
254 /* REVISIT in some cases we could speed up erasing large regions 256 /* REVISIT in some cases we could speed up erasing large regions
255 * by using OPCODE_SE instead of OPCODE_BE_4K. We may have set up 257 * by using OPCODE_SE instead of OPCODE_BE_4K. We may have set up
diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
index fdd6ae859397..bccb4b1ffc46 100644
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
@@ -48,11 +48,11 @@ static LIST_HEAD(mtd_notifiers);
48 */ 48 */
49static void mtd_release(struct device *dev) 49static void mtd_release(struct device *dev)
50{ 50{
51 struct mtd_info *mtd = dev_to_mtd(dev); 51 dev_t index = MTD_DEVT(dev_to_mtd(dev)->index);
52 52
53 /* remove /dev/mtdXro node if needed */ 53 /* remove /dev/mtdXro node if needed */
54 if (MTD_DEVT(mtd->index)) 54 if (index)
55 device_destroy(mtd_class, MTD_DEVT(mtd->index) + 1); 55 device_destroy(mtd_class, index + 1);
56} 56}
57 57
58static ssize_t mtd_type_show(struct device *dev, 58static ssize_t mtd_type_show(struct device *dev,
@@ -132,6 +132,17 @@ static ssize_t mtd_writesize_show(struct device *dev,
132} 132}
133static DEVICE_ATTR(writesize, S_IRUGO, mtd_writesize_show, NULL); 133static DEVICE_ATTR(writesize, S_IRUGO, mtd_writesize_show, NULL);
134 134
135static ssize_t mtd_subpagesize_show(struct device *dev,
136 struct device_attribute *attr, char *buf)
137{
138 struct mtd_info *mtd = dev_to_mtd(dev);
139 unsigned int subpagesize = mtd->writesize >> mtd->subpage_sft;
140
141 return snprintf(buf, PAGE_SIZE, "%u\n", subpagesize);
142
143}
144static DEVICE_ATTR(subpagesize, S_IRUGO, mtd_subpagesize_show, NULL);
145
135static ssize_t mtd_oobsize_show(struct device *dev, 146static ssize_t mtd_oobsize_show(struct device *dev,
136 struct device_attribute *attr, char *buf) 147 struct device_attribute *attr, char *buf)
137{ 148{
@@ -169,6 +180,7 @@ static struct attribute *mtd_attrs[] = {
169 &dev_attr_size.attr, 180 &dev_attr_size.attr,
170 &dev_attr_erasesize.attr, 181 &dev_attr_erasesize.attr,
171 &dev_attr_writesize.attr, 182 &dev_attr_writesize.attr,
183 &dev_attr_subpagesize.attr,
172 &dev_attr_oobsize.attr, 184 &dev_attr_oobsize.attr,
173 &dev_attr_numeraseregions.attr, 185 &dev_attr_numeraseregions.attr,
174 &dev_attr_name.attr, 186 &dev_attr_name.attr,
diff --git a/drivers/mtd/mtdsuper.c b/drivers/mtd/mtdsuper.c
index 92285d0089c2..af8b42e0a55b 100644
--- a/drivers/mtd/mtdsuper.c
+++ b/drivers/mtd/mtdsuper.c
@@ -74,8 +74,7 @@ static int get_sb_mtd_aux(struct file_system_type *fs_type, int flags,
74 74
75 ret = fill_super(sb, data, flags & MS_SILENT ? 1 : 0); 75 ret = fill_super(sb, data, flags & MS_SILENT ? 1 : 0);
76 if (ret < 0) { 76 if (ret < 0) {
77 up_write(&sb->s_umount); 77 deactivate_locked_super(sb);
78 deactivate_super(sb);
79 return ret; 78 return ret;
80 } 79 }
81 80
diff --git a/drivers/mtd/nand/cafe_nand.c b/drivers/mtd/nand/cafe_nand.c
index 7c5b257ce8e4..29acd06b1c39 100644
--- a/drivers/mtd/nand/cafe_nand.c
+++ b/drivers/mtd/nand/cafe_nand.c
@@ -332,7 +332,7 @@ static void cafe_select_chip(struct mtd_info *mtd, int chipnr)
332 cafe->ctl1 &= ~CTRL1_CHIPSELECT; 332 cafe->ctl1 &= ~CTRL1_CHIPSELECT;
333} 333}
334 334
335static int cafe_nand_interrupt(int irq, void *id) 335static irqreturn_t cafe_nand_interrupt(int irq, void *id)
336{ 336{
337 struct mtd_info *mtd = id; 337 struct mtd_info *mtd = id;
338 struct cafe_priv *cafe = mtd->priv; 338 struct cafe_priv *cafe = mtd->priv;
diff --git a/drivers/net/arm/ep93xx_eth.c b/drivers/net/arm/ep93xx_eth.c
index 41736772c1dd..b72b3d639f6e 100644
--- a/drivers/net/arm/ep93xx_eth.c
+++ b/drivers/net/arm/ep93xx_eth.c
@@ -153,7 +153,7 @@ struct ep93xx_descs
153struct ep93xx_priv 153struct ep93xx_priv
154{ 154{
155 struct resource *res; 155 struct resource *res;
156 void *base_addr; 156 void __iomem *base_addr;
157 int irq; 157 int irq;
158 158
159 struct ep93xx_descs *descs; 159 struct ep93xx_descs *descs;
diff --git a/drivers/net/arm/ixp4xx_eth.c b/drivers/net/arm/ixp4xx_eth.c
index 448487e22fa3..a740053d3af3 100644
--- a/drivers/net/arm/ixp4xx_eth.c
+++ b/drivers/net/arm/ixp4xx_eth.c
@@ -338,12 +338,12 @@ static int ixp4xx_mdio_register(void)
338 if (cpu_is_ixp43x()) { 338 if (cpu_is_ixp43x()) {
339 /* IXP43x lacks NPE-B and uses NPE-C for MII PHY access */ 339 /* IXP43x lacks NPE-B and uses NPE-C for MII PHY access */
340 if (!(ixp4xx_read_feature_bits() & IXP4XX_FEATURE_NPEC_ETH)) 340 if (!(ixp4xx_read_feature_bits() & IXP4XX_FEATURE_NPEC_ETH))
341 return -ENOSYS; 341 return -ENODEV;
342 mdio_regs = (struct eth_regs __iomem *)IXP4XX_EthC_BASE_VIRT; 342 mdio_regs = (struct eth_regs __iomem *)IXP4XX_EthC_BASE_VIRT;
343 } else { 343 } else {
344 /* All MII PHY accesses use NPE-B Ethernet registers */ 344 /* All MII PHY accesses use NPE-B Ethernet registers */
345 if (!(ixp4xx_read_feature_bits() & IXP4XX_FEATURE_NPEB_ETH0)) 345 if (!(ixp4xx_read_feature_bits() & IXP4XX_FEATURE_NPEB_ETH0))
346 return -ENOSYS; 346 return -ENODEV;
347 mdio_regs = (struct eth_regs __iomem *)IXP4XX_EthB_BASE_VIRT; 347 mdio_regs = (struct eth_regs __iomem *)IXP4XX_EthB_BASE_VIRT;
348 } 348 }
349 349
@@ -1174,7 +1174,7 @@ static int __devinit eth_init_one(struct platform_device *pdev)
1174 regs_phys = IXP4XX_EthC_BASE_PHYS; 1174 regs_phys = IXP4XX_EthC_BASE_PHYS;
1175 break; 1175 break;
1176 default: 1176 default:
1177 err = -ENOSYS; 1177 err = -ENODEV;
1178 goto err_free; 1178 goto err_free;
1179 } 1179 }
1180 1180
@@ -1189,15 +1189,10 @@ static int __devinit eth_init_one(struct platform_device *pdev)
1189 goto err_free; 1189 goto err_free;
1190 } 1190 }
1191 1191
1192 if (register_netdev(dev)) {
1193 err = -EIO;
1194 goto err_npe_rel;
1195 }
1196
1197 port->mem_res = request_mem_region(regs_phys, REGS_SIZE, dev->name); 1192 port->mem_res = request_mem_region(regs_phys, REGS_SIZE, dev->name);
1198 if (!port->mem_res) { 1193 if (!port->mem_res) {
1199 err = -EBUSY; 1194 err = -EBUSY;
1200 goto err_unreg; 1195 goto err_npe_rel;
1201 } 1196 }
1202 1197
1203 port->plat = plat; 1198 port->plat = plat;
@@ -1215,20 +1210,25 @@ static int __devinit eth_init_one(struct platform_device *pdev)
1215 snprintf(phy_id, BUS_ID_SIZE, PHY_ID_FMT, "0", plat->phy); 1210 snprintf(phy_id, BUS_ID_SIZE, PHY_ID_FMT, "0", plat->phy);
1216 port->phydev = phy_connect(dev, phy_id, &ixp4xx_adjust_link, 0, 1211 port->phydev = phy_connect(dev, phy_id, &ixp4xx_adjust_link, 0,
1217 PHY_INTERFACE_MODE_MII); 1212 PHY_INTERFACE_MODE_MII);
1218 if (IS_ERR(port->phydev)) { 1213 if ((err = IS_ERR(port->phydev)))
1219 printk(KERN_ERR "%s: Could not attach to PHY\n", dev->name); 1214 goto err_free_mem;
1220 return PTR_ERR(port->phydev);
1221 }
1222 1215
1223 port->phydev->irq = PHY_POLL; 1216 port->phydev->irq = PHY_POLL;
1224 1217
1218 if ((err = register_netdev(dev)))
1219 goto err_phy_dis;
1220
1225 printk(KERN_INFO "%s: MII PHY %i on %s\n", dev->name, plat->phy, 1221 printk(KERN_INFO "%s: MII PHY %i on %s\n", dev->name, plat->phy,
1226 npe_name(port->npe)); 1222 npe_name(port->npe));
1227 1223
1228 return 0; 1224 return 0;
1229 1225
1230err_unreg: 1226err_phy_dis:
1231 unregister_netdev(dev); 1227 phy_disconnect(port->phydev);
1228err_free_mem:
1229 npe_port_tab[NPE_ID(port->id)] = NULL;
1230 platform_set_drvdata(pdev, NULL);
1231 release_resource(port->mem_res);
1232err_npe_rel: 1232err_npe_rel:
1233 npe_release(port->npe); 1233 npe_release(port->npe);
1234err_free: 1234err_free:
@@ -1242,6 +1242,7 @@ static int __devexit eth_remove_one(struct platform_device *pdev)
1242 struct port *port = netdev_priv(dev); 1242 struct port *port = netdev_priv(dev);
1243 1243
1244 unregister_netdev(dev); 1244 unregister_netdev(dev);
1245 phy_disconnect(port->phydev);
1245 npe_port_tab[NPE_ID(port->id)] = NULL; 1246 npe_port_tab[NPE_ID(port->id)] = NULL;
1246 platform_set_drvdata(pdev, NULL); 1247 platform_set_drvdata(pdev, NULL);
1247 npe_release(port->npe); 1248 npe_release(port->npe);
diff --git a/drivers/net/atl1c/atl1c_main.c b/drivers/net/atl1c/atl1c_main.c
index 8b17278c4a58..fc1092b835d2 100644
--- a/drivers/net/atl1c/atl1c_main.c
+++ b/drivers/net/atl1c/atl1c_main.c
@@ -2522,8 +2522,8 @@ static int __devinit atl1c_probe(struct pci_dev *pdev,
2522 * various kernel subsystems to support the mechanics required by a 2522 * various kernel subsystems to support the mechanics required by a
2523 * fixed-high-32-bit system. 2523 * fixed-high-32-bit system.
2524 */ 2524 */
2525 if ((pci_set_dma_mask(pdev, DMA_32BIT_MASK) != 0) || 2525 if ((pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0) ||
2526 (pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK) != 0)) { 2526 (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)) != 0)) {
2527 dev_err(&pdev->dev, "No usable DMA configuration,aborting\n"); 2527 dev_err(&pdev->dev, "No usable DMA configuration,aborting\n");
2528 goto err_dma; 2528 goto err_dma;
2529 } 2529 }
diff --git a/drivers/net/benet/be.h b/drivers/net/benet/be.h
index c49ddd08b2aa..b4bb06fdf307 100644
--- a/drivers/net/benet/be.h
+++ b/drivers/net/benet/be.h
@@ -35,8 +35,22 @@
35#define DRV_VER "2.0.348" 35#define DRV_VER "2.0.348"
36#define DRV_NAME "be2net" 36#define DRV_NAME "be2net"
37#define BE_NAME "ServerEngines BladeEngine2 10Gbps NIC" 37#define BE_NAME "ServerEngines BladeEngine2 10Gbps NIC"
38#define OC_NAME "Emulex OneConnect 10Gbps NIC"
38#define DRV_DESC BE_NAME "Driver" 39#define DRV_DESC BE_NAME "Driver"
39 40
41#define BE_VENDOR_ID 0x19a2
42#define BE_DEVICE_ID1 0x211
43#define OC_DEVICE_ID1 0x700
44#define OC_DEVICE_ID2 0x701
45
46static inline char *nic_name(struct pci_dev *pdev)
47{
48 if (pdev->device == OC_DEVICE_ID1 || pdev->device == OC_DEVICE_ID2)
49 return OC_NAME;
50 else
51 return BE_NAME;
52}
53
40/* Number of bytes of an RX frame that are copied to skb->data */ 54/* Number of bytes of an RX frame that are copied to skb->data */
41#define BE_HDR_LEN 64 55#define BE_HDR_LEN 64
42#define BE_MAX_JUMBO_FRAME_SIZE 9018 56#define BE_MAX_JUMBO_FRAME_SIZE 9018
diff --git a/drivers/net/benet/be_main.c b/drivers/net/benet/be_main.c
index 8994b03d80ac..ae2f6b58ba25 100644
--- a/drivers/net/benet/be_main.c
+++ b/drivers/net/benet/be_main.c
@@ -28,10 +28,10 @@ static unsigned int rx_frag_size = 2048;
28module_param(rx_frag_size, uint, S_IRUGO); 28module_param(rx_frag_size, uint, S_IRUGO);
29MODULE_PARM_DESC(rx_frag_size, "Size of a fragment that holds rcvd data."); 29MODULE_PARM_DESC(rx_frag_size, "Size of a fragment that holds rcvd data.");
30 30
31#define BE_VENDOR_ID 0x19a2
32#define BE2_DEVICE_ID_1 0x0211
33static DEFINE_PCI_DEVICE_TABLE(be_dev_ids) = { 31static DEFINE_PCI_DEVICE_TABLE(be_dev_ids) = {
34 { PCI_DEVICE(BE_VENDOR_ID, BE2_DEVICE_ID_1) }, 32 { PCI_DEVICE(BE_VENDOR_ID, BE_DEVICE_ID1) },
33 { PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID1) },
34 { PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID2) },
35 { 0 } 35 { 0 }
36}; 36};
37MODULE_DEVICE_TABLE(pci, be_dev_ids); 37MODULE_DEVICE_TABLE(pci, be_dev_ids);
@@ -1837,11 +1837,11 @@ static int __devinit be_probe(struct pci_dev *pdev,
1837 1837
1838 be_msix_enable(adapter); 1838 be_msix_enable(adapter);
1839 1839
1840 status = pci_set_dma_mask(pdev, DMA_64BIT_MASK); 1840 status = pci_set_dma_mask(pdev, DMA_BIT_MASK(64));
1841 if (!status) { 1841 if (!status) {
1842 netdev->features |= NETIF_F_HIGHDMA; 1842 netdev->features |= NETIF_F_HIGHDMA;
1843 } else { 1843 } else {
1844 status = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 1844 status = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
1845 if (status) { 1845 if (status) {
1846 dev_err(&pdev->dev, "Could not set PCI DMA Mask\n"); 1846 dev_err(&pdev->dev, "Could not set PCI DMA Mask\n");
1847 goto free_netdev; 1847 goto free_netdev;
@@ -1875,7 +1875,7 @@ static int __devinit be_probe(struct pci_dev *pdev,
1875 if (status != 0) 1875 if (status != 0)
1876 goto stats_clean; 1876 goto stats_clean;
1877 1877
1878 dev_info(&pdev->dev, BE_NAME " port %d\n", adapter->port_num); 1878 dev_info(&pdev->dev, "%s port %d\n", nic_name(pdev), adapter->port_num);
1879 return 0; 1879 return 0;
1880 1880
1881stats_clean: 1881stats_clean:
@@ -1889,7 +1889,7 @@ rel_reg:
1889disable_dev: 1889disable_dev:
1890 pci_disable_device(pdev); 1890 pci_disable_device(pdev);
1891do_none: 1891do_none:
1892 dev_warn(&pdev->dev, BE_NAME " initialization failed\n"); 1892 dev_err(&pdev->dev, "%s initialization failed\n", nic_name(pdev));
1893 return status; 1893 return status;
1894} 1894}
1895 1895
diff --git a/drivers/net/bonding/bond_3ad.c b/drivers/net/bonding/bond_3ad.c
index 06009dc50b19..d4b570886c6e 100644
--- a/drivers/net/bonding/bond_3ad.c
+++ b/drivers/net/bonding/bond_3ad.c
@@ -1465,6 +1465,12 @@ static struct aggregator *ad_agg_selection_test(struct aggregator *best,
1465 return best; 1465 return best;
1466} 1466}
1467 1467
1468static int agg_device_up(const struct aggregator *agg)
1469{
1470 return (netif_running(agg->slave->dev) &&
1471 netif_carrier_ok(agg->slave->dev));
1472}
1473
1468/** 1474/**
1469 * ad_agg_selection_logic - select an aggregation group for a team 1475 * ad_agg_selection_logic - select an aggregation group for a team
1470 * @aggregator: the aggregator we're looking at 1476 * @aggregator: the aggregator we're looking at
@@ -1496,14 +1502,13 @@ static void ad_agg_selection_logic(struct aggregator *agg)
1496 struct port *port; 1502 struct port *port;
1497 1503
1498 origin = agg; 1504 origin = agg;
1499
1500 active = __get_active_agg(agg); 1505 active = __get_active_agg(agg);
1501 best = active; 1506 best = (active && agg_device_up(active)) ? active : NULL;
1502 1507
1503 do { 1508 do {
1504 agg->is_active = 0; 1509 agg->is_active = 0;
1505 1510
1506 if (agg->num_of_ports) 1511 if (agg->num_of_ports && agg_device_up(agg))
1507 best = ad_agg_selection_test(best, agg); 1512 best = ad_agg_selection_test(best, agg);
1508 1513
1509 } while ((agg = __get_next_agg(agg))); 1514 } while ((agg = __get_next_agg(agg)));
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 30b9ea6d62b0..96d7689995cd 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -5199,7 +5199,6 @@ static int __init bonding_init(void)
5199{ 5199{
5200 int i; 5200 int i;
5201 int res; 5201 int res;
5202 struct bonding *bond;
5203 5202
5204 printk(KERN_INFO "%s", version); 5203 printk(KERN_INFO "%s", version);
5205 5204
@@ -5228,13 +5227,6 @@ static int __init bonding_init(void)
5228 5227
5229 goto out; 5228 goto out;
5230err: 5229err:
5231 list_for_each_entry(bond, &bond_dev_list, bond_list) {
5232 bond_work_cancel_all(bond);
5233 destroy_workqueue(bond->wq);
5234 }
5235
5236 bond_destroy_sysfs();
5237
5238 rtnl_lock(); 5230 rtnl_lock();
5239 bond_free_all(); 5231 bond_free_all();
5240 rtnl_unlock(); 5232 rtnl_unlock();
diff --git a/drivers/net/jme.c b/drivers/net/jme.c
index ece35040288c..621a7c0c46ba 100644
--- a/drivers/net/jme.c
+++ b/drivers/net/jme.c
@@ -2591,13 +2591,13 @@ static int
2591jme_pci_dma64(struct pci_dev *pdev) 2591jme_pci_dma64(struct pci_dev *pdev)
2592{ 2592{
2593 if (pdev->device == PCI_DEVICE_ID_JMICRON_JMC250 && 2593 if (pdev->device == PCI_DEVICE_ID_JMICRON_JMC250 &&
2594 !pci_set_dma_mask(pdev, DMA_64BIT_MASK)) 2594 !pci_set_dma_mask(pdev, DMA_BIT_MASK(64)))
2595 if (!pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK)) 2595 if (!pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)))
2596 return 1; 2596 return 1;
2597 2597
2598 if (pdev->device == PCI_DEVICE_ID_JMICRON_JMC250 && 2598 if (pdev->device == PCI_DEVICE_ID_JMICRON_JMC250 &&
2599 !pci_set_dma_mask(pdev, DMA_40BIT_MASK)) 2599 !pci_set_dma_mask(pdev, DMA_BIT_MASK(40)))
2600 if (!pci_set_consistent_dma_mask(pdev, DMA_40BIT_MASK)) 2600 if (!pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(40)))
2601 return 1; 2601 return 1;
2602 2602
2603 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) 2603 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32)))
diff --git a/drivers/net/meth.c b/drivers/net/meth.c
index 46ffdb464ac4..5d04d94f2a21 100644
--- a/drivers/net/meth.c
+++ b/drivers/net/meth.c
@@ -127,11 +127,11 @@ static unsigned long mdio_read(struct meth_private *priv, unsigned long phyreg)
127static int mdio_probe(struct meth_private *priv) 127static int mdio_probe(struct meth_private *priv)
128{ 128{
129 int i; 129 int i;
130 unsigned long p2, p3; 130 unsigned long p2, p3, flags;
131 /* check if phy is detected already */ 131 /* check if phy is detected already */
132 if(priv->phy_addr>=0&&priv->phy_addr<32) 132 if(priv->phy_addr>=0&&priv->phy_addr<32)
133 return 0; 133 return 0;
134 spin_lock(&priv->meth_lock); 134 spin_lock_irqsave(&priv->meth_lock, flags);
135 for (i=0;i<32;++i){ 135 for (i=0;i<32;++i){
136 priv->phy_addr=i; 136 priv->phy_addr=i;
137 p2=mdio_read(priv,2); 137 p2=mdio_read(priv,2);
@@ -157,7 +157,7 @@ static int mdio_probe(struct meth_private *priv)
157 break; 157 break;
158 } 158 }
159 } 159 }
160 spin_unlock(&priv->meth_lock); 160 spin_unlock_irqrestore(&priv->meth_lock, flags);
161 if(priv->phy_addr<32) { 161 if(priv->phy_addr<32) {
162 return 0; 162 return 0;
163 } 163 }
@@ -373,14 +373,14 @@ static int meth_release(struct net_device *dev)
373static void meth_rx(struct net_device* dev, unsigned long int_status) 373static void meth_rx(struct net_device* dev, unsigned long int_status)
374{ 374{
375 struct sk_buff *skb; 375 struct sk_buff *skb;
376 unsigned long status; 376 unsigned long status, flags;
377 struct meth_private *priv = netdev_priv(dev); 377 struct meth_private *priv = netdev_priv(dev);
378 unsigned long fifo_rptr = (int_status & METH_INT_RX_RPTR_MASK) >> 8; 378 unsigned long fifo_rptr = (int_status & METH_INT_RX_RPTR_MASK) >> 8;
379 379
380 spin_lock(&priv->meth_lock); 380 spin_lock_irqsave(&priv->meth_lock, flags);
381 priv->dma_ctrl &= ~METH_DMA_RX_INT_EN; 381 priv->dma_ctrl &= ~METH_DMA_RX_INT_EN;
382 mace->eth.dma_ctrl = priv->dma_ctrl; 382 mace->eth.dma_ctrl = priv->dma_ctrl;
383 spin_unlock(&priv->meth_lock); 383 spin_unlock_irqrestore(&priv->meth_lock, flags);
384 384
385 if (int_status & METH_INT_RX_UNDERFLOW) { 385 if (int_status & METH_INT_RX_UNDERFLOW) {
386 fifo_rptr = (fifo_rptr - 1) & 0x0f; 386 fifo_rptr = (fifo_rptr - 1) & 0x0f;
@@ -452,12 +452,12 @@ static void meth_rx(struct net_device* dev, unsigned long int_status)
452 mace->eth.rx_fifo = priv->rx_ring_dmas[priv->rx_write]; 452 mace->eth.rx_fifo = priv->rx_ring_dmas[priv->rx_write];
453 ADVANCE_RX_PTR(priv->rx_write); 453 ADVANCE_RX_PTR(priv->rx_write);
454 } 454 }
455 spin_lock(&priv->meth_lock); 455 spin_lock_irqsave(&priv->meth_lock, flags);
456 /* In case there was underflow, and Rx DMA was disabled */ 456 /* In case there was underflow, and Rx DMA was disabled */
457 priv->dma_ctrl |= METH_DMA_RX_INT_EN | METH_DMA_RX_EN; 457 priv->dma_ctrl |= METH_DMA_RX_INT_EN | METH_DMA_RX_EN;
458 mace->eth.dma_ctrl = priv->dma_ctrl; 458 mace->eth.dma_ctrl = priv->dma_ctrl;
459 mace->eth.int_stat = METH_INT_RX_THRESHOLD; 459 mace->eth.int_stat = METH_INT_RX_THRESHOLD;
460 spin_unlock(&priv->meth_lock); 460 spin_unlock_irqrestore(&priv->meth_lock, flags);
461} 461}
462 462
463static int meth_tx_full(struct net_device *dev) 463static int meth_tx_full(struct net_device *dev)
@@ -470,11 +470,11 @@ static int meth_tx_full(struct net_device *dev)
470static void meth_tx_cleanup(struct net_device* dev, unsigned long int_status) 470static void meth_tx_cleanup(struct net_device* dev, unsigned long int_status)
471{ 471{
472 struct meth_private *priv = netdev_priv(dev); 472 struct meth_private *priv = netdev_priv(dev);
473 unsigned long status; 473 unsigned long status, flags;
474 struct sk_buff *skb; 474 struct sk_buff *skb;
475 unsigned long rptr = (int_status&TX_INFO_RPTR) >> 16; 475 unsigned long rptr = (int_status&TX_INFO_RPTR) >> 16;
476 476
477 spin_lock(&priv->meth_lock); 477 spin_lock_irqsave(&priv->meth_lock, flags);
478 478
479 /* Stop DMA notification */ 479 /* Stop DMA notification */
480 priv->dma_ctrl &= ~(METH_DMA_TX_INT_EN); 480 priv->dma_ctrl &= ~(METH_DMA_TX_INT_EN);
@@ -527,12 +527,13 @@ static void meth_tx_cleanup(struct net_device* dev, unsigned long int_status)
527 } 527 }
528 528
529 mace->eth.int_stat = METH_INT_TX_EMPTY | METH_INT_TX_PKT; 529 mace->eth.int_stat = METH_INT_TX_EMPTY | METH_INT_TX_PKT;
530 spin_unlock(&priv->meth_lock); 530 spin_unlock_irqrestore(&priv->meth_lock, flags);
531} 531}
532 532
533static void meth_error(struct net_device* dev, unsigned status) 533static void meth_error(struct net_device* dev, unsigned status)
534{ 534{
535 struct meth_private *priv = netdev_priv(dev); 535 struct meth_private *priv = netdev_priv(dev);
536 unsigned long flags;
536 537
537 printk(KERN_WARNING "meth: error status: 0x%08x\n",status); 538 printk(KERN_WARNING "meth: error status: 0x%08x\n",status);
538 /* check for errors too... */ 539 /* check for errors too... */
@@ -547,7 +548,7 @@ static void meth_error(struct net_device* dev, unsigned status)
547 printk(KERN_WARNING "meth: Rx overflow\n"); 548 printk(KERN_WARNING "meth: Rx overflow\n");
548 if (status & (METH_INT_RX_UNDERFLOW)) { 549 if (status & (METH_INT_RX_UNDERFLOW)) {
549 printk(KERN_WARNING "meth: Rx underflow\n"); 550 printk(KERN_WARNING "meth: Rx underflow\n");
550 spin_lock(&priv->meth_lock); 551 spin_lock_irqsave(&priv->meth_lock, flags);
551 mace->eth.int_stat = METH_INT_RX_UNDERFLOW; 552 mace->eth.int_stat = METH_INT_RX_UNDERFLOW;
552 /* more underflow interrupts will be delivered, 553 /* more underflow interrupts will be delivered,
553 * effectively throwing us into an infinite loop. 554 * effectively throwing us into an infinite loop.
@@ -555,7 +556,7 @@ static void meth_error(struct net_device* dev, unsigned status)
555 priv->dma_ctrl &= ~METH_DMA_RX_EN; 556 priv->dma_ctrl &= ~METH_DMA_RX_EN;
556 mace->eth.dma_ctrl = priv->dma_ctrl; 557 mace->eth.dma_ctrl = priv->dma_ctrl;
557 DPRINTK("Disabled meth Rx DMA temporarily\n"); 558 DPRINTK("Disabled meth Rx DMA temporarily\n");
558 spin_unlock(&priv->meth_lock); 559 spin_unlock_irqrestore(&priv->meth_lock, flags);
559 } 560 }
560 mace->eth.int_stat = METH_INT_ERROR; 561 mace->eth.int_stat = METH_INT_ERROR;
561} 562}
diff --git a/drivers/net/mlx4/en_cq.c b/drivers/net/mlx4/en_cq.c
index 91f50de84be9..a276125b709b 100644
--- a/drivers/net/mlx4/en_cq.c
+++ b/drivers/net/mlx4/en_cq.c
@@ -125,8 +125,10 @@ void mlx4_en_deactivate_cq(struct mlx4_en_priv *priv, struct mlx4_en_cq *cq)
125 125
126 if (cq->is_tx) 126 if (cq->is_tx)
127 del_timer(&cq->timer); 127 del_timer(&cq->timer);
128 else 128 else {
129 napi_disable(&cq->napi); 129 napi_disable(&cq->napi);
130 netif_napi_del(&cq->napi);
131 }
130 132
131 mlx4_cq_free(mdev->dev, &cq->mcq); 133 mlx4_cq_free(mdev->dev, &cq->mcq);
132} 134}
diff --git a/drivers/net/mlx4/en_rx.c b/drivers/net/mlx4/en_rx.c
index 7942c4d3cd88..9ee873e872b3 100644
--- a/drivers/net/mlx4/en_rx.c
+++ b/drivers/net/mlx4/en_rx.c
@@ -951,7 +951,6 @@ static int mlx4_en_config_rss_qp(struct mlx4_en_priv *priv,
951 if (err) { 951 if (err) {
952 mlx4_err(mdev, "Failed to allocate qp #%d\n", qpn); 952 mlx4_err(mdev, "Failed to allocate qp #%d\n", qpn);
953 goto out; 953 goto out;
954 return err;
955 } 954 }
956 qp->event = mlx4_en_sqp_event; 955 qp->event = mlx4_en_sqp_event;
957 956
diff --git a/drivers/net/mlx4/main.c b/drivers/net/mlx4/main.c
index 102bac90a302..30bea9689694 100644
--- a/drivers/net/mlx4/main.c
+++ b/drivers/net/mlx4/main.c
@@ -976,7 +976,7 @@ static void mlx4_enable_msi_x(struct mlx4_dev *dev)
976 nreq = err; 976 nreq = err;
977 goto retry; 977 goto retry;
978 } 978 }
979 979 kfree(entries);
980 goto no_msi; 980 goto no_msi;
981 } 981 }
982 982
diff --git a/drivers/net/mv643xx_eth.c b/drivers/net/mv643xx_eth.c
index d5838528791f..1361ddc8d31f 100644
--- a/drivers/net/mv643xx_eth.c
+++ b/drivers/net/mv643xx_eth.c
@@ -571,7 +571,7 @@ static int rxq_process(struct rx_queue *rxq, int budget)
571 if (rxq->rx_curr_desc == rxq->rx_ring_size) 571 if (rxq->rx_curr_desc == rxq->rx_ring_size)
572 rxq->rx_curr_desc = 0; 572 rxq->rx_curr_desc = 0;
573 573
574 dma_unmap_single(NULL, rx_desc->buf_ptr, 574 dma_unmap_single(mp->dev->dev.parent, rx_desc->buf_ptr,
575 rx_desc->buf_size, DMA_FROM_DEVICE); 575 rx_desc->buf_size, DMA_FROM_DEVICE);
576 rxq->rx_desc_count--; 576 rxq->rx_desc_count--;
577 rx++; 577 rx++;
@@ -677,8 +677,9 @@ static int rxq_refill(struct rx_queue *rxq, int budget)
677 677
678 rx_desc = rxq->rx_desc_area + rx; 678 rx_desc = rxq->rx_desc_area + rx;
679 679
680 rx_desc->buf_ptr = dma_map_single(NULL, skb->data, 680 rx_desc->buf_ptr = dma_map_single(mp->dev->dev.parent,
681 mp->skb_size, DMA_FROM_DEVICE); 681 skb->data, mp->skb_size,
682 DMA_FROM_DEVICE);
682 rx_desc->buf_size = mp->skb_size; 683 rx_desc->buf_size = mp->skb_size;
683 rxq->rx_skb[rx] = skb; 684 rxq->rx_skb[rx] = skb;
684 wmb(); 685 wmb();
@@ -717,6 +718,7 @@ static inline unsigned int has_tiny_unaligned_frags(struct sk_buff *skb)
717 718
718static void txq_submit_frag_skb(struct tx_queue *txq, struct sk_buff *skb) 719static void txq_submit_frag_skb(struct tx_queue *txq, struct sk_buff *skb)
719{ 720{
721 struct mv643xx_eth_private *mp = txq_to_mp(txq);
720 int nr_frags = skb_shinfo(skb)->nr_frags; 722 int nr_frags = skb_shinfo(skb)->nr_frags;
721 int frag; 723 int frag;
722 724
@@ -745,10 +747,10 @@ static void txq_submit_frag_skb(struct tx_queue *txq, struct sk_buff *skb)
745 747
746 desc->l4i_chk = 0; 748 desc->l4i_chk = 0;
747 desc->byte_cnt = this_frag->size; 749 desc->byte_cnt = this_frag->size;
748 desc->buf_ptr = dma_map_page(NULL, this_frag->page, 750 desc->buf_ptr = dma_map_page(mp->dev->dev.parent,
749 this_frag->page_offset, 751 this_frag->page,
750 this_frag->size, 752 this_frag->page_offset,
751 DMA_TO_DEVICE); 753 this_frag->size, DMA_TO_DEVICE);
752 } 754 }
753} 755}
754 756
@@ -825,7 +827,8 @@ no_csum:
825 827
826 desc->l4i_chk = l4i_chk; 828 desc->l4i_chk = l4i_chk;
827 desc->byte_cnt = length; 829 desc->byte_cnt = length;
828 desc->buf_ptr = dma_map_single(NULL, skb->data, length, DMA_TO_DEVICE); 830 desc->buf_ptr = dma_map_single(mp->dev->dev.parent, skb->data,
831 length, DMA_TO_DEVICE);
829 832
830 __skb_queue_tail(&txq->tx_skb, skb); 833 __skb_queue_tail(&txq->tx_skb, skb);
831 834
@@ -955,10 +958,10 @@ static int txq_reclaim(struct tx_queue *txq, int budget, int force)
955 } 958 }
956 959
957 if (cmd_sts & TX_FIRST_DESC) { 960 if (cmd_sts & TX_FIRST_DESC) {
958 dma_unmap_single(NULL, desc->buf_ptr, 961 dma_unmap_single(mp->dev->dev.parent, desc->buf_ptr,
959 desc->byte_cnt, DMA_TO_DEVICE); 962 desc->byte_cnt, DMA_TO_DEVICE);
960 } else { 963 } else {
961 dma_unmap_page(NULL, desc->buf_ptr, 964 dma_unmap_page(mp->dev->dev.parent, desc->buf_ptr,
962 desc->byte_cnt, DMA_TO_DEVICE); 965 desc->byte_cnt, DMA_TO_DEVICE);
963 } 966 }
964 967
@@ -1891,9 +1894,9 @@ static int rxq_init(struct mv643xx_eth_private *mp, int index)
1891 mp->rx_desc_sram_size); 1894 mp->rx_desc_sram_size);
1892 rxq->rx_desc_dma = mp->rx_desc_sram_addr; 1895 rxq->rx_desc_dma = mp->rx_desc_sram_addr;
1893 } else { 1896 } else {
1894 rxq->rx_desc_area = dma_alloc_coherent(NULL, size, 1897 rxq->rx_desc_area = dma_alloc_coherent(mp->dev->dev.parent,
1895 &rxq->rx_desc_dma, 1898 size, &rxq->rx_desc_dma,
1896 GFP_KERNEL); 1899 GFP_KERNEL);
1897 } 1900 }
1898 1901
1899 if (rxq->rx_desc_area == NULL) { 1902 if (rxq->rx_desc_area == NULL) {
@@ -1944,7 +1947,7 @@ out_free:
1944 if (index == 0 && size <= mp->rx_desc_sram_size) 1947 if (index == 0 && size <= mp->rx_desc_sram_size)
1945 iounmap(rxq->rx_desc_area); 1948 iounmap(rxq->rx_desc_area);
1946 else 1949 else
1947 dma_free_coherent(NULL, size, 1950 dma_free_coherent(mp->dev->dev.parent, size,
1948 rxq->rx_desc_area, 1951 rxq->rx_desc_area,
1949 rxq->rx_desc_dma); 1952 rxq->rx_desc_dma);
1950 1953
@@ -1976,7 +1979,7 @@ static void rxq_deinit(struct rx_queue *rxq)
1976 rxq->rx_desc_area_size <= mp->rx_desc_sram_size) 1979 rxq->rx_desc_area_size <= mp->rx_desc_sram_size)
1977 iounmap(rxq->rx_desc_area); 1980 iounmap(rxq->rx_desc_area);
1978 else 1981 else
1979 dma_free_coherent(NULL, rxq->rx_desc_area_size, 1982 dma_free_coherent(mp->dev->dev.parent, rxq->rx_desc_area_size,
1980 rxq->rx_desc_area, rxq->rx_desc_dma); 1983 rxq->rx_desc_area, rxq->rx_desc_dma);
1981 1984
1982 kfree(rxq->rx_skb); 1985 kfree(rxq->rx_skb);
@@ -2004,9 +2007,9 @@ static int txq_init(struct mv643xx_eth_private *mp, int index)
2004 mp->tx_desc_sram_size); 2007 mp->tx_desc_sram_size);
2005 txq->tx_desc_dma = mp->tx_desc_sram_addr; 2008 txq->tx_desc_dma = mp->tx_desc_sram_addr;
2006 } else { 2009 } else {
2007 txq->tx_desc_area = dma_alloc_coherent(NULL, size, 2010 txq->tx_desc_area = dma_alloc_coherent(mp->dev->dev.parent,
2008 &txq->tx_desc_dma, 2011 size, &txq->tx_desc_dma,
2009 GFP_KERNEL); 2012 GFP_KERNEL);
2010 } 2013 }
2011 2014
2012 if (txq->tx_desc_area == NULL) { 2015 if (txq->tx_desc_area == NULL) {
@@ -2050,7 +2053,7 @@ static void txq_deinit(struct tx_queue *txq)
2050 txq->tx_desc_area_size <= mp->tx_desc_sram_size) 2053 txq->tx_desc_area_size <= mp->tx_desc_sram_size)
2051 iounmap(txq->tx_desc_area); 2054 iounmap(txq->tx_desc_area);
2052 else 2055 else
2053 dma_free_coherent(NULL, txq->tx_desc_area_size, 2056 dma_free_coherent(mp->dev->dev.parent, txq->tx_desc_area_size,
2054 txq->tx_desc_area, txq->tx_desc_dma); 2057 txq->tx_desc_area, txq->tx_desc_dma);
2055} 2058}
2056 2059
diff --git a/drivers/net/vxge/vxge-traffic.c b/drivers/net/vxge/vxge-traffic.c
index 506625b180ac..370f55cbbad7 100644
--- a/drivers/net/vxge/vxge-traffic.c
+++ b/drivers/net/vxge/vxge-traffic.c
@@ -115,7 +115,7 @@ enum vxge_hw_status vxge_hw_vpath_intr_enable(struct __vxge_hw_vpath_handle *vp)
115 VXGE_HW_KDFCCTL_ERRORS_REG_KDFCCTL_FIFO1_POISON| 115 VXGE_HW_KDFCCTL_ERRORS_REG_KDFCCTL_FIFO1_POISON|
116 VXGE_HW_KDFCCTL_ERRORS_REG_KDFCCTL_FIFO2_POISON| 116 VXGE_HW_KDFCCTL_ERRORS_REG_KDFCCTL_FIFO2_POISON|
117 VXGE_HW_KDFCCTL_ERRORS_REG_KDFCCTL_FIFO1_DMA_ERR| 117 VXGE_HW_KDFCCTL_ERRORS_REG_KDFCCTL_FIFO1_DMA_ERR|
118 VXGE_HW_KDFCCTL_ERRORS_REG_KDFCCTL_FIFO1_DMA_ERR), 0, 32), 118 VXGE_HW_KDFCCTL_ERRORS_REG_KDFCCTL_FIFO2_DMA_ERR), 0, 32),
119 &vp_reg->kdfcctl_errors_mask); 119 &vp_reg->kdfcctl_errors_mask);
120 120
121 __vxge_hw_pio_mem_write32_upper(0, &vp_reg->vpath_ppif_int_mask); 121 __vxge_hw_pio_mem_write32_upper(0, &vp_reg->vpath_ppif_int_mask);
diff --git a/drivers/net/wan/ixp4xx_hss.c b/drivers/net/wan/ixp4xx_hss.c
index 3bf7d3f447db..765a7f5d6aa4 100644
--- a/drivers/net/wan/ixp4xx_hss.c
+++ b/drivers/net/wan/ixp4xx_hss.c
@@ -1249,7 +1249,7 @@ static int __devinit hss_init_one(struct platform_device *pdev)
1249 return -ENOMEM; 1249 return -ENOMEM;
1250 1250
1251 if ((port->npe = npe_request(0)) == NULL) { 1251 if ((port->npe = npe_request(0)) == NULL) {
1252 err = -ENOSYS; 1252 err = -ENODEV;
1253 goto err_free; 1253 goto err_free;
1254 } 1254 }
1255 1255
@@ -1311,7 +1311,7 @@ static int __init hss_init_module(void)
1311 if ((ixp4xx_read_feature_bits() & 1311 if ((ixp4xx_read_feature_bits() &
1312 (IXP4XX_FEATURE_HDLC | IXP4XX_FEATURE_HSS)) != 1312 (IXP4XX_FEATURE_HDLC | IXP4XX_FEATURE_HSS)) !=
1313 (IXP4XX_FEATURE_HDLC | IXP4XX_FEATURE_HSS)) 1313 (IXP4XX_FEATURE_HDLC | IXP4XX_FEATURE_HSS))
1314 return -ENOSYS; 1314 return -ENODEV;
1315 1315
1316 spin_lock_init(&npe_lock); 1316 spin_lock_init(&npe_lock);
1317 1317
diff --git a/drivers/net/wimax/i2400m/rx.c b/drivers/net/wimax/i2400m/rx.c
index 02419bfd64b5..f9fc38902322 100644
--- a/drivers/net/wimax/i2400m/rx.c
+++ b/drivers/net/wimax/i2400m/rx.c
@@ -819,10 +819,9 @@ void i2400m_roq_queue_update_ws(struct i2400m *i2400m, struct i2400m_roq *roq,
819 roq_data = (struct i2400m_roq_data *) &skb->cb; 819 roq_data = (struct i2400m_roq_data *) &skb->cb;
820 i2400m_net_erx(i2400m, skb, roq_data->cs); 820 i2400m_net_erx(i2400m, skb, roq_data->cs);
821 } 821 }
822 else { 822 else
823 __i2400m_roq_queue(i2400m, roq, skb, sn, nsn); 823 __i2400m_roq_queue(i2400m, roq, skb, sn, nsn);
824 __i2400m_roq_update_ws(i2400m, roq, sn + 1); 824 __i2400m_roq_update_ws(i2400m, roq, sn + 1);
825 }
826 i2400m_roq_log_add(i2400m, roq, I2400M_RO_TYPE_PACKET_WS, 825 i2400m_roq_log_add(i2400m, roq, I2400M_RO_TYPE_PACKET_WS,
827 old_ws, len, sn, nsn, roq->ws); 826 old_ws, len, sn, nsn, roq->ws);
828 } 827 }
diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c
index c36d3a3d655f..d73475739127 100644
--- a/drivers/net/wireless/airo.c
+++ b/drivers/net/wireless/airo.c
@@ -6501,7 +6501,10 @@ static int airo_get_encode(struct net_device *dev,
6501 6501
6502 /* Copy the key to the user buffer */ 6502 /* Copy the key to the user buffer */
6503 dwrq->length = get_wep_key(local, index, &buf[0], sizeof(buf)); 6503 dwrq->length = get_wep_key(local, index, &buf[0], sizeof(buf));
6504 memcpy(extra, buf, dwrq->length); 6504 if (dwrq->length != -1)
6505 memcpy(extra, buf, dwrq->length);
6506 else
6507 dwrq->length = 0;
6505 6508
6506 return 0; 6509 return 0;
6507} 6510}
@@ -6659,7 +6662,10 @@ static int airo_get_encodeext(struct net_device *dev,
6659 6662
6660 /* Copy the key to the user buffer */ 6663 /* Copy the key to the user buffer */
6661 ext->key_len = get_wep_key(local, idx, &buf[0], sizeof(buf)); 6664 ext->key_len = get_wep_key(local, idx, &buf[0], sizeof(buf));
6662 memcpy(extra, buf, ext->key_len); 6665 if (ext->key_len != -1)
6666 memcpy(extra, buf, ext->key_len);
6667 else
6668 ext->key_len = 0;
6663 6669
6664 return 0; 6670 return 0;
6665} 6671}
diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
index 6789c5dfcc76..dbfe9f45050e 100644
--- a/drivers/net/wireless/ath/ath5k/base.c
+++ b/drivers/net/wireless/ath/ath5k/base.c
@@ -218,7 +218,7 @@ static struct pci_driver ath5k_pci_driver = {
218 * Prototypes - MAC 802.11 stack related functions 218 * Prototypes - MAC 802.11 stack related functions
219 */ 219 */
220static int ath5k_tx(struct ieee80211_hw *hw, struct sk_buff *skb); 220static int ath5k_tx(struct ieee80211_hw *hw, struct sk_buff *skb);
221static int ath5k_reset(struct ath5k_softc *sc, bool stop, bool change_channel); 221static int ath5k_reset(struct ath5k_softc *sc, struct ieee80211_channel *chan);
222static int ath5k_reset_wake(struct ath5k_softc *sc); 222static int ath5k_reset_wake(struct ath5k_softc *sc);
223static int ath5k_start(struct ieee80211_hw *hw); 223static int ath5k_start(struct ieee80211_hw *hw);
224static void ath5k_stop(struct ieee80211_hw *hw); 224static void ath5k_stop(struct ieee80211_hw *hw);
@@ -1076,16 +1076,13 @@ ath5k_chan_set(struct ath5k_softc *sc, struct ieee80211_channel *chan)
1076 if (chan->center_freq != sc->curchan->center_freq || 1076 if (chan->center_freq != sc->curchan->center_freq ||
1077 chan->hw_value != sc->curchan->hw_value) { 1077 chan->hw_value != sc->curchan->hw_value) {
1078 1078
1079 sc->curchan = chan;
1080 sc->curband = &sc->sbands[chan->band];
1081
1082 /* 1079 /*
1083 * To switch channels clear any pending DMA operations; 1080 * To switch channels clear any pending DMA operations;
1084 * wait long enough for the RX fifo to drain, reset the 1081 * wait long enough for the RX fifo to drain, reset the
1085 * hardware at the new frequency, and then re-enable 1082 * hardware at the new frequency, and then re-enable
1086 * the relevant bits of the h/w. 1083 * the relevant bits of the h/w.
1087 */ 1084 */
1088 return ath5k_reset(sc, true, true); 1085 return ath5k_reset(sc, chan);
1089 } 1086 }
1090 1087
1091 return 0; 1088 return 0;
@@ -2350,7 +2347,7 @@ ath5k_init(struct ath5k_softc *sc)
2350 sc->imask = AR5K_INT_RXOK | AR5K_INT_RXERR | AR5K_INT_RXEOL | 2347 sc->imask = AR5K_INT_RXOK | AR5K_INT_RXERR | AR5K_INT_RXEOL |
2351 AR5K_INT_RXORN | AR5K_INT_TXDESC | AR5K_INT_TXEOL | 2348 AR5K_INT_RXORN | AR5K_INT_TXDESC | AR5K_INT_TXEOL |
2352 AR5K_INT_FATAL | AR5K_INT_GLOBAL; 2349 AR5K_INT_FATAL | AR5K_INT_GLOBAL;
2353 ret = ath5k_reset(sc, false, false); 2350 ret = ath5k_reset(sc, NULL);
2354 if (ret) 2351 if (ret)
2355 goto done; 2352 goto done;
2356 2353
@@ -2635,18 +2632,25 @@ drop_packet:
2635 return NETDEV_TX_OK; 2632 return NETDEV_TX_OK;
2636} 2633}
2637 2634
2635/*
2636 * Reset the hardware. If chan is not NULL, then also pause rx/tx
2637 * and change to the given channel.
2638 */
2638static int 2639static int
2639ath5k_reset(struct ath5k_softc *sc, bool stop, bool change_channel) 2640ath5k_reset(struct ath5k_softc *sc, struct ieee80211_channel *chan)
2640{ 2641{
2641 struct ath5k_hw *ah = sc->ah; 2642 struct ath5k_hw *ah = sc->ah;
2642 int ret; 2643 int ret;
2643 2644
2644 ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "resetting\n"); 2645 ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "resetting\n");
2645 2646
2646 if (stop) { 2647 if (chan) {
2647 ath5k_hw_set_imr(ah, 0); 2648 ath5k_hw_set_imr(ah, 0);
2648 ath5k_txq_cleanup(sc); 2649 ath5k_txq_cleanup(sc);
2649 ath5k_rx_stop(sc); 2650 ath5k_rx_stop(sc);
2651
2652 sc->curchan = chan;
2653 sc->curband = &sc->sbands[chan->band];
2650 } 2654 }
2651 ret = ath5k_hw_reset(ah, sc->opmode, sc->curchan, true); 2655 ret = ath5k_hw_reset(ah, sc->opmode, sc->curchan, true);
2652 if (ret) { 2656 if (ret) {
@@ -2684,7 +2688,7 @@ ath5k_reset_wake(struct ath5k_softc *sc)
2684{ 2688{
2685 int ret; 2689 int ret;
2686 2690
2687 ret = ath5k_reset(sc, true, true); 2691 ret = ath5k_reset(sc, sc->curchan);
2688 if (!ret) 2692 if (!ret)
2689 ieee80211_wake_queues(sc->hw); 2693 ieee80211_wake_queues(sc->hw);
2690 2694
diff --git a/drivers/net/wireless/ath/ath9k/pci.c b/drivers/net/wireless/ath/ath9k/pci.c
index 6dbc58580abb..168411d322a2 100644
--- a/drivers/net/wireless/ath/ath9k/pci.c
+++ b/drivers/net/wireless/ath/ath9k/pci.c
@@ -93,14 +93,14 @@ static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
93 if (pci_enable_device(pdev)) 93 if (pci_enable_device(pdev))
94 return -EIO; 94 return -EIO;
95 95
96 ret = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 96 ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
97 97
98 if (ret) { 98 if (ret) {
99 printk(KERN_ERR "ath9k: 32-bit DMA not available\n"); 99 printk(KERN_ERR "ath9k: 32-bit DMA not available\n");
100 goto bad; 100 goto bad;
101 } 101 }
102 102
103 ret = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 103 ret = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
104 104
105 if (ret) { 105 if (ret) {
106 printk(KERN_ERR "ath9k: 32-bit DMA consistent " 106 printk(KERN_ERR "ath9k: 32-bit DMA consistent "
diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c
index ee271d7f6120..7236382aeaa6 100644
--- a/drivers/net/wireless/iwlwifi/iwl-6000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-6000.c
@@ -102,8 +102,8 @@ struct iwl_cfg iwl6000_2agn_cfg = {
102 .eeprom_ver = EEPROM_5000_EEPROM_VERSION, 102 .eeprom_ver = EEPROM_5000_EEPROM_VERSION,
103 .eeprom_calib_ver = EEPROM_5000_TX_POWER_VERSION, 103 .eeprom_calib_ver = EEPROM_5000_TX_POWER_VERSION,
104 .mod_params = &iwl50_mod_params, 104 .mod_params = &iwl50_mod_params,
105 .valid_tx_ant = ANT_BC, 105 .valid_tx_ant = ANT_AB,
106 .valid_rx_ant = ANT_BC, 106 .valid_rx_ant = ANT_AB,
107 .need_pll_cfg = false, 107 .need_pll_cfg = false,
108}; 108};
109 109
@@ -118,8 +118,8 @@ struct iwl_cfg iwl6050_2agn_cfg = {
118 .eeprom_ver = EEPROM_5000_EEPROM_VERSION, 118 .eeprom_ver = EEPROM_5000_EEPROM_VERSION,
119 .eeprom_calib_ver = EEPROM_5000_TX_POWER_VERSION, 119 .eeprom_calib_ver = EEPROM_5000_TX_POWER_VERSION,
120 .mod_params = &iwl50_mod_params, 120 .mod_params = &iwl50_mod_params,
121 .valid_tx_ant = ANT_BC, 121 .valid_tx_ant = ANT_AB,
122 .valid_rx_ant = ANT_BC, 122 .valid_rx_ant = ANT_AB,
123 .need_pll_cfg = false, 123 .need_pll_cfg = false,
124}; 124};
125 125
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index 3ebf6cf53a51..596977d71c94 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -2944,7 +2944,9 @@ static struct pci_device_id iwl_hw_card_ids[] = {
2944 {IWL_PCI_DEVICE(0x0085, 0x1112, iwl6000_2ag_cfg)}, 2944 {IWL_PCI_DEVICE(0x0085, 0x1112, iwl6000_2ag_cfg)},
2945 {IWL_PCI_DEVICE(0x0082, 0x1122, iwl6000_2ag_cfg)}, 2945 {IWL_PCI_DEVICE(0x0082, 0x1122, iwl6000_2ag_cfg)},
2946 {IWL_PCI_DEVICE(0x422B, PCI_ANY_ID, iwl6000_3agn_cfg)}, 2946 {IWL_PCI_DEVICE(0x422B, PCI_ANY_ID, iwl6000_3agn_cfg)},
2947 {IWL_PCI_DEVICE(0x422C, PCI_ANY_ID, iwl6000_2agn_cfg)},
2947 {IWL_PCI_DEVICE(0x4238, PCI_ANY_ID, iwl6000_3agn_cfg)}, 2948 {IWL_PCI_DEVICE(0x4238, PCI_ANY_ID, iwl6000_3agn_cfg)},
2949 {IWL_PCI_DEVICE(0x4239, PCI_ANY_ID, iwl6000_2agn_cfg)},
2948 {IWL_PCI_DEVICE(0x0082, PCI_ANY_ID, iwl6000_2agn_cfg)}, 2950 {IWL_PCI_DEVICE(0x0082, PCI_ANY_ID, iwl6000_2agn_cfg)},
2949 {IWL_PCI_DEVICE(0x0085, PCI_ANY_ID, iwl6000_3agn_cfg)}, 2951 {IWL_PCI_DEVICE(0x0085, PCI_ANY_ID, iwl6000_3agn_cfg)},
2950 {IWL_PCI_DEVICE(0x0086, PCI_ANY_ID, iwl6050_3agn_cfg)}, 2952 {IWL_PCI_DEVICE(0x0086, PCI_ANY_ID, iwl6050_3agn_cfg)},
diff --git a/drivers/net/wireless/p54/p54pci.c b/drivers/net/wireless/p54/p54pci.c
index e3569a0a952d..b1610ea4bb3d 100644
--- a/drivers/net/wireless/p54/p54pci.c
+++ b/drivers/net/wireless/p54/p54pci.c
@@ -492,8 +492,8 @@ static int __devinit p54p_probe(struct pci_dev *pdev,
492 goto err_disable_dev; 492 goto err_disable_dev;
493 } 493 }
494 494
495 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK) || 495 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) ||
496 pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK)) { 496 pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) {
497 dev_err(&pdev->dev, "No suitable DMA available\n"); 497 dev_err(&pdev->dev, "No suitable DMA available\n");
498 goto err_free_reg; 498 goto err_free_reg;
499 } 499 }
diff --git a/drivers/net/wireless/rtl818x/rtl8187.h b/drivers/net/wireless/rtl818x/rtl8187.h
index 622196dc078e..c09bfefc70f3 100644
--- a/drivers/net/wireless/rtl818x/rtl8187.h
+++ b/drivers/net/wireless/rtl818x/rtl8187.h
@@ -127,6 +127,12 @@ struct rtl8187_priv {
127 __le64 buf; 127 __le64 buf;
128 struct sk_buff_head queue; 128 struct sk_buff_head queue;
129 } b_tx_status; /* This queue is used by both -b and non-b devices */ 129 } b_tx_status; /* This queue is used by both -b and non-b devices */
130 struct mutex io_mutex;
131 union {
132 u8 bits8;
133 __le16 bits16;
134 __le32 bits32;
135 } *io_dmabuf;
130}; 136};
131 137
132void rtl8187_write_phy(struct ieee80211_hw *dev, u8 addr, u32 data); 138void rtl8187_write_phy(struct ieee80211_hw *dev, u8 addr, u32 data);
@@ -136,10 +142,14 @@ static inline u8 rtl818x_ioread8_idx(struct rtl8187_priv *priv,
136{ 142{
137 u8 val; 143 u8 val;
138 144
145 mutex_lock(&priv->io_mutex);
139 usb_control_msg(priv->udev, usb_rcvctrlpipe(priv->udev, 0), 146 usb_control_msg(priv->udev, usb_rcvctrlpipe(priv->udev, 0),
140 RTL8187_REQ_GET_REG, RTL8187_REQT_READ, 147 RTL8187_REQ_GET_REG, RTL8187_REQT_READ,
141 (unsigned long)addr, idx & 0x03, &val, 148 (unsigned long)addr, idx & 0x03,
142 sizeof(val), HZ / 2); 149 &priv->io_dmabuf->bits8, sizeof(val), HZ / 2);
150
151 val = priv->io_dmabuf->bits8;
152 mutex_unlock(&priv->io_mutex);
143 153
144 return val; 154 return val;
145} 155}
@@ -154,10 +164,14 @@ static inline u16 rtl818x_ioread16_idx(struct rtl8187_priv *priv,
154{ 164{
155 __le16 val; 165 __le16 val;
156 166
167 mutex_lock(&priv->io_mutex);
157 usb_control_msg(priv->udev, usb_rcvctrlpipe(priv->udev, 0), 168 usb_control_msg(priv->udev, usb_rcvctrlpipe(priv->udev, 0),
158 RTL8187_REQ_GET_REG, RTL8187_REQT_READ, 169 RTL8187_REQ_GET_REG, RTL8187_REQT_READ,
159 (unsigned long)addr, idx & 0x03, &val, 170 (unsigned long)addr, idx & 0x03,
160 sizeof(val), HZ / 2); 171 &priv->io_dmabuf->bits16, sizeof(val), HZ / 2);
172
173 val = priv->io_dmabuf->bits16;
174 mutex_unlock(&priv->io_mutex);
161 175
162 return le16_to_cpu(val); 176 return le16_to_cpu(val);
163} 177}
@@ -172,10 +186,14 @@ static inline u32 rtl818x_ioread32_idx(struct rtl8187_priv *priv,
172{ 186{
173 __le32 val; 187 __le32 val;
174 188
189 mutex_lock(&priv->io_mutex);
175 usb_control_msg(priv->udev, usb_rcvctrlpipe(priv->udev, 0), 190 usb_control_msg(priv->udev, usb_rcvctrlpipe(priv->udev, 0),
176 RTL8187_REQ_GET_REG, RTL8187_REQT_READ, 191 RTL8187_REQ_GET_REG, RTL8187_REQT_READ,
177 (unsigned long)addr, idx & 0x03, &val, 192 (unsigned long)addr, idx & 0x03,
178 sizeof(val), HZ / 2); 193 &priv->io_dmabuf->bits32, sizeof(val), HZ / 2);
194
195 val = priv->io_dmabuf->bits32;
196 mutex_unlock(&priv->io_mutex);
179 197
180 return le32_to_cpu(val); 198 return le32_to_cpu(val);
181} 199}
@@ -188,10 +206,15 @@ static inline u32 rtl818x_ioread32(struct rtl8187_priv *priv, __le32 *addr)
188static inline void rtl818x_iowrite8_idx(struct rtl8187_priv *priv, 206static inline void rtl818x_iowrite8_idx(struct rtl8187_priv *priv,
189 u8 *addr, u8 val, u8 idx) 207 u8 *addr, u8 val, u8 idx)
190{ 208{
209 mutex_lock(&priv->io_mutex);
210
211 priv->io_dmabuf->bits8 = val;
191 usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0), 212 usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0),
192 RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE, 213 RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE,
193 (unsigned long)addr, idx & 0x03, &val, 214 (unsigned long)addr, idx & 0x03,
194 sizeof(val), HZ / 2); 215 &priv->io_dmabuf->bits8, sizeof(val), HZ / 2);
216
217 mutex_unlock(&priv->io_mutex);
195} 218}
196 219
197static inline void rtl818x_iowrite8(struct rtl8187_priv *priv, u8 *addr, u8 val) 220static inline void rtl818x_iowrite8(struct rtl8187_priv *priv, u8 *addr, u8 val)
@@ -202,12 +225,15 @@ static inline void rtl818x_iowrite8(struct rtl8187_priv *priv, u8 *addr, u8 val)
202static inline void rtl818x_iowrite16_idx(struct rtl8187_priv *priv, 225static inline void rtl818x_iowrite16_idx(struct rtl8187_priv *priv,
203 __le16 *addr, u16 val, u8 idx) 226 __le16 *addr, u16 val, u8 idx)
204{ 227{
205 __le16 buf = cpu_to_le16(val); 228 mutex_lock(&priv->io_mutex);
206 229
230 priv->io_dmabuf->bits16 = cpu_to_le16(val);
207 usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0), 231 usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0),
208 RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE, 232 RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE,
209 (unsigned long)addr, idx & 0x03, &buf, sizeof(buf), 233 (unsigned long)addr, idx & 0x03,
210 HZ / 2); 234 &priv->io_dmabuf->bits16, sizeof(val), HZ / 2);
235
236 mutex_unlock(&priv->io_mutex);
211} 237}
212 238
213static inline void rtl818x_iowrite16(struct rtl8187_priv *priv, __le16 *addr, 239static inline void rtl818x_iowrite16(struct rtl8187_priv *priv, __le16 *addr,
@@ -219,12 +245,15 @@ static inline void rtl818x_iowrite16(struct rtl8187_priv *priv, __le16 *addr,
219static inline void rtl818x_iowrite32_idx(struct rtl8187_priv *priv, 245static inline void rtl818x_iowrite32_idx(struct rtl8187_priv *priv,
220 __le32 *addr, u32 val, u8 idx) 246 __le32 *addr, u32 val, u8 idx)
221{ 247{
222 __le32 buf = cpu_to_le32(val); 248 mutex_lock(&priv->io_mutex);
223 249
250 priv->io_dmabuf->bits32 = cpu_to_le32(val);
224 usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0), 251 usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0),
225 RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE, 252 RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE,
226 (unsigned long)addr, idx & 0x03, &buf, sizeof(buf), 253 (unsigned long)addr, idx & 0x03,
227 HZ / 2); 254 &priv->io_dmabuf->bits32, sizeof(val), HZ / 2);
255
256 mutex_unlock(&priv->io_mutex);
228} 257}
229 258
230static inline void rtl818x_iowrite32(struct rtl8187_priv *priv, __le32 *addr, 259static inline void rtl818x_iowrite32(struct rtl8187_priv *priv, __le32 *addr,
diff --git a/drivers/net/wireless/rtl818x/rtl8187_dev.c b/drivers/net/wireless/rtl818x/rtl8187_dev.c
index 158827e50c55..6499ccc34c94 100644
--- a/drivers/net/wireless/rtl818x/rtl8187_dev.c
+++ b/drivers/net/wireless/rtl818x/rtl8187_dev.c
@@ -1326,6 +1326,14 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,
1326 priv = dev->priv; 1326 priv = dev->priv;
1327 priv->is_rtl8187b = (id->driver_info == DEVICE_RTL8187B); 1327 priv->is_rtl8187b = (id->driver_info == DEVICE_RTL8187B);
1328 1328
1329 /* allocate "DMA aware" buffer for register accesses */
1330 priv->io_dmabuf = kmalloc(sizeof(*priv->io_dmabuf), GFP_KERNEL);
1331 if (!priv->io_dmabuf) {
1332 err = -ENOMEM;
1333 goto err_free_dev;
1334 }
1335 mutex_init(&priv->io_mutex);
1336
1329 SET_IEEE80211_DEV(dev, &intf->dev); 1337 SET_IEEE80211_DEV(dev, &intf->dev);
1330 usb_set_intfdata(intf, dev); 1338 usb_set_intfdata(intf, dev);
1331 priv->udev = udev; 1339 priv->udev = udev;
@@ -1489,7 +1497,7 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,
1489 err = ieee80211_register_hw(dev); 1497 err = ieee80211_register_hw(dev);
1490 if (err) { 1498 if (err) {
1491 printk(KERN_ERR "rtl8187: Cannot register device\n"); 1499 printk(KERN_ERR "rtl8187: Cannot register device\n");
1492 goto err_free_dev; 1500 goto err_free_dmabuf;
1493 } 1501 }
1494 mutex_init(&priv->conf_mutex); 1502 mutex_init(&priv->conf_mutex);
1495 skb_queue_head_init(&priv->b_tx_status.queue); 1503 skb_queue_head_init(&priv->b_tx_status.queue);
@@ -1506,6 +1514,8 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,
1506 1514
1507 return 0; 1515 return 0;
1508 1516
1517 err_free_dmabuf:
1518 kfree(priv->io_dmabuf);
1509 err_free_dev: 1519 err_free_dev:
1510 ieee80211_free_hw(dev); 1520 ieee80211_free_hw(dev);
1511 usb_set_intfdata(intf, NULL); 1521 usb_set_intfdata(intf, NULL);
@@ -1529,6 +1539,7 @@ static void __devexit rtl8187_disconnect(struct usb_interface *intf)
1529 priv = dev->priv; 1539 priv = dev->priv;
1530 usb_reset_device(priv->udev); 1540 usb_reset_device(priv->udev);
1531 usb_put_dev(interface_to_usbdev(intf)); 1541 usb_put_dev(interface_to_usbdev(intf));
1542 kfree(priv->io_dmabuf);
1532 ieee80211_free_hw(dev); 1543 ieee80211_free_hw(dev);
1533} 1544}
1534 1545
diff --git a/drivers/net/wireless/rtl818x/rtl8187_rtl8225.c b/drivers/net/wireless/rtl818x/rtl8187_rtl8225.c
index 78df281b297a..a09819386a1e 100644
--- a/drivers/net/wireless/rtl818x/rtl8187_rtl8225.c
+++ b/drivers/net/wireless/rtl818x/rtl8187_rtl8225.c
@@ -88,9 +88,15 @@ static void rtl8225_write_8051(struct ieee80211_hw *dev, u8 addr, __le16 data)
88 rtl818x_iowrite16(priv, &priv->map->RFPinsOutput, reg80); 88 rtl818x_iowrite16(priv, &priv->map->RFPinsOutput, reg80);
89 udelay(10); 89 udelay(10);
90 90
91 mutex_lock(&priv->io_mutex);
92
93 priv->io_dmabuf->bits16 = data;
91 usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0), 94 usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0),
92 RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE, 95 RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE,
93 addr, 0x8225, &data, sizeof(data), HZ / 2); 96 addr, 0x8225, &priv->io_dmabuf->bits16, sizeof(data),
97 HZ / 2);
98
99 mutex_unlock(&priv->io_mutex);
94 100
95 rtl818x_iowrite16(priv, &priv->map->RFPinsOutput, reg80 | (1 << 2)); 101 rtl818x_iowrite16(priv, &priv->map->RFPinsOutput, reg80 | (1 << 2));
96 udelay(10); 102 udelay(10);
diff --git a/drivers/parisc/superio.c b/drivers/parisc/superio.c
index 4fa3bb2ddfe4..33e5ade774ca 100644
--- a/drivers/parisc/superio.c
+++ b/drivers/parisc/superio.c
@@ -434,7 +434,8 @@ static void __init superio_parport_init(void)
434 0 /*base_hi*/, 434 0 /*base_hi*/,
435 PAR_IRQ, 435 PAR_IRQ,
436 PARPORT_DMA_NONE /* dma */, 436 PARPORT_DMA_NONE /* dma */,
437 NULL /*struct pci_dev* */) ) 437 NULL /*struct pci_dev* */),
438 0 /* shared irq flags */ )
438 439
439 printk(KERN_WARNING PFX "Probing parallel port failed.\n"); 440 printk(KERN_WARNING PFX "Probing parallel port failed.\n");
440#endif /* CONFIG_PARPORT_PC */ 441#endif /* CONFIG_PARPORT_PC */
diff --git a/drivers/pci/access.c b/drivers/pci/access.c
index 64dd7df90e62..0f3706512686 100644
--- a/drivers/pci/access.c
+++ b/drivers/pci/access.c
@@ -87,8 +87,8 @@ EXPORT_SYMBOL(pci_read_vpd);
87 * pci_write_vpd - Write entry to Vital Product Data 87 * pci_write_vpd - Write entry to Vital Product Data
88 * @dev: pci device struct 88 * @dev: pci device struct
89 * @pos: offset in vpd space 89 * @pos: offset in vpd space
90 * @count: number of bytes to read 90 * @count: number of bytes to write
91 * @val: value to write 91 * @buf: buffer containing write data
92 * 92 *
93 */ 93 */
94ssize_t pci_write_vpd(struct pci_dev *dev, loff_t pos, size_t count, const void *buf) 94ssize_t pci_write_vpd(struct pci_dev *dev, loff_t pos, size_t count, const void *buf)
diff --git a/drivers/pci/htirq.c b/drivers/pci/htirq.c
index bf7d6ce9bbb3..6808d8333ecc 100644
--- a/drivers/pci/htirq.c
+++ b/drivers/pci/htirq.c
@@ -158,6 +158,7 @@ int ht_create_irq(struct pci_dev *dev, int idx)
158 158
159/** 159/**
160 * ht_destroy_irq - destroy an irq created with ht_create_irq 160 * ht_destroy_irq - destroy an irq created with ht_create_irq
161 * @irq: irq to be destroyed
161 * 162 *
162 * This reverses ht_create_irq removing the specified irq from 163 * This reverses ht_create_irq removing the specified irq from
163 * existence. The irq should be free before this happens. 164 * existence. The irq should be free before this happens.
diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c
index 001b328adf80..a563fbe559d0 100644
--- a/drivers/pci/intel-iommu.c
+++ b/drivers/pci/intel-iommu.c
@@ -59,6 +59,10 @@
59#define DMA_32BIT_PFN IOVA_PFN(DMA_BIT_MASK(32)) 59#define DMA_32BIT_PFN IOVA_PFN(DMA_BIT_MASK(32))
60#define DMA_64BIT_PFN IOVA_PFN(DMA_BIT_MASK(64)) 60#define DMA_64BIT_PFN IOVA_PFN(DMA_BIT_MASK(64))
61 61
62#ifndef PHYSICAL_PAGE_MASK
63#define PHYSICAL_PAGE_MASK PAGE_MASK
64#endif
65
62/* global iommu list, set NULL for ignored DMAR units */ 66/* global iommu list, set NULL for ignored DMAR units */
63static struct intel_iommu **g_iommus; 67static struct intel_iommu **g_iommus;
64 68
@@ -1216,7 +1220,7 @@ static void dmar_init_reserved_ranges(void)
1216 if (!r->flags || !(r->flags & IORESOURCE_MEM)) 1220 if (!r->flags || !(r->flags & IORESOURCE_MEM))
1217 continue; 1221 continue;
1218 addr = r->start; 1222 addr = r->start;
1219 addr &= PAGE_MASK; 1223 addr &= PHYSICAL_PAGE_MASK;
1220 size = r->end - addr; 1224 size = r->end - addr;
1221 size = PAGE_ALIGN(size); 1225 size = PAGE_ALIGN(size);
1222 iova = reserve_iova(&reserved_iova_list, IOVA_PFN(addr), 1226 iova = reserve_iova(&reserved_iova_list, IOVA_PFN(addr),
@@ -2173,7 +2177,8 @@ static dma_addr_t __intel_map_single(struct device *hwdev, phys_addr_t paddr,
2173 * is not a big problem 2177 * is not a big problem
2174 */ 2178 */
2175 ret = domain_page_mapping(domain, start_paddr, 2179 ret = domain_page_mapping(domain, start_paddr,
2176 ((u64)paddr) & PAGE_MASK, size, prot); 2180 ((u64)paddr) & PHYSICAL_PAGE_MASK,
2181 size, prot);
2177 if (ret) 2182 if (ret)
2178 goto error; 2183 goto error;
2179 2184
@@ -2463,8 +2468,8 @@ static int intel_map_sg(struct device *hwdev, struct scatterlist *sglist, int ne
2463 addr = page_to_phys(sg_page(sg)) + sg->offset; 2468 addr = page_to_phys(sg_page(sg)) + sg->offset;
2464 size = aligned_size((u64)addr, sg->length); 2469 size = aligned_size((u64)addr, sg->length);
2465 ret = domain_page_mapping(domain, start_addr + offset, 2470 ret = domain_page_mapping(domain, start_addr + offset,
2466 ((u64)addr) & PAGE_MASK, 2471 ((u64)addr) & PHYSICAL_PAGE_MASK,
2467 size, prot); 2472 size, prot);
2468 if (ret) { 2473 if (ret) {
2469 /* clear the page */ 2474 /* clear the page */
2470 dma_pte_clear_range(domain, start_addr, 2475 dma_pte_clear_range(domain, start_addr,
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
index 6f2e6295e773..362773247fbf 100644
--- a/drivers/pci/msi.c
+++ b/drivers/pci/msi.c
@@ -455,8 +455,6 @@ static int msix_capability_init(struct pci_dev *dev,
455 entry->msi_attrib.default_irq = dev->irq; 455 entry->msi_attrib.default_irq = dev->irq;
456 entry->msi_attrib.pos = pos; 456 entry->msi_attrib.pos = pos;
457 entry->mask_base = base; 457 entry->mask_base = base;
458 entry->masked = readl(base + j * PCI_MSIX_ENTRY_SIZE +
459 PCI_MSIX_ENTRY_VECTOR_CTRL_OFFSET);
460 msix_mask_irq(entry, 1); 458 msix_mask_irq(entry, 1);
461 459
462 list_add_tail(&entry->list, &dev->msi_list); 460 list_add_tail(&entry->list, &dev->msi_list);
@@ -493,6 +491,12 @@ static int msix_capability_init(struct pci_dev *dev,
493 msix_set_enable(dev, 1); 491 msix_set_enable(dev, 1);
494 dev->msix_enabled = 1; 492 dev->msix_enabled = 1;
495 493
494 list_for_each_entry(entry, &dev->msi_list, list) {
495 int vector = entry->msi_attrib.entry_nr;
496 entry->masked = readl(base + vector * PCI_MSIX_ENTRY_SIZE +
497 PCI_MSIX_ENTRY_VECTOR_CTRL_OFFSET);
498 }
499
496 return 0; 500 return 0;
497} 501}
498 502
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
index a7eb1b46a5a8..85ebd02a64a7 100644
--- a/drivers/pci/pci-sysfs.c
+++ b/drivers/pci/pci-sysfs.c
@@ -492,6 +492,7 @@ write_vpd_attr(struct kobject *kobj, struct bin_attribute *bin_attr,
492/** 492/**
493 * pci_read_legacy_io - read byte(s) from legacy I/O port space 493 * pci_read_legacy_io - read byte(s) from legacy I/O port space
494 * @kobj: kobject corresponding to file to read from 494 * @kobj: kobject corresponding to file to read from
495 * @bin_attr: struct bin_attribute for this file
495 * @buf: buffer to store results 496 * @buf: buffer to store results
496 * @off: offset into legacy I/O port space 497 * @off: offset into legacy I/O port space
497 * @count: number of bytes to read 498 * @count: number of bytes to read
@@ -517,6 +518,7 @@ pci_read_legacy_io(struct kobject *kobj, struct bin_attribute *bin_attr,
517/** 518/**
518 * pci_write_legacy_io - write byte(s) to legacy I/O port space 519 * pci_write_legacy_io - write byte(s) to legacy I/O port space
519 * @kobj: kobject corresponding to file to read from 520 * @kobj: kobject corresponding to file to read from
521 * @bin_attr: struct bin_attribute for this file
520 * @buf: buffer containing value to be written 522 * @buf: buffer containing value to be written
521 * @off: offset into legacy I/O port space 523 * @off: offset into legacy I/O port space
522 * @count: number of bytes to write 524 * @count: number of bytes to write
@@ -733,9 +735,9 @@ pci_mmap_resource_wc(struct kobject *kobj, struct bin_attribute *attr,
733 735
734/** 736/**
735 * pci_remove_resource_files - cleanup resource files 737 * pci_remove_resource_files - cleanup resource files
736 * @dev: dev to cleanup 738 * @pdev: dev to cleanup
737 * 739 *
738 * If we created resource files for @dev, remove them from sysfs and 740 * If we created resource files for @pdev, remove them from sysfs and
739 * free their resources. 741 * free their resources.
740 */ 742 */
741static void 743static void
@@ -793,9 +795,9 @@ static int pci_create_attr(struct pci_dev *pdev, int num, int write_combine)
793 795
794/** 796/**
795 * pci_create_resource_files - create resource files in sysfs for @dev 797 * pci_create_resource_files - create resource files in sysfs for @dev
796 * @dev: dev in question 798 * @pdev: dev in question
797 * 799 *
798 * Walk the resources in @dev creating files for each resource available. 800 * Walk the resources in @pdev creating files for each resource available.
799 */ 801 */
800static int pci_create_resource_files(struct pci_dev *pdev) 802static int pci_create_resource_files(struct pci_dev *pdev)
801{ 803{
@@ -829,6 +831,7 @@ void __weak pci_remove_resource_files(struct pci_dev *dev) { return; }
829/** 831/**
830 * pci_write_rom - used to enable access to the PCI ROM display 832 * pci_write_rom - used to enable access to the PCI ROM display
831 * @kobj: kernel object handle 833 * @kobj: kernel object handle
834 * @bin_attr: struct bin_attribute for this file
832 * @buf: user input 835 * @buf: user input
833 * @off: file offset 836 * @off: file offset
834 * @count: number of byte in input 837 * @count: number of byte in input
@@ -852,6 +855,7 @@ pci_write_rom(struct kobject *kobj, struct bin_attribute *bin_attr,
852/** 855/**
853 * pci_read_rom - read a PCI ROM 856 * pci_read_rom - read a PCI ROM
854 * @kobj: kernel object handle 857 * @kobj: kernel object handle
858 * @bin_attr: struct bin_attribute for this file
855 * @buf: where to put the data we read from the ROM 859 * @buf: where to put the data we read from the ROM
856 * @off: file offset 860 * @off: file offset
857 * @count: number of bytes to read 861 * @count: number of bytes to read
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 16fd0d4c3166..34bf0fdf5047 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -681,11 +681,34 @@ EXPORT_SYMBOL(pci_choose_state);
681 681
682#define PCI_EXP_SAVE_REGS 7 682#define PCI_EXP_SAVE_REGS 7
683 683
684#define pcie_cap_has_devctl(type, flags) 1
685#define pcie_cap_has_lnkctl(type, flags) \
686 ((flags & PCI_EXP_FLAGS_VERS) > 1 || \
687 (type == PCI_EXP_TYPE_ROOT_PORT || \
688 type == PCI_EXP_TYPE_ENDPOINT || \
689 type == PCI_EXP_TYPE_LEG_END))
690#define pcie_cap_has_sltctl(type, flags) \
691 ((flags & PCI_EXP_FLAGS_VERS) > 1 || \
692 ((type == PCI_EXP_TYPE_ROOT_PORT) || \
693 (type == PCI_EXP_TYPE_DOWNSTREAM && \
694 (flags & PCI_EXP_FLAGS_SLOT))))
695#define pcie_cap_has_rtctl(type, flags) \
696 ((flags & PCI_EXP_FLAGS_VERS) > 1 || \
697 (type == PCI_EXP_TYPE_ROOT_PORT || \
698 type == PCI_EXP_TYPE_RC_EC))
699#define pcie_cap_has_devctl2(type, flags) \
700 ((flags & PCI_EXP_FLAGS_VERS) > 1)
701#define pcie_cap_has_lnkctl2(type, flags) \
702 ((flags & PCI_EXP_FLAGS_VERS) > 1)
703#define pcie_cap_has_sltctl2(type, flags) \
704 ((flags & PCI_EXP_FLAGS_VERS) > 1)
705
684static int pci_save_pcie_state(struct pci_dev *dev) 706static int pci_save_pcie_state(struct pci_dev *dev)
685{ 707{
686 int pos, i = 0; 708 int pos, i = 0;
687 struct pci_cap_saved_state *save_state; 709 struct pci_cap_saved_state *save_state;
688 u16 *cap; 710 u16 *cap;
711 u16 flags;
689 712
690 pos = pci_find_capability(dev, PCI_CAP_ID_EXP); 713 pos = pci_find_capability(dev, PCI_CAP_ID_EXP);
691 if (pos <= 0) 714 if (pos <= 0)
@@ -698,13 +721,22 @@ static int pci_save_pcie_state(struct pci_dev *dev)
698 } 721 }
699 cap = (u16 *)&save_state->data[0]; 722 cap = (u16 *)&save_state->data[0];
700 723
701 pci_read_config_word(dev, pos + PCI_EXP_DEVCTL, &cap[i++]); 724 pci_read_config_word(dev, pos + PCI_EXP_FLAGS, &flags);
702 pci_read_config_word(dev, pos + PCI_EXP_LNKCTL, &cap[i++]); 725
703 pci_read_config_word(dev, pos + PCI_EXP_SLTCTL, &cap[i++]); 726 if (pcie_cap_has_devctl(dev->pcie_type, flags))
704 pci_read_config_word(dev, pos + PCI_EXP_RTCTL, &cap[i++]); 727 pci_read_config_word(dev, pos + PCI_EXP_DEVCTL, &cap[i++]);
705 pci_read_config_word(dev, pos + PCI_EXP_DEVCTL2, &cap[i++]); 728 if (pcie_cap_has_lnkctl(dev->pcie_type, flags))
706 pci_read_config_word(dev, pos + PCI_EXP_LNKCTL2, &cap[i++]); 729 pci_read_config_word(dev, pos + PCI_EXP_LNKCTL, &cap[i++]);
707 pci_read_config_word(dev, pos + PCI_EXP_SLTCTL2, &cap[i++]); 730 if (pcie_cap_has_sltctl(dev->pcie_type, flags))
731 pci_read_config_word(dev, pos + PCI_EXP_SLTCTL, &cap[i++]);
732 if (pcie_cap_has_rtctl(dev->pcie_type, flags))
733 pci_read_config_word(dev, pos + PCI_EXP_RTCTL, &cap[i++]);
734 if (pcie_cap_has_devctl2(dev->pcie_type, flags))
735 pci_read_config_word(dev, pos + PCI_EXP_DEVCTL2, &cap[i++]);
736 if (pcie_cap_has_lnkctl2(dev->pcie_type, flags))
737 pci_read_config_word(dev, pos + PCI_EXP_LNKCTL2, &cap[i++]);
738 if (pcie_cap_has_sltctl2(dev->pcie_type, flags))
739 pci_read_config_word(dev, pos + PCI_EXP_SLTCTL2, &cap[i++]);
708 740
709 return 0; 741 return 0;
710} 742}
@@ -714,6 +746,7 @@ static void pci_restore_pcie_state(struct pci_dev *dev)
714 int i = 0, pos; 746 int i = 0, pos;
715 struct pci_cap_saved_state *save_state; 747 struct pci_cap_saved_state *save_state;
716 u16 *cap; 748 u16 *cap;
749 u16 flags;
717 750
718 save_state = pci_find_saved_cap(dev, PCI_CAP_ID_EXP); 751 save_state = pci_find_saved_cap(dev, PCI_CAP_ID_EXP);
719 pos = pci_find_capability(dev, PCI_CAP_ID_EXP); 752 pos = pci_find_capability(dev, PCI_CAP_ID_EXP);
@@ -721,13 +754,22 @@ static void pci_restore_pcie_state(struct pci_dev *dev)
721 return; 754 return;
722 cap = (u16 *)&save_state->data[0]; 755 cap = (u16 *)&save_state->data[0];
723 756
724 pci_write_config_word(dev, pos + PCI_EXP_DEVCTL, cap[i++]); 757 pci_read_config_word(dev, pos + PCI_EXP_FLAGS, &flags);
725 pci_write_config_word(dev, pos + PCI_EXP_LNKCTL, cap[i++]); 758
726 pci_write_config_word(dev, pos + PCI_EXP_SLTCTL, cap[i++]); 759 if (pcie_cap_has_devctl(dev->pcie_type, flags))
727 pci_write_config_word(dev, pos + PCI_EXP_RTCTL, cap[i++]); 760 pci_write_config_word(dev, pos + PCI_EXP_DEVCTL, cap[i++]);
728 pci_write_config_word(dev, pos + PCI_EXP_DEVCTL2, cap[i++]); 761 if (pcie_cap_has_lnkctl(dev->pcie_type, flags))
729 pci_write_config_word(dev, pos + PCI_EXP_LNKCTL2, cap[i++]); 762 pci_write_config_word(dev, pos + PCI_EXP_LNKCTL, cap[i++]);
730 pci_write_config_word(dev, pos + PCI_EXP_SLTCTL2, cap[i++]); 763 if (pcie_cap_has_sltctl(dev->pcie_type, flags))
764 pci_write_config_word(dev, pos + PCI_EXP_SLTCTL, cap[i++]);
765 if (pcie_cap_has_rtctl(dev->pcie_type, flags))
766 pci_write_config_word(dev, pos + PCI_EXP_RTCTL, cap[i++]);
767 if (pcie_cap_has_devctl2(dev->pcie_type, flags))
768 pci_write_config_word(dev, pos + PCI_EXP_DEVCTL2, cap[i++]);
769 if (pcie_cap_has_lnkctl2(dev->pcie_type, flags))
770 pci_write_config_word(dev, pos + PCI_EXP_LNKCTL2, cap[i++]);
771 if (pcie_cap_has_sltctl2(dev->pcie_type, flags))
772 pci_write_config_word(dev, pos + PCI_EXP_SLTCTL2, cap[i++]);
731} 773}
732 774
733 775
diff --git a/drivers/pci/pcie/aer/aerdrv.h b/drivers/pci/pcie/aer/aerdrv.h
index c7ad68b6c6d6..aa14482a4779 100644
--- a/drivers/pci/pcie/aer/aerdrv.h
+++ b/drivers/pci/pcie/aer/aerdrv.h
@@ -95,6 +95,9 @@ struct aer_broadcast_data {
95static inline pci_ers_result_t merge_result(enum pci_ers_result orig, 95static inline pci_ers_result_t merge_result(enum pci_ers_result orig,
96 enum pci_ers_result new) 96 enum pci_ers_result new)
97{ 97{
98 if (new == PCI_ERS_RESULT_NONE)
99 return orig;
100
98 switch (orig) { 101 switch (orig) {
99 case PCI_ERS_RESULT_CAN_RECOVER: 102 case PCI_ERS_RESULT_CAN_RECOVER:
100 case PCI_ERS_RESULT_RECOVERED: 103 case PCI_ERS_RESULT_RECOVERED:
diff --git a/drivers/pci/pcie/portdrv_pci.c b/drivers/pci/pcie/portdrv_pci.c
index b924e2463f85..091ce70051e0 100644
--- a/drivers/pci/pcie/portdrv_pci.c
+++ b/drivers/pci/pcie/portdrv_pci.c
@@ -200,7 +200,7 @@ static int slot_reset_iter(struct device *device, void *data)
200 200
201static pci_ers_result_t pcie_portdrv_slot_reset(struct pci_dev *dev) 201static pci_ers_result_t pcie_portdrv_slot_reset(struct pci_dev *dev)
202{ 202{
203 pci_ers_result_t status = PCI_ERS_RESULT_NONE; 203 pci_ers_result_t status = PCI_ERS_RESULT_RECOVERED;
204 int retval; 204 int retval;
205 205
206 /* If fatal, restore cfg space for possible link reset at upstream */ 206 /* If fatal, restore cfg space for possible link reset at upstream */
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index 8eb50dffb78a..e3c3e081b834 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -1118,10 +1118,6 @@ unsigned int __devinit pci_scan_child_bus(struct pci_bus *bus)
1118 return max; 1118 return max;
1119} 1119}
1120 1120
1121void __attribute__((weak)) set_pci_bus_resources_arch_default(struct pci_bus *b)
1122{
1123}
1124
1125struct pci_bus * pci_create_bus(struct device *parent, 1121struct pci_bus * pci_create_bus(struct device *parent,
1126 int bus, struct pci_ops *ops, void *sysdata) 1122 int bus, struct pci_ops *ops, void *sysdata)
1127{ 1123{
@@ -1180,8 +1176,6 @@ struct pci_bus * pci_create_bus(struct device *parent,
1180 b->resource[0] = &ioport_resource; 1176 b->resource[0] = &ioport_resource;
1181 b->resource[1] = &iomem_resource; 1177 b->resource[1] = &iomem_resource;
1182 1178
1183 set_pci_bus_resources_arch_default(b);
1184
1185 return b; 1179 return b;
1186 1180
1187dev_create_file_err: 1181dev_create_file_err:
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index c01c1196d45e..bd4253f93d5a 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -2033,6 +2033,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS400_200, quirk_di
2033DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS480, quirk_disable_all_msi); 2033DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS480, quirk_disable_all_msi);
2034DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3336, quirk_disable_all_msi); 2034DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3336, quirk_disable_all_msi);
2035DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3351, quirk_disable_all_msi); 2035DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3351, quirk_disable_all_msi);
2036DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3364, quirk_disable_all_msi);
2036 2037
2037/* Disable MSI on chipsets that are known to not support it */ 2038/* Disable MSI on chipsets that are known to not support it */
2038static void __devinit quirk_disable_msi(struct pci_dev *dev) 2039static void __devinit quirk_disable_msi(struct pci_dev *dev)
diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
index 8d9da9d30a61..a00f85471b6e 100644
--- a/drivers/pci/setup-bus.c
+++ b/drivers/pci/setup-bus.c
@@ -536,11 +536,13 @@ static void pci_bus_dump_res(struct pci_bus *bus)
536 536
537 for (i = 0; i < PCI_BUS_NUM_RESOURCES; i++) { 537 for (i = 0; i < PCI_BUS_NUM_RESOURCES; i++) {
538 struct resource *res = bus->resource[i]; 538 struct resource *res = bus->resource[i];
539 if (!res) 539 if (!res || !res->end)
540 continue; 540 continue;
541 541
542 dev_printk(KERN_DEBUG, &bus->dev, "resource %d %s %pR\n", i, 542 dev_printk(KERN_DEBUG, &bus->dev, "resource %d %s %pR\n", i,
543 (res->flags & IORESOURCE_IO) ? "io: " : "mem:", res); 543 (res->flags & IORESOURCE_IO) ? "io: " :
544 ((res->flags & IORESOURCE_PREFETCH)? "pref mem":"mem:"),
545 res);
544 } 546 }
545} 547}
546 548
diff --git a/drivers/pci/slot.c b/drivers/pci/slot.c
index 21189447e545..fe95ce20bcbd 100644
--- a/drivers/pci/slot.c
+++ b/drivers/pci/slot.c
@@ -264,8 +264,8 @@ EXPORT_SYMBOL_GPL(pci_create_slot);
264 264
265/** 265/**
266 * pci_renumber_slot - update %struct pci_slot -> number 266 * pci_renumber_slot - update %struct pci_slot -> number
267 * @slot - %struct pci_slot to update 267 * @slot: &struct pci_slot to update
268 * @slot_nr - new number for slot 268 * @slot_nr: new number for slot
269 * 269 *
270 * The primary purpose of this interface is to allow callers who earlier 270 * The primary purpose of this interface is to allow callers who earlier
271 * created a placeholder slot in pci_create_slot() by passing a -1 as 271 * created a placeholder slot in pci_create_slot() by passing a -1 as
diff --git a/drivers/pcmcia/pxa2xx_sharpsl.c b/drivers/pcmcia/pxa2xx_sharpsl.c
index 1cd02f5a23a0..bc43f78f6f0b 100644
--- a/drivers/pcmcia/pxa2xx_sharpsl.c
+++ b/drivers/pcmcia/pxa2xx_sharpsl.c
@@ -255,6 +255,9 @@ static int __init sharpsl_pcmcia_init(void)
255{ 255{
256 int ret; 256 int ret;
257 257
258 if (!platform_scoop_config)
259 return -ENODEV;
260
258 sharpsl_pcmcia_ops.nr = platform_scoop_config->num_devs; 261 sharpsl_pcmcia_ops.nr = platform_scoop_config->num_devs;
259 sharpsl_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1); 262 sharpsl_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1);
260 263
diff --git a/drivers/platform/x86/asus-laptop.c b/drivers/platform/x86/asus-laptop.c
index eeafc6c0160d..bfc1a8892a32 100644
--- a/drivers/platform/x86/asus-laptop.c
+++ b/drivers/platform/x86/asus-laptop.c
@@ -269,16 +269,16 @@ static struct key_entry asus_keymap[] = {
269 {KE_KEY, 0x34, KEY_SWITCHVIDEOMODE}, 269 {KE_KEY, 0x34, KEY_SWITCHVIDEOMODE},
270 {KE_KEY, 0x40, KEY_PREVIOUSSONG}, 270 {KE_KEY, 0x40, KEY_PREVIOUSSONG},
271 {KE_KEY, 0x41, KEY_NEXTSONG}, 271 {KE_KEY, 0x41, KEY_NEXTSONG},
272 {KE_KEY, 0x43, KEY_STOP}, 272 {KE_KEY, 0x43, KEY_STOPCD},
273 {KE_KEY, 0x45, KEY_PLAYPAUSE}, 273 {KE_KEY, 0x45, KEY_PLAYPAUSE},
274 {KE_KEY, 0x50, KEY_EMAIL}, 274 {KE_KEY, 0x50, KEY_EMAIL},
275 {KE_KEY, 0x51, KEY_WWW}, 275 {KE_KEY, 0x51, KEY_WWW},
276 {KE_KEY, 0x5C, BTN_EXTRA}, /* Performance */ 276 {KE_KEY, 0x5C, KEY_SCREENLOCK}, /* Screenlock */
277 {KE_KEY, 0x5D, KEY_WLAN}, 277 {KE_KEY, 0x5D, KEY_WLAN},
278 {KE_KEY, 0x61, KEY_SWITCHVIDEOMODE}, 278 {KE_KEY, 0x61, KEY_SWITCHVIDEOMODE},
279 {KE_KEY, 0x6B, BTN_TOUCH}, /* Lock Mouse */ 279 {KE_KEY, 0x6B, BTN_TOUCH}, /* Lock Mouse */
280 {KE_KEY, 0x82, KEY_CAMERA}, 280 {KE_KEY, 0x82, KEY_CAMERA},
281 {KE_KEY, 0x8A, KEY_TV}, 281 {KE_KEY, 0x8A, KEY_PROG1},
282 {KE_KEY, 0x95, KEY_MEDIA}, 282 {KE_KEY, 0x95, KEY_MEDIA},
283 {KE_KEY, 0x99, KEY_PHONE}, 283 {KE_KEY, 0x99, KEY_PHONE},
284 {KE_END, 0}, 284 {KE_END, 0},
diff --git a/drivers/platform/x86/eeepc-laptop.c b/drivers/platform/x86/eeepc-laptop.c
index 6f54fd1757cd..353a898c3693 100644
--- a/drivers/platform/x86/eeepc-laptop.c
+++ b/drivers/platform/x86/eeepc-laptop.c
@@ -158,6 +158,7 @@ enum { KE_KEY, KE_END };
158static struct key_entry eeepc_keymap[] = { 158static struct key_entry eeepc_keymap[] = {
159 /* Sleep already handled via generic ACPI code */ 159 /* Sleep already handled via generic ACPI code */
160 {KE_KEY, 0x10, KEY_WLAN }, 160 {KE_KEY, 0x10, KEY_WLAN },
161 {KE_KEY, 0x11, KEY_WLAN },
161 {KE_KEY, 0x12, KEY_PROG1 }, 162 {KE_KEY, 0x12, KEY_PROG1 },
162 {KE_KEY, 0x13, KEY_MUTE }, 163 {KE_KEY, 0x13, KEY_MUTE },
163 {KE_KEY, 0x14, KEY_VOLUMEDOWN }, 164 {KE_KEY, 0x14, KEY_VOLUMEDOWN },
@@ -166,6 +167,8 @@ static struct key_entry eeepc_keymap[] = {
166 {KE_KEY, 0x1b, KEY_ZOOM }, 167 {KE_KEY, 0x1b, KEY_ZOOM },
167 {KE_KEY, 0x1c, KEY_PROG2 }, 168 {KE_KEY, 0x1c, KEY_PROG2 },
168 {KE_KEY, 0x1d, KEY_PROG3 }, 169 {KE_KEY, 0x1d, KEY_PROG3 },
170 {KE_KEY, NOTIFY_BRN_MIN, KEY_BRIGHTNESSDOWN },
171 {KE_KEY, NOTIFY_BRN_MIN + 2, KEY_BRIGHTNESSUP },
169 {KE_KEY, 0x30, KEY_SWITCHVIDEOMODE }, 172 {KE_KEY, 0x30, KEY_SWITCHVIDEOMODE },
170 {KE_KEY, 0x31, KEY_SWITCHVIDEOMODE }, 173 {KE_KEY, 0x31, KEY_SWITCHVIDEOMODE },
171 {KE_KEY, 0x32, KEY_SWITCHVIDEOMODE }, 174 {KE_KEY, 0x32, KEY_SWITCHVIDEOMODE },
@@ -381,11 +384,13 @@ static ssize_t show_sys_acpi(int cm, char *buf)
381EEEPC_CREATE_DEVICE_ATTR(camera, CM_ASL_CAMERA); 384EEEPC_CREATE_DEVICE_ATTR(camera, CM_ASL_CAMERA);
382EEEPC_CREATE_DEVICE_ATTR(cardr, CM_ASL_CARDREADER); 385EEEPC_CREATE_DEVICE_ATTR(cardr, CM_ASL_CARDREADER);
383EEEPC_CREATE_DEVICE_ATTR(disp, CM_ASL_DISPLAYSWITCH); 386EEEPC_CREATE_DEVICE_ATTR(disp, CM_ASL_DISPLAYSWITCH);
387EEEPC_CREATE_DEVICE_ATTR(cpufv, CM_ASL_CPUFV);
384 388
385static struct attribute *platform_attributes[] = { 389static struct attribute *platform_attributes[] = {
386 &dev_attr_camera.attr, 390 &dev_attr_camera.attr,
387 &dev_attr_cardr.attr, 391 &dev_attr_cardr.attr,
388 &dev_attr_disp.attr, 392 &dev_attr_disp.attr,
393 &dev_attr_cpufv.attr,
389 NULL 394 NULL
390}; 395};
391 396
@@ -512,15 +517,21 @@ static int eeepc_hotk_check(void)
512 return 0; 517 return 0;
513} 518}
514 519
515static void notify_brn(void) 520static int notify_brn(void)
516{ 521{
522 /* returns the *previous* brightness, or -1 */
517 struct backlight_device *bd = eeepc_backlight_device; 523 struct backlight_device *bd = eeepc_backlight_device;
518 if (bd) 524 if (bd) {
525 int old = bd->props.brightness;
519 bd->props.brightness = read_brightness(bd); 526 bd->props.brightness = read_brightness(bd);
527 return old;
528 }
529 return -1;
520} 530}
521 531
522static void eeepc_rfkill_notify(acpi_handle handle, u32 event, void *data) 532static void eeepc_rfkill_notify(acpi_handle handle, u32 event, void *data)
523{ 533{
534 enum rfkill_state state;
524 struct pci_dev *dev; 535 struct pci_dev *dev;
525 struct pci_bus *bus = pci_find_bus(0, 1); 536 struct pci_bus *bus = pci_find_bus(0, 1);
526 537
@@ -532,7 +543,9 @@ static void eeepc_rfkill_notify(acpi_handle handle, u32 event, void *data)
532 return; 543 return;
533 } 544 }
534 545
535 if (get_acpi(CM_ASL_WLAN) == 1) { 546 eeepc_wlan_rfkill_state(ehotk->eeepc_wlan_rfkill, &state);
547
548 if (state == RFKILL_STATE_UNBLOCKED) {
536 dev = pci_get_slot(bus, 0); 549 dev = pci_get_slot(bus, 0);
537 if (dev) { 550 if (dev) {
538 /* Device already present */ 551 /* Device already present */
@@ -552,23 +565,41 @@ static void eeepc_rfkill_notify(acpi_handle handle, u32 event, void *data)
552 pci_dev_put(dev); 565 pci_dev_put(dev);
553 } 566 }
554 } 567 }
568
569 rfkill_force_state(ehotk->eeepc_wlan_rfkill, state);
555} 570}
556 571
557static void eeepc_hotk_notify(acpi_handle handle, u32 event, void *data) 572static void eeepc_hotk_notify(acpi_handle handle, u32 event, void *data)
558{ 573{
559 static struct key_entry *key; 574 static struct key_entry *key;
560 u16 count; 575 u16 count;
576 int brn = -ENODEV;
561 577
562 if (!ehotk) 578 if (!ehotk)
563 return; 579 return;
564 if (event >= NOTIFY_BRN_MIN && event <= NOTIFY_BRN_MAX) 580 if (event >= NOTIFY_BRN_MIN && event <= NOTIFY_BRN_MAX)
565 notify_brn(); 581 brn = notify_brn();
566 count = ehotk->event_count[event % 128]++; 582 count = ehotk->event_count[event % 128]++;
567 acpi_bus_generate_proc_event(ehotk->device, event, count); 583 acpi_bus_generate_proc_event(ehotk->device, event, count);
568 acpi_bus_generate_netlink_event(ehotk->device->pnp.device_class, 584 acpi_bus_generate_netlink_event(ehotk->device->pnp.device_class,
569 dev_name(&ehotk->device->dev), event, 585 dev_name(&ehotk->device->dev), event,
570 count); 586 count);
571 if (ehotk->inputdev) { 587 if (ehotk->inputdev) {
588 if (brn != -ENODEV) {
589 /* brightness-change events need special
590 * handling for conversion to key events
591 */
592 if (brn < 0)
593 brn = event;
594 else
595 brn += NOTIFY_BRN_MIN;
596 if (event < brn)
597 event = NOTIFY_BRN_MIN; /* brightness down */
598 else if (event > brn)
599 event = NOTIFY_BRN_MIN + 2; /* ... up */
600 else
601 event = NOTIFY_BRN_MIN + 1; /* ... unchanged */
602 }
572 key = eepc_get_entry_by_scancode(event); 603 key = eepc_get_entry_by_scancode(event);
573 if (key) { 604 if (key) {
574 switch (key->type) { 605 switch (key->type) {
@@ -649,6 +680,9 @@ static int eeepc_hotk_add(struct acpi_device *device)
649 if (ACPI_FAILURE(status)) 680 if (ACPI_FAILURE(status))
650 printk(EEEPC_ERR "Error installing notify handler\n"); 681 printk(EEEPC_ERR "Error installing notify handler\n");
651 682
683 eeepc_register_rfkill_notifier("\\_SB.PCI0.P0P6");
684 eeepc_register_rfkill_notifier("\\_SB.PCI0.P0P7");
685
652 if (get_acpi(CM_ASL_WLAN) != -1) { 686 if (get_acpi(CM_ASL_WLAN) != -1) {
653 ehotk->eeepc_wlan_rfkill = rfkill_allocate(&device->dev, 687 ehotk->eeepc_wlan_rfkill = rfkill_allocate(&device->dev,
654 RFKILL_TYPE_WLAN); 688 RFKILL_TYPE_WLAN);
@@ -704,9 +738,6 @@ static int eeepc_hotk_add(struct acpi_device *device)
704 goto bluetooth_fail; 738 goto bluetooth_fail;
705 } 739 }
706 740
707 eeepc_register_rfkill_notifier("\\_SB.PCI0.P0P6");
708 eeepc_register_rfkill_notifier("\\_SB.PCI0.P0P7");
709
710 return 0; 741 return 0;
711 742
712 bluetooth_fail: 743 bluetooth_fail:
@@ -717,6 +748,8 @@ static int eeepc_hotk_add(struct acpi_device *device)
717 wlan_fail: 748 wlan_fail:
718 if (ehotk->eeepc_wlan_rfkill) 749 if (ehotk->eeepc_wlan_rfkill)
719 rfkill_free(ehotk->eeepc_wlan_rfkill); 750 rfkill_free(ehotk->eeepc_wlan_rfkill);
751 eeepc_unregister_rfkill_notifier("\\_SB.PCI0.P0P6");
752 eeepc_unregister_rfkill_notifier("\\_SB.PCI0.P0P7");
720 ehotk_fail: 753 ehotk_fail:
721 kfree(ehotk); 754 kfree(ehotk);
722 ehotk = NULL; 755 ehotk = NULL;
diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c
index 184e99e72684..f1963b05175b 100644
--- a/drivers/platform/x86/sony-laptop.c
+++ b/drivers/platform/x86/sony-laptop.c
@@ -317,7 +317,8 @@ static void sony_laptop_report_input_event(u8 event)
317 struct input_dev *key_dev = sony_laptop_input.key_dev; 317 struct input_dev *key_dev = sony_laptop_input.key_dev;
318 struct sony_laptop_keypress kp = { NULL }; 318 struct sony_laptop_keypress kp = { NULL };
319 319
320 if (event == SONYPI_EVENT_FNKEY_RELEASED) { 320 if (event == SONYPI_EVENT_FNKEY_RELEASED ||
321 event == SONYPI_EVENT_ANYBUTTON_RELEASED) {
321 /* Nothing, not all VAIOs generate this event */ 322 /* Nothing, not all VAIOs generate this event */
322 return; 323 return;
323 } 324 }
@@ -905,7 +906,6 @@ static struct sony_nc_event sony_127_events[] = {
905 { 0x05, SONYPI_EVENT_ANYBUTTON_RELEASED }, 906 { 0x05, SONYPI_EVENT_ANYBUTTON_RELEASED },
906 { 0x86, SONYPI_EVENT_PKEY_P5 }, 907 { 0x86, SONYPI_EVENT_PKEY_P5 },
907 { 0x06, SONYPI_EVENT_ANYBUTTON_RELEASED }, 908 { 0x06, SONYPI_EVENT_ANYBUTTON_RELEASED },
908 { 0x06, SONYPI_EVENT_ANYBUTTON_RELEASED },
909 { 0x87, SONYPI_EVENT_SETTINGKEY_PRESSED }, 909 { 0x87, SONYPI_EVENT_SETTINGKEY_PRESSED },
910 { 0x07, SONYPI_EVENT_ANYBUTTON_RELEASED }, 910 { 0x07, SONYPI_EVENT_ANYBUTTON_RELEASED },
911 { 0, 0 }, 911 { 0, 0 },
@@ -1004,6 +1004,7 @@ static int sony_nc_function_setup(struct acpi_device *device)
1004 sony_call_snc_handle(0x0100, 0, &result); 1004 sony_call_snc_handle(0x0100, 0, &result);
1005 sony_call_snc_handle(0x0101, 0, &result); 1005 sony_call_snc_handle(0x0101, 0, &result);
1006 sony_call_snc_handle(0x0102, 0x100, &result); 1006 sony_call_snc_handle(0x0102, 0x100, &result);
1007 sony_call_snc_handle(0x0127, 0, &result);
1007 1008
1008 return 0; 1009 return 0;
1009} 1010}
@@ -1040,7 +1041,7 @@ static int sony_nc_resume(struct acpi_device *device)
1040 1041
1041 /* set the last requested brightness level */ 1042 /* set the last requested brightness level */
1042 if (sony_backlight_device && 1043 if (sony_backlight_device &&
1043 !sony_backlight_update_status(sony_backlight_device)) 1044 sony_backlight_update_status(sony_backlight_device) < 0)
1044 printk(KERN_WARNING DRV_PFX "unable to restore brightness level\n"); 1045 printk(KERN_WARNING DRV_PFX "unable to restore brightness level\n");
1045 1046
1046 return 0; 1047 return 0;
@@ -1101,8 +1102,11 @@ static int sony_nc_setup_wifi_rfkill(struct acpi_device *device)
1101 err = rfkill_register(sony_wifi_rfkill); 1102 err = rfkill_register(sony_wifi_rfkill);
1102 if (err) 1103 if (err)
1103 rfkill_free(sony_wifi_rfkill); 1104 rfkill_free(sony_wifi_rfkill);
1104 else 1105 else {
1105 sony_rfkill_devices[SONY_WIFI] = sony_wifi_rfkill; 1106 sony_rfkill_devices[SONY_WIFI] = sony_wifi_rfkill;
1107 sony_nc_rfkill_set(sony_wifi_rfkill->data,
1108 RFKILL_STATE_UNBLOCKED);
1109 }
1106 return err; 1110 return err;
1107} 1111}
1108 1112
@@ -1122,8 +1126,11 @@ static int sony_nc_setup_bluetooth_rfkill(struct acpi_device *device)
1122 err = rfkill_register(sony_bluetooth_rfkill); 1126 err = rfkill_register(sony_bluetooth_rfkill);
1123 if (err) 1127 if (err)
1124 rfkill_free(sony_bluetooth_rfkill); 1128 rfkill_free(sony_bluetooth_rfkill);
1125 else 1129 else {
1126 sony_rfkill_devices[SONY_BLUETOOTH] = sony_bluetooth_rfkill; 1130 sony_rfkill_devices[SONY_BLUETOOTH] = sony_bluetooth_rfkill;
1131 sony_nc_rfkill_set(sony_bluetooth_rfkill->data,
1132 RFKILL_STATE_UNBLOCKED);
1133 }
1127 return err; 1134 return err;
1128} 1135}
1129 1136
@@ -1142,8 +1149,11 @@ static int sony_nc_setup_wwan_rfkill(struct acpi_device *device)
1142 err = rfkill_register(sony_wwan_rfkill); 1149 err = rfkill_register(sony_wwan_rfkill);
1143 if (err) 1150 if (err)
1144 rfkill_free(sony_wwan_rfkill); 1151 rfkill_free(sony_wwan_rfkill);
1145 else 1152 else {
1146 sony_rfkill_devices[SONY_WWAN] = sony_wwan_rfkill; 1153 sony_rfkill_devices[SONY_WWAN] = sony_wwan_rfkill;
1154 sony_nc_rfkill_set(sony_wwan_rfkill->data,
1155 RFKILL_STATE_UNBLOCKED);
1156 }
1147 return err; 1157 return err;
1148} 1158}
1149 1159
@@ -1162,8 +1172,11 @@ static int sony_nc_setup_wimax_rfkill(struct acpi_device *device)
1162 err = rfkill_register(sony_wimax_rfkill); 1172 err = rfkill_register(sony_wimax_rfkill);
1163 if (err) 1173 if (err)
1164 rfkill_free(sony_wimax_rfkill); 1174 rfkill_free(sony_wimax_rfkill);
1165 else 1175 else {
1166 sony_rfkill_devices[SONY_WIMAX] = sony_wimax_rfkill; 1176 sony_rfkill_devices[SONY_WIMAX] = sony_wimax_rfkill;
1177 sony_nc_rfkill_set(sony_wimax_rfkill->data,
1178 RFKILL_STATE_UNBLOCKED);
1179 }
1167 return err; 1180 return err;
1168} 1181}
1169 1182
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index a40b075743d9..912be65b6261 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -21,7 +21,7 @@
21 * 02110-1301, USA. 21 * 02110-1301, USA.
22 */ 22 */
23 23
24#define TPACPI_VERSION "0.22" 24#define TPACPI_VERSION "0.23"
25#define TPACPI_SYSFS_VERSION 0x020300 25#define TPACPI_SYSFS_VERSION 0x020300
26 26
27/* 27/*
@@ -303,11 +303,17 @@ static u32 dbg_level;
303 303
304static struct workqueue_struct *tpacpi_wq; 304static struct workqueue_struct *tpacpi_wq;
305 305
306enum led_status_t {
307 TPACPI_LED_OFF = 0,
308 TPACPI_LED_ON,
309 TPACPI_LED_BLINK,
310};
311
306/* Special LED class that can defer work */ 312/* Special LED class that can defer work */
307struct tpacpi_led_classdev { 313struct tpacpi_led_classdev {
308 struct led_classdev led_classdev; 314 struct led_classdev led_classdev;
309 struct work_struct work; 315 struct work_struct work;
310 enum led_brightness new_brightness; 316 enum led_status_t new_state;
311 unsigned int led; 317 unsigned int led;
312}; 318};
313 319
@@ -2946,12 +2952,18 @@ static int hotkey_read(char *p)
2946 return len; 2952 return len;
2947} 2953}
2948 2954
2949static void hotkey_enabledisable_warn(void) 2955static void hotkey_enabledisable_warn(bool enable)
2950{ 2956{
2951 tpacpi_log_usertask("procfs hotkey enable/disable"); 2957 tpacpi_log_usertask("procfs hotkey enable/disable");
2952 WARN(1, TPACPI_WARN 2958 if (!WARN((tpacpi_lifecycle == TPACPI_LIFE_RUNNING || !enable),
2953 "hotkey enable/disable functionality has been " 2959 TPACPI_WARN
2954 "removed from the driver. Hotkeys are always enabled.\n"); 2960 "hotkey enable/disable functionality has been "
2961 "removed from the driver. Hotkeys are always "
2962 "enabled\n"))
2963 printk(TPACPI_ERR
2964 "Please remove the hotkey=enable module "
2965 "parameter, it is deprecated. Hotkeys are always "
2966 "enabled\n");
2955} 2967}
2956 2968
2957static int hotkey_write(char *buf) 2969static int hotkey_write(char *buf)
@@ -2971,9 +2983,9 @@ static int hotkey_write(char *buf)
2971 res = 0; 2983 res = 0;
2972 while ((cmd = next_cmd(&buf))) { 2984 while ((cmd = next_cmd(&buf))) {
2973 if (strlencmp(cmd, "enable") == 0) { 2985 if (strlencmp(cmd, "enable") == 0) {
2974 hotkey_enabledisable_warn(); 2986 hotkey_enabledisable_warn(1);
2975 } else if (strlencmp(cmd, "disable") == 0) { 2987 } else if (strlencmp(cmd, "disable") == 0) {
2976 hotkey_enabledisable_warn(); 2988 hotkey_enabledisable_warn(0);
2977 res = -EPERM; 2989 res = -EPERM;
2978 } else if (strlencmp(cmd, "reset") == 0) { 2990 } else if (strlencmp(cmd, "reset") == 0) {
2979 mask = hotkey_orig_mask; 2991 mask = hotkey_orig_mask;
@@ -4207,7 +4219,7 @@ static void light_set_status_worker(struct work_struct *work)
4207 container_of(work, struct tpacpi_led_classdev, work); 4219 container_of(work, struct tpacpi_led_classdev, work);
4208 4220
4209 if (likely(tpacpi_lifecycle == TPACPI_LIFE_RUNNING)) 4221 if (likely(tpacpi_lifecycle == TPACPI_LIFE_RUNNING))
4210 light_set_status((data->new_brightness != LED_OFF)); 4222 light_set_status((data->new_state != TPACPI_LED_OFF));
4211} 4223}
4212 4224
4213static void light_sysfs_set(struct led_classdev *led_cdev, 4225static void light_sysfs_set(struct led_classdev *led_cdev,
@@ -4217,7 +4229,8 @@ static void light_sysfs_set(struct led_classdev *led_cdev,
4217 container_of(led_cdev, 4229 container_of(led_cdev,
4218 struct tpacpi_led_classdev, 4230 struct tpacpi_led_classdev,
4219 led_classdev); 4231 led_classdev);
4220 data->new_brightness = brightness; 4232 data->new_state = (brightness != LED_OFF) ?
4233 TPACPI_LED_ON : TPACPI_LED_OFF;
4221 queue_work(tpacpi_wq, &data->work); 4234 queue_work(tpacpi_wq, &data->work);
4222} 4235}
4223 4236
@@ -4724,12 +4737,6 @@ enum { /* For TPACPI_LED_OLD */
4724 TPACPI_LED_EC_HLMS = 0x0e, /* EC reg to select led to command */ 4737 TPACPI_LED_EC_HLMS = 0x0e, /* EC reg to select led to command */
4725}; 4738};
4726 4739
4727enum led_status_t {
4728 TPACPI_LED_OFF = 0,
4729 TPACPI_LED_ON,
4730 TPACPI_LED_BLINK,
4731};
4732
4733static enum led_access_mode led_supported; 4740static enum led_access_mode led_supported;
4734 4741
4735TPACPI_HANDLE(led, ec, "SLED", /* 570 */ 4742TPACPI_HANDLE(led, ec, "SLED", /* 570 */
@@ -4841,23 +4848,13 @@ static int led_set_status(const unsigned int led,
4841 return rc; 4848 return rc;
4842} 4849}
4843 4850
4844static void led_sysfs_set_status(unsigned int led,
4845 enum led_brightness brightness)
4846{
4847 led_set_status(led,
4848 (brightness == LED_OFF) ?
4849 TPACPI_LED_OFF :
4850 (tpacpi_led_state_cache[led] == TPACPI_LED_BLINK) ?
4851 TPACPI_LED_BLINK : TPACPI_LED_ON);
4852}
4853
4854static void led_set_status_worker(struct work_struct *work) 4851static void led_set_status_worker(struct work_struct *work)
4855{ 4852{
4856 struct tpacpi_led_classdev *data = 4853 struct tpacpi_led_classdev *data =
4857 container_of(work, struct tpacpi_led_classdev, work); 4854 container_of(work, struct tpacpi_led_classdev, work);
4858 4855
4859 if (likely(tpacpi_lifecycle == TPACPI_LIFE_RUNNING)) 4856 if (likely(tpacpi_lifecycle == TPACPI_LIFE_RUNNING))
4860 led_sysfs_set_status(data->led, data->new_brightness); 4857 led_set_status(data->led, data->new_state);
4861} 4858}
4862 4859
4863static void led_sysfs_set(struct led_classdev *led_cdev, 4860static void led_sysfs_set(struct led_classdev *led_cdev,
@@ -4866,7 +4863,13 @@ static void led_sysfs_set(struct led_classdev *led_cdev,
4866 struct tpacpi_led_classdev *data = container_of(led_cdev, 4863 struct tpacpi_led_classdev *data = container_of(led_cdev,
4867 struct tpacpi_led_classdev, led_classdev); 4864 struct tpacpi_led_classdev, led_classdev);
4868 4865
4869 data->new_brightness = brightness; 4866 if (brightness == LED_OFF)
4867 data->new_state = TPACPI_LED_OFF;
4868 else if (tpacpi_led_state_cache[data->led] != TPACPI_LED_BLINK)
4869 data->new_state = TPACPI_LED_ON;
4870 else
4871 data->new_state = TPACPI_LED_BLINK;
4872
4870 queue_work(tpacpi_wq, &data->work); 4873 queue_work(tpacpi_wq, &data->work);
4871} 4874}
4872 4875
@@ -4884,7 +4887,7 @@ static int led_sysfs_blink_set(struct led_classdev *led_cdev,
4884 } else if ((*delay_on != 500) || (*delay_off != 500)) 4887 } else if ((*delay_on != 500) || (*delay_off != 500))
4885 return -EINVAL; 4888 return -EINVAL;
4886 4889
4887 data->new_brightness = TPACPI_LED_BLINK; 4890 data->new_state = TPACPI_LED_BLINK;
4888 queue_work(tpacpi_wq, &data->work); 4891 queue_work(tpacpi_wq, &data->work);
4889 4892
4890 return 0; 4893 return 0;
@@ -7858,6 +7861,15 @@ static int __init thinkpad_acpi_module_init(void)
7858MODULE_ALIAS(TPACPI_DRVR_SHORTNAME); 7861MODULE_ALIAS(TPACPI_DRVR_SHORTNAME);
7859 7862
7860/* 7863/*
7864 * This will autoload the driver in almost every ThinkPad
7865 * in widespread use.
7866 *
7867 * Only _VERY_ old models, like the 240, 240x and 570 lack
7868 * the HKEY event interface.
7869 */
7870MODULE_DEVICE_TABLE(acpi, ibm_htk_device_ids);
7871
7872/*
7861 * DMI matching for module autoloading 7873 * DMI matching for module autoloading
7862 * 7874 *
7863 * See http://thinkwiki.org/wiki/List_of_DMI_IDs 7875 * See http://thinkwiki.org/wiki/List_of_DMI_IDs
@@ -7869,18 +7881,13 @@ MODULE_ALIAS(TPACPI_DRVR_SHORTNAME);
7869#define IBM_BIOS_MODULE_ALIAS(__type) \ 7881#define IBM_BIOS_MODULE_ALIAS(__type) \
7870 MODULE_ALIAS("dmi:bvnIBM:bvr" __type "ET??WW*") 7882 MODULE_ALIAS("dmi:bvnIBM:bvr" __type "ET??WW*")
7871 7883
7872/* Non-ancient thinkpads */
7873MODULE_ALIAS("dmi:bvnIBM:*:svnIBM:*:pvrThinkPad*:rvnIBM:*");
7874MODULE_ALIAS("dmi:bvnLENOVO:*:svnLENOVO:*:pvrThinkPad*:rvnLENOVO:*");
7875
7876/* Ancient thinkpad BIOSes have to be identified by 7884/* Ancient thinkpad BIOSes have to be identified by
7877 * BIOS type or model number, and there are far less 7885 * BIOS type or model number, and there are far less
7878 * BIOS types than model numbers... */ 7886 * BIOS types than model numbers... */
7879IBM_BIOS_MODULE_ALIAS("I[BDHIMNOTWVYZ]"); 7887IBM_BIOS_MODULE_ALIAS("I[MU]"); /* 570, 570e */
7880IBM_BIOS_MODULE_ALIAS("1[0368A-GIKM-PST]");
7881IBM_BIOS_MODULE_ALIAS("K[UX-Z]");
7882 7888
7883MODULE_AUTHOR("Borislav Deianov, Henrique de Moraes Holschuh"); 7889MODULE_AUTHOR("Borislav Deianov <borislav@users.sf.net>");
7890MODULE_AUTHOR("Henrique de Moraes Holschuh <hmh@hmh.eng.br>");
7884MODULE_DESCRIPTION(TPACPI_DESC); 7891MODULE_DESCRIPTION(TPACPI_DESC);
7885MODULE_VERSION(TPACPI_VERSION); 7892MODULE_VERSION(TPACPI_VERSION);
7886MODULE_LICENSE("GPL"); 7893MODULE_LICENSE("GPL");
diff --git a/drivers/pnp/pnpacpi/core.c b/drivers/pnp/pnpacpi/core.c
index 9a3a682c6981..9496494f340e 100644
--- a/drivers/pnp/pnpacpi/core.c
+++ b/drivers/pnp/pnpacpi/core.c
@@ -110,11 +110,9 @@ static int pnpacpi_disable_resources(struct pnp_dev *dev)
110 110
111 /* acpi_unregister_gsi(pnp_irq(dev, 0)); */ 111 /* acpi_unregister_gsi(pnp_irq(dev, 0)); */
112 ret = 0; 112 ret = 0;
113 if (acpi_bus_power_manageable(handle)) { 113 if (acpi_bus_power_manageable(handle))
114 ret = acpi_bus_set_power(handle, ACPI_STATE_D3); 114 acpi_bus_set_power(handle, ACPI_STATE_D3);
115 if (ret) 115 /* continue even if acpi_bus_set_power() fails */
116 return ret;
117 }
118 if (ACPI_FAILURE(acpi_evaluate_object(handle, "_DIS", NULL, NULL))) 116 if (ACPI_FAILURE(acpi_evaluate_object(handle, "_DIS", NULL, NULL)))
119 ret = -ENODEV; 117 ret = -ENODEV;
120 return ret; 118 return ret;
diff --git a/drivers/regulator/bq24022.c b/drivers/regulator/bq24022.c
index 7ecb820ceebc..d08cd9b66c6d 100644
--- a/drivers/regulator/bq24022.c
+++ b/drivers/regulator/bq24022.c
@@ -61,8 +61,7 @@ static int bq24022_disable(struct regulator_dev *rdev)
61 61
62static int bq24022_is_enabled(struct regulator_dev *rdev) 62static int bq24022_is_enabled(struct regulator_dev *rdev)
63{ 63{
64 struct platform_device *pdev = rdev_get_drvdata(rdev); 64 struct bq24022_mach_info *pdata = rdev_get_drvdata(rdev);
65 struct bq24022_mach_info *pdata = pdev->dev.platform_data;
66 65
67 return !gpio_get_value(pdata->gpio_nce); 66 return !gpio_get_value(pdata->gpio_nce);
68} 67}
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 01f7702a805d..98c3a74e9949 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -540,8 +540,8 @@ static void drms_uA_update(struct regulator_dev *rdev)
540 540
541 err = regulator_check_drms(rdev); 541 err = regulator_check_drms(rdev);
542 if (err < 0 || !rdev->desc->ops->get_optimum_mode || 542 if (err < 0 || !rdev->desc->ops->get_optimum_mode ||
543 !rdev->desc->ops->get_voltage || !rdev->desc->ops->set_mode); 543 !rdev->desc->ops->get_voltage || !rdev->desc->ops->set_mode)
544 return; 544 return;
545 545
546 /* get output voltage */ 546 /* get output voltage */
547 output_uV = rdev->desc->ops->get_voltage(rdev); 547 output_uV = rdev->desc->ops->get_voltage(rdev);
@@ -703,10 +703,13 @@ static int set_machine_constraints(struct regulator_dev *rdev,
703 int cmin = constraints->min_uV; 703 int cmin = constraints->min_uV;
704 int cmax = constraints->max_uV; 704 int cmax = constraints->max_uV;
705 705
706 /* it's safe to autoconfigure fixed-voltage supplies */ 706 /* it's safe to autoconfigure fixed-voltage supplies
707 and the constraints are used by list_voltage. */
707 if (count == 1 && !cmin) { 708 if (count == 1 && !cmin) {
708 cmin = INT_MIN; 709 cmin = 1;
709 cmax = INT_MAX; 710 cmax = INT_MAX;
711 constraints->min_uV = cmin;
712 constraints->max_uV = cmax;
710 } 713 }
711 714
712 /* voltage constraints are optional */ 715 /* voltage constraints are optional */
@@ -2001,8 +2004,8 @@ struct regulator_dev *regulator_register(struct regulator_desc *regulator_desc,
2001 if (regulator_desc->name == NULL || regulator_desc->ops == NULL) 2004 if (regulator_desc->name == NULL || regulator_desc->ops == NULL)
2002 return ERR_PTR(-EINVAL); 2005 return ERR_PTR(-EINVAL);
2003 2006
2004 if (!regulator_desc->type == REGULATOR_VOLTAGE && 2007 if (regulator_desc->type != REGULATOR_VOLTAGE &&
2005 !regulator_desc->type == REGULATOR_CURRENT) 2008 regulator_desc->type != REGULATOR_CURRENT)
2006 return ERR_PTR(-EINVAL); 2009 return ERR_PTR(-EINVAL);
2007 2010
2008 if (!init_data) 2011 if (!init_data)
@@ -2080,6 +2083,10 @@ out:
2080 2083
2081scrub: 2084scrub:
2082 device_unregister(&rdev->dev); 2085 device_unregister(&rdev->dev);
2086 /* device core frees rdev */
2087 rdev = ERR_PTR(ret);
2088 goto out;
2089
2083clean: 2090clean:
2084 kfree(rdev); 2091 kfree(rdev);
2085 rdev = ERR_PTR(ret); 2092 rdev = ERR_PTR(ret);
diff --git a/drivers/regulator/virtual.c b/drivers/regulator/virtual.c
index 3d08348584e1..71403fa3ffa1 100644
--- a/drivers/regulator/virtual.c
+++ b/drivers/regulator/virtual.c
@@ -230,13 +230,13 @@ static ssize_t set_mode(struct device *dev, struct device_attribute *attr,
230 * sysfs_streq() doesn't need the \n's, but we add them so the strings 230 * sysfs_streq() doesn't need the \n's, but we add them so the strings
231 * will be shared with show_mode(), above. 231 * will be shared with show_mode(), above.
232 */ 232 */
233 if (sysfs_streq(buf, "fast\n") == 0) 233 if (sysfs_streq(buf, "fast\n"))
234 mode = REGULATOR_MODE_FAST; 234 mode = REGULATOR_MODE_FAST;
235 else if (sysfs_streq(buf, "normal\n") == 0) 235 else if (sysfs_streq(buf, "normal\n"))
236 mode = REGULATOR_MODE_NORMAL; 236 mode = REGULATOR_MODE_NORMAL;
237 else if (sysfs_streq(buf, "idle\n") == 0) 237 else if (sysfs_streq(buf, "idle\n"))
238 mode = REGULATOR_MODE_IDLE; 238 mode = REGULATOR_MODE_IDLE;
239 else if (sysfs_streq(buf, "standby\n") == 0) 239 else if (sysfs_streq(buf, "standby\n"))
240 mode = REGULATOR_MODE_STANDBY; 240 mode = REGULATOR_MODE_STANDBY;
241 else { 241 else {
242 dev_err(dev, "Configuring invalid mode\n"); 242 dev_err(dev, "Configuring invalid mode\n");
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
index ffe34a12f446..4e9851fc1746 100644
--- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig
@@ -573,7 +573,7 @@ config RTC_DRV_SA1100
573 573
574config RTC_DRV_SH 574config RTC_DRV_SH
575 tristate "SuperH On-Chip RTC" 575 tristate "SuperH On-Chip RTC"
576 depends on RTC_CLASS && SUPERH 576 depends on RTC_CLASS && SUPERH && HAVE_CLK
577 help 577 help
578 Say Y here to enable support for the on-chip RTC found in 578 Say Y here to enable support for the on-chip RTC found in
579 most SuperH processors. 579 most SuperH processors.
diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c
index b6d35f50e404..23e10b6263d6 100644
--- a/drivers/rtc/rtc-cmos.c
+++ b/drivers/rtc/rtc-cmos.c
@@ -797,17 +797,15 @@ cmos_do_probe(struct device *dev, struct resource *ports, int rtc_irq)
797 goto cleanup2; 797 goto cleanup2;
798 } 798 }
799 799
800 pr_info("%s: alarms up to one %s%s, %zd bytes nvram%s\n", 800 pr_info("%s: %s%s, %zd bytes nvram%s\n",
801 dev_name(&cmos_rtc.rtc->dev), 801 dev_name(&cmos_rtc.rtc->dev),
802 is_valid_irq(rtc_irq) 802 !is_valid_irq(rtc_irq) ? "no alarms" :
803 ? (cmos_rtc.mon_alrm 803 cmos_rtc.mon_alrm ? "alarms up to one year" :
804 ? "year" 804 cmos_rtc.day_alrm ? "alarms up to one month" :
805 : (cmos_rtc.day_alrm 805 "alarms up to one day",
806 ? "month" : "day")) 806 cmos_rtc.century ? ", y3k" : "",
807 : "no", 807 nvram.size,
808 cmos_rtc.century ? ", y3k" : "", 808 is_hpet_enabled() ? ", hpet irqs" : "");
809 nvram.size,
810 is_hpet_enabled() ? ", hpet irqs" : "");
811 809
812 return 0; 810 return 0;
813 811
diff --git a/drivers/rtc/rtc-sh.c b/drivers/rtc/rtc-sh.c
index 9b1ff12bf947..d7310adb7152 100644
--- a/drivers/rtc/rtc-sh.c
+++ b/drivers/rtc/rtc-sh.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * SuperH On-Chip RTC Support 2 * SuperH On-Chip RTC Support
3 * 3 *
4 * Copyright (C) 2006, 2007, 2008 Paul Mundt 4 * Copyright (C) 2006 - 2009 Paul Mundt
5 * Copyright (C) 2006 Jamie Lenehan 5 * Copyright (C) 2006 Jamie Lenehan
6 * Copyright (C) 2008 Angelo Castello 6 * Copyright (C) 2008 Angelo Castello
7 * 7 *
@@ -25,10 +25,11 @@
25#include <linux/spinlock.h> 25#include <linux/spinlock.h>
26#include <linux/io.h> 26#include <linux/io.h>
27#include <linux/log2.h> 27#include <linux/log2.h>
28#include <linux/clk.h>
28#include <asm/rtc.h> 29#include <asm/rtc.h>
29 30
30#define DRV_NAME "sh-rtc" 31#define DRV_NAME "sh-rtc"
31#define DRV_VERSION "0.2.1" 32#define DRV_VERSION "0.2.2"
32 33
33#define RTC_REG(r) ((r) * rtc_reg_size) 34#define RTC_REG(r) ((r) * rtc_reg_size)
34 35
@@ -87,16 +88,17 @@
87#define RCR2_START 0x01 /* Start bit */ 88#define RCR2_START 0x01 /* Start bit */
88 89
89struct sh_rtc { 90struct sh_rtc {
90 void __iomem *regbase; 91 void __iomem *regbase;
91 unsigned long regsize; 92 unsigned long regsize;
92 struct resource *res; 93 struct resource *res;
93 int alarm_irq; 94 int alarm_irq;
94 int periodic_irq; 95 int periodic_irq;
95 int carry_irq; 96 int carry_irq;
96 struct rtc_device *rtc_dev; 97 struct clk *clk;
97 spinlock_t lock; 98 struct rtc_device *rtc_dev;
98 unsigned long capabilities; /* See asm-sh/rtc.h for cap bits */ 99 spinlock_t lock;
99 unsigned short periodic_freq; 100 unsigned long capabilities; /* See asm/rtc.h for cap bits */
101 unsigned short periodic_freq;
100}; 102};
101 103
102static int __sh_rtc_interrupt(struct sh_rtc *rtc) 104static int __sh_rtc_interrupt(struct sh_rtc *rtc)
@@ -294,10 +296,10 @@ static inline void sh_rtc_setaie(struct device *dev, unsigned int enable)
294 296
295 tmp = readb(rtc->regbase + RCR1); 297 tmp = readb(rtc->regbase + RCR1);
296 298
297 if (!enable) 299 if (enable)
298 tmp &= ~RCR1_AIE;
299 else
300 tmp |= RCR1_AIE; 300 tmp |= RCR1_AIE;
301 else
302 tmp &= ~RCR1_AIE;
301 303
302 writeb(tmp, rtc->regbase + RCR1); 304 writeb(tmp, rtc->regbase + RCR1);
303 305
@@ -618,6 +620,7 @@ static int sh_rtc_irq_set_freq(struct device *dev, int freq)
618{ 620{
619 if (!is_power_of_2(freq)) 621 if (!is_power_of_2(freq))
620 return -EINVAL; 622 return -EINVAL;
623
621 return sh_rtc_ioctl(dev, RTC_IRQP_SET, freq); 624 return sh_rtc_ioctl(dev, RTC_IRQP_SET, freq);
622} 625}
623 626
@@ -637,7 +640,8 @@ static int __devinit sh_rtc_probe(struct platform_device *pdev)
637 struct sh_rtc *rtc; 640 struct sh_rtc *rtc;
638 struct resource *res; 641 struct resource *res;
639 struct rtc_time r; 642 struct rtc_time r;
640 int ret; 643 char clk_name[6];
644 int clk_id, ret;
641 645
642 rtc = kzalloc(sizeof(struct sh_rtc), GFP_KERNEL); 646 rtc = kzalloc(sizeof(struct sh_rtc), GFP_KERNEL);
643 if (unlikely(!rtc)) 647 if (unlikely(!rtc))
@@ -652,6 +656,7 @@ static int __devinit sh_rtc_probe(struct platform_device *pdev)
652 dev_err(&pdev->dev, "No IRQ resource\n"); 656 dev_err(&pdev->dev, "No IRQ resource\n");
653 goto err_badres; 657 goto err_badres;
654 } 658 }
659
655 rtc->periodic_irq = ret; 660 rtc->periodic_irq = ret;
656 rtc->carry_irq = platform_get_irq(pdev, 1); 661 rtc->carry_irq = platform_get_irq(pdev, 1);
657 rtc->alarm_irq = platform_get_irq(pdev, 2); 662 rtc->alarm_irq = platform_get_irq(pdev, 2);
@@ -663,7 +668,7 @@ static int __devinit sh_rtc_probe(struct platform_device *pdev)
663 goto err_badres; 668 goto err_badres;
664 } 669 }
665 670
666 rtc->regsize = res->end - res->start + 1; 671 rtc->regsize = resource_size(res);
667 672
668 rtc->res = request_mem_region(res->start, rtc->regsize, pdev->name); 673 rtc->res = request_mem_region(res->start, rtc->regsize, pdev->name);
669 if (unlikely(!rtc->res)) { 674 if (unlikely(!rtc->res)) {
@@ -677,6 +682,26 @@ static int __devinit sh_rtc_probe(struct platform_device *pdev)
677 goto err_badmap; 682 goto err_badmap;
678 } 683 }
679 684
685 clk_id = pdev->id;
686 /* With a single device, the clock id is still "rtc0" */
687 if (clk_id < 0)
688 clk_id = 0;
689
690 snprintf(clk_name, sizeof(clk_name), "rtc%d", clk_id);
691
692 rtc->clk = clk_get(&pdev->dev, clk_name);
693 if (IS_ERR(rtc->clk)) {
694 /*
695 * No error handling for rtc->clk intentionally, not all
696 * platforms will have a unique clock for the RTC, and
697 * the clk API can handle the struct clk pointer being
698 * NULL.
699 */
700 rtc->clk = NULL;
701 }
702
703 clk_enable(rtc->clk);
704
680 rtc->rtc_dev = rtc_device_register("sh", &pdev->dev, 705 rtc->rtc_dev = rtc_device_register("sh", &pdev->dev,
681 &sh_rtc_ops, THIS_MODULE); 706 &sh_rtc_ops, THIS_MODULE);
682 if (IS_ERR(rtc->rtc_dev)) { 707 if (IS_ERR(rtc->rtc_dev)) {
@@ -759,6 +784,8 @@ static int __devinit sh_rtc_probe(struct platform_device *pdev)
759 return 0; 784 return 0;
760 785
761err_unmap: 786err_unmap:
787 clk_disable(rtc->clk);
788 clk_put(rtc->clk);
762 iounmap(rtc->regbase); 789 iounmap(rtc->regbase);
763err_badmap: 790err_badmap:
764 release_resource(rtc->res); 791 release_resource(rtc->res);
@@ -780,6 +807,7 @@ static int __devexit sh_rtc_remove(struct platform_device *pdev)
780 sh_rtc_setcie(&pdev->dev, 0); 807 sh_rtc_setcie(&pdev->dev, 0);
781 808
782 free_irq(rtc->periodic_irq, rtc); 809 free_irq(rtc->periodic_irq, rtc);
810
783 if (rtc->carry_irq > 0) { 811 if (rtc->carry_irq > 0) {
784 free_irq(rtc->carry_irq, rtc); 812 free_irq(rtc->carry_irq, rtc);
785 free_irq(rtc->alarm_irq, rtc); 813 free_irq(rtc->alarm_irq, rtc);
@@ -789,6 +817,9 @@ static int __devexit sh_rtc_remove(struct platform_device *pdev)
789 817
790 iounmap(rtc->regbase); 818 iounmap(rtc->regbase);
791 819
820 clk_disable(rtc->clk);
821 clk_put(rtc->clk);
822
792 platform_set_drvdata(pdev, NULL); 823 platform_set_drvdata(pdev, NULL);
793 824
794 kfree(rtc); 825 kfree(rtc);
@@ -802,11 +833,11 @@ static void sh_rtc_set_irq_wake(struct device *dev, int enabled)
802 struct sh_rtc *rtc = platform_get_drvdata(pdev); 833 struct sh_rtc *rtc = platform_get_drvdata(pdev);
803 834
804 set_irq_wake(rtc->periodic_irq, enabled); 835 set_irq_wake(rtc->periodic_irq, enabled);
836
805 if (rtc->carry_irq > 0) { 837 if (rtc->carry_irq > 0) {
806 set_irq_wake(rtc->carry_irq, enabled); 838 set_irq_wake(rtc->carry_irq, enabled);
807 set_irq_wake(rtc->alarm_irq, enabled); 839 set_irq_wake(rtc->alarm_irq, enabled);
808 } 840 }
809
810} 841}
811 842
812static int sh_rtc_suspend(struct device *dev) 843static int sh_rtc_suspend(struct device *dev)
diff --git a/drivers/rtc/rtc-twl4030.c b/drivers/rtc/rtc-twl4030.c
index a6341e4f9a0f..9c8c70c497dc 100644
--- a/drivers/rtc/rtc-twl4030.c
+++ b/drivers/rtc/rtc-twl4030.c
@@ -495,9 +495,7 @@ static int twl4030_rtc_suspend(struct platform_device *pdev, pm_message_t state)
495{ 495{
496 irqstat = rtc_irq_bits; 496 irqstat = rtc_irq_bits;
497 497
498 /* REVISIT alarm may need to wake us from sleep */ 498 mask_rtc_irq_bit(BIT_RTC_INTERRUPTS_REG_IT_TIMER_M);
499 mask_rtc_irq_bit(BIT_RTC_INTERRUPTS_REG_IT_TIMER_M |
500 BIT_RTC_INTERRUPTS_REG_IT_ALARM_M);
501 return 0; 499 return 0;
502} 500}
503 501
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
index 0570794ccf1c..d1815272c435 100644
--- a/drivers/s390/block/dasd.c
+++ b/drivers/s390/block/dasd.c
@@ -20,6 +20,7 @@
20#include <linux/slab.h> 20#include <linux/slab.h>
21#include <linux/buffer_head.h> 21#include <linux/buffer_head.h>
22#include <linux/hdreg.h> 22#include <linux/hdreg.h>
23#include <linux/async.h>
23 24
24#include <asm/ccwdev.h> 25#include <asm/ccwdev.h>
25#include <asm/ebcdic.h> 26#include <asm/ebcdic.h>
@@ -480,8 +481,10 @@ static void dasd_change_state(struct dasd_device *device)
480 if (rc && rc != -EAGAIN) 481 if (rc && rc != -EAGAIN)
481 device->target = device->state; 482 device->target = device->state;
482 483
483 if (device->state == device->target) 484 if (device->state == device->target) {
484 wake_up(&dasd_init_waitq); 485 wake_up(&dasd_init_waitq);
486 dasd_put_device(device);
487 }
485 488
486 /* let user-space know that the device status changed */ 489 /* let user-space know that the device status changed */
487 kobject_uevent(&device->cdev->dev.kobj, KOBJ_CHANGE); 490 kobject_uevent(&device->cdev->dev.kobj, KOBJ_CHANGE);
@@ -513,12 +516,15 @@ void dasd_kick_device(struct dasd_device *device)
513 */ 516 */
514void dasd_set_target_state(struct dasd_device *device, int target) 517void dasd_set_target_state(struct dasd_device *device, int target)
515{ 518{
519 dasd_get_device(device);
516 /* If we are in probeonly mode stop at DASD_STATE_READY. */ 520 /* If we are in probeonly mode stop at DASD_STATE_READY. */
517 if (dasd_probeonly && target > DASD_STATE_READY) 521 if (dasd_probeonly && target > DASD_STATE_READY)
518 target = DASD_STATE_READY; 522 target = DASD_STATE_READY;
519 if (device->target != target) { 523 if (device->target != target) {
520 if (device->state == target) 524 if (device->state == target) {
521 wake_up(&dasd_init_waitq); 525 wake_up(&dasd_init_waitq);
526 dasd_put_device(device);
527 }
522 device->target = target; 528 device->target = target;
523 } 529 }
524 if (device->state != device->target) 530 if (device->state != device->target)
@@ -2148,6 +2154,22 @@ dasd_exit(void)
2148 * SECTION: common functions for ccw_driver use 2154 * SECTION: common functions for ccw_driver use
2149 */ 2155 */
2150 2156
2157static void dasd_generic_auto_online(void *data, async_cookie_t cookie)
2158{
2159 struct ccw_device *cdev = data;
2160 int ret;
2161
2162 ret = ccw_device_set_online(cdev);
2163 if (ret)
2164 pr_warning("%s: Setting the DASD online failed with rc=%d\n",
2165 dev_name(&cdev->dev), ret);
2166 else {
2167 struct dasd_device *device = dasd_device_from_cdev(cdev);
2168 wait_event(dasd_init_waitq, _wait_for_device(device));
2169 dasd_put_device(device);
2170 }
2171}
2172
2151/* 2173/*
2152 * Initial attempt at a probe function. this can be simplified once 2174 * Initial attempt at a probe function. this can be simplified once
2153 * the other detection code is gone. 2175 * the other detection code is gone.
@@ -2180,10 +2202,7 @@ int dasd_generic_probe(struct ccw_device *cdev,
2180 */ 2202 */
2181 if ((dasd_get_feature(cdev, DASD_FEATURE_INITIAL_ONLINE) > 0 ) || 2203 if ((dasd_get_feature(cdev, DASD_FEATURE_INITIAL_ONLINE) > 0 ) ||
2182 (dasd_autodetect && dasd_busid_known(dev_name(&cdev->dev)) != 0)) 2204 (dasd_autodetect && dasd_busid_known(dev_name(&cdev->dev)) != 0))
2183 ret = ccw_device_set_online(cdev); 2205 async_schedule(dasd_generic_auto_online, cdev);
2184 if (ret)
2185 pr_warning("%s: Setting the DASD online failed with rc=%d\n",
2186 dev_name(&cdev->dev), ret);
2187 return 0; 2206 return 0;
2188} 2207}
2189 2208
@@ -2290,13 +2309,7 @@ int dasd_generic_set_online(struct ccw_device *cdev,
2290 } else 2309 } else
2291 pr_debug("dasd_generic device %s found\n", 2310 pr_debug("dasd_generic device %s found\n",
2292 dev_name(&cdev->dev)); 2311 dev_name(&cdev->dev));
2293
2294 /* FIXME: we have to wait for the root device but we don't want
2295 * to wait for each single device but for all at once. */
2296 wait_event(dasd_init_waitq, _wait_for_device(device));
2297
2298 dasd_put_device(device); 2312 dasd_put_device(device);
2299
2300 return rc; 2313 return rc;
2301} 2314}
2302 2315
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c
index 21254793c604..cb52da033f06 100644
--- a/drivers/s390/block/dasd_eckd.c
+++ b/drivers/s390/block/dasd_eckd.c
@@ -2019,15 +2019,23 @@ static struct dasd_ccw_req *dasd_eckd_build_cp_cmd_track(
2019 ccw++; 2019 ccw++;
2020 recid += count; 2020 recid += count;
2021 new_track = 0; 2021 new_track = 0;
2022 /* first idaw for a ccw may start anywhere */
2023 if (!idaw_dst)
2024 idaw_dst = dst;
2022 } 2025 }
2023 /* If we start a new idaw, everything is fine and the 2026 /* If we start a new idaw, we must make sure that it
2024 * start of the new idaw is the start of this segment. 2027 * starts on an IDA_BLOCK_SIZE boundary.
2025 * If we continue an idaw, we must make sure that the 2028 * If we continue an idaw, we must make sure that the
2026 * current segment begins where the so far accumulated 2029 * current segment begins where the so far accumulated
2027 * idaw ends 2030 * idaw ends
2028 */ 2031 */
2029 if (!idaw_dst) 2032 if (!idaw_dst) {
2030 idaw_dst = dst; 2033 if (__pa(dst) & (IDA_BLOCK_SIZE-1)) {
2034 dasd_sfree_request(cqr, startdev);
2035 return ERR_PTR(-ERANGE);
2036 } else
2037 idaw_dst = dst;
2038 }
2031 if ((idaw_dst + idaw_len) != dst) { 2039 if ((idaw_dst + idaw_len) != dst) {
2032 dasd_sfree_request(cqr, startdev); 2040 dasd_sfree_request(cqr, startdev);
2033 return ERR_PTR(-ERANGE); 2041 return ERR_PTR(-ERANGE);
diff --git a/drivers/s390/char/tape.h b/drivers/s390/char/tape.h
index c07809c8016a..5469e099597e 100644
--- a/drivers/s390/char/tape.h
+++ b/drivers/s390/char/tape.h
@@ -285,7 +285,7 @@ extern int tape_mtop(struct tape_device *, int, int);
285extern void tape_state_set(struct tape_device *, enum tape_state); 285extern void tape_state_set(struct tape_device *, enum tape_state);
286 286
287extern int tape_generic_online(struct tape_device *, struct tape_discipline *); 287extern int tape_generic_online(struct tape_device *, struct tape_discipline *);
288extern int tape_generic_offline(struct tape_device *device); 288extern int tape_generic_offline(struct ccw_device *);
289 289
290/* Externals from tape_devmap.c */ 290/* Externals from tape_devmap.c */
291extern int tape_generic_probe(struct ccw_device *); 291extern int tape_generic_probe(struct ccw_device *);
diff --git a/drivers/s390/char/tape_34xx.c b/drivers/s390/char/tape_34xx.c
index 807ded5eb049..5f8e8ef43dd3 100644
--- a/drivers/s390/char/tape_34xx.c
+++ b/drivers/s390/char/tape_34xx.c
@@ -1294,12 +1294,6 @@ tape_34xx_online(struct ccw_device *cdev)
1294 ); 1294 );
1295} 1295}
1296 1296
1297static int
1298tape_34xx_offline(struct ccw_device *cdev)
1299{
1300 return tape_generic_offline(cdev->dev.driver_data);
1301}
1302
1303static struct ccw_driver tape_34xx_driver = { 1297static struct ccw_driver tape_34xx_driver = {
1304 .name = "tape_34xx", 1298 .name = "tape_34xx",
1305 .owner = THIS_MODULE, 1299 .owner = THIS_MODULE,
@@ -1307,7 +1301,7 @@ static struct ccw_driver tape_34xx_driver = {
1307 .probe = tape_generic_probe, 1301 .probe = tape_generic_probe,
1308 .remove = tape_generic_remove, 1302 .remove = tape_generic_remove,
1309 .set_online = tape_34xx_online, 1303 .set_online = tape_34xx_online,
1310 .set_offline = tape_34xx_offline, 1304 .set_offline = tape_generic_offline,
1311}; 1305};
1312 1306
1313static int 1307static int
diff --git a/drivers/s390/char/tape_3590.c b/drivers/s390/char/tape_3590.c
index fc1d91294143..823b05bd0dd7 100644
--- a/drivers/s390/char/tape_3590.c
+++ b/drivers/s390/char/tape_3590.c
@@ -1707,19 +1707,13 @@ tape_3590_online(struct ccw_device *cdev)
1707 &tape_discipline_3590); 1707 &tape_discipline_3590);
1708} 1708}
1709 1709
1710static int
1711tape_3590_offline(struct ccw_device *cdev)
1712{
1713 return tape_generic_offline(cdev->dev.driver_data);
1714}
1715
1716static struct ccw_driver tape_3590_driver = { 1710static struct ccw_driver tape_3590_driver = {
1717 .name = "tape_3590", 1711 .name = "tape_3590",
1718 .owner = THIS_MODULE, 1712 .owner = THIS_MODULE,
1719 .ids = tape_3590_ids, 1713 .ids = tape_3590_ids,
1720 .probe = tape_generic_probe, 1714 .probe = tape_generic_probe,
1721 .remove = tape_generic_remove, 1715 .remove = tape_generic_remove,
1722 .set_offline = tape_3590_offline, 1716 .set_offline = tape_generic_offline,
1723 .set_online = tape_3590_online, 1717 .set_online = tape_3590_online,
1724}; 1718};
1725 1719
diff --git a/drivers/s390/char/tape_core.c b/drivers/s390/char/tape_core.c
index 08c09d3503cf..8a109f3b69c6 100644
--- a/drivers/s390/char/tape_core.c
+++ b/drivers/s390/char/tape_core.c
@@ -387,8 +387,11 @@ tape_cleanup_device(struct tape_device *device)
387 * Manual offline is only allowed while the drive is not in use. 387 * Manual offline is only allowed while the drive is not in use.
388 */ 388 */
389int 389int
390tape_generic_offline(struct tape_device *device) 390tape_generic_offline(struct ccw_device *cdev)
391{ 391{
392 struct tape_device *device;
393
394 device = cdev->dev.driver_data;
392 if (!device) { 395 if (!device) {
393 return -ENODEV; 396 return -ENODEV;
394 } 397 }
diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c
index 9e8a2914259b..accd957454e7 100644
--- a/drivers/s390/cio/qdio_main.c
+++ b/drivers/s390/cio/qdio_main.c
@@ -881,42 +881,6 @@ no_handler:
881 qdio_set_state(irq_ptr, QDIO_IRQ_STATE_STOPPED); 881 qdio_set_state(irq_ptr, QDIO_IRQ_STATE_STOPPED);
882} 882}
883 883
884static void qdio_call_shutdown(struct work_struct *work)
885{
886 struct ccw_device_private *priv;
887 struct ccw_device *cdev;
888
889 priv = container_of(work, struct ccw_device_private, kick_work);
890 cdev = priv->cdev;
891 qdio_shutdown(cdev, QDIO_FLAG_CLEANUP_USING_CLEAR);
892 put_device(&cdev->dev);
893}
894
895static void qdio_int_error(struct ccw_device *cdev)
896{
897 struct qdio_irq *irq_ptr = cdev->private->qdio_data;
898
899 switch (irq_ptr->state) {
900 case QDIO_IRQ_STATE_INACTIVE:
901 case QDIO_IRQ_STATE_CLEANUP:
902 qdio_set_state(irq_ptr, QDIO_IRQ_STATE_ERR);
903 break;
904 case QDIO_IRQ_STATE_ESTABLISHED:
905 case QDIO_IRQ_STATE_ACTIVE:
906 qdio_set_state(irq_ptr, QDIO_IRQ_STATE_STOPPED);
907 if (get_device(&cdev->dev)) {
908 /* Can't call shutdown from interrupt context. */
909 PREPARE_WORK(&cdev->private->kick_work,
910 qdio_call_shutdown);
911 queue_work(ccw_device_work, &cdev->private->kick_work);
912 }
913 break;
914 default:
915 WARN_ON(1);
916 }
917 wake_up(&cdev->private->wait_q);
918}
919
920static int qdio_establish_check_errors(struct ccw_device *cdev, int cstat, 884static int qdio_establish_check_errors(struct ccw_device *cdev, int cstat,
921 int dstat) 885 int dstat)
922{ 886{
@@ -973,10 +937,8 @@ void qdio_int_handler(struct ccw_device *cdev, unsigned long intparm,
973 switch (PTR_ERR(irb)) { 937 switch (PTR_ERR(irb)) {
974 case -EIO: 938 case -EIO:
975 DBF_ERROR("%4x IO error", irq_ptr->schid.sch_no); 939 DBF_ERROR("%4x IO error", irq_ptr->schid.sch_no);
976 return; 940 qdio_set_state(irq_ptr, QDIO_IRQ_STATE_ERR);
977 case -ETIMEDOUT: 941 wake_up(&cdev->private->wait_q);
978 DBF_ERROR("%4x IO timeout", irq_ptr->schid.sch_no);
979 qdio_int_error(cdev);
980 return; 942 return;
981 default: 943 default:
982 WARN_ON(1); 944 WARN_ON(1);
@@ -1001,7 +963,6 @@ void qdio_int_handler(struct ccw_device *cdev, unsigned long intparm,
1001 case QDIO_IRQ_STATE_ACTIVE: 963 case QDIO_IRQ_STATE_ACTIVE:
1002 if (cstat & SCHN_STAT_PCI) { 964 if (cstat & SCHN_STAT_PCI) {
1003 qdio_int_handler_pci(irq_ptr); 965 qdio_int_handler_pci(irq_ptr);
1004 /* no state change so no need to wake up wait_q */
1005 return; 966 return;
1006 } 967 }
1007 if ((cstat & ~SCHN_STAT_PCI) || dstat) { 968 if ((cstat & ~SCHN_STAT_PCI) || dstat) {
diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c
index 616c60ffcf2c..3ac27ee47396 100644
--- a/drivers/s390/scsi/zfcp_aux.c
+++ b/drivers/s390/scsi/zfcp_aux.c
@@ -97,9 +97,7 @@ static void __init zfcp_init_device_configure(char *busid, u64 wwpn, u64 lun)
97 ccw_device_set_online(adapter->ccw_device); 97 ccw_device_set_online(adapter->ccw_device);
98 98
99 zfcp_erp_wait(adapter); 99 zfcp_erp_wait(adapter);
100 wait_event(adapter->erp_done_wqh, 100 flush_work(&unit->scsi_work);
101 !(atomic_read(&unit->status) &
102 ZFCP_STATUS_UNIT_SCSI_WORK_PENDING));
103 101
104 down(&zfcp_data.config_sema); 102 down(&zfcp_data.config_sema);
105 zfcp_unit_put(unit); 103 zfcp_unit_put(unit);
@@ -279,6 +277,7 @@ struct zfcp_unit *zfcp_unit_enqueue(struct zfcp_port *port, u64 fcp_lun)
279 277
280 atomic_set(&unit->refcount, 0); 278 atomic_set(&unit->refcount, 0);
281 init_waitqueue_head(&unit->remove_wq); 279 init_waitqueue_head(&unit->remove_wq);
280 INIT_WORK(&unit->scsi_work, zfcp_scsi_scan);
282 281
283 unit->port = port; 282 unit->port = port;
284 unit->fcp_lun = fcp_lun; 283 unit->fcp_lun = fcp_lun;
@@ -525,6 +524,8 @@ int zfcp_adapter_enqueue(struct ccw_device *ccw_device)
525 524
526 atomic_clear_mask(ZFCP_STATUS_COMMON_REMOVE, &adapter->status); 525 atomic_clear_mask(ZFCP_STATUS_COMMON_REMOVE, &adapter->status);
527 526
527 zfcp_fc_nameserver_init(adapter);
528
528 if (!zfcp_adapter_scsi_register(adapter)) 529 if (!zfcp_adapter_scsi_register(adapter))
529 return 0; 530 return 0;
530 531
@@ -553,7 +554,6 @@ void zfcp_adapter_dequeue(struct zfcp_adapter *adapter)
553 554
554 cancel_work_sync(&adapter->scan_work); 555 cancel_work_sync(&adapter->scan_work);
555 cancel_work_sync(&adapter->stat_work); 556 cancel_work_sync(&adapter->stat_work);
556 cancel_delayed_work_sync(&adapter->nsp.work);
557 zfcp_adapter_scsi_unregister(adapter); 557 zfcp_adapter_scsi_unregister(adapter);
558 sysfs_remove_group(&adapter->ccw_device->dev.kobj, 558 sysfs_remove_group(&adapter->ccw_device->dev.kobj,
559 &zfcp_sysfs_adapter_attrs); 559 &zfcp_sysfs_adapter_attrs);
@@ -671,8 +671,7 @@ void zfcp_port_dequeue(struct zfcp_port *port)
671 list_del(&port->list); 671 list_del(&port->list);
672 write_unlock_irq(&zfcp_data.config_lock); 672 write_unlock_irq(&zfcp_data.config_lock);
673 if (port->rport) 673 if (port->rport)
674 fc_remote_port_delete(port->rport); 674 port->rport->dd_data = NULL;
675 port->rport = NULL;
676 zfcp_adapter_put(port->adapter); 675 zfcp_adapter_put(port->adapter);
677 sysfs_remove_group(&port->sysfs_device.kobj, &zfcp_sysfs_port_attrs); 676 sysfs_remove_group(&port->sysfs_device.kobj, &zfcp_sysfs_port_attrs);
678 device_unregister(&port->sysfs_device); 677 device_unregister(&port->sysfs_device);
diff --git a/drivers/s390/scsi/zfcp_ccw.c b/drivers/s390/scsi/zfcp_ccw.c
index cfb0dcb6e3ff..733fe3bf6285 100644
--- a/drivers/s390/scsi/zfcp_ccw.c
+++ b/drivers/s390/scsi/zfcp_ccw.c
@@ -108,7 +108,6 @@ static int zfcp_ccw_set_online(struct ccw_device *ccw_device)
108 /* initialize request counter */ 108 /* initialize request counter */
109 BUG_ON(!zfcp_reqlist_isempty(adapter)); 109 BUG_ON(!zfcp_reqlist_isempty(adapter));
110 adapter->req_no = 0; 110 adapter->req_no = 0;
111 zfcp_fc_nameserver_init(adapter);
112 111
113 zfcp_erp_modify_adapter_status(adapter, "ccsonl1", NULL, 112 zfcp_erp_modify_adapter_status(adapter, "ccsonl1", NULL,
114 ZFCP_STATUS_COMMON_RUNNING, ZFCP_SET); 113 ZFCP_STATUS_COMMON_RUNNING, ZFCP_SET);
diff --git a/drivers/s390/scsi/zfcp_cfdc.c b/drivers/s390/scsi/zfcp_cfdc.c
index 10cbfd172a28..8305c874e86f 100644
--- a/drivers/s390/scsi/zfcp_cfdc.c
+++ b/drivers/s390/scsi/zfcp_cfdc.c
@@ -4,7 +4,7 @@
4 * Userspace interface for accessing the 4 * Userspace interface for accessing the
5 * Access Control Lists / Control File Data Channel 5 * Access Control Lists / Control File Data Channel
6 * 6 *
7 * Copyright IBM Corporation 2008 7 * Copyright IBM Corporation 2008, 2009
8 */ 8 */
9 9
10#define KMSG_COMPONENT "zfcp" 10#define KMSG_COMPONENT "zfcp"
@@ -197,6 +197,7 @@ static long zfcp_cfdc_dev_ioctl(struct file *file, unsigned int command,
197 retval = -ENXIO; 197 retval = -ENXIO;
198 goto free_buffer; 198 goto free_buffer;
199 } 199 }
200 zfcp_adapter_get(adapter);
200 201
201 retval = zfcp_cfdc_sg_setup(data->command, fsf_cfdc->sg, 202 retval = zfcp_cfdc_sg_setup(data->command, fsf_cfdc->sg,
202 data_user->control_file); 203 data_user->control_file);
diff --git a/drivers/s390/scsi/zfcp_def.h b/drivers/s390/scsi/zfcp_def.h
index a0318630f047..4c362a9069f0 100644
--- a/drivers/s390/scsi/zfcp_def.h
+++ b/drivers/s390/scsi/zfcp_def.h
@@ -255,7 +255,6 @@ enum zfcp_wka_status {
255/* logical unit status */ 255/* logical unit status */
256#define ZFCP_STATUS_UNIT_SHARED 0x00000004 256#define ZFCP_STATUS_UNIT_SHARED 0x00000004
257#define ZFCP_STATUS_UNIT_READONLY 0x00000008 257#define ZFCP_STATUS_UNIT_READONLY 0x00000008
258#define ZFCP_STATUS_UNIT_SCSI_WORK_PENDING 0x00000020
259 258
260/* FSF request status (this does not have a common part) */ 259/* FSF request status (this does not have a common part) */
261#define ZFCP_STATUS_FSFREQ_TASK_MANAGEMENT 0x00000002 260#define ZFCP_STATUS_FSFREQ_TASK_MANAGEMENT 0x00000002
@@ -530,6 +529,7 @@ struct zfcp_unit {
530 struct zfcp_erp_action erp_action; /* pending error recovery */ 529 struct zfcp_erp_action erp_action; /* pending error recovery */
531 atomic_t erp_counter; 530 atomic_t erp_counter;
532 struct zfcp_latencies latencies; 531 struct zfcp_latencies latencies;
532 struct work_struct scsi_work;
533}; 533};
534 534
535/* FSF request */ 535/* FSF request */
diff --git a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c
index 631bdb1dfd6c..fdc9b4352a64 100644
--- a/drivers/s390/scsi/zfcp_erp.c
+++ b/drivers/s390/scsi/zfcp_erp.c
@@ -719,6 +719,7 @@ static void zfcp_erp_adapter_strategy_close(struct zfcp_erp_action *act)
719 zfcp_qdio_close(adapter); 719 zfcp_qdio_close(adapter);
720 zfcp_fsf_req_dismiss_all(adapter); 720 zfcp_fsf_req_dismiss_all(adapter);
721 adapter->fsf_req_seq_no = 0; 721 adapter->fsf_req_seq_no = 0;
722 zfcp_fc_wka_port_force_offline(&adapter->nsp);
722 /* all ports and units are closed */ 723 /* all ports and units are closed */
723 zfcp_erp_modify_adapter_status(adapter, "erascl1", NULL, 724 zfcp_erp_modify_adapter_status(adapter, "erascl1", NULL,
724 ZFCP_STATUS_COMMON_OPEN, ZFCP_CLEAR); 725 ZFCP_STATUS_COMMON_OPEN, ZFCP_CLEAR);
@@ -1176,48 +1177,6 @@ static void zfcp_erp_action_dequeue(struct zfcp_erp_action *erp_action)
1176 } 1177 }
1177} 1178}
1178 1179
1179struct zfcp_erp_add_work {
1180 struct zfcp_unit *unit;
1181 struct work_struct work;
1182};
1183
1184static void zfcp_erp_scsi_scan(struct work_struct *work)
1185{
1186 struct zfcp_erp_add_work *p =
1187 container_of(work, struct zfcp_erp_add_work, work);
1188 struct zfcp_unit *unit = p->unit;
1189 struct fc_rport *rport = unit->port->rport;
1190
1191 if (rport && rport->port_state == FC_PORTSTATE_ONLINE)
1192 scsi_scan_target(&rport->dev, 0, rport->scsi_target_id,
1193 scsilun_to_int((struct scsi_lun *)&unit->fcp_lun), 0);
1194 atomic_clear_mask(ZFCP_STATUS_UNIT_SCSI_WORK_PENDING, &unit->status);
1195 zfcp_unit_put(unit);
1196 wake_up(&unit->port->adapter->erp_done_wqh);
1197 kfree(p);
1198}
1199
1200static void zfcp_erp_schedule_work(struct zfcp_unit *unit)
1201{
1202 struct zfcp_erp_add_work *p;
1203
1204 p = kzalloc(sizeof(*p), GFP_KERNEL);
1205 if (!p) {
1206 dev_err(&unit->port->adapter->ccw_device->dev,
1207 "Registering unit 0x%016Lx on port 0x%016Lx failed\n",
1208 (unsigned long long)unit->fcp_lun,
1209 (unsigned long long)unit->port->wwpn);
1210 return;
1211 }
1212
1213 zfcp_unit_get(unit);
1214 atomic_set_mask(ZFCP_STATUS_UNIT_SCSI_WORK_PENDING, &unit->status);
1215 INIT_WORK(&p->work, zfcp_erp_scsi_scan);
1216 p->unit = unit;
1217 if (!queue_work(zfcp_data.work_queue, &p->work))
1218 zfcp_unit_put(unit);
1219}
1220
1221static void zfcp_erp_action_cleanup(struct zfcp_erp_action *act, int result) 1180static void zfcp_erp_action_cleanup(struct zfcp_erp_action *act, int result)
1222{ 1181{
1223 struct zfcp_adapter *adapter = act->adapter; 1182 struct zfcp_adapter *adapter = act->adapter;
@@ -1226,11 +1185,11 @@ static void zfcp_erp_action_cleanup(struct zfcp_erp_action *act, int result)
1226 1185
1227 switch (act->action) { 1186 switch (act->action) {
1228 case ZFCP_ERP_ACTION_REOPEN_UNIT: 1187 case ZFCP_ERP_ACTION_REOPEN_UNIT:
1229 flush_work(&port->rport_work);
1230 if ((result == ZFCP_ERP_SUCCEEDED) && !unit->device) { 1188 if ((result == ZFCP_ERP_SUCCEEDED) && !unit->device) {
1231 if (!(atomic_read(&unit->status) & 1189 zfcp_unit_get(unit);
1232 ZFCP_STATUS_UNIT_SCSI_WORK_PENDING)) 1190 if (scsi_queue_work(unit->port->adapter->scsi_host,
1233 zfcp_erp_schedule_work(unit); 1191 &unit->scsi_work) <= 0)
1192 zfcp_unit_put(unit);
1234 } 1193 }
1235 zfcp_unit_put(unit); 1194 zfcp_unit_put(unit);
1236 break; 1195 break;
@@ -1352,6 +1311,11 @@ static int zfcp_erp_thread(void *data)
1352 1311
1353 while (!(atomic_read(&adapter->status) & 1312 while (!(atomic_read(&adapter->status) &
1354 ZFCP_STATUS_ADAPTER_ERP_THREAD_KILL)) { 1313 ZFCP_STATUS_ADAPTER_ERP_THREAD_KILL)) {
1314
1315 zfcp_rec_dbf_event_thread_lock("erthrd1", adapter);
1316 ignore = down_interruptible(&adapter->erp_ready_sem);
1317 zfcp_rec_dbf_event_thread_lock("erthrd2", adapter);
1318
1355 write_lock_irqsave(&adapter->erp_lock, flags); 1319 write_lock_irqsave(&adapter->erp_lock, flags);
1356 next = adapter->erp_ready_head.next; 1320 next = adapter->erp_ready_head.next;
1357 write_unlock_irqrestore(&adapter->erp_lock, flags); 1321 write_unlock_irqrestore(&adapter->erp_lock, flags);
@@ -1363,10 +1327,6 @@ static int zfcp_erp_thread(void *data)
1363 if (zfcp_erp_strategy(act) != ZFCP_ERP_DISMISSED) 1327 if (zfcp_erp_strategy(act) != ZFCP_ERP_DISMISSED)
1364 zfcp_erp_wakeup(adapter); 1328 zfcp_erp_wakeup(adapter);
1365 } 1329 }
1366
1367 zfcp_rec_dbf_event_thread_lock("erthrd1", adapter);
1368 ignore = down_interruptible(&adapter->erp_ready_sem);
1369 zfcp_rec_dbf_event_thread_lock("erthrd2", adapter);
1370 } 1330 }
1371 1331
1372 atomic_clear_mask(ZFCP_STATUS_ADAPTER_ERP_THREAD_UP, &adapter->status); 1332 atomic_clear_mask(ZFCP_STATUS_ADAPTER_ERP_THREAD_UP, &adapter->status);
diff --git a/drivers/s390/scsi/zfcp_ext.h b/drivers/s390/scsi/zfcp_ext.h
index f6399ca97bcb..2e31b536548c 100644
--- a/drivers/s390/scsi/zfcp_ext.h
+++ b/drivers/s390/scsi/zfcp_ext.h
@@ -106,6 +106,7 @@ extern void zfcp_fc_plogi_evaluate(struct zfcp_port *, struct fsf_plogi *);
106extern void zfcp_test_link(struct zfcp_port *); 106extern void zfcp_test_link(struct zfcp_port *);
107extern void zfcp_fc_link_test_work(struct work_struct *); 107extern void zfcp_fc_link_test_work(struct work_struct *);
108extern void zfcp_fc_nameserver_init(struct zfcp_adapter *); 108extern void zfcp_fc_nameserver_init(struct zfcp_adapter *);
109extern void zfcp_fc_wka_port_force_offline(struct zfcp_wka_port *);
109 110
110/* zfcp_fsf.c */ 111/* zfcp_fsf.c */
111extern int zfcp_fsf_open_port(struct zfcp_erp_action *); 112extern int zfcp_fsf_open_port(struct zfcp_erp_action *);
@@ -158,6 +159,7 @@ extern void zfcp_scsi_rport_work(struct work_struct *);
158extern void zfcp_scsi_schedule_rport_register(struct zfcp_port *); 159extern void zfcp_scsi_schedule_rport_register(struct zfcp_port *);
159extern void zfcp_scsi_schedule_rport_block(struct zfcp_port *); 160extern void zfcp_scsi_schedule_rport_block(struct zfcp_port *);
160extern void zfcp_scsi_schedule_rports_block(struct zfcp_adapter *); 161extern void zfcp_scsi_schedule_rports_block(struct zfcp_adapter *);
162extern void zfcp_scsi_scan(struct work_struct *);
161 163
162/* zfcp_sysfs.c */ 164/* zfcp_sysfs.c */
163extern struct attribute_group zfcp_sysfs_unit_attrs; 165extern struct attribute_group zfcp_sysfs_unit_attrs;
diff --git a/drivers/s390/scsi/zfcp_fc.c b/drivers/s390/scsi/zfcp_fc.c
index e8d032b9dfbd..19ae0842047c 100644
--- a/drivers/s390/scsi/zfcp_fc.c
+++ b/drivers/s390/scsi/zfcp_fc.c
@@ -98,13 +98,6 @@ static void zfcp_wka_port_offline(struct work_struct *work)
98 struct zfcp_wka_port *wka_port = 98 struct zfcp_wka_port *wka_port =
99 container_of(dw, struct zfcp_wka_port, work); 99 container_of(dw, struct zfcp_wka_port, work);
100 100
101 /* Don't wait forvever. If the wka_port is too busy take it offline
102 through a new call later */
103 if (!wait_event_timeout(wka_port->completion_wq,
104 atomic_read(&wka_port->refcount) == 0,
105 HZ >> 1))
106 return;
107
108 mutex_lock(&wka_port->mutex); 101 mutex_lock(&wka_port->mutex);
109 if ((atomic_read(&wka_port->refcount) != 0) || 102 if ((atomic_read(&wka_port->refcount) != 0) ||
110 (wka_port->status != ZFCP_WKA_PORT_ONLINE)) 103 (wka_port->status != ZFCP_WKA_PORT_ONLINE))
@@ -142,6 +135,14 @@ void zfcp_fc_nameserver_init(struct zfcp_adapter *adapter)
142 INIT_DELAYED_WORK(&wka_port->work, zfcp_wka_port_offline); 135 INIT_DELAYED_WORK(&wka_port->work, zfcp_wka_port_offline);
143} 136}
144 137
138void zfcp_fc_wka_port_force_offline(struct zfcp_wka_port *wka)
139{
140 cancel_delayed_work_sync(&wka->work);
141 mutex_lock(&wka->mutex);
142 wka->status = ZFCP_WKA_PORT_OFFLINE;
143 mutex_unlock(&wka->mutex);
144}
145
145static void _zfcp_fc_incoming_rscn(struct zfcp_fsf_req *fsf_req, u32 range, 146static void _zfcp_fc_incoming_rscn(struct zfcp_fsf_req *fsf_req, u32 range,
146 struct fcp_rscn_element *elem) 147 struct fcp_rscn_element *elem)
147{ 148{
@@ -372,7 +373,8 @@ static void zfcp_fc_adisc_handler(unsigned long data)
372 373
373 if (adisc->els.status) { 374 if (adisc->els.status) {
374 /* request rejected or timed out */ 375 /* request rejected or timed out */
375 zfcp_erp_port_forced_reopen(port, 0, "fcadh_1", NULL); 376 zfcp_erp_port_forced_reopen(port, ZFCP_STATUS_COMMON_ERP_FAILED,
377 "fcadh_1", NULL);
376 goto out; 378 goto out;
377 } 379 }
378 380
@@ -431,11 +433,6 @@ void zfcp_fc_link_test_work(struct work_struct *work)
431 container_of(work, struct zfcp_port, test_link_work); 433 container_of(work, struct zfcp_port, test_link_work);
432 int retval; 434 int retval;
433 435
434 if (!(atomic_read(&port->status) & ZFCP_STATUS_COMMON_UNBLOCKED)) {
435 zfcp_port_put(port);
436 return; /* port erp is running and will update rport status */
437 }
438
439 zfcp_port_get(port); 436 zfcp_port_get(port);
440 port->rport_task = RPORT_DEL; 437 port->rport_task = RPORT_DEL;
441 zfcp_scsi_rport_work(&port->rport_work); 438 zfcp_scsi_rport_work(&port->rport_work);
@@ -542,6 +539,9 @@ static void zfcp_validate_port(struct zfcp_port *port)
542{ 539{
543 struct zfcp_adapter *adapter = port->adapter; 540 struct zfcp_adapter *adapter = port->adapter;
544 541
542 if (!(atomic_read(&port->status) & ZFCP_STATUS_COMMON_NOESC))
543 return;
544
545 atomic_clear_mask(ZFCP_STATUS_COMMON_NOESC, &port->status); 545 atomic_clear_mask(ZFCP_STATUS_COMMON_NOESC, &port->status);
546 546
547 if ((port->supported_classes != 0) || 547 if ((port->supported_classes != 0) ||
@@ -602,10 +602,8 @@ static int zfcp_scan_eval_gpn_ft(struct zfcp_gpn_ft *gpn_ft, int max_entries)
602 if (acc->wwpn == fc_host_port_name(adapter->scsi_host)) 602 if (acc->wwpn == fc_host_port_name(adapter->scsi_host))
603 continue; 603 continue;
604 port = zfcp_get_port_by_wwpn(adapter, acc->wwpn); 604 port = zfcp_get_port_by_wwpn(adapter, acc->wwpn);
605 if (port) { 605 if (port)
606 zfcp_port_get(port);
607 continue; 606 continue;
608 }
609 607
610 port = zfcp_port_enqueue(adapter, acc->wwpn, 608 port = zfcp_port_enqueue(adapter, acc->wwpn,
611 ZFCP_STATUS_COMMON_NOESC, d_id); 609 ZFCP_STATUS_COMMON_NOESC, d_id);
@@ -637,7 +635,8 @@ int zfcp_scan_ports(struct zfcp_adapter *adapter)
637 max_entries = chain ? ZFCP_GPN_FT_MAX_ENTRIES : ZFCP_GPN_FT_ENTRIES; 635 max_entries = chain ? ZFCP_GPN_FT_MAX_ENTRIES : ZFCP_GPN_FT_ENTRIES;
638 max_bytes = chain ? ZFCP_GPN_FT_MAX_SIZE : ZFCP_CT_SIZE_ONE_PAGE; 636 max_bytes = chain ? ZFCP_GPN_FT_MAX_SIZE : ZFCP_CT_SIZE_ONE_PAGE;
639 637
640 if (fc_host_port_type(adapter->scsi_host) != FC_PORTTYPE_NPORT) 638 if (fc_host_port_type(adapter->scsi_host) != FC_PORTTYPE_NPORT &&
639 fc_host_port_type(adapter->scsi_host) != FC_PORTTYPE_NPIV)
641 return 0; 640 return 0;
642 641
643 ret = zfcp_wka_port_get(&adapter->nsp); 642 ret = zfcp_wka_port_get(&adapter->nsp);
diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c
index b29f3121b666..74dee32afba8 100644
--- a/drivers/s390/scsi/zfcp_fsf.c
+++ b/drivers/s390/scsi/zfcp_fsf.c
@@ -172,12 +172,16 @@ static void zfcp_fsf_link_down_info_eval(struct zfcp_fsf_req *req, char *id,
172 struct fsf_link_down_info *link_down) 172 struct fsf_link_down_info *link_down)
173{ 173{
174 struct zfcp_adapter *adapter = req->adapter; 174 struct zfcp_adapter *adapter = req->adapter;
175 unsigned long flags;
175 176
176 if (atomic_read(&adapter->status) & ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED) 177 if (atomic_read(&adapter->status) & ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED)
177 return; 178 return;
178 179
179 atomic_set_mask(ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED, &adapter->status); 180 atomic_set_mask(ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED, &adapter->status);
181
182 read_lock_irqsave(&zfcp_data.config_lock, flags);
180 zfcp_scsi_schedule_rports_block(adapter); 183 zfcp_scsi_schedule_rports_block(adapter);
184 read_unlock_irqrestore(&zfcp_data.config_lock, flags);
181 185
182 if (!link_down) 186 if (!link_down)
183 goto out; 187 goto out;
@@ -645,30 +649,30 @@ static void zfcp_fsf_exchange_port_data_handler(struct zfcp_fsf_req *req)
645 } 649 }
646} 650}
647 651
648static int zfcp_fsf_req_sbal_get(struct zfcp_adapter *adapter) 652static int zfcp_fsf_sbal_check(struct zfcp_adapter *adapter)
649 __releases(&adapter->req_q_lock)
650 __acquires(&adapter->req_q_lock)
651{ 653{
652 struct zfcp_qdio_queue *req_q = &adapter->req_q; 654 struct zfcp_qdio_queue *req_q = &adapter->req_q;
653 long ret;
654 655
655 if (atomic_read(&req_q->count) <= -REQUEST_LIST_SIZE) 656 spin_lock_bh(&adapter->req_q_lock);
656 return -EIO; 657 if (atomic_read(&req_q->count))
657 if (atomic_read(&req_q->count) > 0) 658 return 1;
658 return 0; 659 spin_unlock_bh(&adapter->req_q_lock);
660 return 0;
661}
662
663static int zfcp_fsf_req_sbal_get(struct zfcp_adapter *adapter)
664{
665 long ret;
659 666
660 atomic_dec(&req_q->count);
661 spin_unlock_bh(&adapter->req_q_lock); 667 spin_unlock_bh(&adapter->req_q_lock);
662 ret = wait_event_interruptible_timeout(adapter->request_wq, 668 ret = wait_event_interruptible_timeout(adapter->request_wq,
663 atomic_read(&req_q->count) >= 0, 669 zfcp_fsf_sbal_check(adapter), 5 * HZ);
664 5 * HZ);
665 spin_lock_bh(&adapter->req_q_lock);
666 atomic_inc(&req_q->count);
667
668 if (ret > 0) 670 if (ret > 0)
669 return 0; 671 return 0;
670 if (!ret) 672 if (!ret)
671 atomic_inc(&adapter->qdio_outb_full); 673 atomic_inc(&adapter->qdio_outb_full);
674
675 spin_lock_bh(&adapter->req_q_lock);
672 return -EIO; 676 return -EIO;
673} 677}
674 678
@@ -766,8 +770,9 @@ static struct zfcp_fsf_req *zfcp_fsf_req_create(struct zfcp_adapter *adapter,
766static int zfcp_fsf_req_send(struct zfcp_fsf_req *req) 770static int zfcp_fsf_req_send(struct zfcp_fsf_req *req)
767{ 771{
768 struct zfcp_adapter *adapter = req->adapter; 772 struct zfcp_adapter *adapter = req->adapter;
769 unsigned long flags; 773 unsigned long flags;
770 int idx; 774 int idx;
775 int with_qtcb = (req->qtcb != NULL);
771 776
772 /* put allocated FSF request into hash table */ 777 /* put allocated FSF request into hash table */
773 spin_lock_irqsave(&adapter->req_list_lock, flags); 778 spin_lock_irqsave(&adapter->req_list_lock, flags);
@@ -789,7 +794,7 @@ static int zfcp_fsf_req_send(struct zfcp_fsf_req *req)
789 } 794 }
790 795
791 /* Don't increase for unsolicited status */ 796 /* Don't increase for unsolicited status */
792 if (req->qtcb) 797 if (with_qtcb)
793 adapter->fsf_req_seq_no++; 798 adapter->fsf_req_seq_no++;
794 adapter->req_no++; 799 adapter->req_no++;
795 800
@@ -1253,13 +1258,13 @@ int zfcp_fsf_exchange_config_data_sync(struct zfcp_adapter *adapter,
1253 1258
1254 spin_lock_bh(&adapter->req_q_lock); 1259 spin_lock_bh(&adapter->req_q_lock);
1255 if (zfcp_fsf_req_sbal_get(adapter)) 1260 if (zfcp_fsf_req_sbal_get(adapter))
1256 goto out; 1261 goto out_unlock;
1257 1262
1258 req = zfcp_fsf_req_create(adapter, FSF_QTCB_EXCHANGE_CONFIG_DATA, 1263 req = zfcp_fsf_req_create(adapter, FSF_QTCB_EXCHANGE_CONFIG_DATA,
1259 0, NULL); 1264 0, NULL);
1260 if (IS_ERR(req)) { 1265 if (IS_ERR(req)) {
1261 retval = PTR_ERR(req); 1266 retval = PTR_ERR(req);
1262 goto out; 1267 goto out_unlock;
1263 } 1268 }
1264 1269
1265 sbale = zfcp_qdio_sbale_req(req); 1270 sbale = zfcp_qdio_sbale_req(req);
@@ -1278,14 +1283,16 @@ int zfcp_fsf_exchange_config_data_sync(struct zfcp_adapter *adapter,
1278 1283
1279 zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT); 1284 zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT);
1280 retval = zfcp_fsf_req_send(req); 1285 retval = zfcp_fsf_req_send(req);
1281out:
1282 spin_unlock_bh(&adapter->req_q_lock); 1286 spin_unlock_bh(&adapter->req_q_lock);
1283 if (!retval) 1287 if (!retval)
1284 wait_event(req->completion_wq, 1288 wait_event(req->completion_wq,
1285 req->status & ZFCP_STATUS_FSFREQ_COMPLETED); 1289 req->status & ZFCP_STATUS_FSFREQ_COMPLETED);
1286 1290
1287 zfcp_fsf_req_free(req); 1291 zfcp_fsf_req_free(req);
1292 return retval;
1288 1293
1294out_unlock:
1295 spin_unlock_bh(&adapter->req_q_lock);
1289 return retval; 1296 return retval;
1290} 1297}
1291 1298
@@ -1352,13 +1359,13 @@ int zfcp_fsf_exchange_port_data_sync(struct zfcp_adapter *adapter,
1352 1359
1353 spin_lock_bh(&adapter->req_q_lock); 1360 spin_lock_bh(&adapter->req_q_lock);
1354 if (zfcp_fsf_req_sbal_get(adapter)) 1361 if (zfcp_fsf_req_sbal_get(adapter))
1355 goto out; 1362 goto out_unlock;
1356 1363
1357 req = zfcp_fsf_req_create(adapter, FSF_QTCB_EXCHANGE_PORT_DATA, 0, 1364 req = zfcp_fsf_req_create(adapter, FSF_QTCB_EXCHANGE_PORT_DATA, 0,
1358 NULL); 1365 NULL);
1359 if (IS_ERR(req)) { 1366 if (IS_ERR(req)) {
1360 retval = PTR_ERR(req); 1367 retval = PTR_ERR(req);
1361 goto out; 1368 goto out_unlock;
1362 } 1369 }
1363 1370
1364 if (data) 1371 if (data)
@@ -1371,14 +1378,18 @@ int zfcp_fsf_exchange_port_data_sync(struct zfcp_adapter *adapter,
1371 req->handler = zfcp_fsf_exchange_port_data_handler; 1378 req->handler = zfcp_fsf_exchange_port_data_handler;
1372 zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT); 1379 zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT);
1373 retval = zfcp_fsf_req_send(req); 1380 retval = zfcp_fsf_req_send(req);
1374out:
1375 spin_unlock_bh(&adapter->req_q_lock); 1381 spin_unlock_bh(&adapter->req_q_lock);
1382
1376 if (!retval) 1383 if (!retval)
1377 wait_event(req->completion_wq, 1384 wait_event(req->completion_wq,
1378 req->status & ZFCP_STATUS_FSFREQ_COMPLETED); 1385 req->status & ZFCP_STATUS_FSFREQ_COMPLETED);
1379 zfcp_fsf_req_free(req); 1386 zfcp_fsf_req_free(req);
1380 1387
1381 return retval; 1388 return retval;
1389
1390out_unlock:
1391 spin_unlock_bh(&adapter->req_q_lock);
1392 return retval;
1382} 1393}
1383 1394
1384static void zfcp_fsf_open_port_handler(struct zfcp_fsf_req *req) 1395static void zfcp_fsf_open_port_handler(struct zfcp_fsf_req *req)
@@ -2472,8 +2483,6 @@ out:
2472 2483
2473static void zfcp_fsf_control_file_handler(struct zfcp_fsf_req *req) 2484static void zfcp_fsf_control_file_handler(struct zfcp_fsf_req *req)
2474{ 2485{
2475 if (req->qtcb->header.fsf_status != FSF_GOOD)
2476 req->status |= ZFCP_STATUS_FSFREQ_ERROR;
2477} 2486}
2478 2487
2479/** 2488/**
diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c
index 58201e1ae478..e8fbeaeb5fbf 100644
--- a/drivers/s390/scsi/zfcp_scsi.c
+++ b/drivers/s390/scsi/zfcp_scsi.c
@@ -171,7 +171,7 @@ static int zfcp_scsi_eh_abort_handler(struct scsi_cmnd *scpnt)
171 write_unlock_irqrestore(&adapter->abort_lock, flags); 171 write_unlock_irqrestore(&adapter->abort_lock, flags);
172 zfcp_scsi_dbf_event_abort("lte1", adapter, scpnt, NULL, 172 zfcp_scsi_dbf_event_abort("lte1", adapter, scpnt, NULL,
173 old_req_id); 173 old_req_id);
174 return SUCCESS; 174 return FAILED; /* completion could be in progress */
175 } 175 }
176 old_req->data = NULL; 176 old_req->data = NULL;
177 177
@@ -486,10 +486,12 @@ static void zfcp_set_rport_dev_loss_tmo(struct fc_rport *rport, u32 timeout)
486 */ 486 */
487static void zfcp_scsi_dev_loss_tmo_callbk(struct fc_rport *rport) 487static void zfcp_scsi_dev_loss_tmo_callbk(struct fc_rport *rport)
488{ 488{
489 struct zfcp_port *port = rport->dd_data; 489 struct zfcp_port *port;
490 490
491 write_lock_irq(&zfcp_data.config_lock); 491 write_lock_irq(&zfcp_data.config_lock);
492 port->rport = NULL; 492 port = rport->dd_data;
493 if (port)
494 port->rport = NULL;
493 write_unlock_irq(&zfcp_data.config_lock); 495 write_unlock_irq(&zfcp_data.config_lock);
494} 496}
495 497
@@ -503,9 +505,18 @@ static void zfcp_scsi_dev_loss_tmo_callbk(struct fc_rport *rport)
503 */ 505 */
504static void zfcp_scsi_terminate_rport_io(struct fc_rport *rport) 506static void zfcp_scsi_terminate_rport_io(struct fc_rport *rport)
505{ 507{
506 struct zfcp_port *port = rport->dd_data; 508 struct zfcp_port *port;
509
510 write_lock_irq(&zfcp_data.config_lock);
511 port = rport->dd_data;
512 if (port)
513 zfcp_port_get(port);
514 write_unlock_irq(&zfcp_data.config_lock);
507 515
508 zfcp_erp_port_reopen(port, 0, "sctrpi1", NULL); 516 if (port) {
517 zfcp_erp_port_reopen(port, 0, "sctrpi1", NULL);
518 zfcp_port_put(port);
519 }
509} 520}
510 521
511static void zfcp_scsi_rport_register(struct zfcp_port *port) 522static void zfcp_scsi_rport_register(struct zfcp_port *port)
@@ -534,8 +545,10 @@ static void zfcp_scsi_rport_register(struct zfcp_port *port)
534 545
535static void zfcp_scsi_rport_block(struct zfcp_port *port) 546static void zfcp_scsi_rport_block(struct zfcp_port *port)
536{ 547{
537 if (port->rport) 548 struct fc_rport *rport = port->rport;
538 fc_remote_port_delete(port->rport); 549
550 if (rport)
551 fc_remote_port_delete(rport);
539} 552}
540 553
541void zfcp_scsi_schedule_rport_register(struct zfcp_port *port) 554void zfcp_scsi_schedule_rport_register(struct zfcp_port *port)
@@ -583,6 +596,23 @@ void zfcp_scsi_rport_work(struct work_struct *work)
583} 596}
584 597
585 598
599void zfcp_scsi_scan(struct work_struct *work)
600{
601 struct zfcp_unit *unit = container_of(work, struct zfcp_unit,
602 scsi_work);
603 struct fc_rport *rport;
604
605 flush_work(&unit->port->rport_work);
606 rport = unit->port->rport;
607
608 if (rport && rport->port_state == FC_PORTSTATE_ONLINE)
609 scsi_scan_target(&rport->dev, 0, rport->scsi_target_id,
610 scsilun_to_int((struct scsi_lun *)
611 &unit->fcp_lun), 0);
612
613 zfcp_unit_put(unit);
614}
615
586struct fc_function_template zfcp_transport_functions = { 616struct fc_function_template zfcp_transport_functions = {
587 .show_starget_port_id = 1, 617 .show_starget_port_id = 1,
588 .show_starget_port_name = 1, 618 .show_starget_port_name = 1,
diff --git a/drivers/s390/scsi/zfcp_sysfs.c b/drivers/s390/scsi/zfcp_sysfs.c
index 9a3b8e261c0a..3e51e64d1108 100644
--- a/drivers/s390/scsi/zfcp_sysfs.c
+++ b/drivers/s390/scsi/zfcp_sysfs.c
@@ -254,12 +254,21 @@ static ssize_t zfcp_sysfs_unit_remove_store(struct device *dev,
254 254
255 write_lock_irq(&zfcp_data.config_lock); 255 write_lock_irq(&zfcp_data.config_lock);
256 unit = zfcp_get_unit_by_lun(port, fcp_lun); 256 unit = zfcp_get_unit_by_lun(port, fcp_lun);
257 if (unit && (atomic_read(&unit->refcount) == 0)) { 257 if (unit) {
258 zfcp_unit_get(unit); 258 write_unlock_irq(&zfcp_data.config_lock);
259 atomic_set_mask(ZFCP_STATUS_COMMON_REMOVE, &unit->status); 259 /* wait for possible timeout during SCSI probe */
260 list_move(&unit->list, &unit_remove_lh); 260 flush_work(&unit->scsi_work);
261 } else 261 write_lock_irq(&zfcp_data.config_lock);
262 unit = NULL; 262
263 if (atomic_read(&unit->refcount) == 0) {
264 zfcp_unit_get(unit);
265 atomic_set_mask(ZFCP_STATUS_COMMON_REMOVE,
266 &unit->status);
267 list_move(&unit->list, &unit_remove_lh);
268 } else {
269 unit = NULL;
270 }
271 }
263 272
264 write_unlock_irq(&zfcp_data.config_lock); 273 write_unlock_irq(&zfcp_data.config_lock);
265 274
diff --git a/drivers/sbus/char/jsflash.c b/drivers/sbus/char/jsflash.c
index e6d1fc8c54f1..a85ad05e8548 100644
--- a/drivers/sbus/char/jsflash.c
+++ b/drivers/sbus/char/jsflash.c
@@ -383,18 +383,22 @@ static int jsf_ioctl_program(void __user *arg)
383 return 0; 383 return 0;
384} 384}
385 385
386static int jsf_ioctl(struct inode *inode, struct file *f, unsigned int cmd, 386static long jsf_ioctl(struct file *f, unsigned int cmd, unsigned long arg)
387 unsigned long arg)
388{ 387{
388 lock_kernel();
389 int error = -ENOTTY; 389 int error = -ENOTTY;
390 void __user *argp = (void __user *)arg; 390 void __user *argp = (void __user *)arg;
391 391
392 if (!capable(CAP_SYS_ADMIN)) 392 if (!capable(CAP_SYS_ADMIN)) {
393 unlock_kernel();
393 return -EPERM; 394 return -EPERM;
395 }
394 switch (cmd) { 396 switch (cmd) {
395 case JSFLASH_IDENT: 397 case JSFLASH_IDENT:
396 if (copy_to_user(argp, &jsf0.id, JSFIDSZ)) 398 if (copy_to_user(argp, &jsf0.id, JSFIDSZ)) {
399 unlock_kernel();
397 return -EFAULT; 400 return -EFAULT;
401 }
398 break; 402 break;
399 case JSFLASH_ERASE: 403 case JSFLASH_ERASE:
400 error = jsf_ioctl_erase(arg); 404 error = jsf_ioctl_erase(arg);
@@ -404,6 +408,7 @@ static int jsf_ioctl(struct inode *inode, struct file *f, unsigned int cmd,
404 break; 408 break;
405 } 409 }
406 410
411 unlock_kernel();
407 return error; 412 return error;
408} 413}
409 414
@@ -439,7 +444,7 @@ static const struct file_operations jsf_fops = {
439 .llseek = jsf_lseek, 444 .llseek = jsf_lseek,
440 .read = jsf_read, 445 .read = jsf_read,
441 .write = jsf_write, 446 .write = jsf_write,
442 .ioctl = jsf_ioctl, 447 .unlocked_ioctl = jsf_ioctl,
443 .mmap = jsf_mmap, 448 .mmap = jsf_mmap,
444 .open = jsf_open, 449 .open = jsf_open,
445 .release = jsf_release, 450 .release = jsf_release,
diff --git a/drivers/sbus/char/uctrl.c b/drivers/sbus/char/uctrl.c
index 27993c37775d..2c56fd56ec63 100644
--- a/drivers/sbus/char/uctrl.c
+++ b/drivers/sbus/char/uctrl.c
@@ -197,9 +197,8 @@ static struct uctrl_driver {
197static void uctrl_get_event_status(struct uctrl_driver *); 197static void uctrl_get_event_status(struct uctrl_driver *);
198static void uctrl_get_external_status(struct uctrl_driver *); 198static void uctrl_get_external_status(struct uctrl_driver *);
199 199
200static int 200static long
201uctrl_ioctl(struct inode *inode, struct file *file, 201uctrl_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
202 unsigned int cmd, unsigned long arg)
203{ 202{
204 switch (cmd) { 203 switch (cmd) {
205 default: 204 default:
@@ -226,7 +225,7 @@ static irqreturn_t uctrl_interrupt(int irq, void *dev_id)
226static const struct file_operations uctrl_fops = { 225static const struct file_operations uctrl_fops = {
227 .owner = THIS_MODULE, 226 .owner = THIS_MODULE,
228 .llseek = no_llseek, 227 .llseek = no_llseek,
229 .ioctl = uctrl_ioctl, 228 .unlocked_ioctl = uctrl_ioctl,
230 .open = uctrl_open, 229 .open = uctrl_open,
231}; 230};
232 231
diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c
index fdb14ec4fd47..8b7983aba8f7 100644
--- a/drivers/scsi/3w-9xxx.c
+++ b/drivers/scsi/3w-9xxx.c
@@ -2234,10 +2234,10 @@ static int twa_resume(struct pci_dev *pdev)
2234 pci_set_master(pdev); 2234 pci_set_master(pdev);
2235 pci_try_set_mwi(pdev); 2235 pci_try_set_mwi(pdev);
2236 2236
2237 if (pci_set_dma_mask(pdev, DMA_64BIT_MASK) 2237 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64))
2238 || pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK)) 2238 || pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)))
2239 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK) 2239 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))
2240 || pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK)) { 2240 || pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) {
2241 TW_PRINTK(host, TW_DRIVER, 0x40, "Failed to set dma mask during resume"); 2241 TW_PRINTK(host, TW_DRIVER, 0x40, "Failed to set dma mask during resume");
2242 retval = -ENODEV; 2242 retval = -ENODEV;
2243 goto out_disable_device; 2243 goto out_disable_device;
diff --git a/drivers/scsi/a4000t.c b/drivers/scsi/a4000t.c
index 61af3d91ac8a..e3519fa5a3ba 100644
--- a/drivers/scsi/a4000t.c
+++ b/drivers/scsi/a4000t.c
@@ -129,7 +129,7 @@ static int __init a4000t_scsi_init(void)
129 a4000t_scsi_device = platform_device_register_simple("a4000t-scsi", 129 a4000t_scsi_device = platform_device_register_simple("a4000t-scsi",
130 -1, NULL, 0); 130 -1, NULL, 0);
131 if (IS_ERR(a4000t_scsi_device)) { 131 if (IS_ERR(a4000t_scsi_device)) {
132 platform_driver_register(&a4000t_scsi_driver); 132 platform_driver_unregister(&a4000t_scsi_driver);
133 return PTR_ERR(a4000t_scsi_device); 133 return PTR_ERR(a4000t_scsi_device);
134 } 134 }
135 135
diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c
index 280261c451d6..2a889853a106 100644
--- a/drivers/scsi/aacraid/aachba.c
+++ b/drivers/scsi/aacraid/aachba.c
@@ -1378,7 +1378,7 @@ int aac_get_adapter_info(struct aac_dev* dev)
1378 if (dev->nondasd_support && !dev->in_reset) 1378 if (dev->nondasd_support && !dev->in_reset)
1379 printk(KERN_INFO "%s%d: Non-DASD support enabled.\n",dev->name, dev->id); 1379 printk(KERN_INFO "%s%d: Non-DASD support enabled.\n",dev->name, dev->id);
1380 1380
1381 if (dma_get_required_mask(&dev->pdev->dev) > DMA_32BIT_MASK) 1381 if (dma_get_required_mask(&dev->pdev->dev) > DMA_BIT_MASK(32))
1382 dev->needs_dac = 1; 1382 dev->needs_dac = 1;
1383 dev->dac_support = 0; 1383 dev->dac_support = 0;
1384 if ((sizeof(dma_addr_t) > 4) && dev->needs_dac && 1384 if ((sizeof(dma_addr_t) > 4) && dev->needs_dac &&
diff --git a/drivers/scsi/cxgb3i/cxgb3i.h b/drivers/scsi/cxgb3i/cxgb3i.h
index d362860e7504..59b0958d2d11 100644
--- a/drivers/scsi/cxgb3i/cxgb3i.h
+++ b/drivers/scsi/cxgb3i/cxgb3i.h
@@ -34,7 +34,7 @@
34#include "cxgb3i_offload.h" 34#include "cxgb3i_offload.h"
35#include "cxgb3i_ddp.h" 35#include "cxgb3i_ddp.h"
36 36
37#define CXGB3I_SCSI_QDEPTH_DFLT 128 37#define CXGB3I_SCSI_HOST_QDEPTH 1024
38#define CXGB3I_MAX_TARGET CXGB3I_MAX_CONN 38#define CXGB3I_MAX_TARGET CXGB3I_MAX_CONN
39#define CXGB3I_MAX_LUN 512 39#define CXGB3I_MAX_LUN 512
40#define ISCSI_PDU_NONPAYLOAD_MAX \ 40#define ISCSI_PDU_NONPAYLOAD_MAX \
diff --git a/drivers/scsi/cxgb3i/cxgb3i_ddp.c b/drivers/scsi/cxgb3i/cxgb3i_ddp.c
index d06a661c209f..99c912547902 100644
--- a/drivers/scsi/cxgb3i/cxgb3i_ddp.c
+++ b/drivers/scsi/cxgb3i/cxgb3i_ddp.c
@@ -120,20 +120,26 @@ static void clear_ddp_map(struct cxgb3i_ddp_info *ddp, unsigned int tag,
120} 120}
121 121
122static inline int ddp_find_unused_entries(struct cxgb3i_ddp_info *ddp, 122static inline int ddp_find_unused_entries(struct cxgb3i_ddp_info *ddp,
123 int start, int max, int count, 123 unsigned int start, unsigned int max,
124 unsigned int count,
124 struct cxgb3i_gather_list *gl) 125 struct cxgb3i_gather_list *gl)
125{ 126{
126 unsigned int i, j; 127 unsigned int i, j, k;
127 128
129 /* not enough entries */
130 if ((max - start) < count)
131 return -EBUSY;
132
133 max -= count;
128 spin_lock(&ddp->map_lock); 134 spin_lock(&ddp->map_lock);
129 for (i = start; i <= max;) { 135 for (i = start; i < max;) {
130 for (j = 0; j < count; j++) { 136 for (j = 0, k = i; j < count; j++, k++) {
131 if (ddp->gl_map[i + j]) 137 if (ddp->gl_map[k])
132 break; 138 break;
133 } 139 }
134 if (j == count) { 140 if (j == count) {
135 for (j = 0; j < count; j++) 141 for (j = 0, k = i; j < count; j++, k++)
136 ddp->gl_map[i + j] = gl; 142 ddp->gl_map[k] = gl;
137 spin_unlock(&ddp->map_lock); 143 spin_unlock(&ddp->map_lock);
138 return i; 144 return i;
139 } 145 }
@@ -354,7 +360,7 @@ int cxgb3i_ddp_tag_reserve(struct t3cdev *tdev, unsigned int tid,
354 struct cxgb3i_ddp_info *ddp = tdev->ulp_iscsi; 360 struct cxgb3i_ddp_info *ddp = tdev->ulp_iscsi;
355 struct pagepod_hdr hdr; 361 struct pagepod_hdr hdr;
356 unsigned int npods; 362 unsigned int npods;
357 int idx = -1, idx_max; 363 int idx = -1;
358 int err = -ENOMEM; 364 int err = -ENOMEM;
359 u32 sw_tag = *tagp; 365 u32 sw_tag = *tagp;
360 u32 tag; 366 u32 tag;
@@ -367,17 +373,17 @@ int cxgb3i_ddp_tag_reserve(struct t3cdev *tdev, unsigned int tid,
367 } 373 }
368 374
369 npods = (gl->nelem + PPOD_PAGES_MAX - 1) >> PPOD_PAGES_SHIFT; 375 npods = (gl->nelem + PPOD_PAGES_MAX - 1) >> PPOD_PAGES_SHIFT;
370 idx_max = ddp->nppods - npods + 1;
371 376
372 if (ddp->idx_last == ddp->nppods) 377 if (ddp->idx_last == ddp->nppods)
373 idx = ddp_find_unused_entries(ddp, 0, idx_max, npods, gl); 378 idx = ddp_find_unused_entries(ddp, 0, ddp->nppods, npods, gl);
374 else { 379 else {
375 idx = ddp_find_unused_entries(ddp, ddp->idx_last + 1, 380 idx = ddp_find_unused_entries(ddp, ddp->idx_last + 1,
376 idx_max, npods, gl); 381 ddp->nppods, npods, gl);
377 if (idx < 0 && ddp->idx_last >= npods) 382 if (idx < 0 && ddp->idx_last >= npods) {
378 idx = ddp_find_unused_entries(ddp, 0, 383 idx = ddp_find_unused_entries(ddp, 0,
379 ddp->idx_last - npods + 1, 384 min(ddp->idx_last + npods, ddp->nppods),
380 npods, gl); 385 npods, gl);
386 }
381 } 387 }
382 if (idx < 0) { 388 if (idx < 0) {
383 ddp_log_debug("xferlen %u, gl %u, npods %u NO DDP.\n", 389 ddp_log_debug("xferlen %u, gl %u, npods %u NO DDP.\n",
diff --git a/drivers/scsi/cxgb3i/cxgb3i_iscsi.c b/drivers/scsi/cxgb3i/cxgb3i_iscsi.c
index fff8e4327644..9212400b9b13 100644
--- a/drivers/scsi/cxgb3i/cxgb3i_iscsi.c
+++ b/drivers/scsi/cxgb3i/cxgb3i_iscsi.c
@@ -876,13 +876,14 @@ static struct scsi_host_template cxgb3i_host_template = {
876 .proc_name = "cxgb3i", 876 .proc_name = "cxgb3i",
877 .queuecommand = iscsi_queuecommand, 877 .queuecommand = iscsi_queuecommand,
878 .change_queue_depth = iscsi_change_queue_depth, 878 .change_queue_depth = iscsi_change_queue_depth,
879 .can_queue = CXGB3I_SCSI_QDEPTH_DFLT - 1, 879 .can_queue = CXGB3I_SCSI_HOST_QDEPTH,
880 .sg_tablesize = SG_ALL, 880 .sg_tablesize = SG_ALL,
881 .max_sectors = 0xFFFF, 881 .max_sectors = 0xFFFF,
882 .cmd_per_lun = CXGB3I_SCSI_QDEPTH_DFLT, 882 .cmd_per_lun = ISCSI_DEF_CMD_PER_LUN,
883 .eh_abort_handler = iscsi_eh_abort, 883 .eh_abort_handler = iscsi_eh_abort,
884 .eh_device_reset_handler = iscsi_eh_device_reset, 884 .eh_device_reset_handler = iscsi_eh_device_reset,
885 .eh_target_reset_handler = iscsi_eh_target_reset, 885 .eh_target_reset_handler = iscsi_eh_target_reset,
886 .target_alloc = iscsi_target_alloc,
886 .use_clustering = DISABLE_CLUSTERING, 887 .use_clustering = DISABLE_CLUSTERING,
887 .this_id = -1, 888 .this_id = -1,
888}; 889};
diff --git a/drivers/scsi/cxgb3i/cxgb3i_offload.c b/drivers/scsi/cxgb3i/cxgb3i_offload.c
index 4d8654cdbdae..e11c9c180f39 100644
--- a/drivers/scsi/cxgb3i/cxgb3i_offload.c
+++ b/drivers/scsi/cxgb3i/cxgb3i_offload.c
@@ -1737,7 +1737,7 @@ int cxgb3i_c3cn_send_pdus(struct s3_conn *c3cn, struct sk_buff *skb)
1737 c3cn_tx_debug("c3cn 0x%p, snd %u - %u > %u.\n", 1737 c3cn_tx_debug("c3cn 0x%p, snd %u - %u > %u.\n",
1738 c3cn, c3cn->write_seq, c3cn->snd_una, 1738 c3cn, c3cn->write_seq, c3cn->snd_una,
1739 cxgb3_snd_win); 1739 cxgb3_snd_win);
1740 err = -EAGAIN; 1740 err = -ENOBUFS;
1741 goto out_err; 1741 goto out_err;
1742 } 1742 }
1743 1743
@@ -1775,6 +1775,8 @@ done:
1775out_err: 1775out_err:
1776 if (copied == 0 && err == -EPIPE) 1776 if (copied == 0 && err == -EPIPE)
1777 copied = c3cn->err ? c3cn->err : -EPIPE; 1777 copied = c3cn->err ? c3cn->err : -EPIPE;
1778 else
1779 copied = err;
1778 goto done; 1780 goto done;
1779} 1781}
1780 1782
diff --git a/drivers/scsi/cxgb3i/cxgb3i_pdu.c b/drivers/scsi/cxgb3i/cxgb3i_pdu.c
index 7eebc9a7cb35..709105071177 100644
--- a/drivers/scsi/cxgb3i/cxgb3i_pdu.c
+++ b/drivers/scsi/cxgb3i/cxgb3i_pdu.c
@@ -400,17 +400,18 @@ int cxgb3i_conn_xmit_pdu(struct iscsi_task *task)
400 return 0; 400 return 0;
401 } 401 }
402 402
403 if (err < 0 && err != -EAGAIN) { 403 if (err == -EAGAIN || err == -ENOBUFS) {
404 kfree_skb(skb); 404 /* reset skb to send when we are called again */
405 cxgb3i_tx_debug("itt 0x%x, skb 0x%p, len %u/%u, xmit err %d.\n", 405 tdata->skb = skb;
406 task->itt, skb, skb->len, skb->data_len, err);
407 iscsi_conn_printk(KERN_ERR, task->conn, "xmit err %d.\n", err);
408 iscsi_conn_failure(task->conn, ISCSI_ERR_XMIT_FAILED);
409 return err; 406 return err;
410 } 407 }
411 /* reset skb to send when we are called again */ 408
412 tdata->skb = skb; 409 kfree_skb(skb);
413 return -EAGAIN; 410 cxgb3i_tx_debug("itt 0x%x, skb 0x%p, len %u/%u, xmit err %d.\n",
411 task->itt, skb, skb->len, skb->data_len, err);
412 iscsi_conn_printk(KERN_ERR, task->conn, "xmit err %d.\n", err);
413 iscsi_conn_failure(task->conn, ISCSI_ERR_XMIT_FAILED);
414 return err;
414} 415}
415 416
416int cxgb3i_pdu_init(void) 417int cxgb3i_pdu_init(void)
diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
index f2d16127bd0a..ce33f107b0a0 100644
--- a/drivers/scsi/fcoe/fcoe.c
+++ b/drivers/scsi/fcoe/fcoe.c
@@ -57,7 +57,7 @@ DEFINE_RWLOCK(fcoe_hostlist_lock);
57DEFINE_TIMER(fcoe_timer, NULL, 0, 0); 57DEFINE_TIMER(fcoe_timer, NULL, 0, 0);
58DEFINE_PER_CPU(struct fcoe_percpu_s, fcoe_percpu); 58DEFINE_PER_CPU(struct fcoe_percpu_s, fcoe_percpu);
59 59
60/* Function Prototyes */ 60/* Function Prototypes */
61static int fcoe_reset(struct Scsi_Host *shost); 61static int fcoe_reset(struct Scsi_Host *shost);
62static int fcoe_xmit(struct fc_lport *, struct fc_frame *); 62static int fcoe_xmit(struct fc_lport *, struct fc_frame *);
63static int fcoe_rcv(struct sk_buff *, struct net_device *, 63static int fcoe_rcv(struct sk_buff *, struct net_device *,
@@ -190,7 +190,6 @@ static void fcoe_update_src_mac(struct fcoe_ctlr *fip, u8 *old, u8 *new)
190/** 190/**
191 * fcoe_lport_config() - sets up the fc_lport 191 * fcoe_lport_config() - sets up the fc_lport
192 * @lp: ptr to the fc_lport 192 * @lp: ptr to the fc_lport
193 * @shost: ptr to the parent scsi host
194 * 193 *
195 * Returns: 0 for success 194 * Returns: 0 for success
196 */ 195 */
@@ -351,6 +350,7 @@ static int fcoe_netdev_config(struct fc_lport *lp, struct net_device *netdev)
351 dev_unicast_add(fc->real_dev, flogi_maddr, ETH_ALEN); 350 dev_unicast_add(fc->real_dev, flogi_maddr, ETH_ALEN);
352 if (fc->ctlr.spma) 351 if (fc->ctlr.spma)
353 dev_unicast_add(fc->real_dev, fc->ctlr.ctl_src_addr, ETH_ALEN); 352 dev_unicast_add(fc->real_dev, fc->ctlr.ctl_src_addr, ETH_ALEN);
353 dev_mc_add(fc->real_dev, FIP_ALL_ENODE_MACS, ETH_ALEN, 0);
354 rtnl_unlock(); 354 rtnl_unlock();
355 355
356 /* 356 /*
@@ -470,7 +470,7 @@ static int fcoe_if_destroy(struct net_device *netdev)
470 if (lp->emp) 470 if (lp->emp)
471 fc_exch_mgr_free(lp->emp); 471 fc_exch_mgr_free(lp->emp);
472 472
473 /* Free the per-CPU revieve threads */ 473 /* Free the per-CPU receive threads */
474 fcoe_percpu_clean(lp); 474 fcoe_percpu_clean(lp);
475 475
476 /* Free existing skbs */ 476 /* Free existing skbs */
@@ -755,7 +755,7 @@ static void fcoe_percpu_thread_destroy(unsigned int cpu)
755 } 755 }
756#else 756#else
757 /* 757 /*
758 * This a non-SMP scenario where the singluar Rx thread is 758 * This a non-SMP scenario where the singular Rx thread is
759 * being removed. Free all skbs and stop the thread. 759 * being removed. Free all skbs and stop the thread.
760 */ 760 */
761 spin_lock_bh(&p->fcoe_rx_list.lock); 761 spin_lock_bh(&p->fcoe_rx_list.lock);
@@ -812,7 +812,7 @@ static struct notifier_block fcoe_cpu_notifier = {
812 * @skb: the receive skb 812 * @skb: the receive skb
813 * @dev: associated net device 813 * @dev: associated net device
814 * @ptype: context 814 * @ptype: context
815 * @odldev: last device 815 * @olddev: last device
816 * 816 *
817 * this function will receive the packet and build fc frame and pass it up 817 * this function will receive the packet and build fc frame and pass it up
818 * 818 *
@@ -919,7 +919,6 @@ err2:
919 kfree_skb(skb); 919 kfree_skb(skb);
920 return -1; 920 return -1;
921} 921}
922EXPORT_SYMBOL_GPL(fcoe_rcv);
923 922
924/** 923/**
925 * fcoe_start_io() - pass to netdev to start xmit for fcoe 924 * fcoe_start_io() - pass to netdev to start xmit for fcoe
@@ -940,7 +939,7 @@ static inline int fcoe_start_io(struct sk_buff *skb)
940} 939}
941 940
942/** 941/**
943 * fcoe_get_paged_crc_eof() - in case we need alloc a page for crc_eof 942 * fcoe_get_paged_crc_eof() - in case we need to alloc a page for crc_eof
944 * @skb: the skb to be xmitted 943 * @skb: the skb to be xmitted
945 * @tlen: total len 944 * @tlen: total len
946 * 945 *
@@ -982,7 +981,7 @@ static int fcoe_get_paged_crc_eof(struct sk_buff *skb, int tlen)
982 981
983/** 982/**
984 * fcoe_fc_crc() - calculates FC CRC in this fcoe skb 983 * fcoe_fc_crc() - calculates FC CRC in this fcoe skb
985 * @fp: the fc_frame containg data to be checksummed 984 * @fp: the fc_frame containing data to be checksummed
986 * 985 *
987 * This uses crc32() to calculate the crc for fc frame 986 * This uses crc32() to calculate the crc for fc frame
988 * Return : 32 bit crc 987 * Return : 32 bit crc
@@ -1046,7 +1045,7 @@ int fcoe_xmit(struct fc_lport *lp, struct fc_frame *fp)
1046 wlen = skb->len / FCOE_WORD_TO_BYTE; 1045 wlen = skb->len / FCOE_WORD_TO_BYTE;
1047 1046
1048 if (!lp->link_up) { 1047 if (!lp->link_up) {
1049 kfree(skb); 1048 kfree_skb(skb);
1050 return 0; 1049 return 0;
1051 } 1050 }
1052 1051
@@ -1097,7 +1096,7 @@ int fcoe_xmit(struct fc_lport *lp, struct fc_frame *fp)
1097 cp = NULL; 1096 cp = NULL;
1098 } 1097 }
1099 1098
1100 /* adjust skb netowrk/transport offsets to match mac/fcoe/fc */ 1099 /* adjust skb network/transport offsets to match mac/fcoe/fc */
1101 skb_push(skb, elen + hlen); 1100 skb_push(skb, elen + hlen);
1102 skb_reset_mac_header(skb); 1101 skb_reset_mac_header(skb);
1103 skb_reset_network_header(skb); 1102 skb_reset_network_header(skb);
@@ -1158,7 +1157,6 @@ int fcoe_xmit(struct fc_lport *lp, struct fc_frame *fp)
1158 1157
1159 return 0; 1158 return 0;
1160} 1159}
1161EXPORT_SYMBOL_GPL(fcoe_xmit);
1162 1160
1163/** 1161/**
1164 * fcoe_percpu_receive_thread() - recv thread per cpu 1162 * fcoe_percpu_receive_thread() - recv thread per cpu
@@ -1331,17 +1329,16 @@ void fcoe_watchdog(ulong vp)
1331 1329
1332 1330
1333/** 1331/**
1334 * fcoe_check_wait_queue() - put the skb into fcoe pending xmit queue 1332 * fcoe_check_wait_queue() - attempt to clear the transmit backlog
1335 * @lp: the fc_port for this skb 1333 * @lp: the fc_lport
1336 * @skb: the associated skb to be xmitted
1337 * 1334 *
1338 * This empties the wait_queue, dequeue the head of the wait_queue queue 1335 * This empties the wait_queue, dequeue the head of the wait_queue queue
1339 * and calls fcoe_start_io() for each packet, if all skb have been 1336 * and calls fcoe_start_io() for each packet, if all skb have been
1340 * transmitted, return qlen or -1 if a error occurs, then restore 1337 * transmitted, return qlen or -1 if a error occurs, then restore
1341 * wait_queue and try again later. 1338 * wait_queue and try again later.
1342 * 1339 *
1343 * The wait_queue is used when the skb transmit fails. skb will go 1340 * The wait_queue is used when the skb transmit fails. skb will go
1344 * in the wait_queue which will be emptied by the time function OR 1341 * in the wait_queue which will be emptied by the timer function or
1345 * by the next skb transmit. 1342 * by the next skb transmit.
1346 * 1343 *
1347 * Returns: 0 for success 1344 * Returns: 0 for success
@@ -1390,10 +1387,6 @@ out:
1390 */ 1387 */
1391static void fcoe_dev_setup() 1388static void fcoe_dev_setup()
1392{ 1389{
1393 /*
1394 * here setup a interface specific wd time to
1395 * monitor the link state
1396 */
1397 register_netdevice_notifier(&fcoe_notifier); 1390 register_netdevice_notifier(&fcoe_notifier);
1398} 1391}
1399 1392
@@ -1472,10 +1465,9 @@ out:
1472 1465
1473/** 1466/**
1474 * fcoe_if_to_netdev() - parse a name buffer to get netdev 1467 * fcoe_if_to_netdev() - parse a name buffer to get netdev
1475 * @ifname: fixed array for output parsed ifname
1476 * @buffer: incoming buffer to be copied 1468 * @buffer: incoming buffer to be copied
1477 * 1469 *
1478 * Returns: NULL or ptr to netdeive 1470 * Returns: NULL or ptr to net_device
1479 */ 1471 */
1480static struct net_device *fcoe_if_to_netdev(const char *buffer) 1472static struct net_device *fcoe_if_to_netdev(const char *buffer)
1481{ 1473{
@@ -1493,7 +1485,7 @@ static struct net_device *fcoe_if_to_netdev(const char *buffer)
1493} 1485}
1494 1486
1495/** 1487/**
1496 * fcoe_netdev_to_module_owner() - finds out the nic drive moddule of the netdev 1488 * fcoe_netdev_to_module_owner() - finds out the driver module of the netdev
1497 * @netdev: the target netdev 1489 * @netdev: the target netdev
1498 * 1490 *
1499 * Returns: ptr to the struct module, NULL for failure 1491 * Returns: ptr to the struct module, NULL for failure
@@ -1523,7 +1515,7 @@ fcoe_netdev_to_module_owner(const struct net_device *netdev)
1523 * Holds the Ethernet driver module by try_module_get() for 1515 * Holds the Ethernet driver module by try_module_get() for
1524 * the corresponding netdev. 1516 * the corresponding netdev.
1525 * 1517 *
1526 * Returns: 0 for succsss 1518 * Returns: 0 for success
1527 */ 1519 */
1528static int fcoe_ethdrv_get(const struct net_device *netdev) 1520static int fcoe_ethdrv_get(const struct net_device *netdev)
1529{ 1521{
@@ -1545,7 +1537,7 @@ static int fcoe_ethdrv_get(const struct net_device *netdev)
1545 * Releases the Ethernet driver module by module_put for 1537 * Releases the Ethernet driver module by module_put for
1546 * the corresponding netdev. 1538 * the corresponding netdev.
1547 * 1539 *
1548 * Returns: 0 for succsss 1540 * Returns: 0 for success
1549 */ 1541 */
1550static int fcoe_ethdrv_put(const struct net_device *netdev) 1542static int fcoe_ethdrv_put(const struct net_device *netdev)
1551{ 1543{
@@ -1563,7 +1555,7 @@ static int fcoe_ethdrv_put(const struct net_device *netdev)
1563 1555
1564/** 1556/**
1565 * fcoe_destroy() - handles the destroy from sysfs 1557 * fcoe_destroy() - handles the destroy from sysfs
1566 * @buffer: expcted to be a eth if name 1558 * @buffer: expected to be an eth if name
1567 * @kp: associated kernel param 1559 * @kp: associated kernel param
1568 * 1560 *
1569 * Returns: 0 for success 1561 * Returns: 0 for success
@@ -1600,7 +1592,7 @@ out_nodev:
1600 1592
1601/** 1593/**
1602 * fcoe_create() - Handles the create call from sysfs 1594 * fcoe_create() - Handles the create call from sysfs
1603 * @buffer: expcted to be a eth if name 1595 * @buffer: expected to be an eth if name
1604 * @kp: associated kernel param 1596 * @kp: associated kernel param
1605 * 1597 *
1606 * Returns: 0 for success 1598 * Returns: 0 for success
@@ -1687,7 +1679,6 @@ int fcoe_link_ok(struct fc_lport *lp)
1687 1679
1688 return rc; 1680 return rc;
1689} 1681}
1690EXPORT_SYMBOL_GPL(fcoe_link_ok);
1691 1682
1692/** 1683/**
1693 * fcoe_percpu_clean() - Clear the pending skbs for an lport 1684 * fcoe_percpu_clean() - Clear the pending skbs for an lport
@@ -1719,7 +1710,6 @@ void fcoe_percpu_clean(struct fc_lport *lp)
1719 spin_unlock_bh(&pp->fcoe_rx_list.lock); 1710 spin_unlock_bh(&pp->fcoe_rx_list.lock);
1720 } 1711 }
1721} 1712}
1722EXPORT_SYMBOL_GPL(fcoe_percpu_clean);
1723 1713
1724/** 1714/**
1725 * fcoe_clean_pending_queue() - Dequeue a skb and free it 1715 * fcoe_clean_pending_queue() - Dequeue a skb and free it
@@ -1740,7 +1730,6 @@ void fcoe_clean_pending_queue(struct fc_lport *lp)
1740 } 1730 }
1741 spin_unlock_bh(&fc->fcoe_pending_queue.lock); 1731 spin_unlock_bh(&fc->fcoe_pending_queue.lock);
1742} 1732}
1743EXPORT_SYMBOL_GPL(fcoe_clean_pending_queue);
1744 1733
1745/** 1734/**
1746 * fcoe_reset() - Resets the fcoe 1735 * fcoe_reset() - Resets the fcoe
@@ -1754,11 +1743,10 @@ int fcoe_reset(struct Scsi_Host *shost)
1754 fc_lport_reset(lport); 1743 fc_lport_reset(lport);
1755 return 0; 1744 return 0;
1756} 1745}
1757EXPORT_SYMBOL_GPL(fcoe_reset);
1758 1746
1759/** 1747/**
1760 * fcoe_hostlist_lookup_softc() - find the corresponding lport by a given device 1748 * fcoe_hostlist_lookup_softc() - find the corresponding lport by a given device
1761 * @device: this is currently ptr to net_device 1749 * @dev: this is currently ptr to net_device
1762 * 1750 *
1763 * Returns: NULL or the located fcoe_softc 1751 * Returns: NULL or the located fcoe_softc
1764 */ 1752 */
@@ -1792,11 +1780,10 @@ struct fc_lport *fcoe_hostlist_lookup(const struct net_device *netdev)
1792 1780
1793 return (fc) ? fc->ctlr.lp : NULL; 1781 return (fc) ? fc->ctlr.lp : NULL;
1794} 1782}
1795EXPORT_SYMBOL_GPL(fcoe_hostlist_lookup);
1796 1783
1797/** 1784/**
1798 * fcoe_hostlist_add() - Add a lport to lports list 1785 * fcoe_hostlist_add() - Add a lport to lports list
1799 * @lp: ptr to the fc_lport to badded 1786 * @lp: ptr to the fc_lport to be added
1800 * 1787 *
1801 * Returns: 0 for success 1788 * Returns: 0 for success
1802 */ 1789 */
@@ -1813,11 +1800,10 @@ int fcoe_hostlist_add(const struct fc_lport *lp)
1813 } 1800 }
1814 return 0; 1801 return 0;
1815} 1802}
1816EXPORT_SYMBOL_GPL(fcoe_hostlist_add);
1817 1803
1818/** 1804/**
1819 * fcoe_hostlist_remove() - remove a lport from lports list 1805 * fcoe_hostlist_remove() - remove a lport from lports list
1820 * @lp: ptr to the fc_lport to badded 1806 * @lp: ptr to the fc_lport to be removed
1821 * 1807 *
1822 * Returns: 0 for success 1808 * Returns: 0 for success
1823 */ 1809 */
@@ -1833,7 +1819,6 @@ int fcoe_hostlist_remove(const struct fc_lport *lp)
1833 1819
1834 return 0; 1820 return 0;
1835} 1821}
1836EXPORT_SYMBOL_GPL(fcoe_hostlist_remove);
1837 1822
1838/** 1823/**
1839 * fcoe_init() - fcoe module loading initialization 1824 * fcoe_init() - fcoe module loading initialization
diff --git a/drivers/scsi/fcoe/libfcoe.c b/drivers/scsi/fcoe/libfcoe.c
index 444a06bdb70b..b9aa280100b0 100644
--- a/drivers/scsi/fcoe/libfcoe.c
+++ b/drivers/scsi/fcoe/libfcoe.c
@@ -122,7 +122,7 @@ static void fcoe_ctlr_reset_fcfs(struct fcoe_ctlr *fip)
122} 122}
123 123
124/** 124/**
125 * fcoe_ctrl_destroy() - Disable and tear-down the FCoE controller. 125 * fcoe_ctlr_destroy() - Disable and tear-down the FCoE controller.
126 * @fip: FCoE controller. 126 * @fip: FCoE controller.
127 * 127 *
128 * This is called by FCoE drivers before freeing the &fcoe_ctlr. 128 * This is called by FCoE drivers before freeing the &fcoe_ctlr.
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
index c09d77591f92..dd689ded8609 100644
--- a/drivers/scsi/ipr.c
+++ b/drivers/scsi/ipr.c
@@ -3654,6 +3654,7 @@ static int ipr_slave_configure(struct scsi_device *sdev)
3654{ 3654{
3655 struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *) sdev->host->hostdata; 3655 struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *) sdev->host->hostdata;
3656 struct ipr_resource_entry *res; 3656 struct ipr_resource_entry *res;
3657 struct ata_port *ap = NULL;
3657 unsigned long lock_flags = 0; 3658 unsigned long lock_flags = 0;
3658 3659
3659 spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags); 3660 spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
@@ -3672,12 +3673,16 @@ static int ipr_slave_configure(struct scsi_device *sdev)
3672 } 3673 }
3673 if (ipr_is_vset_device(res) || ipr_is_scsi_disk(res)) 3674 if (ipr_is_vset_device(res) || ipr_is_scsi_disk(res))
3674 sdev->allow_restart = 1; 3675 sdev->allow_restart = 1;
3675 if (ipr_is_gata(res) && res->sata_port) { 3676 if (ipr_is_gata(res) && res->sata_port)
3677 ap = res->sata_port->ap;
3678 spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
3679
3680 if (ap) {
3676 scsi_adjust_queue_depth(sdev, 0, IPR_MAX_CMD_PER_ATA_LUN); 3681 scsi_adjust_queue_depth(sdev, 0, IPR_MAX_CMD_PER_ATA_LUN);
3677 ata_sas_slave_configure(sdev, res->sata_port->ap); 3682 ata_sas_slave_configure(sdev, ap);
3678 } else { 3683 } else
3679 scsi_adjust_queue_depth(sdev, 0, sdev->host->cmd_per_lun); 3684 scsi_adjust_queue_depth(sdev, 0, sdev->host->cmd_per_lun);
3680 } 3685 return 0;
3681 } 3686 }
3682 spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); 3687 spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
3683 return 0; 3688 return 0;
diff --git a/drivers/scsi/iscsi_tcp.c b/drivers/scsi/iscsi_tcp.c
index b3e5e08e44ab..b7c092d63bbe 100644
--- a/drivers/scsi/iscsi_tcp.c
+++ b/drivers/scsi/iscsi_tcp.c
@@ -463,7 +463,7 @@ static int iscsi_sw_tcp_pdu_init(struct iscsi_task *task,
463 } 463 }
464 464
465 if (err) { 465 if (err) {
466 iscsi_conn_failure(conn, err); 466 /* got invalid offset/len */
467 return -EIO; 467 return -EIO;
468 } 468 }
469 return 0; 469 return 0;
@@ -851,6 +851,7 @@ static struct scsi_host_template iscsi_sw_tcp_sht = {
851 .use_clustering = DISABLE_CLUSTERING, 851 .use_clustering = DISABLE_CLUSTERING,
852 .slave_alloc = iscsi_sw_tcp_slave_alloc, 852 .slave_alloc = iscsi_sw_tcp_slave_alloc,
853 .slave_configure = iscsi_sw_tcp_slave_configure, 853 .slave_configure = iscsi_sw_tcp_slave_configure,
854 .target_alloc = iscsi_target_alloc,
854 .proc_name = "iscsi_tcp", 855 .proc_name = "iscsi_tcp",
855 .this_id = -1, 856 .this_id = -1,
856}; 857};
diff --git a/drivers/scsi/libfc/fc_disc.c b/drivers/scsi/libfc/fc_disc.c
index e57556ea5b48..4c880656990b 100644
--- a/drivers/scsi/libfc/fc_disc.c
+++ b/drivers/scsi/libfc/fc_disc.c
@@ -113,6 +113,11 @@ void fc_disc_stop_rports(struct fc_disc *disc)
113 lport->tt.rport_logoff(rport); 113 lport->tt.rport_logoff(rport);
114 } 114 }
115 115
116 list_for_each_entry_safe(rdata, next, &disc->rogue_rports, peers) {
117 rport = PRIV_TO_RPORT(rdata);
118 lport->tt.rport_logoff(rport);
119 }
120
116 mutex_unlock(&disc->disc_mutex); 121 mutex_unlock(&disc->disc_mutex);
117} 122}
118 123
@@ -131,23 +136,32 @@ static void fc_disc_rport_callback(struct fc_lport *lport,
131{ 136{
132 struct fc_rport_libfc_priv *rdata = rport->dd_data; 137 struct fc_rport_libfc_priv *rdata = rport->dd_data;
133 struct fc_disc *disc = &lport->disc; 138 struct fc_disc *disc = &lport->disc;
134 int found = 0;
135 139
136 FC_DEBUG_DISC("Received a %d event for port (%6x)\n", event, 140 FC_DEBUG_DISC("Received a %d event for port (%6x)\n", event,
137 rport->port_id); 141 rport->port_id);
138 142
139 if (event == RPORT_EV_CREATED) { 143 switch (event) {
144 case RPORT_EV_CREATED:
140 if (disc) { 145 if (disc) {
141 found = 1;
142 mutex_lock(&disc->disc_mutex); 146 mutex_lock(&disc->disc_mutex);
143 list_add_tail(&rdata->peers, &disc->rports); 147 list_add_tail(&rdata->peers, &disc->rports);
144 mutex_unlock(&disc->disc_mutex); 148 mutex_unlock(&disc->disc_mutex);
145 } 149 }
150 break;
151 case RPORT_EV_LOGO:
152 case RPORT_EV_FAILED:
153 case RPORT_EV_STOP:
154 mutex_lock(&disc->disc_mutex);
155 mutex_lock(&rdata->rp_mutex);
156 if (rdata->trans_state == FC_PORTSTATE_ROGUE)
157 list_del(&rdata->peers);
158 mutex_unlock(&rdata->rp_mutex);
159 mutex_unlock(&disc->disc_mutex);
160 break;
161 default:
162 break;
146 } 163 }
147 164
148 if (!found)
149 FC_DEBUG_DISC("The rport (%6x) is not maintained "
150 "by the discovery layer\n", rport->port_id);
151} 165}
152 166
153/** 167/**
@@ -439,6 +453,7 @@ static int fc_disc_new_target(struct fc_disc *disc,
439 rdata = rport->dd_data; 453 rdata = rport->dd_data;
440 rdata->ops = &fc_disc_rport_ops; 454 rdata->ops = &fc_disc_rport_ops;
441 rdata->rp_state = RPORT_ST_INIT; 455 rdata->rp_state = RPORT_ST_INIT;
456 list_add_tail(&rdata->peers, &disc->rogue_rports);
442 lport->tt.rport_login(rport); 457 lport->tt.rport_login(rport);
443 } 458 }
444 } 459 }
@@ -461,21 +476,29 @@ static void fc_disc_del_target(struct fc_disc *disc, struct fc_rport *rport)
461/** 476/**
462 * fc_disc_done() - Discovery has been completed 477 * fc_disc_done() - Discovery has been completed
463 * @disc: FC discovery context 478 * @disc: FC discovery context
479 * Locking Note: This function expects that the disc mutex is locked before
480 * it is called. The discovery callback is then made with the lock released,
481 * and the lock is re-taken before returning from this function
464 */ 482 */
465static void fc_disc_done(struct fc_disc *disc) 483static void fc_disc_done(struct fc_disc *disc)
466{ 484{
467 struct fc_lport *lport = disc->lport; 485 struct fc_lport *lport = disc->lport;
486 enum fc_disc_event event;
468 487
469 FC_DEBUG_DISC("Discovery complete for port (%6x)\n", 488 FC_DEBUG_DISC("Discovery complete for port (%6x)\n",
470 fc_host_port_id(lport->host)); 489 fc_host_port_id(lport->host));
471 490
472 disc->disc_callback(lport, disc->event); 491 event = disc->event;
473 disc->event = DISC_EV_NONE; 492 disc->event = DISC_EV_NONE;
474 493
475 if (disc->requested) 494 if (disc->requested)
476 fc_disc_gpn_ft_req(disc); 495 fc_disc_gpn_ft_req(disc);
477 else 496 else
478 disc->pending = 0; 497 disc->pending = 0;
498
499 mutex_unlock(&disc->disc_mutex);
500 disc->disc_callback(lport, event);
501 mutex_lock(&disc->disc_mutex);
479} 502}
480 503
481/** 504/**
@@ -622,6 +645,8 @@ static int fc_disc_gpn_ft_parse(struct fc_disc *disc, void *buf, size_t len)
622 rdata = rport->dd_data; 645 rdata = rport->dd_data;
623 rdata->ops = &fc_disc_rport_ops; 646 rdata->ops = &fc_disc_rport_ops;
624 rdata->local_port = lport; 647 rdata->local_port = lport;
648 list_add_tail(&rdata->peers,
649 &disc->rogue_rports);
625 lport->tt.rport_login(rport); 650 lport->tt.rport_login(rport);
626 } else 651 } else
627 FC_DBG("Failed to allocate memory for " 652 FC_DBG("Failed to allocate memory for "
@@ -681,8 +706,8 @@ static void fc_disc_timeout(struct work_struct *work)
681 * @fp: response frame 706 * @fp: response frame
682 * @lp_arg: Fibre Channel host port instance 707 * @lp_arg: Fibre Channel host port instance
683 * 708 *
684 * Locking Note: This function expects that the disc_mutex is locked 709 * Locking Note: This function is called without disc mutex held, and
685 * before it is called. 710 * should do all its processing with the mutex held
686 */ 711 */
687static void fc_disc_gpn_ft_resp(struct fc_seq *sp, struct fc_frame *fp, 712static void fc_disc_gpn_ft_resp(struct fc_seq *sp, struct fc_frame *fp,
688 void *disc_arg) 713 void *disc_arg)
@@ -695,11 +720,13 @@ static void fc_disc_gpn_ft_resp(struct fc_seq *sp, struct fc_frame *fp,
695 unsigned int len; 720 unsigned int len;
696 int error; 721 int error;
697 722
723 mutex_lock(&disc->disc_mutex);
698 FC_DEBUG_DISC("Received a GPN_FT response on port (%6x)\n", 724 FC_DEBUG_DISC("Received a GPN_FT response on port (%6x)\n",
699 fc_host_port_id(disc->lport->host)); 725 fc_host_port_id(disc->lport->host));
700 726
701 if (IS_ERR(fp)) { 727 if (IS_ERR(fp)) {
702 fc_disc_error(disc, fp); 728 fc_disc_error(disc, fp);
729 mutex_unlock(&disc->disc_mutex);
703 return; 730 return;
704 } 731 }
705 732
@@ -744,6 +771,8 @@ static void fc_disc_gpn_ft_resp(struct fc_seq *sp, struct fc_frame *fp,
744 disc->seq_count++; 771 disc->seq_count++;
745 } 772 }
746 fc_frame_free(fp); 773 fc_frame_free(fp);
774
775 mutex_unlock(&disc->disc_mutex);
747} 776}
748 777
749/** 778/**
@@ -757,7 +786,6 @@ static void fc_disc_gpn_ft_resp(struct fc_seq *sp, struct fc_frame *fp,
757static void fc_disc_single(struct fc_disc *disc, struct fc_disc_port *dp) 786static void fc_disc_single(struct fc_disc *disc, struct fc_disc_port *dp)
758{ 787{
759 struct fc_lport *lport; 788 struct fc_lport *lport;
760 struct fc_rport *rport;
761 struct fc_rport *new_rport; 789 struct fc_rport *new_rport;
762 struct fc_rport_libfc_priv *rdata; 790 struct fc_rport_libfc_priv *rdata;
763 791
@@ -766,15 +794,12 @@ static void fc_disc_single(struct fc_disc *disc, struct fc_disc_port *dp)
766 if (dp->ids.port_id == fc_host_port_id(lport->host)) 794 if (dp->ids.port_id == fc_host_port_id(lport->host))
767 goto out; 795 goto out;
768 796
769 rport = lport->tt.rport_lookup(lport, dp->ids.port_id);
770 if (rport)
771 fc_disc_del_target(disc, rport);
772
773 new_rport = lport->tt.rport_create(dp); 797 new_rport = lport->tt.rport_create(dp);
774 if (new_rport) { 798 if (new_rport) {
775 rdata = new_rport->dd_data; 799 rdata = new_rport->dd_data;
776 rdata->ops = &fc_disc_rport_ops; 800 rdata->ops = &fc_disc_rport_ops;
777 kfree(dp); 801 kfree(dp);
802 list_add_tail(&rdata->peers, &disc->rogue_rports);
778 lport->tt.rport_login(new_rport); 803 lport->tt.rport_login(new_rport);
779 } 804 }
780 return; 805 return;
@@ -836,6 +861,7 @@ int fc_disc_init(struct fc_lport *lport)
836 INIT_DELAYED_WORK(&disc->disc_work, fc_disc_timeout); 861 INIT_DELAYED_WORK(&disc->disc_work, fc_disc_timeout);
837 mutex_init(&disc->disc_mutex); 862 mutex_init(&disc->disc_mutex);
838 INIT_LIST_HEAD(&disc->rports); 863 INIT_LIST_HEAD(&disc->rports);
864 INIT_LIST_HEAD(&disc->rogue_rports);
839 865
840 disc->lport = lport; 866 disc->lport = lport;
841 disc->delay = FC_DISC_DELAY; 867 disc->delay = FC_DISC_DELAY;
diff --git a/drivers/scsi/libfc/fc_elsct.c b/drivers/scsi/libfc/fc_elsct.c
index dd47fe619d1e..5878b34bff18 100644
--- a/drivers/scsi/libfc/fc_elsct.c
+++ b/drivers/scsi/libfc/fc_elsct.c
@@ -41,7 +41,7 @@ static struct fc_seq *fc_elsct_send(struct fc_lport *lport,
41 void *arg, u32 timer_msec) 41 void *arg, u32 timer_msec)
42{ 42{
43 enum fc_rctl r_ctl; 43 enum fc_rctl r_ctl;
44 u32 did; 44 u32 did = FC_FID_NONE;
45 enum fc_fh_type fh_type; 45 enum fc_fh_type fh_type;
46 int rc; 46 int rc;
47 47
diff --git a/drivers/scsi/libfc/fc_fcp.c b/drivers/scsi/libfc/fc_fcp.c
index f555ae99ad40..521f996f9b13 100644
--- a/drivers/scsi/libfc/fc_fcp.c
+++ b/drivers/scsi/libfc/fc_fcp.c
@@ -713,7 +713,7 @@ done:
713static void fc_fcp_recv(struct fc_seq *seq, struct fc_frame *fp, void *arg) 713static void fc_fcp_recv(struct fc_seq *seq, struct fc_frame *fp, void *arg)
714{ 714{
715 struct fc_fcp_pkt *fsp = (struct fc_fcp_pkt *)arg; 715 struct fc_fcp_pkt *fsp = (struct fc_fcp_pkt *)arg;
716 struct fc_lport *lp; 716 struct fc_lport *lport = fsp->lp;
717 struct fc_frame_header *fh; 717 struct fc_frame_header *fh;
718 struct fcp_txrdy *dd; 718 struct fcp_txrdy *dd;
719 u8 r_ctl; 719 u8 r_ctl;
@@ -724,9 +724,8 @@ static void fc_fcp_recv(struct fc_seq *seq, struct fc_frame *fp, void *arg)
724 724
725 fh = fc_frame_header_get(fp); 725 fh = fc_frame_header_get(fp);
726 r_ctl = fh->fh_r_ctl; 726 r_ctl = fh->fh_r_ctl;
727 lp = fsp->lp;
728 727
729 if (!(lp->state & LPORT_ST_READY)) 728 if (!(lport->state & LPORT_ST_READY))
730 goto out; 729 goto out;
731 if (fc_fcp_lock_pkt(fsp)) 730 if (fc_fcp_lock_pkt(fsp))
732 goto out; 731 goto out;
@@ -779,7 +778,7 @@ errout:
779 if (IS_ERR(fp)) 778 if (IS_ERR(fp))
780 fc_fcp_error(fsp, fp); 779 fc_fcp_error(fsp, fp);
781 else if (rc == -ENOMEM) 780 else if (rc == -ENOMEM)
782 fc_fcp_reduce_can_queue(lp); 781 fc_fcp_reduce_can_queue(lport);
783} 782}
784 783
785static void fc_fcp_resp(struct fc_fcp_pkt *fsp, struct fc_frame *fp) 784static void fc_fcp_resp(struct fc_fcp_pkt *fsp, struct fc_frame *fp)
diff --git a/drivers/scsi/libfc/fc_lport.c b/drivers/scsi/libfc/fc_lport.c
index b8178ef398d7..e0c247724d2b 100644
--- a/drivers/scsi/libfc/fc_lport.c
+++ b/drivers/scsi/libfc/fc_lport.c
@@ -618,6 +618,11 @@ int fc_fabric_logoff(struct fc_lport *lport)
618{ 618{
619 lport->tt.disc_stop_final(lport); 619 lport->tt.disc_stop_final(lport);
620 mutex_lock(&lport->lp_mutex); 620 mutex_lock(&lport->lp_mutex);
621 if (lport->dns_rp)
622 lport->tt.rport_logoff(lport->dns_rp);
623 mutex_unlock(&lport->lp_mutex);
624 lport->tt.rport_flush_queue();
625 mutex_lock(&lport->lp_mutex);
621 fc_lport_enter_logo(lport); 626 fc_lport_enter_logo(lport);
622 mutex_unlock(&lport->lp_mutex); 627 mutex_unlock(&lport->lp_mutex);
623 cancel_delayed_work_sync(&lport->retry_work); 628 cancel_delayed_work_sync(&lport->retry_work);
@@ -639,7 +644,12 @@ EXPORT_SYMBOL(fc_fabric_logoff);
639 */ 644 */
640int fc_lport_destroy(struct fc_lport *lport) 645int fc_lport_destroy(struct fc_lport *lport)
641{ 646{
647 mutex_lock(&lport->lp_mutex);
648 lport->state = LPORT_ST_NONE;
649 lport->link_up = 0;
642 lport->tt.frame_send = fc_frame_drop; 650 lport->tt.frame_send = fc_frame_drop;
651 mutex_unlock(&lport->lp_mutex);
652
643 lport->tt.fcp_abort_io(lport); 653 lport->tt.fcp_abort_io(lport);
644 lport->tt.exch_mgr_reset(lport, 0, 0); 654 lport->tt.exch_mgr_reset(lport, 0, 0);
645 return 0; 655 return 0;
@@ -1032,17 +1042,19 @@ static void fc_lport_rft_id_resp(struct fc_seq *sp, struct fc_frame *fp,
1032 1042
1033 FC_DEBUG_LPORT("Received a RFT_ID response\n"); 1043 FC_DEBUG_LPORT("Received a RFT_ID response\n");
1034 1044
1035 if (IS_ERR(fp)) {
1036 fc_lport_error(lport, fp);
1037 goto err;
1038 }
1039
1040 if (lport->state != LPORT_ST_RFT_ID) { 1045 if (lport->state != LPORT_ST_RFT_ID) {
1041 FC_DBG("Received a RFT_ID response, but in state %s\n", 1046 FC_DBG("Received a RFT_ID response, but in state %s\n",
1042 fc_lport_state(lport)); 1047 fc_lport_state(lport));
1048 if (IS_ERR(fp))
1049 goto err;
1043 goto out; 1050 goto out;
1044 } 1051 }
1045 1052
1053 if (IS_ERR(fp)) {
1054 fc_lport_error(lport, fp);
1055 goto err;
1056 }
1057
1046 fh = fc_frame_header_get(fp); 1058 fh = fc_frame_header_get(fp);
1047 ct = fc_frame_payload_get(fp, sizeof(*ct)); 1059 ct = fc_frame_payload_get(fp, sizeof(*ct));
1048 1060
@@ -1084,17 +1096,19 @@ static void fc_lport_rpn_id_resp(struct fc_seq *sp, struct fc_frame *fp,
1084 1096
1085 FC_DEBUG_LPORT("Received a RPN_ID response\n"); 1097 FC_DEBUG_LPORT("Received a RPN_ID response\n");
1086 1098
1087 if (IS_ERR(fp)) {
1088 fc_lport_error(lport, fp);
1089 goto err;
1090 }
1091
1092 if (lport->state != LPORT_ST_RPN_ID) { 1099 if (lport->state != LPORT_ST_RPN_ID) {
1093 FC_DBG("Received a RPN_ID response, but in state %s\n", 1100 FC_DBG("Received a RPN_ID response, but in state %s\n",
1094 fc_lport_state(lport)); 1101 fc_lport_state(lport));
1102 if (IS_ERR(fp))
1103 goto err;
1095 goto out; 1104 goto out;
1096 } 1105 }
1097 1106
1107 if (IS_ERR(fp)) {
1108 fc_lport_error(lport, fp);
1109 goto err;
1110 }
1111
1098 fh = fc_frame_header_get(fp); 1112 fh = fc_frame_header_get(fp);
1099 ct = fc_frame_payload_get(fp, sizeof(*ct)); 1113 ct = fc_frame_payload_get(fp, sizeof(*ct));
1100 if (fh && ct && fh->fh_type == FC_TYPE_CT && 1114 if (fh && ct && fh->fh_type == FC_TYPE_CT &&
@@ -1134,17 +1148,19 @@ static void fc_lport_scr_resp(struct fc_seq *sp, struct fc_frame *fp,
1134 1148
1135 FC_DEBUG_LPORT("Received a SCR response\n"); 1149 FC_DEBUG_LPORT("Received a SCR response\n");
1136 1150
1137 if (IS_ERR(fp)) {
1138 fc_lport_error(lport, fp);
1139 goto err;
1140 }
1141
1142 if (lport->state != LPORT_ST_SCR) { 1151 if (lport->state != LPORT_ST_SCR) {
1143 FC_DBG("Received a SCR response, but in state %s\n", 1152 FC_DBG("Received a SCR response, but in state %s\n",
1144 fc_lport_state(lport)); 1153 fc_lport_state(lport));
1154 if (IS_ERR(fp))
1155 goto err;
1145 goto out; 1156 goto out;
1146 } 1157 }
1147 1158
1159 if (IS_ERR(fp)) {
1160 fc_lport_error(lport, fp);
1161 goto err;
1162 }
1163
1148 op = fc_frame_payload_op(fp); 1164 op = fc_frame_payload_op(fp);
1149 if (op == ELS_LS_ACC) 1165 if (op == ELS_LS_ACC)
1150 fc_lport_enter_ready(lport); 1166 fc_lport_enter_ready(lport);
@@ -1360,17 +1376,19 @@ static void fc_lport_logo_resp(struct fc_seq *sp, struct fc_frame *fp,
1360 1376
1361 FC_DEBUG_LPORT("Received a LOGO response\n"); 1377 FC_DEBUG_LPORT("Received a LOGO response\n");
1362 1378
1363 if (IS_ERR(fp)) {
1364 fc_lport_error(lport, fp);
1365 goto err;
1366 }
1367
1368 if (lport->state != LPORT_ST_LOGO) { 1379 if (lport->state != LPORT_ST_LOGO) {
1369 FC_DBG("Received a LOGO response, but in state %s\n", 1380 FC_DBG("Received a LOGO response, but in state %s\n",
1370 fc_lport_state(lport)); 1381 fc_lport_state(lport));
1382 if (IS_ERR(fp))
1383 goto err;
1371 goto out; 1384 goto out;
1372 } 1385 }
1373 1386
1387 if (IS_ERR(fp)) {
1388 fc_lport_error(lport, fp);
1389 goto err;
1390 }
1391
1374 op = fc_frame_payload_op(fp); 1392 op = fc_frame_payload_op(fp);
1375 if (op == ELS_LS_ACC) 1393 if (op == ELS_LS_ACC)
1376 fc_lport_enter_reset(lport); 1394 fc_lport_enter_reset(lport);
@@ -1400,10 +1418,6 @@ static void fc_lport_enter_logo(struct fc_lport *lport)
1400 1418
1401 fc_lport_state_enter(lport, LPORT_ST_LOGO); 1419 fc_lport_state_enter(lport, LPORT_ST_LOGO);
1402 1420
1403 /* DNS session should be closed so we can release it here */
1404 if (lport->dns_rp)
1405 lport->tt.rport_logoff(lport->dns_rp);
1406
1407 fp = fc_frame_alloc(lport, sizeof(*logo)); 1421 fp = fc_frame_alloc(lport, sizeof(*logo));
1408 if (!fp) { 1422 if (!fp) {
1409 fc_lport_error(lport, fp); 1423 fc_lport_error(lport, fp);
@@ -1444,17 +1458,19 @@ static void fc_lport_flogi_resp(struct fc_seq *sp, struct fc_frame *fp,
1444 1458
1445 FC_DEBUG_LPORT("Received a FLOGI response\n"); 1459 FC_DEBUG_LPORT("Received a FLOGI response\n");
1446 1460
1447 if (IS_ERR(fp)) {
1448 fc_lport_error(lport, fp);
1449 goto err;
1450 }
1451
1452 if (lport->state != LPORT_ST_FLOGI) { 1461 if (lport->state != LPORT_ST_FLOGI) {
1453 FC_DBG("Received a FLOGI response, but in state %s\n", 1462 FC_DBG("Received a FLOGI response, but in state %s\n",
1454 fc_lport_state(lport)); 1463 fc_lport_state(lport));
1464 if (IS_ERR(fp))
1465 goto err;
1455 goto out; 1466 goto out;
1456 } 1467 }
1457 1468
1469 if (IS_ERR(fp)) {
1470 fc_lport_error(lport, fp);
1471 goto err;
1472 }
1473
1458 fh = fc_frame_header_get(fp); 1474 fh = fc_frame_header_get(fp);
1459 did = ntoh24(fh->fh_d_id); 1475 did = ntoh24(fh->fh_d_id);
1460 if (fc_frame_payload_op(fp) == ELS_LS_ACC && did != 0) { 1476 if (fc_frame_payload_op(fp) == ELS_LS_ACC && did != 0) {
diff --git a/drivers/scsi/libfc/fc_rport.c b/drivers/scsi/libfc/fc_rport.c
index 0472bb73221e..747d73c5c8af 100644
--- a/drivers/scsi/libfc/fc_rport.c
+++ b/drivers/scsi/libfc/fc_rport.c
@@ -267,6 +267,10 @@ static void fc_rport_work(struct work_struct *work)
267 "(%6x).\n", ids.port_id); 267 "(%6x).\n", ids.port_id);
268 event = RPORT_EV_FAILED; 268 event = RPORT_EV_FAILED;
269 } 269 }
270 if (rport->port_id != FC_FID_DIR_SERV)
271 if (rport_ops->event_callback)
272 rport_ops->event_callback(lport, rport,
273 RPORT_EV_FAILED);
270 put_device(&rport->dev); 274 put_device(&rport->dev);
271 rport = new_rport; 275 rport = new_rport;
272 rdata = new_rport->dd_data; 276 rdata = new_rport->dd_data;
@@ -325,11 +329,20 @@ int fc_rport_login(struct fc_rport *rport)
325int fc_rport_logoff(struct fc_rport *rport) 329int fc_rport_logoff(struct fc_rport *rport)
326{ 330{
327 struct fc_rport_libfc_priv *rdata = rport->dd_data; 331 struct fc_rport_libfc_priv *rdata = rport->dd_data;
332 struct fc_lport *lport = rdata->local_port;
328 333
329 mutex_lock(&rdata->rp_mutex); 334 mutex_lock(&rdata->rp_mutex);
330 335
331 FC_DEBUG_RPORT("Remove port (%6x)\n", rport->port_id); 336 FC_DEBUG_RPORT("Remove port (%6x)\n", rport->port_id);
332 337
338 if (rdata->rp_state == RPORT_ST_NONE) {
339 FC_DEBUG_RPORT("(%6x): Port (%6x) in NONE state,"
340 " not removing", fc_host_port_id(lport->host),
341 rport->port_id);
342 mutex_unlock(&rdata->rp_mutex);
343 goto out;
344 }
345
333 fc_rport_enter_logo(rport); 346 fc_rport_enter_logo(rport);
334 347
335 /* 348 /*
@@ -349,6 +362,7 @@ int fc_rport_logoff(struct fc_rport *rport)
349 362
350 mutex_unlock(&rdata->rp_mutex); 363 mutex_unlock(&rdata->rp_mutex);
351 364
365out:
352 return 0; 366 return 0;
353} 367}
354 368
@@ -430,6 +444,7 @@ static void fc_rport_error(struct fc_rport *rport, struct fc_frame *fp)
430 case RPORT_ST_PRLI: 444 case RPORT_ST_PRLI:
431 case RPORT_ST_LOGO: 445 case RPORT_ST_LOGO:
432 rdata->event = RPORT_EV_FAILED; 446 rdata->event = RPORT_EV_FAILED;
447 fc_rport_state_enter(rport, RPORT_ST_NONE);
433 queue_work(rport_event_queue, 448 queue_work(rport_event_queue,
434 &rdata->event_work); 449 &rdata->event_work);
435 break; 450 break;
@@ -494,7 +509,7 @@ static void fc_rport_plogi_resp(struct fc_seq *sp, struct fc_frame *fp,
494 struct fc_rport *rport = rp_arg; 509 struct fc_rport *rport = rp_arg;
495 struct fc_rport_libfc_priv *rdata = rport->dd_data; 510 struct fc_rport_libfc_priv *rdata = rport->dd_data;
496 struct fc_lport *lport = rdata->local_port; 511 struct fc_lport *lport = rdata->local_port;
497 struct fc_els_flogi *plp; 512 struct fc_els_flogi *plp = NULL;
498 unsigned int tov; 513 unsigned int tov;
499 u16 csp_seq; 514 u16 csp_seq;
500 u16 cssp_seq; 515 u16 cssp_seq;
@@ -505,17 +520,19 @@ static void fc_rport_plogi_resp(struct fc_seq *sp, struct fc_frame *fp,
505 FC_DEBUG_RPORT("Received a PLOGI response from port (%6x)\n", 520 FC_DEBUG_RPORT("Received a PLOGI response from port (%6x)\n",
506 rport->port_id); 521 rport->port_id);
507 522
508 if (IS_ERR(fp)) {
509 fc_rport_error_retry(rport, fp);
510 goto err;
511 }
512
513 if (rdata->rp_state != RPORT_ST_PLOGI) { 523 if (rdata->rp_state != RPORT_ST_PLOGI) {
514 FC_DBG("Received a PLOGI response, but in state %s\n", 524 FC_DBG("Received a PLOGI response, but in state %s\n",
515 fc_rport_state(rport)); 525 fc_rport_state(rport));
526 if (IS_ERR(fp))
527 goto err;
516 goto out; 528 goto out;
517 } 529 }
518 530
531 if (IS_ERR(fp)) {
532 fc_rport_error_retry(rport, fp);
533 goto err;
534 }
535
519 op = fc_frame_payload_op(fp); 536 op = fc_frame_payload_op(fp);
520 if (op == ELS_LS_ACC && 537 if (op == ELS_LS_ACC &&
521 (plp = fc_frame_payload_get(fp, sizeof(*plp))) != NULL) { 538 (plp = fc_frame_payload_get(fp, sizeof(*plp))) != NULL) {
@@ -614,17 +631,19 @@ static void fc_rport_prli_resp(struct fc_seq *sp, struct fc_frame *fp,
614 FC_DEBUG_RPORT("Received a PRLI response from port (%6x)\n", 631 FC_DEBUG_RPORT("Received a PRLI response from port (%6x)\n",
615 rport->port_id); 632 rport->port_id);
616 633
617 if (IS_ERR(fp)) {
618 fc_rport_error_retry(rport, fp);
619 goto err;
620 }
621
622 if (rdata->rp_state != RPORT_ST_PRLI) { 634 if (rdata->rp_state != RPORT_ST_PRLI) {
623 FC_DBG("Received a PRLI response, but in state %s\n", 635 FC_DBG("Received a PRLI response, but in state %s\n",
624 fc_rport_state(rport)); 636 fc_rport_state(rport));
637 if (IS_ERR(fp))
638 goto err;
625 goto out; 639 goto out;
626 } 640 }
627 641
642 if (IS_ERR(fp)) {
643 fc_rport_error_retry(rport, fp);
644 goto err;
645 }
646
628 op = fc_frame_payload_op(fp); 647 op = fc_frame_payload_op(fp);
629 if (op == ELS_LS_ACC) { 648 if (op == ELS_LS_ACC) {
630 pp = fc_frame_payload_get(fp, sizeof(*pp)); 649 pp = fc_frame_payload_get(fp, sizeof(*pp));
@@ -646,6 +665,7 @@ static void fc_rport_prli_resp(struct fc_seq *sp, struct fc_frame *fp,
646 } else { 665 } else {
647 FC_DBG("Bad ELS response\n"); 666 FC_DBG("Bad ELS response\n");
648 rdata->event = RPORT_EV_FAILED; 667 rdata->event = RPORT_EV_FAILED;
668 fc_rport_state_enter(rport, RPORT_ST_NONE);
649 queue_work(rport_event_queue, &rdata->event_work); 669 queue_work(rport_event_queue, &rdata->event_work);
650 } 670 }
651 671
@@ -678,23 +698,26 @@ static void fc_rport_logo_resp(struct fc_seq *sp, struct fc_frame *fp,
678 FC_DEBUG_RPORT("Received a LOGO response from port (%6x)\n", 698 FC_DEBUG_RPORT("Received a LOGO response from port (%6x)\n",
679 rport->port_id); 699 rport->port_id);
680 700
681 if (IS_ERR(fp)) {
682 fc_rport_error_retry(rport, fp);
683 goto err;
684 }
685
686 if (rdata->rp_state != RPORT_ST_LOGO) { 701 if (rdata->rp_state != RPORT_ST_LOGO) {
687 FC_DEBUG_RPORT("Received a LOGO response, but in state %s\n", 702 FC_DEBUG_RPORT("Received a LOGO response, but in state %s\n",
688 fc_rport_state(rport)); 703 fc_rport_state(rport));
704 if (IS_ERR(fp))
705 goto err;
689 goto out; 706 goto out;
690 } 707 }
691 708
709 if (IS_ERR(fp)) {
710 fc_rport_error_retry(rport, fp);
711 goto err;
712 }
713
692 op = fc_frame_payload_op(fp); 714 op = fc_frame_payload_op(fp);
693 if (op == ELS_LS_ACC) { 715 if (op == ELS_LS_ACC) {
694 fc_rport_enter_rtv(rport); 716 fc_rport_enter_rtv(rport);
695 } else { 717 } else {
696 FC_DBG("Bad ELS response\n"); 718 FC_DBG("Bad ELS response\n");
697 rdata->event = RPORT_EV_LOGO; 719 rdata->event = RPORT_EV_LOGO;
720 fc_rport_state_enter(rport, RPORT_ST_NONE);
698 queue_work(rport_event_queue, &rdata->event_work); 721 queue_work(rport_event_queue, &rdata->event_work);
699 } 722 }
700 723
@@ -764,17 +787,19 @@ static void fc_rport_rtv_resp(struct fc_seq *sp, struct fc_frame *fp,
764 FC_DEBUG_RPORT("Received a RTV response from port (%6x)\n", 787 FC_DEBUG_RPORT("Received a RTV response from port (%6x)\n",
765 rport->port_id); 788 rport->port_id);
766 789
767 if (IS_ERR(fp)) {
768 fc_rport_error(rport, fp);
769 goto err;
770 }
771
772 if (rdata->rp_state != RPORT_ST_RTV) { 790 if (rdata->rp_state != RPORT_ST_RTV) {
773 FC_DBG("Received a RTV response, but in state %s\n", 791 FC_DBG("Received a RTV response, but in state %s\n",
774 fc_rport_state(rport)); 792 fc_rport_state(rport));
793 if (IS_ERR(fp))
794 goto err;
775 goto out; 795 goto out;
776 } 796 }
777 797
798 if (IS_ERR(fp)) {
799 fc_rport_error(rport, fp);
800 goto err;
801 }
802
778 op = fc_frame_payload_op(fp); 803 op = fc_frame_payload_op(fp);
779 if (op == ELS_LS_ACC) { 804 if (op == ELS_LS_ACC) {
780 struct fc_els_rtv_acc *rtv; 805 struct fc_els_rtv_acc *rtv;
@@ -1007,6 +1032,8 @@ static void fc_rport_recv_plogi_req(struct fc_rport *rport,
1007 default: 1032 default:
1008 FC_DEBUG_RPORT("incoming PLOGI from %x in unexpected " 1033 FC_DEBUG_RPORT("incoming PLOGI from %x in unexpected "
1009 "state %d\n", sid, rdata->rp_state); 1034 "state %d\n", sid, rdata->rp_state);
1035 fc_frame_free(fp);
1036 return;
1010 break; 1037 break;
1011 } 1038 }
1012 1039
@@ -1098,6 +1125,8 @@ static void fc_rport_recv_prli_req(struct fc_rport *rport,
1098 reason = ELS_RJT_NONE; 1125 reason = ELS_RJT_NONE;
1099 break; 1126 break;
1100 default: 1127 default:
1128 fc_frame_free(rx_fp);
1129 return;
1101 break; 1130 break;
1102 } 1131 }
1103 len = fr_len(rx_fp) - sizeof(*fh); 1132 len = fr_len(rx_fp) - sizeof(*fh);
@@ -1227,6 +1256,11 @@ static void fc_rport_recv_prlo_req(struct fc_rport *rport, struct fc_seq *sp,
1227 "while in state %s\n", ntoh24(fh->fh_s_id), 1256 "while in state %s\n", ntoh24(fh->fh_s_id),
1228 fc_rport_state(rport)); 1257 fc_rport_state(rport));
1229 1258
1259 if (rdata->rp_state == RPORT_ST_NONE) {
1260 fc_frame_free(fp);
1261 return;
1262 }
1263
1230 rjt_data.fp = NULL; 1264 rjt_data.fp = NULL;
1231 rjt_data.reason = ELS_RJT_UNAB; 1265 rjt_data.reason = ELS_RJT_UNAB;
1232 rjt_data.explan = ELS_EXPL_NONE; 1266 rjt_data.explan = ELS_EXPL_NONE;
@@ -1256,7 +1290,13 @@ static void fc_rport_recv_logo_req(struct fc_rport *rport, struct fc_seq *sp,
1256 "while in state %s\n", ntoh24(fh->fh_s_id), 1290 "while in state %s\n", ntoh24(fh->fh_s_id),
1257 fc_rport_state(rport)); 1291 fc_rport_state(rport));
1258 1292
1293 if (rdata->rp_state == RPORT_ST_NONE) {
1294 fc_frame_free(fp);
1295 return;
1296 }
1297
1259 rdata->event = RPORT_EV_LOGO; 1298 rdata->event = RPORT_EV_LOGO;
1299 fc_rport_state_enter(rport, RPORT_ST_NONE);
1260 queue_work(rport_event_queue, &rdata->event_work); 1300 queue_work(rport_event_queue, &rdata->event_work);
1261 1301
1262 lport->tt.seq_els_rsp_send(sp, ELS_LS_ACC, NULL); 1302 lport->tt.seq_els_rsp_send(sp, ELS_LS_ACC, NULL);
diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
index 689628359169..e72b4ad47d35 100644
--- a/drivers/scsi/libiscsi.c
+++ b/drivers/scsi/libiscsi.c
@@ -1463,6 +1463,16 @@ int iscsi_change_queue_depth(struct scsi_device *sdev, int depth)
1463} 1463}
1464EXPORT_SYMBOL_GPL(iscsi_change_queue_depth); 1464EXPORT_SYMBOL_GPL(iscsi_change_queue_depth);
1465 1465
1466int iscsi_target_alloc(struct scsi_target *starget)
1467{
1468 struct iscsi_cls_session *cls_session = starget_to_session(starget);
1469 struct iscsi_session *session = cls_session->dd_data;
1470
1471 starget->can_queue = session->scsi_cmds_max;
1472 return 0;
1473}
1474EXPORT_SYMBOL_GPL(iscsi_target_alloc);
1475
1466void iscsi_session_recovery_timedout(struct iscsi_cls_session *cls_session) 1476void iscsi_session_recovery_timedout(struct iscsi_cls_session *cls_session)
1467{ 1477{
1468 struct iscsi_session *session = cls_session->dd_data; 1478 struct iscsi_session *session = cls_session->dd_data;
diff --git a/drivers/scsi/libiscsi_tcp.c b/drivers/scsi/libiscsi_tcp.c
index 91f8ce4d8d08..b579ca9f4836 100644
--- a/drivers/scsi/libiscsi_tcp.c
+++ b/drivers/scsi/libiscsi_tcp.c
@@ -1036,8 +1036,11 @@ flush:
1036 1036
1037 rc = conn->session->tt->init_pdu(task, r2t->data_offset + r2t->sent, 1037 rc = conn->session->tt->init_pdu(task, r2t->data_offset + r2t->sent,
1038 r2t->data_count); 1038 r2t->data_count);
1039 if (rc) 1039 if (rc) {
1040 iscsi_conn_failure(conn, ISCSI_ERR_XMIT_FAILED);
1040 return rc; 1041 return rc;
1042 }
1043
1041 r2t->sent += r2t->data_count; 1044 r2t->sent += r2t->data_count;
1042 goto flush; 1045 goto flush;
1043} 1046}
diff --git a/drivers/scsi/lpfc/lpfc.h b/drivers/scsi/lpfc/lpfc.h
index dcba267db711..1105f9a111ba 100644
--- a/drivers/scsi/lpfc/lpfc.h
+++ b/drivers/scsi/lpfc/lpfc.h
@@ -443,6 +443,7 @@ struct lpfc_hba {
443 uint32_t hba_flag; /* hba generic flags */ 443 uint32_t hba_flag; /* hba generic flags */
444#define HBA_ERATT_HANDLED 0x1 /* This flag is set when eratt handled */ 444#define HBA_ERATT_HANDLED 0x1 /* This flag is set when eratt handled */
445 445
446#define DEFER_ERATT 0x4 /* Deferred error attention in progress */
446 struct lpfc_dmabuf slim2p; 447 struct lpfc_dmabuf slim2p;
447 448
448 MAILBOX_t *mbox; 449 MAILBOX_t *mbox;
@@ -723,4 +724,3 @@ lpfc_sli_read_hs(struct lpfc_hba *phba)
723 724
724 return; 725 return;
725} 726}
726
diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c
index 40cf0f4f327f..c14f0cbdb125 100644
--- a/drivers/scsi/lpfc/lpfc_attr.c
+++ b/drivers/scsi/lpfc/lpfc_attr.c
@@ -51,7 +51,7 @@
51#define LPFC_LINK_SPEED_STRING "0, 1, 2, 4, 8" 51#define LPFC_LINK_SPEED_STRING "0, 1, 2, 4, 8"
52 52
53/** 53/**
54 * lpfc_jedec_to_ascii: Hex to ascii convertor according to JEDEC rules. 54 * lpfc_jedec_to_ascii - Hex to ascii convertor according to JEDEC rules
55 * @incr: integer to convert. 55 * @incr: integer to convert.
56 * @hdw: ascii string holding converted integer plus a string terminator. 56 * @hdw: ascii string holding converted integer plus a string terminator.
57 * 57 *
@@ -82,7 +82,7 @@ lpfc_jedec_to_ascii(int incr, char hdw[])
82} 82}
83 83
84/** 84/**
85 * lpfc_drvr_version_show: Return the Emulex driver string with version number. 85 * lpfc_drvr_version_show - Return the Emulex driver string with version number
86 * @dev: class unused variable. 86 * @dev: class unused variable.
87 * @attr: device attribute, not used. 87 * @attr: device attribute, not used.
88 * @buf: on return contains the module description text. 88 * @buf: on return contains the module description text.
@@ -152,7 +152,7 @@ lpfc_bg_reftag_err_show(struct device *dev, struct device_attribute *attr,
152} 152}
153 153
154/** 154/**
155 * lpfc_info_show: Return some pci info about the host in ascii. 155 * lpfc_info_show - Return some pci info about the host in ascii
156 * @dev: class converted to a Scsi_host structure. 156 * @dev: class converted to a Scsi_host structure.
157 * @attr: device attribute, not used. 157 * @attr: device attribute, not used.
158 * @buf: on return contains the formatted text from lpfc_info(). 158 * @buf: on return contains the formatted text from lpfc_info().
@@ -169,7 +169,7 @@ lpfc_info_show(struct device *dev, struct device_attribute *attr,
169} 169}
170 170
171/** 171/**
172 * lpfc_serialnum_show: Return the hba serial number in ascii. 172 * lpfc_serialnum_show - Return the hba serial number in ascii
173 * @dev: class converted to a Scsi_host structure. 173 * @dev: class converted to a Scsi_host structure.
174 * @attr: device attribute, not used. 174 * @attr: device attribute, not used.
175 * @buf: on return contains the formatted text serial number. 175 * @buf: on return contains the formatted text serial number.
@@ -188,7 +188,7 @@ lpfc_serialnum_show(struct device *dev, struct device_attribute *attr,
188} 188}
189 189
190/** 190/**
191 * lpfc_temp_sensor_show: Return the temperature sensor level. 191 * lpfc_temp_sensor_show - Return the temperature sensor level
192 * @dev: class converted to a Scsi_host structure. 192 * @dev: class converted to a Scsi_host structure.
193 * @attr: device attribute, not used. 193 * @attr: device attribute, not used.
194 * @buf: on return contains the formatted support level. 194 * @buf: on return contains the formatted support level.
@@ -210,7 +210,7 @@ lpfc_temp_sensor_show(struct device *dev, struct device_attribute *attr,
210} 210}
211 211
212/** 212/**
213 * lpfc_modeldesc_show: Return the model description of the hba. 213 * lpfc_modeldesc_show - Return the model description of the hba
214 * @dev: class converted to a Scsi_host structure. 214 * @dev: class converted to a Scsi_host structure.
215 * @attr: device attribute, not used. 215 * @attr: device attribute, not used.
216 * @buf: on return contains the scsi vpd model description. 216 * @buf: on return contains the scsi vpd model description.
@@ -229,7 +229,7 @@ lpfc_modeldesc_show(struct device *dev, struct device_attribute *attr,
229} 229}
230 230
231/** 231/**
232 * lpfc_modelname_show: Return the model name of the hba. 232 * lpfc_modelname_show - Return the model name of the hba
233 * @dev: class converted to a Scsi_host structure. 233 * @dev: class converted to a Scsi_host structure.
234 * @attr: device attribute, not used. 234 * @attr: device attribute, not used.
235 * @buf: on return contains the scsi vpd model name. 235 * @buf: on return contains the scsi vpd model name.
@@ -248,7 +248,7 @@ lpfc_modelname_show(struct device *dev, struct device_attribute *attr,
248} 248}
249 249
250/** 250/**
251 * lpfc_programtype_show: Return the program type of the hba. 251 * lpfc_programtype_show - Return the program type of the hba
252 * @dev: class converted to a Scsi_host structure. 252 * @dev: class converted to a Scsi_host structure.
253 * @attr: device attribute, not used. 253 * @attr: device attribute, not used.
254 * @buf: on return contains the scsi vpd program type. 254 * @buf: on return contains the scsi vpd program type.
@@ -267,7 +267,7 @@ lpfc_programtype_show(struct device *dev, struct device_attribute *attr,
267} 267}
268 268
269/** 269/**
270 * lpfc_mlomgmt_show: Return the Menlo Maintenance sli flag. 270 * lpfc_mlomgmt_show - Return the Menlo Maintenance sli flag
271 * @dev: class converted to a Scsi_host structure. 271 * @dev: class converted to a Scsi_host structure.
272 * @attr: device attribute, not used. 272 * @attr: device attribute, not used.
273 * @buf: on return contains the Menlo Maintenance sli flag. 273 * @buf: on return contains the Menlo Maintenance sli flag.
@@ -286,7 +286,7 @@ lpfc_mlomgmt_show(struct device *dev, struct device_attribute *attr, char *buf)
286} 286}
287 287
288/** 288/**
289 * lpfc_vportnum_show: Return the port number in ascii of the hba. 289 * lpfc_vportnum_show - Return the port number in ascii of the hba
290 * @dev: class converted to a Scsi_host structure. 290 * @dev: class converted to a Scsi_host structure.
291 * @attr: device attribute, not used. 291 * @attr: device attribute, not used.
292 * @buf: on return contains scsi vpd program type. 292 * @buf: on return contains scsi vpd program type.
@@ -305,7 +305,7 @@ lpfc_vportnum_show(struct device *dev, struct device_attribute *attr,
305} 305}
306 306
307/** 307/**
308 * lpfc_fwrev_show: Return the firmware rev running in the hba. 308 * lpfc_fwrev_show - Return the firmware rev running in the hba
309 * @dev: class converted to a Scsi_host structure. 309 * @dev: class converted to a Scsi_host structure.
310 * @attr: device attribute, not used. 310 * @attr: device attribute, not used.
311 * @buf: on return contains the scsi vpd program type. 311 * @buf: on return contains the scsi vpd program type.
@@ -326,7 +326,7 @@ lpfc_fwrev_show(struct device *dev, struct device_attribute *attr,
326} 326}
327 327
328/** 328/**
329 * lpfc_hdw_show: Return the jedec information about the hba. 329 * lpfc_hdw_show - Return the jedec information about the hba
330 * @dev: class converted to a Scsi_host structure. 330 * @dev: class converted to a Scsi_host structure.
331 * @attr: device attribute, not used. 331 * @attr: device attribute, not used.
332 * @buf: on return contains the scsi vpd program type. 332 * @buf: on return contains the scsi vpd program type.
@@ -347,7 +347,7 @@ lpfc_hdw_show(struct device *dev, struct device_attribute *attr, char *buf)
347} 347}
348 348
349/** 349/**
350 * lpfc_option_rom_version_show: Return the adapter ROM FCode version. 350 * lpfc_option_rom_version_show - Return the adapter ROM FCode version
351 * @dev: class converted to a Scsi_host structure. 351 * @dev: class converted to a Scsi_host structure.
352 * @attr: device attribute, not used. 352 * @attr: device attribute, not used.
353 * @buf: on return contains the ROM and FCode ascii strings. 353 * @buf: on return contains the ROM and FCode ascii strings.
@@ -366,7 +366,7 @@ lpfc_option_rom_version_show(struct device *dev, struct device_attribute *attr,
366} 366}
367 367
368/** 368/**
369 * lpfc_state_show: Return the link state of the port. 369 * lpfc_state_show - Return the link state of the port
370 * @dev: class converted to a Scsi_host structure. 370 * @dev: class converted to a Scsi_host structure.
371 * @attr: device attribute, not used. 371 * @attr: device attribute, not used.
372 * @buf: on return contains text describing the state of the link. 372 * @buf: on return contains text describing the state of the link.
@@ -451,7 +451,7 @@ lpfc_link_state_show(struct device *dev, struct device_attribute *attr,
451} 451}
452 452
453/** 453/**
454 * lpfc_num_discovered_ports_show: Return sum of mapped and unmapped vports. 454 * lpfc_num_discovered_ports_show - Return sum of mapped and unmapped vports
455 * @dev: class device that is converted into a Scsi_host. 455 * @dev: class device that is converted into a Scsi_host.
456 * @attr: device attribute, not used. 456 * @attr: device attribute, not used.
457 * @buf: on return contains the sum of fc mapped and unmapped. 457 * @buf: on return contains the sum of fc mapped and unmapped.
@@ -474,7 +474,7 @@ lpfc_num_discovered_ports_show(struct device *dev,
474} 474}
475 475
476/** 476/**
477 * lpfc_issue_lip: Misnomer, name carried over from long ago. 477 * lpfc_issue_lip - Misnomer, name carried over from long ago
478 * @shost: Scsi_Host pointer. 478 * @shost: Scsi_Host pointer.
479 * 479 *
480 * Description: 480 * Description:
@@ -529,7 +529,7 @@ lpfc_issue_lip(struct Scsi_Host *shost)
529} 529}
530 530
531/** 531/**
532 * lpfc_do_offline: Issues a mailbox command to bring the link down. 532 * lpfc_do_offline - Issues a mailbox command to bring the link down
533 * @phba: lpfc_hba pointer. 533 * @phba: lpfc_hba pointer.
534 * @type: LPFC_EVT_OFFLINE, LPFC_EVT_WARM_START, LPFC_EVT_KILL. 534 * @type: LPFC_EVT_OFFLINE, LPFC_EVT_WARM_START, LPFC_EVT_KILL.
535 * 535 *
@@ -537,7 +537,7 @@ lpfc_issue_lip(struct Scsi_Host *shost)
537 * Assumes any error from lpfc_do_offline() will be negative. 537 * Assumes any error from lpfc_do_offline() will be negative.
538 * Can wait up to 5 seconds for the port ring buffers count 538 * Can wait up to 5 seconds for the port ring buffers count
539 * to reach zero, prints a warning if it is not zero and continues. 539 * to reach zero, prints a warning if it is not zero and continues.
540 * lpfc_workq_post_event() returns a non-zero return coce if call fails. 540 * lpfc_workq_post_event() returns a non-zero return code if call fails.
541 * 541 *
542 * Returns: 542 * Returns:
543 * -EIO error posting the event 543 * -EIO error posting the event
@@ -591,7 +591,7 @@ lpfc_do_offline(struct lpfc_hba *phba, uint32_t type)
591} 591}
592 592
593/** 593/**
594 * lpfc_selective_reset: Offline then onlines the port. 594 * lpfc_selective_reset - Offline then onlines the port
595 * @phba: lpfc_hba pointer. 595 * @phba: lpfc_hba pointer.
596 * 596 *
597 * Description: 597 * Description:
@@ -632,7 +632,7 @@ lpfc_selective_reset(struct lpfc_hba *phba)
632} 632}
633 633
634/** 634/**
635 * lpfc_issue_reset: Selectively resets an adapter. 635 * lpfc_issue_reset - Selectively resets an adapter
636 * @dev: class device that is converted into a Scsi_host. 636 * @dev: class device that is converted into a Scsi_host.
637 * @attr: device attribute, not used. 637 * @attr: device attribute, not used.
638 * @buf: containing the string "selective". 638 * @buf: containing the string "selective".
@@ -672,7 +672,7 @@ lpfc_issue_reset(struct device *dev, struct device_attribute *attr,
672} 672}
673 673
674/** 674/**
675 * lpfc_nport_evt_cnt_show: Return the number of nport events. 675 * lpfc_nport_evt_cnt_show - Return the number of nport events
676 * @dev: class device that is converted into a Scsi_host. 676 * @dev: class device that is converted into a Scsi_host.
677 * @attr: device attribute, not used. 677 * @attr: device attribute, not used.
678 * @buf: on return contains the ascii number of nport events. 678 * @buf: on return contains the ascii number of nport events.
@@ -691,7 +691,7 @@ lpfc_nport_evt_cnt_show(struct device *dev, struct device_attribute *attr,
691} 691}
692 692
693/** 693/**
694 * lpfc_board_mode_show: Return the state of the board. 694 * lpfc_board_mode_show - Return the state of the board
695 * @dev: class device that is converted into a Scsi_host. 695 * @dev: class device that is converted into a Scsi_host.
696 * @attr: device attribute, not used. 696 * @attr: device attribute, not used.
697 * @buf: on return contains the state of the adapter. 697 * @buf: on return contains the state of the adapter.
@@ -720,7 +720,7 @@ lpfc_board_mode_show(struct device *dev, struct device_attribute *attr,
720} 720}
721 721
722/** 722/**
723 * lpfc_board_mode_store: Puts the hba in online, offline, warm or error state. 723 * lpfc_board_mode_store - Puts the hba in online, offline, warm or error state
724 * @dev: class device that is converted into a Scsi_host. 724 * @dev: class device that is converted into a Scsi_host.
725 * @attr: device attribute, not used. 725 * @attr: device attribute, not used.
726 * @buf: containing one of the strings "online", "offline", "warm" or "error". 726 * @buf: containing one of the strings "online", "offline", "warm" or "error".
@@ -766,14 +766,14 @@ lpfc_board_mode_store(struct device *dev, struct device_attribute *attr,
766} 766}
767 767
768/** 768/**
769 * lpfc_get_hba_info: Return various bits of informaton about the adapter. 769 * lpfc_get_hba_info - Return various bits of informaton about the adapter
770 * @phba: pointer to the adapter structure. 770 * @phba: pointer to the adapter structure.
771 * @mxri max xri count. 771 * @mxri: max xri count.
772 * @axri available xri count. 772 * @axri: available xri count.
773 * @mrpi max rpi count. 773 * @mrpi: max rpi count.
774 * @arpi available rpi count. 774 * @arpi: available rpi count.
775 * @mvpi max vpi count. 775 * @mvpi: max vpi count.
776 * @avpi available vpi count. 776 * @avpi: available vpi count.
777 * 777 *
778 * Description: 778 * Description:
779 * If an integer pointer for an count is not null then the value for the 779 * If an integer pointer for an count is not null then the value for the
@@ -846,7 +846,7 @@ lpfc_get_hba_info(struct lpfc_hba *phba,
846} 846}
847 847
848/** 848/**
849 * lpfc_max_rpi_show: Return maximum rpi. 849 * lpfc_max_rpi_show - Return maximum rpi
850 * @dev: class device that is converted into a Scsi_host. 850 * @dev: class device that is converted into a Scsi_host.
851 * @attr: device attribute, not used. 851 * @attr: device attribute, not used.
852 * @buf: on return contains the maximum rpi count in decimal or "Unknown". 852 * @buf: on return contains the maximum rpi count in decimal or "Unknown".
@@ -874,7 +874,7 @@ lpfc_max_rpi_show(struct device *dev, struct device_attribute *attr,
874} 874}
875 875
876/** 876/**
877 * lpfc_used_rpi_show: Return maximum rpi minus available rpi. 877 * lpfc_used_rpi_show - Return maximum rpi minus available rpi
878 * @dev: class device that is converted into a Scsi_host. 878 * @dev: class device that is converted into a Scsi_host.
879 * @attr: device attribute, not used. 879 * @attr: device attribute, not used.
880 * @buf: containing the used rpi count in decimal or "Unknown". 880 * @buf: containing the used rpi count in decimal or "Unknown".
@@ -902,7 +902,7 @@ lpfc_used_rpi_show(struct device *dev, struct device_attribute *attr,
902} 902}
903 903
904/** 904/**
905 * lpfc_max_xri_show: Return maximum xri. 905 * lpfc_max_xri_show - Return maximum xri
906 * @dev: class device that is converted into a Scsi_host. 906 * @dev: class device that is converted into a Scsi_host.
907 * @attr: device attribute, not used. 907 * @attr: device attribute, not used.
908 * @buf: on return contains the maximum xri count in decimal or "Unknown". 908 * @buf: on return contains the maximum xri count in decimal or "Unknown".
@@ -930,7 +930,7 @@ lpfc_max_xri_show(struct device *dev, struct device_attribute *attr,
930} 930}
931 931
932/** 932/**
933 * lpfc_used_xri_show: Return maximum xpi minus the available xpi. 933 * lpfc_used_xri_show - Return maximum xpi minus the available xpi
934 * @dev: class device that is converted into a Scsi_host. 934 * @dev: class device that is converted into a Scsi_host.
935 * @attr: device attribute, not used. 935 * @attr: device attribute, not used.
936 * @buf: on return contains the used xri count in decimal or "Unknown". 936 * @buf: on return contains the used xri count in decimal or "Unknown".
@@ -958,7 +958,7 @@ lpfc_used_xri_show(struct device *dev, struct device_attribute *attr,
958} 958}
959 959
960/** 960/**
961 * lpfc_max_vpi_show: Return maximum vpi. 961 * lpfc_max_vpi_show - Return maximum vpi
962 * @dev: class device that is converted into a Scsi_host. 962 * @dev: class device that is converted into a Scsi_host.
963 * @attr: device attribute, not used. 963 * @attr: device attribute, not used.
964 * @buf: on return contains the maximum vpi count in decimal or "Unknown". 964 * @buf: on return contains the maximum vpi count in decimal or "Unknown".
@@ -986,7 +986,7 @@ lpfc_max_vpi_show(struct device *dev, struct device_attribute *attr,
986} 986}
987 987
988/** 988/**
989 * lpfc_used_vpi_show: Return maximum vpi minus the available vpi. 989 * lpfc_used_vpi_show - Return maximum vpi minus the available vpi
990 * @dev: class device that is converted into a Scsi_host. 990 * @dev: class device that is converted into a Scsi_host.
991 * @attr: device attribute, not used. 991 * @attr: device attribute, not used.
992 * @buf: on return contains the used vpi count in decimal or "Unknown". 992 * @buf: on return contains the used vpi count in decimal or "Unknown".
@@ -1014,7 +1014,7 @@ lpfc_used_vpi_show(struct device *dev, struct device_attribute *attr,
1014} 1014}
1015 1015
1016/** 1016/**
1017 * lpfc_npiv_info_show: Return text about NPIV support for the adapter. 1017 * lpfc_npiv_info_show - Return text about NPIV support for the adapter
1018 * @dev: class device that is converted into a Scsi_host. 1018 * @dev: class device that is converted into a Scsi_host.
1019 * @attr: device attribute, not used. 1019 * @attr: device attribute, not used.
1020 * @buf: text that must be interpreted to determine if npiv is supported. 1020 * @buf: text that must be interpreted to determine if npiv is supported.
@@ -1042,7 +1042,7 @@ lpfc_npiv_info_show(struct device *dev, struct device_attribute *attr,
1042} 1042}
1043 1043
1044/** 1044/**
1045 * lpfc_poll_show: Return text about poll support for the adapter. 1045 * lpfc_poll_show - Return text about poll support for the adapter
1046 * @dev: class device that is converted into a Scsi_host. 1046 * @dev: class device that is converted into a Scsi_host.
1047 * @attr: device attribute, not used. 1047 * @attr: device attribute, not used.
1048 * @buf: on return contains the cfg_poll in hex. 1048 * @buf: on return contains the cfg_poll in hex.
@@ -1064,7 +1064,7 @@ lpfc_poll_show(struct device *dev, struct device_attribute *attr,
1064} 1064}
1065 1065
1066/** 1066/**
1067 * lpfc_poll_store: Set the value of cfg_poll for the adapter. 1067 * lpfc_poll_store - Set the value of cfg_poll for the adapter
1068 * @dev: class device that is converted into a Scsi_host. 1068 * @dev: class device that is converted into a Scsi_host.
1069 * @attr: device attribute, not used. 1069 * @attr: device attribute, not used.
1070 * @buf: one or more lpfc_polling_flags values. 1070 * @buf: one or more lpfc_polling_flags values.
@@ -1136,7 +1136,7 @@ lpfc_poll_store(struct device *dev, struct device_attribute *attr,
1136} 1136}
1137 1137
1138/** 1138/**
1139 * lpfc_param_show: Return a cfg attribute value in decimal. 1139 * lpfc_param_show - Return a cfg attribute value in decimal
1140 * 1140 *
1141 * Description: 1141 * Description:
1142 * Macro that given an attr e.g. hba_queue_depth expands 1142 * Macro that given an attr e.g. hba_queue_depth expands
@@ -1164,7 +1164,7 @@ lpfc_##attr##_show(struct device *dev, struct device_attribute *attr, \
1164} 1164}
1165 1165
1166/** 1166/**
1167 * lpfc_param_hex_show: Return a cfg attribute value in hex. 1167 * lpfc_param_hex_show - Return a cfg attribute value in hex
1168 * 1168 *
1169 * Description: 1169 * Description:
1170 * Macro that given an attr e.g. hba_queue_depth expands 1170 * Macro that given an attr e.g. hba_queue_depth expands
@@ -1173,7 +1173,7 @@ lpfc_##attr##_show(struct device *dev, struct device_attribute *attr, \
1173 * lpfc_##attr##_show: Return the hex value of an adapters cfg_xxx field. 1173 * lpfc_##attr##_show: Return the hex value of an adapters cfg_xxx field.
1174 * @dev: class device that is converted into a Scsi_host. 1174 * @dev: class device that is converted into a Scsi_host.
1175 * @attr: device attribute, not used. 1175 * @attr: device attribute, not used.
1176 * @buf: on return contains the attribute value in hexidecimal. 1176 * @buf: on return contains the attribute value in hexadecimal.
1177 * 1177 *
1178 * Returns: size of formatted string. 1178 * Returns: size of formatted string.
1179 **/ 1179 **/
@@ -1192,7 +1192,7 @@ lpfc_##attr##_show(struct device *dev, struct device_attribute *attr, \
1192} 1192}
1193 1193
1194/** 1194/**
1195 * lpfc_param_init: Intializes a cfg attribute. 1195 * lpfc_param_init - Intializes a cfg attribute
1196 * 1196 *
1197 * Description: 1197 * Description:
1198 * Macro that given an attr e.g. hba_queue_depth expands 1198 * Macro that given an attr e.g. hba_queue_depth expands
@@ -1226,7 +1226,7 @@ lpfc_##attr##_init(struct lpfc_hba *phba, int val) \
1226} 1226}
1227 1227
1228/** 1228/**
1229 * lpfc_param_set: Set a cfg attribute value. 1229 * lpfc_param_set - Set a cfg attribute value
1230 * 1230 *
1231 * Description: 1231 * Description:
1232 * Macro that given an attr e.g. hba_queue_depth expands 1232 * Macro that given an attr e.g. hba_queue_depth expands
@@ -1260,7 +1260,7 @@ lpfc_##attr##_set(struct lpfc_hba *phba, int val) \
1260} 1260}
1261 1261
1262/** 1262/**
1263 * lpfc_param_store: Set a vport attribute value. 1263 * lpfc_param_store - Set a vport attribute value
1264 * 1264 *
1265 * Description: 1265 * Description:
1266 * Macro that given an attr e.g. hba_queue_depth expands 1266 * Macro that given an attr e.g. hba_queue_depth expands
@@ -1300,7 +1300,7 @@ lpfc_##attr##_store(struct device *dev, struct device_attribute *attr, \
1300} 1300}
1301 1301
1302/** 1302/**
1303 * lpfc_vport_param_show: Return decimal formatted cfg attribute value. 1303 * lpfc_vport_param_show - Return decimal formatted cfg attribute value
1304 * 1304 *
1305 * Description: 1305 * Description:
1306 * Macro that given an attr e.g. hba_queue_depth expands 1306 * Macro that given an attr e.g. hba_queue_depth expands
@@ -1326,17 +1326,17 @@ lpfc_##attr##_show(struct device *dev, struct device_attribute *attr, \
1326} 1326}
1327 1327
1328/** 1328/**
1329 * lpfc_vport_param_hex_show: Return hex formatted attribute value. 1329 * lpfc_vport_param_hex_show - Return hex formatted attribute value
1330 * 1330 *
1331 * Description: 1331 * Description:
1332 * Macro that given an attr e.g. 1332 * Macro that given an attr e.g.
1333 * hba_queue_depth expands into a function with the name 1333 * hba_queue_depth expands into a function with the name
1334 * lpfc_hba_queue_depth_show 1334 * lpfc_hba_queue_depth_show
1335 * 1335 *
1336 * lpfc_##attr##_show: prints the attribute value in hexidecimal. 1336 * lpfc_##attr##_show: prints the attribute value in hexadecimal.
1337 * @dev: class device that is converted into a Scsi_host. 1337 * @dev: class device that is converted into a Scsi_host.
1338 * @attr: device attribute, not used. 1338 * @attr: device attribute, not used.
1339 * @buf: on return contains the attribute value in hexidecimal. 1339 * @buf: on return contains the attribute value in hexadecimal.
1340 * 1340 *
1341 * Returns: length of formatted string. 1341 * Returns: length of formatted string.
1342 **/ 1342 **/
@@ -1353,7 +1353,7 @@ lpfc_##attr##_show(struct device *dev, struct device_attribute *attr, \
1353} 1353}
1354 1354
1355/** 1355/**
1356 * lpfc_vport_param_init: Initialize a vport cfg attribute. 1356 * lpfc_vport_param_init - Initialize a vport cfg attribute
1357 * 1357 *
1358 * Description: 1358 * Description:
1359 * Macro that given an attr e.g. hba_queue_depth expands 1359 * Macro that given an attr e.g. hba_queue_depth expands
@@ -1386,7 +1386,7 @@ lpfc_##attr##_init(struct lpfc_vport *vport, int val) \
1386} 1386}
1387 1387
1388/** 1388/**
1389 * lpfc_vport_param_set: Set a vport cfg attribute. 1389 * lpfc_vport_param_set - Set a vport cfg attribute
1390 * 1390 *
1391 * Description: 1391 * Description:
1392 * Macro that given an attr e.g. hba_queue_depth expands 1392 * Macro that given an attr e.g. hba_queue_depth expands
@@ -1417,7 +1417,7 @@ lpfc_##attr##_set(struct lpfc_vport *vport, int val) \
1417} 1417}
1418 1418
1419/** 1419/**
1420 * lpfc_vport_param_store: Set a vport attribute. 1420 * lpfc_vport_param_store - Set a vport attribute
1421 * 1421 *
1422 * Description: 1422 * Description:
1423 * Macro that given an attr e.g. hba_queue_depth 1423 * Macro that given an attr e.g. hba_queue_depth
@@ -1576,7 +1576,7 @@ static DEVICE_ATTR(lpfc_temp_sensor, S_IRUGO, lpfc_temp_sensor_show, NULL);
1576static char *lpfc_soft_wwn_key = "C99G71SL8032A"; 1576static char *lpfc_soft_wwn_key = "C99G71SL8032A";
1577 1577
1578/** 1578/**
1579 * lpfc_soft_wwn_enable_store: Allows setting of the wwn if the key is valid. 1579 * lpfc_soft_wwn_enable_store - Allows setting of the wwn if the key is valid
1580 * @dev: class device that is converted into a Scsi_host. 1580 * @dev: class device that is converted into a Scsi_host.
1581 * @attr: device attribute, not used. 1581 * @attr: device attribute, not used.
1582 * @buf: containing the string lpfc_soft_wwn_key. 1582 * @buf: containing the string lpfc_soft_wwn_key.
@@ -1623,10 +1623,10 @@ static DEVICE_ATTR(lpfc_soft_wwn_enable, S_IWUSR, NULL,
1623 lpfc_soft_wwn_enable_store); 1623 lpfc_soft_wwn_enable_store);
1624 1624
1625/** 1625/**
1626 * lpfc_soft_wwpn_show: Return the cfg soft ww port name of the adapter. 1626 * lpfc_soft_wwpn_show - Return the cfg soft ww port name of the adapter
1627 * @dev: class device that is converted into a Scsi_host. 1627 * @dev: class device that is converted into a Scsi_host.
1628 * @attr: device attribute, not used. 1628 * @attr: device attribute, not used.
1629 * @buf: on return contains the wwpn in hexidecimal. 1629 * @buf: on return contains the wwpn in hexadecimal.
1630 * 1630 *
1631 * Returns: size of formatted string. 1631 * Returns: size of formatted string.
1632 **/ 1632 **/
@@ -1643,10 +1643,10 @@ lpfc_soft_wwpn_show(struct device *dev, struct device_attribute *attr,
1643} 1643}
1644 1644
1645/** 1645/**
1646 * lpfc_soft_wwpn_store: Set the ww port name of the adapter. 1646 * lpfc_soft_wwpn_store - Set the ww port name of the adapter
1647 * @dev class device that is converted into a Scsi_host. 1647 * @dev class device that is converted into a Scsi_host.
1648 * @attr: device attribute, not used. 1648 * @attr: device attribute, not used.
1649 * @buf: contains the wwpn in hexidecimal. 1649 * @buf: contains the wwpn in hexadecimal.
1650 * @count: number of wwpn bytes in buf 1650 * @count: number of wwpn bytes in buf
1651 * 1651 *
1652 * Returns: 1652 * Returns:
@@ -1729,10 +1729,10 @@ static DEVICE_ATTR(lpfc_soft_wwpn, S_IRUGO | S_IWUSR,\
1729 lpfc_soft_wwpn_show, lpfc_soft_wwpn_store); 1729 lpfc_soft_wwpn_show, lpfc_soft_wwpn_store);
1730 1730
1731/** 1731/**
1732 * lpfc_soft_wwnn_show: Return the cfg soft ww node name for the adapter. 1732 * lpfc_soft_wwnn_show - Return the cfg soft ww node name for the adapter
1733 * @dev: class device that is converted into a Scsi_host. 1733 * @dev: class device that is converted into a Scsi_host.
1734 * @attr: device attribute, not used. 1734 * @attr: device attribute, not used.
1735 * @buf: on return contains the wwnn in hexidecimal. 1735 * @buf: on return contains the wwnn in hexadecimal.
1736 * 1736 *
1737 * Returns: size of formatted string. 1737 * Returns: size of formatted string.
1738 **/ 1738 **/
@@ -1747,9 +1747,9 @@ lpfc_soft_wwnn_show(struct device *dev, struct device_attribute *attr,
1747} 1747}
1748 1748
1749/** 1749/**
1750 * lpfc_soft_wwnn_store: sets the ww node name of the adapter. 1750 * lpfc_soft_wwnn_store - sets the ww node name of the adapter
1751 * @cdev: class device that is converted into a Scsi_host. 1751 * @cdev: class device that is converted into a Scsi_host.
1752 * @buf: contains the ww node name in hexidecimal. 1752 * @buf: contains the ww node name in hexadecimal.
1753 * @count: number of wwnn bytes in buf. 1753 * @count: number of wwnn bytes in buf.
1754 * 1754 *
1755 * Returns: 1755 * Returns:
@@ -1845,7 +1845,7 @@ MODULE_PARM_DESC(lpfc_nodev_tmo,
1845 "for a device to come back"); 1845 "for a device to come back");
1846 1846
1847/** 1847/**
1848 * lpfc_nodev_tmo_show: Return the hba dev loss timeout value. 1848 * lpfc_nodev_tmo_show - Return the hba dev loss timeout value
1849 * @dev: class converted to a Scsi_host structure. 1849 * @dev: class converted to a Scsi_host structure.
1850 * @attr: device attribute, not used. 1850 * @attr: device attribute, not used.
1851 * @buf: on return contains the dev loss timeout in decimal. 1851 * @buf: on return contains the dev loss timeout in decimal.
@@ -1864,7 +1864,7 @@ lpfc_nodev_tmo_show(struct device *dev, struct device_attribute *attr,
1864} 1864}
1865 1865
1866/** 1866/**
1867 * lpfc_nodev_tmo_init: Set the hba nodev timeout value. 1867 * lpfc_nodev_tmo_init - Set the hba nodev timeout value
1868 * @vport: lpfc vport structure pointer. 1868 * @vport: lpfc vport structure pointer.
1869 * @val: contains the nodev timeout value. 1869 * @val: contains the nodev timeout value.
1870 * 1870 *
@@ -1905,7 +1905,7 @@ lpfc_nodev_tmo_init(struct lpfc_vport *vport, int val)
1905} 1905}
1906 1906
1907/** 1907/**
1908 * lpfc_update_rport_devloss_tmo: Update dev loss tmo value. 1908 * lpfc_update_rport_devloss_tmo - Update dev loss tmo value
1909 * @vport: lpfc vport structure pointer. 1909 * @vport: lpfc vport structure pointer.
1910 * 1910 *
1911 * Description: 1911 * Description:
@@ -1926,7 +1926,7 @@ lpfc_update_rport_devloss_tmo(struct lpfc_vport *vport)
1926} 1926}
1927 1927
1928/** 1928/**
1929 * lpfc_nodev_tmo_set: Set the vport nodev tmo and devloss tmo values. 1929 * lpfc_nodev_tmo_set - Set the vport nodev tmo and devloss tmo values
1930 * @vport: lpfc vport structure pointer. 1930 * @vport: lpfc vport structure pointer.
1931 * @val: contains the tmo value. 1931 * @val: contains the tmo value.
1932 * 1932 *
@@ -1982,7 +1982,7 @@ lpfc_vport_param_init(devloss_tmo, LPFC_DEF_DEVLOSS_TMO,
1982lpfc_vport_param_show(devloss_tmo) 1982lpfc_vport_param_show(devloss_tmo)
1983 1983
1984/** 1984/**
1985 * lpfc_devloss_tmo_set: Sets vport nodev tmo, devloss tmo values, changed bit. 1985 * lpfc_devloss_tmo_set - Sets vport nodev tmo, devloss tmo values, changed bit
1986 * @vport: lpfc vport structure pointer. 1986 * @vport: lpfc vport structure pointer.
1987 * @val: contains the tmo value. 1987 * @val: contains the tmo value.
1988 * 1988 *
@@ -2094,7 +2094,7 @@ MODULE_PARM_DESC(lpfc_restrict_login,
2094lpfc_vport_param_show(restrict_login); 2094lpfc_vport_param_show(restrict_login);
2095 2095
2096/** 2096/**
2097 * lpfc_restrict_login_init: Set the vport restrict login flag. 2097 * lpfc_restrict_login_init - Set the vport restrict login flag
2098 * @vport: lpfc vport structure pointer. 2098 * @vport: lpfc vport structure pointer.
2099 * @val: contains the restrict login value. 2099 * @val: contains the restrict login value.
2100 * 2100 *
@@ -2128,7 +2128,7 @@ lpfc_restrict_login_init(struct lpfc_vport *vport, int val)
2128} 2128}
2129 2129
2130/** 2130/**
2131 * lpfc_restrict_login_set: Set the vport restrict login flag. 2131 * lpfc_restrict_login_set - Set the vport restrict login flag
2132 * @vport: lpfc vport structure pointer. 2132 * @vport: lpfc vport structure pointer.
2133 * @val: contains the restrict login value. 2133 * @val: contains the restrict login value.
2134 * 2134 *
@@ -2201,7 +2201,7 @@ LPFC_VPORT_ATTR_R(scan_down, 1, 0, 1,
2201*/ 2201*/
2202 2202
2203/** 2203/**
2204 * lpfc_topology_set: Set the adapters topology field. 2204 * lpfc_topology_set - Set the adapters topology field
2205 * @phba: lpfc_hba pointer. 2205 * @phba: lpfc_hba pointer.
2206 * @val: topology value. 2206 * @val: topology value.
2207 * 2207 *
@@ -2216,18 +2216,41 @@ LPFC_VPORT_ATTR_R(scan_down, 1, 0, 1,
2216 * non-zero return value from lpfc_issue_lip() 2216 * non-zero return value from lpfc_issue_lip()
2217 * -EINVAL val out of range 2217 * -EINVAL val out of range
2218 **/ 2218 **/
2219static int 2219static ssize_t
2220lpfc_topology_set(struct lpfc_hba *phba, int val) 2220lpfc_topology_store(struct device *dev, struct device_attribute *attr,
2221 const char *buf, size_t count)
2221{ 2222{
2223 struct Scsi_Host *shost = class_to_shost(dev);
2224 struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;
2225 struct lpfc_hba *phba = vport->phba;
2226 int val = 0;
2227 int nolip = 0;
2228 const char *val_buf = buf;
2222 int err; 2229 int err;
2223 uint32_t prev_val; 2230 uint32_t prev_val;
2231
2232 if (!strncmp(buf, "nolip ", strlen("nolip "))) {
2233 nolip = 1;
2234 val_buf = &buf[strlen("nolip ")];
2235 }
2236
2237 if (!isdigit(val_buf[0]))
2238 return -EINVAL;
2239 if (sscanf(val_buf, "%i", &val) != 1)
2240 return -EINVAL;
2241
2224 if (val >= 0 && val <= 6) { 2242 if (val >= 0 && val <= 6) {
2225 prev_val = phba->cfg_topology; 2243 prev_val = phba->cfg_topology;
2226 phba->cfg_topology = val; 2244 phba->cfg_topology = val;
2245 if (nolip)
2246 return strlen(buf);
2247
2227 err = lpfc_issue_lip(lpfc_shost_from_vport(phba->pport)); 2248 err = lpfc_issue_lip(lpfc_shost_from_vport(phba->pport));
2228 if (err) 2249 if (err) {
2229 phba->cfg_topology = prev_val; 2250 phba->cfg_topology = prev_val;
2230 return err; 2251 return -EINVAL;
2252 } else
2253 return strlen(buf);
2231 } 2254 }
2232 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, 2255 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
2233 "%d:0467 lpfc_topology attribute cannot be set to %d, " 2256 "%d:0467 lpfc_topology attribute cannot be set to %d, "
@@ -2240,14 +2263,12 @@ module_param(lpfc_topology, int, 0);
2240MODULE_PARM_DESC(lpfc_topology, "Select Fibre Channel topology"); 2263MODULE_PARM_DESC(lpfc_topology, "Select Fibre Channel topology");
2241lpfc_param_show(topology) 2264lpfc_param_show(topology)
2242lpfc_param_init(topology, 0, 0, 6) 2265lpfc_param_init(topology, 0, 0, 6)
2243lpfc_param_store(topology)
2244static DEVICE_ATTR(lpfc_topology, S_IRUGO | S_IWUSR, 2266static DEVICE_ATTR(lpfc_topology, S_IRUGO | S_IWUSR,
2245 lpfc_topology_show, lpfc_topology_store); 2267 lpfc_topology_show, lpfc_topology_store);
2246 2268
2247 2269
2248/** 2270/**
2249 * lpfc_stat_data_ctrl_store: write call back for lpfc_stat_data_ctrl 2271 * lpfc_stat_data_ctrl_store - write call back for lpfc_stat_data_ctrl sysfs file
2250 * sysfs file.
2251 * @dev: Pointer to class device. 2272 * @dev: Pointer to class device.
2252 * @buf: Data buffer. 2273 * @buf: Data buffer.
2253 * @count: Size of the data buffer. 2274 * @count: Size of the data buffer.
@@ -2282,7 +2303,7 @@ lpfc_stat_data_ctrl_store(struct device *dev, struct device_attribute *attr,
2282 unsigned long base, step, bucket_type; 2303 unsigned long base, step, bucket_type;
2283 2304
2284 if (!strncmp(buf, "setbucket", strlen("setbucket"))) { 2305 if (!strncmp(buf, "setbucket", strlen("setbucket"))) {
2285 if (strlen(buf) > LPFC_MAX_DATA_CTRL_LEN) 2306 if (strlen(buf) > (LPFC_MAX_DATA_CTRL_LEN - 1))
2286 return -EINVAL; 2307 return -EINVAL;
2287 2308
2288 strcpy(bucket_data, buf); 2309 strcpy(bucket_data, buf);
@@ -2411,8 +2432,7 @@ lpfc_stat_data_ctrl_store(struct device *dev, struct device_attribute *attr,
2411 2432
2412 2433
2413/** 2434/**
2414 * lpfc_stat_data_ctrl_show: Read callback function for 2435 * lpfc_stat_data_ctrl_show - Read function for lpfc_stat_data_ctrl sysfs file
2415 * lpfc_stat_data_ctrl sysfs file.
2416 * @dev: Pointer to class device object. 2436 * @dev: Pointer to class device object.
2417 * @buf: Data buffer. 2437 * @buf: Data buffer.
2418 * 2438 *
@@ -2489,8 +2509,7 @@ static DEVICE_ATTR(lpfc_stat_data_ctrl, S_IRUGO | S_IWUSR,
2489 2509
2490 2510
2491/** 2511/**
2492 * sysfs_drvr_stat_data_read: Read callback function for lpfc_drvr_stat_data 2512 * sysfs_drvr_stat_data_read - Read function for lpfc_drvr_stat_data attribute
2493 * sysfs attribute.
2494 * @kobj: Pointer to the kernel object 2513 * @kobj: Pointer to the kernel object
2495 * @bin_attr: Attribute object 2514 * @bin_attr: Attribute object
2496 * @buff: Buffer pointer 2515 * @buff: Buffer pointer
@@ -2585,7 +2604,7 @@ static struct bin_attribute sysfs_drvr_stat_data_attr = {
2585*/ 2604*/
2586 2605
2587/** 2606/**
2588 * lpfc_link_speed_set: Set the adapters link speed. 2607 * lpfc_link_speed_set - Set the adapters link speed
2589 * @phba: lpfc_hba pointer. 2608 * @phba: lpfc_hba pointer.
2590 * @val: link speed value. 2609 * @val: link speed value.
2591 * 2610 *
@@ -2601,12 +2620,29 @@ static struct bin_attribute sysfs_drvr_stat_data_attr = {
2601 * non-zero return value from lpfc_issue_lip() 2620 * non-zero return value from lpfc_issue_lip()
2602 * -EINVAL val out of range 2621 * -EINVAL val out of range
2603 **/ 2622 **/
2604static int 2623static ssize_t
2605lpfc_link_speed_set(struct lpfc_hba *phba, int val) 2624lpfc_link_speed_store(struct device *dev, struct device_attribute *attr,
2625 const char *buf, size_t count)
2606{ 2626{
2627 struct Scsi_Host *shost = class_to_shost(dev);
2628 struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;
2629 struct lpfc_hba *phba = vport->phba;
2630 int val = 0;
2631 int nolip = 0;
2632 const char *val_buf = buf;
2607 int err; 2633 int err;
2608 uint32_t prev_val; 2634 uint32_t prev_val;
2609 2635
2636 if (!strncmp(buf, "nolip ", strlen("nolip "))) {
2637 nolip = 1;
2638 val_buf = &buf[strlen("nolip ")];
2639 }
2640
2641 if (!isdigit(val_buf[0]))
2642 return -EINVAL;
2643 if (sscanf(val_buf, "%i", &val) != 1)
2644 return -EINVAL;
2645
2610 if (((val == LINK_SPEED_1G) && !(phba->lmt & LMT_1Gb)) || 2646 if (((val == LINK_SPEED_1G) && !(phba->lmt & LMT_1Gb)) ||
2611 ((val == LINK_SPEED_2G) && !(phba->lmt & LMT_2Gb)) || 2647 ((val == LINK_SPEED_2G) && !(phba->lmt & LMT_2Gb)) ||
2612 ((val == LINK_SPEED_4G) && !(phba->lmt & LMT_4Gb)) || 2648 ((val == LINK_SPEED_4G) && !(phba->lmt & LMT_4Gb)) ||
@@ -2614,14 +2650,19 @@ lpfc_link_speed_set(struct lpfc_hba *phba, int val)
2614 ((val == LINK_SPEED_10G) && !(phba->lmt & LMT_10Gb))) 2650 ((val == LINK_SPEED_10G) && !(phba->lmt & LMT_10Gb)))
2615 return -EINVAL; 2651 return -EINVAL;
2616 2652
2617 if ((val >= 0 && val <= LPFC_MAX_LINK_SPEED) 2653 if ((val >= 0 && val <= 8)
2618 && (LPFC_LINK_SPEED_BITMAP & (1 << val))) { 2654 && (LPFC_LINK_SPEED_BITMAP & (1 << val))) {
2619 prev_val = phba->cfg_link_speed; 2655 prev_val = phba->cfg_link_speed;
2620 phba->cfg_link_speed = val; 2656 phba->cfg_link_speed = val;
2657 if (nolip)
2658 return strlen(buf);
2659
2621 err = lpfc_issue_lip(lpfc_shost_from_vport(phba->pport)); 2660 err = lpfc_issue_lip(lpfc_shost_from_vport(phba->pport));
2622 if (err) 2661 if (err) {
2623 phba->cfg_link_speed = prev_val; 2662 phba->cfg_link_speed = prev_val;
2624 return err; 2663 return -EINVAL;
2664 } else
2665 return strlen(buf);
2625 } 2666 }
2626 2667
2627 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, 2668 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
@@ -2637,7 +2678,7 @@ MODULE_PARM_DESC(lpfc_link_speed, "Select link speed");
2637lpfc_param_show(link_speed) 2678lpfc_param_show(link_speed)
2638 2679
2639/** 2680/**
2640 * lpfc_link_speed_init: Set the adapters link speed. 2681 * lpfc_link_speed_init - Set the adapters link speed
2641 * @phba: lpfc_hba pointer. 2682 * @phba: lpfc_hba pointer.
2642 * @val: link speed value. 2683 * @val: link speed value.
2643 * 2684 *
@@ -2668,7 +2709,6 @@ lpfc_link_speed_init(struct lpfc_hba *phba, int val)
2668 return -EINVAL; 2709 return -EINVAL;
2669} 2710}
2670 2711
2671lpfc_param_store(link_speed)
2672static DEVICE_ATTR(lpfc_link_speed, S_IRUGO | S_IWUSR, 2712static DEVICE_ATTR(lpfc_link_speed, S_IRUGO | S_IWUSR,
2673 lpfc_link_speed_show, lpfc_link_speed_store); 2713 lpfc_link_speed_show, lpfc_link_speed_store);
2674 2714
@@ -2865,7 +2905,7 @@ MODULE_PARM_DESC(lpfc_prot_guard, "host protection guard type");
2865 2905
2866 2906
2867/* 2907/*
2868 * lpfc_sg_seg_cnt: Initial Maximum DMA Segment Count 2908 * lpfc_sg_seg_cnt - Initial Maximum DMA Segment Count
2869 * This value can be set to values between 64 and 256. The default value is 2909 * This value can be set to values between 64 and 256. The default value is
2870 * 64, but may be increased to allow for larger Max I/O sizes. The scsi layer 2910 * 64, but may be increased to allow for larger Max I/O sizes. The scsi layer
2871 * will be allowed to request I/Os of sizes up to (MAX_SEG_COUNT * SEG_SIZE). 2911 * will be allowed to request I/Os of sizes up to (MAX_SEG_COUNT * SEG_SIZE).
@@ -2967,7 +3007,7 @@ struct device_attribute *lpfc_vport_attrs[] = {
2967}; 3007};
2968 3008
2969/** 3009/**
2970 * sysfs_ctlreg_write: Write method for writing to ctlreg. 3010 * sysfs_ctlreg_write - Write method for writing to ctlreg
2971 * @kobj: kernel kobject that contains the kernel class device. 3011 * @kobj: kernel kobject that contains the kernel class device.
2972 * @bin_attr: kernel attributes passed to us. 3012 * @bin_attr: kernel attributes passed to us.
2973 * @buf: contains the data to be written to the adapter IOREG space. 3013 * @buf: contains the data to be written to the adapter IOREG space.
@@ -3017,7 +3057,7 @@ sysfs_ctlreg_write(struct kobject *kobj, struct bin_attribute *bin_attr,
3017} 3057}
3018 3058
3019/** 3059/**
3020 * sysfs_ctlreg_read: Read method for reading from ctlreg. 3060 * sysfs_ctlreg_read - Read method for reading from ctlreg
3021 * @kobj: kernel kobject that contains the kernel class device. 3061 * @kobj: kernel kobject that contains the kernel class device.
3022 * @bin_attr: kernel attributes passed to us. 3062 * @bin_attr: kernel attributes passed to us.
3023 * @buf: if succesful contains the data from the adapter IOREG space. 3063 * @buf: if succesful contains the data from the adapter IOREG space.
@@ -3078,7 +3118,7 @@ static struct bin_attribute sysfs_ctlreg_attr = {
3078}; 3118};
3079 3119
3080/** 3120/**
3081 * sysfs_mbox_idle: frees the sysfs mailbox. 3121 * sysfs_mbox_idle - frees the sysfs mailbox
3082 * @phba: lpfc_hba pointer 3122 * @phba: lpfc_hba pointer
3083 **/ 3123 **/
3084static void 3124static void
@@ -3095,7 +3135,7 @@ sysfs_mbox_idle(struct lpfc_hba *phba)
3095} 3135}
3096 3136
3097/** 3137/**
3098 * sysfs_mbox_write: Write method for writing information via mbox. 3138 * sysfs_mbox_write - Write method for writing information via mbox
3099 * @kobj: kernel kobject that contains the kernel class device. 3139 * @kobj: kernel kobject that contains the kernel class device.
3100 * @bin_attr: kernel attributes passed to us. 3140 * @bin_attr: kernel attributes passed to us.
3101 * @buf: contains the data to be written to sysfs mbox. 3141 * @buf: contains the data to be written to sysfs mbox.
@@ -3170,7 +3210,7 @@ sysfs_mbox_write(struct kobject *kobj, struct bin_attribute *bin_attr,
3170} 3210}
3171 3211
3172/** 3212/**
3173 * sysfs_mbox_read: Read method for reading information via mbox. 3213 * sysfs_mbox_read - Read method for reading information via mbox
3174 * @kobj: kernel kobject that contains the kernel class device. 3214 * @kobj: kernel kobject that contains the kernel class device.
3175 * @bin_attr: kernel attributes passed to us. 3215 * @bin_attr: kernel attributes passed to us.
3176 * @buf: contains the data to be read from sysfs mbox. 3216 * @buf: contains the data to be read from sysfs mbox.
@@ -3374,7 +3414,7 @@ static struct bin_attribute sysfs_mbox_attr = {
3374}; 3414};
3375 3415
3376/** 3416/**
3377 * lpfc_alloc_sysfs_attr: Creates the ctlreg and mbox entries. 3417 * lpfc_alloc_sysfs_attr - Creates the ctlreg and mbox entries
3378 * @vport: address of lpfc vport structure. 3418 * @vport: address of lpfc vport structure.
3379 * 3419 *
3380 * Return codes: 3420 * Return codes:
@@ -3415,7 +3455,7 @@ out:
3415} 3455}
3416 3456
3417/** 3457/**
3418 * lpfc_free_sysfs_attr: Removes the ctlreg and mbox entries. 3458 * lpfc_free_sysfs_attr - Removes the ctlreg and mbox entries
3419 * @vport: address of lpfc vport structure. 3459 * @vport: address of lpfc vport structure.
3420 **/ 3460 **/
3421void 3461void
@@ -3437,7 +3477,7 @@ lpfc_free_sysfs_attr(struct lpfc_vport *vport)
3437 */ 3477 */
3438 3478
3439/** 3479/**
3440 * lpfc_get_host_port_id: Copy the vport DID into the scsi host port id. 3480 * lpfc_get_host_port_id - Copy the vport DID into the scsi host port id
3441 * @shost: kernel scsi host pointer. 3481 * @shost: kernel scsi host pointer.
3442 **/ 3482 **/
3443static void 3483static void
@@ -3450,7 +3490,7 @@ lpfc_get_host_port_id(struct Scsi_Host *shost)
3450} 3490}
3451 3491
3452/** 3492/**
3453 * lpfc_get_host_port_type: Set the value of the scsi host port type. 3493 * lpfc_get_host_port_type - Set the value of the scsi host port type
3454 * @shost: kernel scsi host pointer. 3494 * @shost: kernel scsi host pointer.
3455 **/ 3495 **/
3456static void 3496static void
@@ -3482,7 +3522,7 @@ lpfc_get_host_port_type(struct Scsi_Host *shost)
3482} 3522}
3483 3523
3484/** 3524/**
3485 * lpfc_get_host_port_state: Set the value of the scsi host port state. 3525 * lpfc_get_host_port_state - Set the value of the scsi host port state
3486 * @shost: kernel scsi host pointer. 3526 * @shost: kernel scsi host pointer.
3487 **/ 3527 **/
3488static void 3528static void
@@ -3520,7 +3560,7 @@ lpfc_get_host_port_state(struct Scsi_Host *shost)
3520} 3560}
3521 3561
3522/** 3562/**
3523 * lpfc_get_host_speed: Set the value of the scsi host speed. 3563 * lpfc_get_host_speed - Set the value of the scsi host speed
3524 * @shost: kernel scsi host pointer. 3564 * @shost: kernel scsi host pointer.
3525 **/ 3565 **/
3526static void 3566static void
@@ -3556,7 +3596,7 @@ lpfc_get_host_speed(struct Scsi_Host *shost)
3556} 3596}
3557 3597
3558/** 3598/**
3559 * lpfc_get_host_fabric_name: Set the value of the scsi host fabric name. 3599 * lpfc_get_host_fabric_name - Set the value of the scsi host fabric name
3560 * @shost: kernel scsi host pointer. 3600 * @shost: kernel scsi host pointer.
3561 **/ 3601 **/
3562static void 3602static void
@@ -3582,7 +3622,7 @@ lpfc_get_host_fabric_name (struct Scsi_Host *shost)
3582} 3622}
3583 3623
3584/** 3624/**
3585 * lpfc_get_stats: Return statistical information about the adapter. 3625 * lpfc_get_stats - Return statistical information about the adapter
3586 * @shost: kernel scsi host pointer. 3626 * @shost: kernel scsi host pointer.
3587 * 3627 *
3588 * Notes: 3628 * Notes:
@@ -3707,7 +3747,7 @@ lpfc_get_stats(struct Scsi_Host *shost)
3707} 3747}
3708 3748
3709/** 3749/**
3710 * lpfc_reset_stats: Copy the adapter link stats information. 3750 * lpfc_reset_stats - Copy the adapter link stats information
3711 * @shost: kernel scsi host pointer. 3751 * @shost: kernel scsi host pointer.
3712 **/ 3752 **/
3713static void 3753static void
@@ -3788,7 +3828,7 @@ lpfc_reset_stats(struct Scsi_Host *shost)
3788 */ 3828 */
3789 3829
3790/** 3830/**
3791 * lpfc_get_node_by_target: Return the nodelist for a target. 3831 * lpfc_get_node_by_target - Return the nodelist for a target
3792 * @starget: kernel scsi target pointer. 3832 * @starget: kernel scsi target pointer.
3793 * 3833 *
3794 * Returns: 3834 * Returns:
@@ -3817,7 +3857,7 @@ lpfc_get_node_by_target(struct scsi_target *starget)
3817} 3857}
3818 3858
3819/** 3859/**
3820 * lpfc_get_starget_port_id: Set the target port id to the ndlp DID or -1. 3860 * lpfc_get_starget_port_id - Set the target port id to the ndlp DID or -1
3821 * @starget: kernel scsi target pointer. 3861 * @starget: kernel scsi target pointer.
3822 **/ 3862 **/
3823static void 3863static void
@@ -3829,7 +3869,7 @@ lpfc_get_starget_port_id(struct scsi_target *starget)
3829} 3869}
3830 3870
3831/** 3871/**
3832 * lpfc_get_starget_node_name: Set the target node name. 3872 * lpfc_get_starget_node_name - Set the target node name
3833 * @starget: kernel scsi target pointer. 3873 * @starget: kernel scsi target pointer.
3834 * 3874 *
3835 * Description: Set the target node name to the ndlp node name wwn or zero. 3875 * Description: Set the target node name to the ndlp node name wwn or zero.
@@ -3844,7 +3884,7 @@ lpfc_get_starget_node_name(struct scsi_target *starget)
3844} 3884}
3845 3885
3846/** 3886/**
3847 * lpfc_get_starget_port_name: Set the target port name. 3887 * lpfc_get_starget_port_name - Set the target port name
3848 * @starget: kernel scsi target pointer. 3888 * @starget: kernel scsi target pointer.
3849 * 3889 *
3850 * Description: set the target port name to the ndlp port name wwn or zero. 3890 * Description: set the target port name to the ndlp port name wwn or zero.
@@ -3859,7 +3899,7 @@ lpfc_get_starget_port_name(struct scsi_target *starget)
3859} 3899}
3860 3900
3861/** 3901/**
3862 * lpfc_set_rport_loss_tmo: Set the rport dev loss tmo. 3902 * lpfc_set_rport_loss_tmo - Set the rport dev loss tmo
3863 * @rport: fc rport address. 3903 * @rport: fc rport address.
3864 * @timeout: new value for dev loss tmo. 3904 * @timeout: new value for dev loss tmo.
3865 * 3905 *
@@ -3877,7 +3917,7 @@ lpfc_set_rport_loss_tmo(struct fc_rport *rport, uint32_t timeout)
3877} 3917}
3878 3918
3879/** 3919/**
3880 * lpfc_rport_show_function: Return rport target information. 3920 * lpfc_rport_show_function - Return rport target information
3881 * 3921 *
3882 * Description: 3922 * Description:
3883 * Macro that uses field to generate a function with the name lpfc_show_rport_ 3923 * Macro that uses field to generate a function with the name lpfc_show_rport_
@@ -3905,7 +3945,7 @@ lpfc_show_rport_##field (struct device *dev, \
3905static FC_RPORT_ATTR(field, S_IRUGO, lpfc_show_rport_##field, NULL) 3945static FC_RPORT_ATTR(field, S_IRUGO, lpfc_show_rport_##field, NULL)
3906 3946
3907/** 3947/**
3908 * lpfc_set_vport_symbolic_name: Set the vport's symbolic name. 3948 * lpfc_set_vport_symbolic_name - Set the vport's symbolic name
3909 * @fc_vport: The fc_vport who's symbolic name has been changed. 3949 * @fc_vport: The fc_vport who's symbolic name has been changed.
3910 * 3950 *
3911 * Description: 3951 * Description:
@@ -4048,7 +4088,7 @@ struct fc_function_template lpfc_vport_transport_functions = {
4048}; 4088};
4049 4089
4050/** 4090/**
4051 * lpfc_get_cfgparam: Used during probe_one to init the adapter structure. 4091 * lpfc_get_cfgparam - Used during probe_one to init the adapter structure
4052 * @phba: lpfc_hba pointer. 4092 * @phba: lpfc_hba pointer.
4053 **/ 4093 **/
4054void 4094void
@@ -4097,7 +4137,7 @@ lpfc_get_cfgparam(struct lpfc_hba *phba)
4097} 4137}
4098 4138
4099/** 4139/**
4100 * lpfc_get_vport_cfgparam: Used during port create, init the vport structure. 4140 * lpfc_get_vport_cfgparam - Used during port create, init the vport structure
4101 * @vport: lpfc_vport pointer. 4141 * @vport: lpfc_vport pointer.
4102 **/ 4142 **/
4103void 4143void
diff --git a/drivers/scsi/lpfc/lpfc_crtn.h b/drivers/scsi/lpfc/lpfc_crtn.h
index 07f4976319a5..f88ce3f26190 100644
--- a/drivers/scsi/lpfc/lpfc_crtn.h
+++ b/drivers/scsi/lpfc/lpfc_crtn.h
@@ -184,6 +184,8 @@ void lpfc_sli_poll_fcp_ring(struct lpfc_hba *);
184struct lpfc_iocbq * lpfc_sli_get_iocbq(struct lpfc_hba *); 184struct lpfc_iocbq * lpfc_sli_get_iocbq(struct lpfc_hba *);
185void lpfc_sli_release_iocbq(struct lpfc_hba *, struct lpfc_iocbq *); 185void lpfc_sli_release_iocbq(struct lpfc_hba *, struct lpfc_iocbq *);
186uint16_t lpfc_sli_next_iotag(struct lpfc_hba *, struct lpfc_iocbq *); 186uint16_t lpfc_sli_next_iotag(struct lpfc_hba *, struct lpfc_iocbq *);
187void lpfc_sli_cancel_iocbs(struct lpfc_hba *, struct list_head *, uint32_t,
188 uint32_t);
187 189
188void lpfc_reset_barrier(struct lpfc_hba * phba); 190void lpfc_reset_barrier(struct lpfc_hba * phba);
189int lpfc_sli_brdready(struct lpfc_hba *, uint32_t); 191int lpfc_sli_brdready(struct lpfc_hba *, uint32_t);
diff --git a/drivers/scsi/lpfc/lpfc_debugfs.c b/drivers/scsi/lpfc/lpfc_debugfs.c
index 81cdcf46c471..52be5644e07a 100644
--- a/drivers/scsi/lpfc/lpfc_debugfs.c
+++ b/drivers/scsi/lpfc/lpfc_debugfs.c
@@ -47,7 +47,7 @@
47#include "lpfc_debugfs.h" 47#include "lpfc_debugfs.h"
48 48
49#ifdef CONFIG_SCSI_LPFC_DEBUG_FS 49#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
50/** 50/*
51 * debugfs interface 51 * debugfs interface
52 * 52 *
53 * To access this interface the user should: 53 * To access this interface the user should:
@@ -95,7 +95,7 @@ module_param(lpfc_debugfs_max_slow_ring_trc, int, 0);
95MODULE_PARM_DESC(lpfc_debugfs_max_slow_ring_trc, 95MODULE_PARM_DESC(lpfc_debugfs_max_slow_ring_trc,
96 "Set debugfs slow ring trace depth"); 96 "Set debugfs slow ring trace depth");
97 97
98int lpfc_debugfs_mask_disc_trc; 98static int lpfc_debugfs_mask_disc_trc;
99module_param(lpfc_debugfs_mask_disc_trc, int, 0); 99module_param(lpfc_debugfs_mask_disc_trc, int, 0);
100MODULE_PARM_DESC(lpfc_debugfs_mask_disc_trc, 100MODULE_PARM_DESC(lpfc_debugfs_mask_disc_trc,
101 "Set debugfs discovery trace mask"); 101 "Set debugfs discovery trace mask");
@@ -127,7 +127,7 @@ static atomic_t lpfc_debugfs_seq_trc_cnt = ATOMIC_INIT(0);
127static unsigned long lpfc_debugfs_start_time = 0L; 127static unsigned long lpfc_debugfs_start_time = 0L;
128 128
129/** 129/**
130 * lpfc_debugfs_disc_trc_data - Dump discovery logging to a buffer. 130 * lpfc_debugfs_disc_trc_data - Dump discovery logging to a buffer
131 * @vport: The vport to gather the log info from. 131 * @vport: The vport to gather the log info from.
132 * @buf: The buffer to dump log into. 132 * @buf: The buffer to dump log into.
133 * @size: The maximum amount of data to process. 133 * @size: The maximum amount of data to process.
@@ -187,7 +187,7 @@ lpfc_debugfs_disc_trc_data(struct lpfc_vport *vport, char *buf, int size)
187} 187}
188 188
189/** 189/**
190 * lpfc_debugfs_slow_ring_trc_data - Dump slow ring logging to a buffer. 190 * lpfc_debugfs_slow_ring_trc_data - Dump slow ring logging to a buffer
191 * @phba: The HBA to gather the log info from. 191 * @phba: The HBA to gather the log info from.
192 * @buf: The buffer to dump log into. 192 * @buf: The buffer to dump log into.
193 * @size: The maximum amount of data to process. 193 * @size: The maximum amount of data to process.
@@ -250,7 +250,7 @@ lpfc_debugfs_slow_ring_trc_data(struct lpfc_hba *phba, char *buf, int size)
250static int lpfc_debugfs_last_hbq = -1; 250static int lpfc_debugfs_last_hbq = -1;
251 251
252/** 252/**
253 * lpfc_debugfs_hbqinfo_data - Dump host buffer queue info to a buffer. 253 * lpfc_debugfs_hbqinfo_data - Dump host buffer queue info to a buffer
254 * @phba: The HBA to gather host buffer info from. 254 * @phba: The HBA to gather host buffer info from.
255 * @buf: The buffer to dump log into. 255 * @buf: The buffer to dump log into.
256 * @size: The maximum amount of data to process. 256 * @size: The maximum amount of data to process.
@@ -369,7 +369,7 @@ skipit:
369static int lpfc_debugfs_last_hba_slim_off; 369static int lpfc_debugfs_last_hba_slim_off;
370 370
371/** 371/**
372 * lpfc_debugfs_dumpHBASlim_data - Dump HBA SLIM info to a buffer. 372 * lpfc_debugfs_dumpHBASlim_data - Dump HBA SLIM info to a buffer
373 * @phba: The HBA to gather SLIM info from. 373 * @phba: The HBA to gather SLIM info from.
374 * @buf: The buffer to dump log into. 374 * @buf: The buffer to dump log into.
375 * @size: The maximum amount of data to process. 375 * @size: The maximum amount of data to process.
@@ -399,8 +399,7 @@ lpfc_debugfs_dumpHBASlim_data(struct lpfc_hba *phba, char *buf, int size)
399 399
400 len += snprintf(buf+len, size-len, "HBA SLIM\n"); 400 len += snprintf(buf+len, size-len, "HBA SLIM\n");
401 lpfc_memcpy_from_slim(buffer, 401 lpfc_memcpy_from_slim(buffer,
402 ((uint8_t *)phba->MBslimaddr) + lpfc_debugfs_last_hba_slim_off, 402 phba->MBslimaddr + lpfc_debugfs_last_hba_slim_off, 1024);
403 1024);
404 403
405 ptr = (uint32_t *)&buffer[0]; 404 ptr = (uint32_t *)&buffer[0];
406 off = lpfc_debugfs_last_hba_slim_off; 405 off = lpfc_debugfs_last_hba_slim_off;
@@ -426,7 +425,7 @@ lpfc_debugfs_dumpHBASlim_data(struct lpfc_hba *phba, char *buf, int size)
426} 425}
427 426
428/** 427/**
429 * lpfc_debugfs_dumpHostSlim_data - Dump host SLIM info to a buffer. 428 * lpfc_debugfs_dumpHostSlim_data - Dump host SLIM info to a buffer
430 * @phba: The HBA to gather Host SLIM info from. 429 * @phba: The HBA to gather Host SLIM info from.
431 * @buf: The buffer to dump log into. 430 * @buf: The buffer to dump log into.
432 * @size: The maximum amount of data to process. 431 * @size: The maximum amount of data to process.
@@ -501,7 +500,7 @@ lpfc_debugfs_dumpHostSlim_data(struct lpfc_hba *phba, char *buf, int size)
501} 500}
502 501
503/** 502/**
504 * lpfc_debugfs_nodelist_data - Dump target node list to a buffer. 503 * lpfc_debugfs_nodelist_data - Dump target node list to a buffer
505 * @vport: The vport to gather target node info from. 504 * @vport: The vport to gather target node info from.
506 * @buf: The buffer to dump log into. 505 * @buf: The buffer to dump log into.
507 * @size: The maximum amount of data to process. 506 * @size: The maximum amount of data to process.
@@ -599,7 +598,7 @@ lpfc_debugfs_nodelist_data(struct lpfc_vport *vport, char *buf, int size)
599#endif 598#endif
600 599
601/** 600/**
602 * lpfc_debugfs_disc_trc - Store discovery trace log. 601 * lpfc_debugfs_disc_trc - Store discovery trace log
603 * @vport: The vport to associate this trace string with for retrieval. 602 * @vport: The vport to associate this trace string with for retrieval.
604 * @mask: Log entry classification. 603 * @mask: Log entry classification.
605 * @fmt: Format string to be displayed when dumping the log. 604 * @fmt: Format string to be displayed when dumping the log.
@@ -643,7 +642,7 @@ lpfc_debugfs_disc_trc(struct lpfc_vport *vport, int mask, char *fmt,
643} 642}
644 643
645/** 644/**
646 * lpfc_debugfs_slow_ring_trc - Store slow ring trace log. 645 * lpfc_debugfs_slow_ring_trc - Store slow ring trace log
647 * @phba: The phba to associate this trace string with for retrieval. 646 * @phba: The phba to associate this trace string with for retrieval.
648 * @fmt: Format string to be displayed when dumping the log. 647 * @fmt: Format string to be displayed when dumping the log.
649 * @data1: 1st data parameter to be applied to @fmt. 648 * @data1: 1st data parameter to be applied to @fmt.
@@ -682,7 +681,7 @@ lpfc_debugfs_slow_ring_trc(struct lpfc_hba *phba, char *fmt,
682 681
683#ifdef CONFIG_SCSI_LPFC_DEBUG_FS 682#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
684/** 683/**
685 * lpfc_debugfs_disc_trc_open - Open the discovery trace log. 684 * lpfc_debugfs_disc_trc_open - Open the discovery trace log
686 * @inode: The inode pointer that contains a vport pointer. 685 * @inode: The inode pointer that contains a vport pointer.
687 * @file: The file pointer to attach the log output. 686 * @file: The file pointer to attach the log output.
688 * 687 *
@@ -732,7 +731,7 @@ out:
732} 731}
733 732
734/** 733/**
735 * lpfc_debugfs_slow_ring_trc_open - Open the Slow Ring trace log. 734 * lpfc_debugfs_slow_ring_trc_open - Open the Slow Ring trace log
736 * @inode: The inode pointer that contains a vport pointer. 735 * @inode: The inode pointer that contains a vport pointer.
737 * @file: The file pointer to attach the log output. 736 * @file: The file pointer to attach the log output.
738 * 737 *
@@ -782,7 +781,7 @@ out:
782} 781}
783 782
784/** 783/**
785 * lpfc_debugfs_hbqinfo_open - Open the hbqinfo debugfs buffer. 784 * lpfc_debugfs_hbqinfo_open - Open the hbqinfo debugfs buffer
786 * @inode: The inode pointer that contains a vport pointer. 785 * @inode: The inode pointer that contains a vport pointer.
787 * @file: The file pointer to attach the log output. 786 * @file: The file pointer to attach the log output.
788 * 787 *
@@ -824,7 +823,7 @@ out:
824} 823}
825 824
826/** 825/**
827 * lpfc_debugfs_dumpHBASlim_open - Open the Dump HBA SLIM debugfs buffer. 826 * lpfc_debugfs_dumpHBASlim_open - Open the Dump HBA SLIM debugfs buffer
828 * @inode: The inode pointer that contains a vport pointer. 827 * @inode: The inode pointer that contains a vport pointer.
829 * @file: The file pointer to attach the log output. 828 * @file: The file pointer to attach the log output.
830 * 829 *
@@ -866,7 +865,7 @@ out:
866} 865}
867 866
868/** 867/**
869 * lpfc_debugfs_dumpHostSlim_open - Open the Dump Host SLIM debugfs buffer. 868 * lpfc_debugfs_dumpHostSlim_open - Open the Dump Host SLIM debugfs buffer
870 * @inode: The inode pointer that contains a vport pointer. 869 * @inode: The inode pointer that contains a vport pointer.
871 * @file: The file pointer to attach the log output. 870 * @file: The file pointer to attach the log output.
872 * 871 *
@@ -993,7 +992,7 @@ lpfc_debugfs_dumpDataDif_write(struct file *file, const char __user *buf,
993 992
994 993
995/** 994/**
996 * lpfc_debugfs_nodelist_open - Open the nodelist debugfs file. 995 * lpfc_debugfs_nodelist_open - Open the nodelist debugfs file
997 * @inode: The inode pointer that contains a vport pointer. 996 * @inode: The inode pointer that contains a vport pointer.
998 * @file: The file pointer to attach the log output. 997 * @file: The file pointer to attach the log output.
999 * 998 *
@@ -1035,7 +1034,7 @@ out:
1035} 1034}
1036 1035
1037/** 1036/**
1038 * lpfc_debugfs_lseek - Seek through a debugfs file. 1037 * lpfc_debugfs_lseek - Seek through a debugfs file
1039 * @file: The file pointer to seek through. 1038 * @file: The file pointer to seek through.
1040 * @off: The offset to seek to or the amount to seek by. 1039 * @off: The offset to seek to or the amount to seek by.
1041 * @whence: Indicates how to seek. 1040 * @whence: Indicates how to seek.
@@ -1073,7 +1072,7 @@ lpfc_debugfs_lseek(struct file *file, loff_t off, int whence)
1073} 1072}
1074 1073
1075/** 1074/**
1076 * lpfc_debugfs_read - Read a debugfs file. 1075 * lpfc_debugfs_read - Read a debugfs file
1077 * @file: The file pointer to read from. 1076 * @file: The file pointer to read from.
1078 * @buf: The buffer to copy the data to. 1077 * @buf: The buffer to copy the data to.
1079 * @nbytes: The number of bytes to read. 1078 * @nbytes: The number of bytes to read.
@@ -1098,7 +1097,7 @@ lpfc_debugfs_read(struct file *file, char __user *buf,
1098} 1097}
1099 1098
1100/** 1099/**
1101 * lpfc_debugfs_release - Release the buffer used to store debugfs file data. 1100 * lpfc_debugfs_release - Release the buffer used to store debugfs file data
1102 * @inode: The inode pointer that contains a vport pointer. (unused) 1101 * @inode: The inode pointer that contains a vport pointer. (unused)
1103 * @file: The file pointer that contains the buffer to release. 1102 * @file: The file pointer that contains the buffer to release.
1104 * 1103 *
@@ -1210,7 +1209,7 @@ static atomic_t lpfc_debugfs_hba_count;
1210#endif 1209#endif
1211 1210
1212/** 1211/**
1213 * lpfc_debugfs_initialize - Initialize debugfs for a vport. 1212 * lpfc_debugfs_initialize - Initialize debugfs for a vport
1214 * @vport: The vport pointer to initialize. 1213 * @vport: The vport pointer to initialize.
1215 * 1214 *
1216 * Description: 1215 * Description:
@@ -1434,7 +1433,7 @@ debug_failed:
1434} 1433}
1435 1434
1436/** 1435/**
1437 * lpfc_debugfs_terminate - Tear down debugfs infrastructure for this vport. 1436 * lpfc_debugfs_terminate - Tear down debugfs infrastructure for this vport
1438 * @vport: The vport pointer to remove from debugfs. 1437 * @vport: The vport pointer to remove from debugfs.
1439 * 1438 *
1440 * Description: 1439 * Description:
diff --git a/drivers/scsi/lpfc/lpfc_disc.h b/drivers/scsi/lpfc/lpfc_disc.h
index f29e548a90d1..ffd108972072 100644
--- a/drivers/scsi/lpfc/lpfc_disc.h
+++ b/drivers/scsi/lpfc/lpfc_disc.h
@@ -99,6 +99,7 @@ struct lpfc_nodelist {
99#define NLP_USG_FREE_ACK_BIT 0x8 /* Indicate ndlp memory free invoked */ 99#define NLP_USG_FREE_ACK_BIT 0x8 /* Indicate ndlp memory free invoked */
100 100
101 struct timer_list nlp_delayfunc; /* Used for delayed ELS cmds */ 101 struct timer_list nlp_delayfunc; /* Used for delayed ELS cmds */
102 struct lpfc_hba *phba;
102 struct fc_rport *rport; /* Corresponding FC transport 103 struct fc_rport *rport; /* Corresponding FC transport
103 port structure */ 104 port structure */
104 struct lpfc_vport *vport; 105 struct lpfc_vport *vport;
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
index a7302480bc4a..b8b34cf5c3d2 100644
--- a/drivers/scsi/lpfc/lpfc_els.c
+++ b/drivers/scsi/lpfc/lpfc_els.c
@@ -55,7 +55,7 @@ static void lpfc_register_new_vport(struct lpfc_hba *phba,
55static int lpfc_max_els_tries = 3; 55static int lpfc_max_els_tries = 3;
56 56
57/** 57/**
58 * lpfc_els_chk_latt: Check host link attention event for a vport. 58 * lpfc_els_chk_latt - Check host link attention event for a vport
59 * @vport: pointer to a host virtual N_Port data structure. 59 * @vport: pointer to a host virtual N_Port data structure.
60 * 60 *
61 * This routine checks whether there is an outstanding host link 61 * This routine checks whether there is an outstanding host link
@@ -116,7 +116,7 @@ lpfc_els_chk_latt(struct lpfc_vport *vport)
116} 116}
117 117
118/** 118/**
119 * lpfc_prep_els_iocb: Allocate and prepare a lpfc iocb data structure. 119 * lpfc_prep_els_iocb - Allocate and prepare a lpfc iocb data structure
120 * @vport: pointer to a host virtual N_Port data structure. 120 * @vport: pointer to a host virtual N_Port data structure.
121 * @expectRsp: flag indicating whether response is expected. 121 * @expectRsp: flag indicating whether response is expected.
122 * @cmdSize: size of the ELS command. 122 * @cmdSize: size of the ELS command.
@@ -290,7 +290,7 @@ els_iocb_free_pcmb_exit:
290} 290}
291 291
292/** 292/**
293 * lpfc_issue_fabric_reglogin: Issue fabric registration login for a vport. 293 * lpfc_issue_fabric_reglogin - Issue fabric registration login for a vport
294 * @vport: pointer to a host virtual N_Port data structure. 294 * @vport: pointer to a host virtual N_Port data structure.
295 * 295 *
296 * This routine issues a fabric registration login for a @vport. An 296 * This routine issues a fabric registration login for a @vport. An
@@ -386,7 +386,7 @@ fail:
386} 386}
387 387
388/** 388/**
389 * lpfc_cmpl_els_flogi_fabric: Completion function for flogi to a fabric port. 389 * lpfc_cmpl_els_flogi_fabric - Completion function for flogi to a fabric port
390 * @vport: pointer to a host virtual N_Port data structure. 390 * @vport: pointer to a host virtual N_Port data structure.
391 * @ndlp: pointer to a node-list data structure. 391 * @ndlp: pointer to a node-list data structure.
392 * @sp: pointer to service parameter data structure. 392 * @sp: pointer to service parameter data structure.
@@ -509,7 +509,7 @@ lpfc_cmpl_els_flogi_fabric(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
509} 509}
510 510
511/** 511/**
512 * lpfc_cmpl_els_flogi_nport: Completion function for flogi to an N_Port. 512 * lpfc_cmpl_els_flogi_nport - Completion function for flogi to an N_Port
513 * @vport: pointer to a host virtual N_Port data structure. 513 * @vport: pointer to a host virtual N_Port data structure.
514 * @ndlp: pointer to a node-list data structure. 514 * @ndlp: pointer to a node-list data structure.
515 * @sp: pointer to service parameter data structure. 515 * @sp: pointer to service parameter data structure.
@@ -626,7 +626,7 @@ fail:
626} 626}
627 627
628/** 628/**
629 * lpfc_cmpl_els_flogi: Completion callback function for flogi. 629 * lpfc_cmpl_els_flogi - Completion callback function for flogi
630 * @phba: pointer to lpfc hba data structure. 630 * @phba: pointer to lpfc hba data structure.
631 * @cmdiocb: pointer to lpfc command iocb data structure. 631 * @cmdiocb: pointer to lpfc command iocb data structure.
632 * @rspiocb: pointer to lpfc response iocb data structure. 632 * @rspiocb: pointer to lpfc response iocb data structure.
@@ -751,7 +751,7 @@ out:
751} 751}
752 752
753/** 753/**
754 * lpfc_issue_els_flogi: Issue an flogi iocb command for a vport. 754 * lpfc_issue_els_flogi - Issue an flogi iocb command for a vport
755 * @vport: pointer to a host virtual N_Port data structure. 755 * @vport: pointer to a host virtual N_Port data structure.
756 * @ndlp: pointer to a node-list data structure. 756 * @ndlp: pointer to a node-list data structure.
757 * @retry: number of retries to the command IOCB. 757 * @retry: number of retries to the command IOCB.
@@ -849,7 +849,7 @@ lpfc_issue_els_flogi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
849} 849}
850 850
851/** 851/**
852 * lpfc_els_abort_flogi: Abort all outstanding flogi iocbs. 852 * lpfc_els_abort_flogi - Abort all outstanding flogi iocbs
853 * @phba: pointer to lpfc hba data structure. 853 * @phba: pointer to lpfc hba data structure.
854 * 854 *
855 * This routine aborts all the outstanding Fabric Login (FLOGI) IOCBs 855 * This routine aborts all the outstanding Fabric Login (FLOGI) IOCBs
@@ -898,7 +898,7 @@ lpfc_els_abort_flogi(struct lpfc_hba *phba)
898} 898}
899 899
900/** 900/**
901 * lpfc_initial_flogi: Issue an initial fabric login for a vport. 901 * lpfc_initial_flogi - Issue an initial fabric login for a vport
902 * @vport: pointer to a host virtual N_Port data structure. 902 * @vport: pointer to a host virtual N_Port data structure.
903 * 903 *
904 * This routine issues an initial Fabric Login (FLOGI) for the @vport 904 * This routine issues an initial Fabric Login (FLOGI) for the @vport
@@ -949,7 +949,7 @@ lpfc_initial_flogi(struct lpfc_vport *vport)
949} 949}
950 950
951/** 951/**
952 * lpfc_initial_fdisc: Issue an initial fabric discovery for a vport. 952 * lpfc_initial_fdisc - Issue an initial fabric discovery for a vport
953 * @vport: pointer to a host virtual N_Port data structure. 953 * @vport: pointer to a host virtual N_Port data structure.
954 * 954 *
955 * This routine issues an initial Fabric Discover (FDISC) for the @vport 955 * This routine issues an initial Fabric Discover (FDISC) for the @vport
@@ -998,7 +998,7 @@ lpfc_initial_fdisc(struct lpfc_vport *vport)
998} 998}
999 999
1000/** 1000/**
1001 * lpfc_more_plogi: Check and issue remaining plogis for a vport. 1001 * lpfc_more_plogi - Check and issue remaining plogis for a vport
1002 * @vport: pointer to a host virtual N_Port data structure. 1002 * @vport: pointer to a host virtual N_Port data structure.
1003 * 1003 *
1004 * This routine checks whether there are more remaining Port Logins 1004 * This routine checks whether there are more remaining Port Logins
@@ -1031,7 +1031,7 @@ lpfc_more_plogi(struct lpfc_vport *vport)
1031} 1031}
1032 1032
1033/** 1033/**
1034 * lpfc_plogi_confirm_nport: Confirm pologi wwpn matches stored ndlp. 1034 * lpfc_plogi_confirm_nport - Confirm pologi wwpn matches stored ndlp
1035 * @phba: pointer to lpfc hba data structure. 1035 * @phba: pointer to lpfc hba data structure.
1036 * @prsp: pointer to response IOCB payload. 1036 * @prsp: pointer to response IOCB payload.
1037 * @ndlp: pointer to a node-list data structure. 1037 * @ndlp: pointer to a node-list data structure.
@@ -1165,7 +1165,7 @@ lpfc_plogi_confirm_nport(struct lpfc_hba *phba, uint32_t *prsp,
1165} 1165}
1166 1166
1167/** 1167/**
1168 * lpfc_end_rscn: Check and handle more rscn for a vport. 1168 * lpfc_end_rscn - Check and handle more rscn for a vport
1169 * @vport: pointer to a host virtual N_Port data structure. 1169 * @vport: pointer to a host virtual N_Port data structure.
1170 * 1170 *
1171 * This routine checks whether more Registration State Change 1171 * This routine checks whether more Registration State Change
@@ -1197,7 +1197,7 @@ lpfc_end_rscn(struct lpfc_vport *vport)
1197} 1197}
1198 1198
1199/** 1199/**
1200 * lpfc_cmpl_els_plogi: Completion callback function for plogi. 1200 * lpfc_cmpl_els_plogi - Completion callback function for plogi
1201 * @phba: pointer to lpfc hba data structure. 1201 * @phba: pointer to lpfc hba data structure.
1202 * @cmdiocb: pointer to lpfc command iocb data structure. 1202 * @cmdiocb: pointer to lpfc command iocb data structure.
1203 * @rspiocb: pointer to lpfc response iocb data structure. 1203 * @rspiocb: pointer to lpfc response iocb data structure.
@@ -1322,7 +1322,7 @@ out:
1322} 1322}
1323 1323
1324/** 1324/**
1325 * lpfc_issue_els_plogi: Issue an plogi iocb command for a vport. 1325 * lpfc_issue_els_plogi - Issue an plogi iocb command for a vport
1326 * @vport: pointer to a host virtual N_Port data structure. 1326 * @vport: pointer to a host virtual N_Port data structure.
1327 * @did: destination port identifier. 1327 * @did: destination port identifier.
1328 * @retry: number of retries to the command IOCB. 1328 * @retry: number of retries to the command IOCB.
@@ -1401,7 +1401,7 @@ lpfc_issue_els_plogi(struct lpfc_vport *vport, uint32_t did, uint8_t retry)
1401} 1401}
1402 1402
1403/** 1403/**
1404 * lpfc_cmpl_els_prli: Completion callback function for prli. 1404 * lpfc_cmpl_els_prli - Completion callback function for prli
1405 * @phba: pointer to lpfc hba data structure. 1405 * @phba: pointer to lpfc hba data structure.
1406 * @cmdiocb: pointer to lpfc command iocb data structure. 1406 * @cmdiocb: pointer to lpfc command iocb data structure.
1407 * @rspiocb: pointer to lpfc response iocb data structure. 1407 * @rspiocb: pointer to lpfc response iocb data structure.
@@ -1472,7 +1472,7 @@ out:
1472} 1472}
1473 1473
1474/** 1474/**
1475 * lpfc_issue_els_prli: Issue a prli iocb command for a vport. 1475 * lpfc_issue_els_prli - Issue a prli iocb command for a vport
1476 * @vport: pointer to a host virtual N_Port data structure. 1476 * @vport: pointer to a host virtual N_Port data structure.
1477 * @ndlp: pointer to a node-list data structure. 1477 * @ndlp: pointer to a node-list data structure.
1478 * @retry: number of retries to the command IOCB. 1478 * @retry: number of retries to the command IOCB.
@@ -1562,7 +1562,7 @@ lpfc_issue_els_prli(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1562} 1562}
1563 1563
1564/** 1564/**
1565 * lpfc_rscn_disc: Perform rscn discovery for a vport. 1565 * lpfc_rscn_disc - Perform rscn discovery for a vport
1566 * @vport: pointer to a host virtual N_Port data structure. 1566 * @vport: pointer to a host virtual N_Port data structure.
1567 * 1567 *
1568 * This routine performs Registration State Change Notification (RSCN) 1568 * This routine performs Registration State Change Notification (RSCN)
@@ -1588,7 +1588,7 @@ lpfc_rscn_disc(struct lpfc_vport *vport)
1588} 1588}
1589 1589
1590/** 1590/**
1591 * lpfc_adisc_done: Complete the adisc phase of discovery. 1591 * lpfc_adisc_done - Complete the adisc phase of discovery
1592 * @vport: pointer to lpfc_vport hba data structure that finished all ADISCs. 1592 * @vport: pointer to lpfc_vport hba data structure that finished all ADISCs.
1593 * 1593 *
1594 * This function is called when the final ADISC is completed during discovery. 1594 * This function is called when the final ADISC is completed during discovery.
@@ -1639,7 +1639,7 @@ lpfc_adisc_done(struct lpfc_vport *vport)
1639} 1639}
1640 1640
1641/** 1641/**
1642 * lpfc_more_adisc: Issue more adisc as needed. 1642 * lpfc_more_adisc - Issue more adisc as needed
1643 * @vport: pointer to a host virtual N_Port data structure. 1643 * @vport: pointer to a host virtual N_Port data structure.
1644 * 1644 *
1645 * This routine determines whether there are more ndlps on a @vport 1645 * This routine determines whether there are more ndlps on a @vport
@@ -1672,7 +1672,7 @@ lpfc_more_adisc(struct lpfc_vport *vport)
1672} 1672}
1673 1673
1674/** 1674/**
1675 * lpfc_cmpl_els_adisc: Completion callback function for adisc. 1675 * lpfc_cmpl_els_adisc - Completion callback function for adisc
1676 * @phba: pointer to lpfc hba data structure. 1676 * @phba: pointer to lpfc hba data structure.
1677 * @cmdiocb: pointer to lpfc command iocb data structure. 1677 * @cmdiocb: pointer to lpfc command iocb data structure.
1678 * @rspiocb: pointer to lpfc response iocb data structure. 1678 * @rspiocb: pointer to lpfc response iocb data structure.
@@ -1760,7 +1760,7 @@ out:
1760} 1760}
1761 1761
1762/** 1762/**
1763 * lpfc_issue_els_adisc: Issue an address discover iocb to an node on a vport. 1763 * lpfc_issue_els_adisc - Issue an address discover iocb to an node on a vport
1764 * @vport: pointer to a virtual N_Port data structure. 1764 * @vport: pointer to a virtual N_Port data structure.
1765 * @ndlp: pointer to a node-list data structure. 1765 * @ndlp: pointer to a node-list data structure.
1766 * @retry: number of retries to the command IOCB. 1766 * @retry: number of retries to the command IOCB.
@@ -1833,7 +1833,7 @@ lpfc_issue_els_adisc(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1833} 1833}
1834 1834
1835/** 1835/**
1836 * lpfc_cmpl_els_logo: Completion callback function for logo. 1836 * lpfc_cmpl_els_logo - Completion callback function for logo
1837 * @phba: pointer to lpfc hba data structure. 1837 * @phba: pointer to lpfc hba data structure.
1838 * @cmdiocb: pointer to lpfc command iocb data structure. 1838 * @cmdiocb: pointer to lpfc command iocb data structure.
1839 * @rspiocb: pointer to lpfc response iocb data structure. 1839 * @rspiocb: pointer to lpfc response iocb data structure.
@@ -1910,7 +1910,7 @@ out:
1910} 1910}
1911 1911
1912/** 1912/**
1913 * lpfc_issue_els_logo: Issue a logo to an node on a vport. 1913 * lpfc_issue_els_logo - Issue a logo to an node on a vport
1914 * @vport: pointer to a virtual N_Port data structure. 1914 * @vport: pointer to a virtual N_Port data structure.
1915 * @ndlp: pointer to a node-list data structure. 1915 * @ndlp: pointer to a node-list data structure.
1916 * @retry: number of retries to the command IOCB. 1916 * @retry: number of retries to the command IOCB.
@@ -1991,7 +1991,7 @@ lpfc_issue_els_logo(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1991} 1991}
1992 1992
1993/** 1993/**
1994 * lpfc_cmpl_els_cmd: Completion callback function for generic els command. 1994 * lpfc_cmpl_els_cmd - Completion callback function for generic els command
1995 * @phba: pointer to lpfc hba data structure. 1995 * @phba: pointer to lpfc hba data structure.
1996 * @cmdiocb: pointer to lpfc command iocb data structure. 1996 * @cmdiocb: pointer to lpfc command iocb data structure.
1997 * @rspiocb: pointer to lpfc response iocb data structure. 1997 * @rspiocb: pointer to lpfc response iocb data structure.
@@ -2031,7 +2031,7 @@ lpfc_cmpl_els_cmd(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
2031} 2031}
2032 2032
2033/** 2033/**
2034 * lpfc_issue_els_scr: Issue a scr to an node on a vport. 2034 * lpfc_issue_els_scr - Issue a scr to an node on a vport
2035 * @vport: pointer to a host virtual N_Port data structure. 2035 * @vport: pointer to a host virtual N_Port data structure.
2036 * @nportid: N_Port identifier to the remote node. 2036 * @nportid: N_Port identifier to the remote node.
2037 * @retry: number of retries to the command IOCB. 2037 * @retry: number of retries to the command IOCB.
@@ -2125,7 +2125,7 @@ lpfc_issue_els_scr(struct lpfc_vport *vport, uint32_t nportid, uint8_t retry)
2125} 2125}
2126 2126
2127/** 2127/**
2128 * lpfc_issue_els_farpr: Issue a farp to an node on a vport. 2128 * lpfc_issue_els_farpr - Issue a farp to an node on a vport
2129 * @vport: pointer to a host virtual N_Port data structure. 2129 * @vport: pointer to a host virtual N_Port data structure.
2130 * @nportid: N_Port identifier to the remote node. 2130 * @nportid: N_Port identifier to the remote node.
2131 * @retry: number of retries to the command IOCB. 2131 * @retry: number of retries to the command IOCB.
@@ -2236,7 +2236,7 @@ lpfc_issue_els_farpr(struct lpfc_vport *vport, uint32_t nportid, uint8_t retry)
2236} 2236}
2237 2237
2238/** 2238/**
2239 * lpfc_cancel_retry_delay_tmo: Cancel the timer with delayed iocb-cmd retry. 2239 * lpfc_cancel_retry_delay_tmo - Cancel the timer with delayed iocb-cmd retry
2240 * @vport: pointer to a host virtual N_Port data structure. 2240 * @vport: pointer to a host virtual N_Port data structure.
2241 * @nlp: pointer to a node-list data structure. 2241 * @nlp: pointer to a node-list data structure.
2242 * 2242 *
@@ -2291,7 +2291,7 @@ lpfc_cancel_retry_delay_tmo(struct lpfc_vport *vport, struct lpfc_nodelist *nlp)
2291} 2291}
2292 2292
2293/** 2293/**
2294 * lpfc_els_retry_delay: Timer function with a ndlp delayed function timer. 2294 * lpfc_els_retry_delay - Timer function with a ndlp delayed function timer
2295 * @ptr: holder for the pointer to the timer function associated data (ndlp). 2295 * @ptr: holder for the pointer to the timer function associated data (ndlp).
2296 * 2296 *
2297 * This routine is invoked by the ndlp delayed-function timer to check 2297 * This routine is invoked by the ndlp delayed-function timer to check
@@ -2333,7 +2333,7 @@ lpfc_els_retry_delay(unsigned long ptr)
2333} 2333}
2334 2334
2335/** 2335/**
2336 * lpfc_els_retry_delay_handler: Work thread handler for ndlp delayed function. 2336 * lpfc_els_retry_delay_handler - Work thread handler for ndlp delayed function
2337 * @ndlp: pointer to a node-list data structure. 2337 * @ndlp: pointer to a node-list data structure.
2338 * 2338 *
2339 * This routine is the worker-thread handler for processing the @ndlp delayed 2339 * This routine is the worker-thread handler for processing the @ndlp delayed
@@ -2404,7 +2404,7 @@ lpfc_els_retry_delay_handler(struct lpfc_nodelist *ndlp)
2404} 2404}
2405 2405
2406/** 2406/**
2407 * lpfc_els_retry: Make retry decision on an els command iocb. 2407 * lpfc_els_retry - Make retry decision on an els command iocb
2408 * @phba: pointer to lpfc hba data structure. 2408 * @phba: pointer to lpfc hba data structure.
2409 * @cmdiocb: pointer to lpfc command iocb data structure. 2409 * @cmdiocb: pointer to lpfc command iocb data structure.
2410 * @rspiocb: pointer to lpfc response iocb data structure. 2410 * @rspiocb: pointer to lpfc response iocb data structure.
@@ -2732,7 +2732,7 @@ lpfc_els_retry(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
2732} 2732}
2733 2733
2734/** 2734/**
2735 * lpfc_els_free_data: Free lpfc dma buffer and data structure with an iocb. 2735 * lpfc_els_free_data - Free lpfc dma buffer and data structure with an iocb
2736 * @phba: pointer to lpfc hba data structure. 2736 * @phba: pointer to lpfc hba data structure.
2737 * @buf_ptr1: pointer to the lpfc DMA buffer data structure. 2737 * @buf_ptr1: pointer to the lpfc DMA buffer data structure.
2738 * 2738 *
@@ -2764,7 +2764,7 @@ lpfc_els_free_data(struct lpfc_hba *phba, struct lpfc_dmabuf *buf_ptr1)
2764} 2764}
2765 2765
2766/** 2766/**
2767 * lpfc_els_free_bpl: Free lpfc dma buffer and data structure with bpl. 2767 * lpfc_els_free_bpl - Free lpfc dma buffer and data structure with bpl
2768 * @phba: pointer to lpfc hba data structure. 2768 * @phba: pointer to lpfc hba data structure.
2769 * @buf_ptr: pointer to the lpfc dma buffer data structure. 2769 * @buf_ptr: pointer to the lpfc dma buffer data structure.
2770 * 2770 *
@@ -2784,7 +2784,7 @@ lpfc_els_free_bpl(struct lpfc_hba *phba, struct lpfc_dmabuf *buf_ptr)
2784} 2784}
2785 2785
2786/** 2786/**
2787 * lpfc_els_free_iocb: Free a command iocb and its associated resources. 2787 * lpfc_els_free_iocb - Free a command iocb and its associated resources
2788 * @phba: pointer to lpfc hba data structure. 2788 * @phba: pointer to lpfc hba data structure.
2789 * @elsiocb: pointer to lpfc els command iocb data structure. 2789 * @elsiocb: pointer to lpfc els command iocb data structure.
2790 * 2790 *
@@ -2877,7 +2877,7 @@ lpfc_els_free_iocb(struct lpfc_hba *phba, struct lpfc_iocbq *elsiocb)
2877} 2877}
2878 2878
2879/** 2879/**
2880 * lpfc_cmpl_els_logo_acc: Completion callback function to logo acc response. 2880 * lpfc_cmpl_els_logo_acc - Completion callback function to logo acc response
2881 * @phba: pointer to lpfc hba data structure. 2881 * @phba: pointer to lpfc hba data structure.
2882 * @cmdiocb: pointer to lpfc command iocb data structure. 2882 * @cmdiocb: pointer to lpfc command iocb data structure.
2883 * @rspiocb: pointer to lpfc response iocb data structure. 2883 * @rspiocb: pointer to lpfc response iocb data structure.
@@ -2931,7 +2931,7 @@ lpfc_cmpl_els_logo_acc(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
2931} 2931}
2932 2932
2933/** 2933/**
2934 * lpfc_mbx_cmpl_dflt_rpi: Completion callbk func for unreg dflt rpi mbox cmd. 2934 * lpfc_mbx_cmpl_dflt_rpi - Completion callbk func for unreg dflt rpi mbox cmd
2935 * @phba: pointer to lpfc hba data structure. 2935 * @phba: pointer to lpfc hba data structure.
2936 * @pmb: pointer to the driver internal queue element for mailbox command. 2936 * @pmb: pointer to the driver internal queue element for mailbox command.
2937 * 2937 *
@@ -2965,7 +2965,7 @@ lpfc_mbx_cmpl_dflt_rpi(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
2965} 2965}
2966 2966
2967/** 2967/**
2968 * lpfc_cmpl_els_rsp: Completion callback function for els response iocb cmd. 2968 * lpfc_cmpl_els_rsp - Completion callback function for els response iocb cmd
2969 * @phba: pointer to lpfc hba data structure. 2969 * @phba: pointer to lpfc hba data structure.
2970 * @cmdiocb: pointer to lpfc command iocb data structure. 2970 * @cmdiocb: pointer to lpfc command iocb data structure.
2971 * @rspiocb: pointer to lpfc response iocb data structure. 2971 * @rspiocb: pointer to lpfc response iocb data structure.
@@ -3136,7 +3136,7 @@ out:
3136} 3136}
3137 3137
3138/** 3138/**
3139 * lpfc_els_rsp_acc: Prepare and issue an acc response iocb command. 3139 * lpfc_els_rsp_acc - Prepare and issue an acc response iocb command
3140 * @vport: pointer to a host virtual N_Port data structure. 3140 * @vport: pointer to a host virtual N_Port data structure.
3141 * @flag: the els command code to be accepted. 3141 * @flag: the els command code to be accepted.
3142 * @oldiocb: pointer to the original lpfc command iocb data structure. 3142 * @oldiocb: pointer to the original lpfc command iocb data structure.
@@ -3275,7 +3275,7 @@ lpfc_els_rsp_acc(struct lpfc_vport *vport, uint32_t flag,
3275} 3275}
3276 3276
3277/** 3277/**
3278 * lpfc_els_rsp_reject: Propare and issue a rjt response iocb command. 3278 * lpfc_els_rsp_reject - Propare and issue a rjt response iocb command
3279 * @vport: pointer to a virtual N_Port data structure. 3279 * @vport: pointer to a virtual N_Port data structure.
3280 * @rejectError: 3280 * @rejectError:
3281 * @oldiocb: pointer to the original lpfc command iocb data structure. 3281 * @oldiocb: pointer to the original lpfc command iocb data structure.
@@ -3356,7 +3356,7 @@ lpfc_els_rsp_reject(struct lpfc_vport *vport, uint32_t rejectError,
3356} 3356}
3357 3357
3358/** 3358/**
3359 * lpfc_els_rsp_adisc_acc: Prepare and issue acc response to adisc iocb cmd. 3359 * lpfc_els_rsp_adisc_acc - Prepare and issue acc response to adisc iocb cmd
3360 * @vport: pointer to a virtual N_Port data structure. 3360 * @vport: pointer to a virtual N_Port data structure.
3361 * @oldiocb: pointer to the original lpfc command iocb data structure. 3361 * @oldiocb: pointer to the original lpfc command iocb data structure.
3362 * @ndlp: pointer to a node-list data structure. 3362 * @ndlp: pointer to a node-list data structure.
@@ -3431,7 +3431,7 @@ lpfc_els_rsp_adisc_acc(struct lpfc_vport *vport, struct lpfc_iocbq *oldiocb,
3431} 3431}
3432 3432
3433/** 3433/**
3434 * lpfc_els_rsp_prli_acc: Prepare and issue acc response to prli iocb cmd. 3434 * lpfc_els_rsp_prli_acc - Prepare and issue acc response to prli iocb cmd
3435 * @vport: pointer to a virtual N_Port data structure. 3435 * @vport: pointer to a virtual N_Port data structure.
3436 * @oldiocb: pointer to the original lpfc command iocb data structure. 3436 * @oldiocb: pointer to the original lpfc command iocb data structure.
3437 * @ndlp: pointer to a node-list data structure. 3437 * @ndlp: pointer to a node-list data structure.
@@ -3529,7 +3529,7 @@ lpfc_els_rsp_prli_acc(struct lpfc_vport *vport, struct lpfc_iocbq *oldiocb,
3529} 3529}
3530 3530
3531/** 3531/**
3532 * lpfc_els_rsp_rnid_acc: Issue rnid acc response iocb command. 3532 * lpfc_els_rsp_rnid_acc - Issue rnid acc response iocb command
3533 * @vport: pointer to a virtual N_Port data structure. 3533 * @vport: pointer to a virtual N_Port data structure.
3534 * @format: rnid command format. 3534 * @format: rnid command format.
3535 * @oldiocb: pointer to the original lpfc command iocb data structure. 3535 * @oldiocb: pointer to the original lpfc command iocb data structure.
@@ -3635,7 +3635,7 @@ lpfc_els_rsp_rnid_acc(struct lpfc_vport *vport, uint8_t format,
3635} 3635}
3636 3636
3637/** 3637/**
3638 * lpfc_els_disc_adisc: Issue remaining adisc iocbs to npr nodes of a vport. 3638 * lpfc_els_disc_adisc - Issue remaining adisc iocbs to npr nodes of a vport
3639 * @vport: pointer to a host virtual N_Port data structure. 3639 * @vport: pointer to a host virtual N_Port data structure.
3640 * 3640 *
3641 * This routine issues Address Discover (ADISC) ELS commands to those 3641 * This routine issues Address Discover (ADISC) ELS commands to those
@@ -3693,7 +3693,7 @@ lpfc_els_disc_adisc(struct lpfc_vport *vport)
3693} 3693}
3694 3694
3695/** 3695/**
3696 * lpfc_els_disc_plogi: Issue plogi for all npr nodes of a vport before adisc. 3696 * lpfc_els_disc_plogi - Issue plogi for all npr nodes of a vport before adisc
3697 * @vport: pointer to a host virtual N_Port data structure. 3697 * @vport: pointer to a host virtual N_Port data structure.
3698 * 3698 *
3699 * This routine issues Port Login (PLOGI) ELS commands to all the N_Ports 3699 * This routine issues Port Login (PLOGI) ELS commands to all the N_Ports
@@ -3752,7 +3752,7 @@ lpfc_els_disc_plogi(struct lpfc_vport *vport)
3752} 3752}
3753 3753
3754/** 3754/**
3755 * lpfc_els_flush_rscn: Clean up any rscn activities with a vport. 3755 * lpfc_els_flush_rscn - Clean up any rscn activities with a vport
3756 * @vport: pointer to a host virtual N_Port data structure. 3756 * @vport: pointer to a host virtual N_Port data structure.
3757 * 3757 *
3758 * This routine cleans up any Registration State Change Notification 3758 * This routine cleans up any Registration State Change Notification
@@ -3791,7 +3791,7 @@ lpfc_els_flush_rscn(struct lpfc_vport *vport)
3791} 3791}
3792 3792
3793/** 3793/**
3794 * lpfc_rscn_payload_check: Check whether there is a pending rscn to a did. 3794 * lpfc_rscn_payload_check - Check whether there is a pending rscn to a did
3795 * @vport: pointer to a host virtual N_Port data structure. 3795 * @vport: pointer to a host virtual N_Port data structure.
3796 * @did: remote destination port identifier. 3796 * @did: remote destination port identifier.
3797 * 3797 *
@@ -3866,7 +3866,7 @@ return_did_out:
3866} 3866}
3867 3867
3868/** 3868/**
3869 * lpfc_rscn_recovery_check: Send recovery event to vport nodes matching rscn 3869 * lpfc_rscn_recovery_check - Send recovery event to vport nodes matching rscn
3870 * @vport: pointer to a host virtual N_Port data structure. 3870 * @vport: pointer to a host virtual N_Port data structure.
3871 * 3871 *
3872 * This routine sends recovery (NLP_EVT_DEVICE_RECOVERY) event to the 3872 * This routine sends recovery (NLP_EVT_DEVICE_RECOVERY) event to the
@@ -3895,7 +3895,7 @@ lpfc_rscn_recovery_check(struct lpfc_vport *vport)
3895} 3895}
3896 3896
3897/** 3897/**
3898 * lpfc_send_rscn_event: Send an RSCN event to management application. 3898 * lpfc_send_rscn_event - Send an RSCN event to management application
3899 * @vport: pointer to a host virtual N_Port data structure. 3899 * @vport: pointer to a host virtual N_Port data structure.
3900 * @cmdiocb: pointer to lpfc command iocb data structure. 3900 * @cmdiocb: pointer to lpfc command iocb data structure.
3901 * 3901 *
@@ -3938,7 +3938,7 @@ lpfc_send_rscn_event(struct lpfc_vport *vport,
3938} 3938}
3939 3939
3940/** 3940/**
3941 * lpfc_els_rcv_rscn: Process an unsolicited rscn iocb. 3941 * lpfc_els_rcv_rscn - Process an unsolicited rscn iocb
3942 * @vport: pointer to a host virtual N_Port data structure. 3942 * @vport: pointer to a host virtual N_Port data structure.
3943 * @cmdiocb: pointer to lpfc command iocb data structure. 3943 * @cmdiocb: pointer to lpfc command iocb data structure.
3944 * @ndlp: pointer to a node-list data structure. 3944 * @ndlp: pointer to a node-list data structure.
@@ -4134,7 +4134,7 @@ lpfc_els_rcv_rscn(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb,
4134} 4134}
4135 4135
4136/** 4136/**
4137 * lpfc_els_handle_rscn: Handle rscn for a vport. 4137 * lpfc_els_handle_rscn - Handle rscn for a vport
4138 * @vport: pointer to a host virtual N_Port data structure. 4138 * @vport: pointer to a host virtual N_Port data structure.
4139 * 4139 *
4140 * This routine handles the Registration State Configuration Notification 4140 * This routine handles the Registration State Configuration Notification
@@ -4222,7 +4222,7 @@ lpfc_els_handle_rscn(struct lpfc_vport *vport)
4222} 4222}
4223 4223
4224/** 4224/**
4225 * lpfc_els_rcv_flogi: Process an unsolicited flogi iocb. 4225 * lpfc_els_rcv_flogi - Process an unsolicited flogi iocb
4226 * @vport: pointer to a host virtual N_Port data structure. 4226 * @vport: pointer to a host virtual N_Port data structure.
4227 * @cmdiocb: pointer to lpfc command iocb data structure. 4227 * @cmdiocb: pointer to lpfc command iocb data structure.
4228 * @ndlp: pointer to a node-list data structure. 4228 * @ndlp: pointer to a node-list data structure.
@@ -4336,7 +4336,7 @@ lpfc_els_rcv_flogi(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb,
4336} 4336}
4337 4337
4338/** 4338/**
4339 * lpfc_els_rcv_rnid: Process an unsolicited rnid iocb. 4339 * lpfc_els_rcv_rnid - Process an unsolicited rnid iocb
4340 * @vport: pointer to a host virtual N_Port data structure. 4340 * @vport: pointer to a host virtual N_Port data structure.
4341 * @cmdiocb: pointer to lpfc command iocb data structure. 4341 * @cmdiocb: pointer to lpfc command iocb data structure.
4342 * @ndlp: pointer to a node-list data structure. 4342 * @ndlp: pointer to a node-list data structure.
@@ -4391,7 +4391,7 @@ lpfc_els_rcv_rnid(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb,
4391} 4391}
4392 4392
4393/** 4393/**
4394 * lpfc_els_rcv_lirr: Process an unsolicited lirr iocb. 4394 * lpfc_els_rcv_lirr - Process an unsolicited lirr iocb
4395 * @vport: pointer to a host virtual N_Port data structure. 4395 * @vport: pointer to a host virtual N_Port data structure.
4396 * @cmdiocb: pointer to lpfc command iocb data structure. 4396 * @cmdiocb: pointer to lpfc command iocb data structure.
4397 * @ndlp: pointer to a node-list data structure. 4397 * @ndlp: pointer to a node-list data structure.
@@ -4419,7 +4419,7 @@ lpfc_els_rcv_lirr(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb,
4419} 4419}
4420 4420
4421/** 4421/**
4422 * lpfc_els_rsp_rps_acc: Completion callbk func for MBX_READ_LNK_STAT mbox cmd. 4422 * lpfc_els_rsp_rps_acc - Completion callbk func for MBX_READ_LNK_STAT mbox cmd
4423 * @phba: pointer to lpfc hba data structure. 4423 * @phba: pointer to lpfc hba data structure.
4424 * @pmb: pointer to the driver internal queue element for mailbox command. 4424 * @pmb: pointer to the driver internal queue element for mailbox command.
4425 * 4425 *
@@ -4513,7 +4513,7 @@ lpfc_els_rsp_rps_acc(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
4513} 4513}
4514 4514
4515/** 4515/**
4516 * lpfc_els_rcv_rps: Process an unsolicited rps iocb. 4516 * lpfc_els_rcv_rps - Process an unsolicited rps iocb
4517 * @vport: pointer to a host virtual N_Port data structure. 4517 * @vport: pointer to a host virtual N_Port data structure.
4518 * @cmdiocb: pointer to lpfc command iocb data structure. 4518 * @cmdiocb: pointer to lpfc command iocb data structure.
4519 * @ndlp: pointer to a node-list data structure. 4519 * @ndlp: pointer to a node-list data structure.
@@ -4590,7 +4590,7 @@ reject_out:
4590} 4590}
4591 4591
4592/** 4592/**
4593 * lpfc_els_rsp_rpl_acc: Issue an accept rpl els command. 4593 * lpfc_els_rsp_rpl_acc - Issue an accept rpl els command
4594 * @vport: pointer to a host virtual N_Port data structure. 4594 * @vport: pointer to a host virtual N_Port data structure.
4595 * @cmdsize: size of the ELS command. 4595 * @cmdsize: size of the ELS command.
4596 * @oldiocb: pointer to the original lpfc command iocb data structure. 4596 * @oldiocb: pointer to the original lpfc command iocb data structure.
@@ -4662,7 +4662,7 @@ lpfc_els_rsp_rpl_acc(struct lpfc_vport *vport, uint16_t cmdsize,
4662} 4662}
4663 4663
4664/** 4664/**
4665 * lpfc_els_rcv_rpl: Process an unsolicited rpl iocb. 4665 * lpfc_els_rcv_rpl - Process an unsolicited rpl iocb
4666 * @vport: pointer to a host virtual N_Port data structure. 4666 * @vport: pointer to a host virtual N_Port data structure.
4667 * @cmdiocb: pointer to lpfc command iocb data structure. 4667 * @cmdiocb: pointer to lpfc command iocb data structure.
4668 * @ndlp: pointer to a node-list data structure. 4668 * @ndlp: pointer to a node-list data structure.
@@ -4721,7 +4721,7 @@ lpfc_els_rcv_rpl(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb,
4721} 4721}
4722 4722
4723/** 4723/**
4724 * lpfc_els_rcv_farp: Process an unsolicited farp request els command. 4724 * lpfc_els_rcv_farp - Process an unsolicited farp request els command
4725 * @vport: pointer to a virtual N_Port data structure. 4725 * @vport: pointer to a virtual N_Port data structure.
4726 * @cmdiocb: pointer to lpfc command iocb data structure. 4726 * @cmdiocb: pointer to lpfc command iocb data structure.
4727 * @ndlp: pointer to a node-list data structure. 4727 * @ndlp: pointer to a node-list data structure.
@@ -4804,7 +4804,7 @@ lpfc_els_rcv_farp(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb,
4804} 4804}
4805 4805
4806/** 4806/**
4807 * lpfc_els_rcv_farpr: Process an unsolicited farp response iocb. 4807 * lpfc_els_rcv_farpr - Process an unsolicited farp response iocb
4808 * @vport: pointer to a host virtual N_Port data structure. 4808 * @vport: pointer to a host virtual N_Port data structure.
4809 * @cmdiocb: pointer to lpfc command iocb data structure. 4809 * @cmdiocb: pointer to lpfc command iocb data structure.
4810 * @ndlp: pointer to a node-list data structure. 4810 * @ndlp: pointer to a node-list data structure.
@@ -4842,7 +4842,7 @@ lpfc_els_rcv_farpr(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb,
4842} 4842}
4843 4843
4844/** 4844/**
4845 * lpfc_els_rcv_fan: Process an unsolicited fan iocb command. 4845 * lpfc_els_rcv_fan - Process an unsolicited fan iocb command
4846 * @vport: pointer to a host virtual N_Port data structure. 4846 * @vport: pointer to a host virtual N_Port data structure.
4847 * @cmdiocb: pointer to lpfc command iocb data structure. 4847 * @cmdiocb: pointer to lpfc command iocb data structure.
4848 * @fan_ndlp: pointer to a node-list data structure. 4848 * @fan_ndlp: pointer to a node-list data structure.
@@ -4890,7 +4890,7 @@ lpfc_els_rcv_fan(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb,
4890} 4890}
4891 4891
4892/** 4892/**
4893 * lpfc_els_timeout: Handler funciton to the els timer. 4893 * lpfc_els_timeout - Handler funciton to the els timer
4894 * @ptr: holder for the timer function associated data. 4894 * @ptr: holder for the timer function associated data.
4895 * 4895 *
4896 * This routine is invoked by the ELS timer after timeout. It posts the ELS 4896 * This routine is invoked by the ELS timer after timeout. It posts the ELS
@@ -4919,7 +4919,7 @@ lpfc_els_timeout(unsigned long ptr)
4919} 4919}
4920 4920
4921/** 4921/**
4922 * lpfc_els_timeout_handler: Process an els timeout event. 4922 * lpfc_els_timeout_handler - Process an els timeout event
4923 * @vport: pointer to a virtual N_Port data structure. 4923 * @vport: pointer to a virtual N_Port data structure.
4924 * 4924 *
4925 * This routine is the actual handler function that processes an ELS timeout 4925 * This routine is the actual handler function that processes an ELS timeout
@@ -4994,7 +4994,7 @@ lpfc_els_timeout_handler(struct lpfc_vport *vport)
4994} 4994}
4995 4995
4996/** 4996/**
4997 * lpfc_els_flush_cmd: Clean up the outstanding els commands to a vport. 4997 * lpfc_els_flush_cmd - Clean up the outstanding els commands to a vport
4998 * @vport: pointer to a host virtual N_Port data structure. 4998 * @vport: pointer to a host virtual N_Port data structure.
4999 * 4999 *
5000 * This routine is used to clean up all the outstanding ELS commands on a 5000 * This routine is used to clean up all the outstanding ELS commands on a
@@ -5058,25 +5058,15 @@ lpfc_els_flush_cmd(struct lpfc_vport *vport)
5058 } 5058 }
5059 spin_unlock_irq(&phba->hbalock); 5059 spin_unlock_irq(&phba->hbalock);
5060 5060
5061 while (!list_empty(&completions)) { 5061 /* Cancell all the IOCBs from the completions list */
5062 piocb = list_get_first(&completions, struct lpfc_iocbq, list); 5062 lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT,
5063 cmd = &piocb->iocb; 5063 IOERR_SLI_ABORTED);
5064 list_del_init(&piocb->list);
5065
5066 if (!piocb->iocb_cmpl)
5067 lpfc_sli_release_iocbq(phba, piocb);
5068 else {
5069 cmd->ulpStatus = IOSTAT_LOCAL_REJECT;
5070 cmd->un.ulpWord[4] = IOERR_SLI_ABORTED;
5071 (piocb->iocb_cmpl) (phba, piocb, piocb);
5072 }
5073 }
5074 5064
5075 return; 5065 return;
5076} 5066}
5077 5067
5078/** 5068/**
5079 * lpfc_els_flush_all_cmd: Clean up all the outstanding els commands to a HBA. 5069 * lpfc_els_flush_all_cmd - Clean up all the outstanding els commands to a HBA
5080 * @phba: pointer to lpfc hba data structure. 5070 * @phba: pointer to lpfc hba data structure.
5081 * 5071 *
5082 * This routine is used to clean up all the outstanding ELS commands on a 5072 * This routine is used to clean up all the outstanding ELS commands on a
@@ -5121,23 +5111,16 @@ lpfc_els_flush_all_cmd(struct lpfc_hba *phba)
5121 lpfc_sli_issue_abort_iotag(phba, pring, piocb); 5111 lpfc_sli_issue_abort_iotag(phba, pring, piocb);
5122 } 5112 }
5123 spin_unlock_irq(&phba->hbalock); 5113 spin_unlock_irq(&phba->hbalock);
5124 while (!list_empty(&completions)) { 5114
5125 piocb = list_get_first(&completions, struct lpfc_iocbq, list); 5115 /* Cancel all the IOCBs from the completions list */
5126 cmd = &piocb->iocb; 5116 lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT,
5127 list_del_init(&piocb->list); 5117 IOERR_SLI_ABORTED);
5128 if (!piocb->iocb_cmpl) 5118
5129 lpfc_sli_release_iocbq(phba, piocb);
5130 else {
5131 cmd->ulpStatus = IOSTAT_LOCAL_REJECT;
5132 cmd->un.ulpWord[4] = IOERR_SLI_ABORTED;
5133 (piocb->iocb_cmpl) (phba, piocb, piocb);
5134 }
5135 }
5136 return; 5119 return;
5137} 5120}
5138 5121
5139/** 5122/**
5140 * lpfc_send_els_failure_event: Posts an ELS command failure event. 5123 * lpfc_send_els_failure_event - Posts an ELS command failure event
5141 * @phba: Pointer to hba context object. 5124 * @phba: Pointer to hba context object.
5142 * @cmdiocbp: Pointer to command iocb which reported error. 5125 * @cmdiocbp: Pointer to command iocb which reported error.
5143 * @rspiocbp: Pointer to response iocb which reported error. 5126 * @rspiocbp: Pointer to response iocb which reported error.
@@ -5204,7 +5187,7 @@ lpfc_send_els_failure_event(struct lpfc_hba *phba,
5204} 5187}
5205 5188
5206/** 5189/**
5207 * lpfc_send_els_event: Posts unsolicited els event. 5190 * lpfc_send_els_event - Posts unsolicited els event
5208 * @vport: Pointer to vport object. 5191 * @vport: Pointer to vport object.
5209 * @ndlp: Pointer FC node object. 5192 * @ndlp: Pointer FC node object.
5210 * @cmd: ELS command code. 5193 * @cmd: ELS command code.
@@ -5284,7 +5267,7 @@ lpfc_send_els_event(struct lpfc_vport *vport,
5284 5267
5285 5268
5286/** 5269/**
5287 * lpfc_els_unsol_buffer: Process an unsolicited event data buffer. 5270 * lpfc_els_unsol_buffer - Process an unsolicited event data buffer
5288 * @phba: pointer to lpfc hba data structure. 5271 * @phba: pointer to lpfc hba data structure.
5289 * @pring: pointer to a SLI ring. 5272 * @pring: pointer to a SLI ring.
5290 * @vport: pointer to a host virtual N_Port data structure. 5273 * @vport: pointer to a host virtual N_Port data structure.
@@ -5592,7 +5575,7 @@ dropit:
5592} 5575}
5593 5576
5594/** 5577/**
5595 * lpfc_find_vport_by_vpid: Find a vport on a HBA through vport identifier. 5578 * lpfc_find_vport_by_vpid - Find a vport on a HBA through vport identifier
5596 * @phba: pointer to lpfc hba data structure. 5579 * @phba: pointer to lpfc hba data structure.
5597 * @vpi: host virtual N_Port identifier. 5580 * @vpi: host virtual N_Port identifier.
5598 * 5581 *
@@ -5622,7 +5605,7 @@ lpfc_find_vport_by_vpid(struct lpfc_hba *phba, uint16_t vpi)
5622} 5605}
5623 5606
5624/** 5607/**
5625 * lpfc_els_unsol_event: Process an unsolicited event from an els sli ring. 5608 * lpfc_els_unsol_event - Process an unsolicited event from an els sli ring
5626 * @phba: pointer to lpfc hba data structure. 5609 * @phba: pointer to lpfc hba data structure.
5627 * @pring: pointer to a SLI ring. 5610 * @pring: pointer to a SLI ring.
5628 * @elsiocb: pointer to lpfc els iocb data structure. 5611 * @elsiocb: pointer to lpfc els iocb data structure.
@@ -5710,7 +5693,7 @@ lpfc_els_unsol_event(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
5710} 5693}
5711 5694
5712/** 5695/**
5713 * lpfc_do_scr_ns_plogi: Issue a plogi to the name server for scr. 5696 * lpfc_do_scr_ns_plogi - Issue a plogi to the name server for scr
5714 * @phba: pointer to lpfc hba data structure. 5697 * @phba: pointer to lpfc hba data structure.
5715 * @vport: pointer to a virtual N_Port data structure. 5698 * @vport: pointer to a virtual N_Port data structure.
5716 * 5699 *
@@ -5781,7 +5764,7 @@ lpfc_do_scr_ns_plogi(struct lpfc_hba *phba, struct lpfc_vport *vport)
5781} 5764}
5782 5765
5783/** 5766/**
5784 * lpfc_cmpl_reg_new_vport: Completion callback function to register new vport. 5767 * lpfc_cmpl_reg_new_vport - Completion callback function to register new vport
5785 * @phba: pointer to lpfc hba data structure. 5768 * @phba: pointer to lpfc hba data structure.
5786 * @pmb: pointer to the driver internal queue element for mailbox command. 5769 * @pmb: pointer to the driver internal queue element for mailbox command.
5787 * 5770 *
@@ -5850,7 +5833,7 @@ lpfc_cmpl_reg_new_vport(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
5850} 5833}
5851 5834
5852/** 5835/**
5853 * lpfc_register_new_vport: Register a new vport with a HBA. 5836 * lpfc_register_new_vport - Register a new vport with a HBA
5854 * @phba: pointer to lpfc hba data structure. 5837 * @phba: pointer to lpfc hba data structure.
5855 * @vport: pointer to a host virtual N_Port data structure. 5838 * @vport: pointer to a host virtual N_Port data structure.
5856 * @ndlp: pointer to a node-list data structure. 5839 * @ndlp: pointer to a node-list data structure.
@@ -5899,7 +5882,7 @@ mbox_err_exit:
5899} 5882}
5900 5883
5901/** 5884/**
5902 * lpfc_cmpl_els_fdisc: Completion function for fdisc iocb command. 5885 * lpfc_cmpl_els_fdisc - Completion function for fdisc iocb command
5903 * @phba: pointer to lpfc hba data structure. 5886 * @phba: pointer to lpfc hba data structure.
5904 * @cmdiocb: pointer to lpfc command iocb data structure. 5887 * @cmdiocb: pointer to lpfc command iocb data structure.
5905 * @rspiocb: pointer to lpfc response iocb data structure. 5888 * @rspiocb: pointer to lpfc response iocb data structure.
@@ -6007,7 +5990,7 @@ out:
6007} 5990}
6008 5991
6009/** 5992/**
6010 * lpfc_issue_els_fdisc: Issue a fdisc iocb command. 5993 * lpfc_issue_els_fdisc - Issue a fdisc iocb command
6011 * @vport: pointer to a virtual N_Port data structure. 5994 * @vport: pointer to a virtual N_Port data structure.
6012 * @ndlp: pointer to a node-list data structure. 5995 * @ndlp: pointer to a node-list data structure.
6013 * @retry: number of retries to the command IOCB. 5996 * @retry: number of retries to the command IOCB.
@@ -6101,7 +6084,7 @@ lpfc_issue_els_fdisc(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
6101} 6084}
6102 6085
6103/** 6086/**
6104 * lpfc_cmpl_els_npiv_logo: Completion function with vport logo. 6087 * lpfc_cmpl_els_npiv_logo - Completion function with vport logo
6105 * @phba: pointer to lpfc hba data structure. 6088 * @phba: pointer to lpfc hba data structure.
6106 * @cmdiocb: pointer to lpfc command iocb data structure. 6089 * @cmdiocb: pointer to lpfc command iocb data structure.
6107 * @rspiocb: pointer to lpfc response iocb data structure. 6090 * @rspiocb: pointer to lpfc response iocb data structure.
@@ -6136,7 +6119,7 @@ lpfc_cmpl_els_npiv_logo(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
6136} 6119}
6137 6120
6138/** 6121/**
6139 * lpfc_issue_els_npiv_logo: Issue a logo off a vport. 6122 * lpfc_issue_els_npiv_logo - Issue a logo off a vport
6140 * @vport: pointer to a virtual N_Port data structure. 6123 * @vport: pointer to a virtual N_Port data structure.
6141 * @ndlp: pointer to a node-list data structure. 6124 * @ndlp: pointer to a node-list data structure.
6142 * 6125 *
@@ -6197,7 +6180,7 @@ lpfc_issue_els_npiv_logo(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
6197} 6180}
6198 6181
6199/** 6182/**
6200 * lpfc_fabric_block_timeout: Handler function to the fabric block timer. 6183 * lpfc_fabric_block_timeout - Handler function to the fabric block timer
6201 * @ptr: holder for the timer function associated data. 6184 * @ptr: holder for the timer function associated data.
6202 * 6185 *
6203 * This routine is invoked by the fabric iocb block timer after 6186 * This routine is invoked by the fabric iocb block timer after
@@ -6226,7 +6209,7 @@ lpfc_fabric_block_timeout(unsigned long ptr)
6226} 6209}
6227 6210
6228/** 6211/**
6229 * lpfc_resume_fabric_iocbs: Issue a fabric iocb from driver internal list. 6212 * lpfc_resume_fabric_iocbs - Issue a fabric iocb from driver internal list
6230 * @phba: pointer to lpfc hba data structure. 6213 * @phba: pointer to lpfc hba data structure.
6231 * 6214 *
6232 * This routine issues one fabric iocb from the driver internal list to 6215 * This routine issues one fabric iocb from the driver internal list to
@@ -6285,7 +6268,7 @@ repeat:
6285} 6268}
6286 6269
6287/** 6270/**
6288 * lpfc_unblock_fabric_iocbs: Unblock issuing fabric iocb command. 6271 * lpfc_unblock_fabric_iocbs - Unblock issuing fabric iocb command
6289 * @phba: pointer to lpfc hba data structure. 6272 * @phba: pointer to lpfc hba data structure.
6290 * 6273 *
6291 * This routine unblocks the issuing fabric iocb command. The function 6274 * This routine unblocks the issuing fabric iocb command. The function
@@ -6303,7 +6286,7 @@ lpfc_unblock_fabric_iocbs(struct lpfc_hba *phba)
6303} 6286}
6304 6287
6305/** 6288/**
6306 * lpfc_block_fabric_iocbs: Block issuing fabric iocb command. 6289 * lpfc_block_fabric_iocbs - Block issuing fabric iocb command
6307 * @phba: pointer to lpfc hba data structure. 6290 * @phba: pointer to lpfc hba data structure.
6308 * 6291 *
6309 * This routine blocks the issuing fabric iocb for a specified amount of 6292 * This routine blocks the issuing fabric iocb for a specified amount of
@@ -6325,7 +6308,7 @@ lpfc_block_fabric_iocbs(struct lpfc_hba *phba)
6325} 6308}
6326 6309
6327/** 6310/**
6328 * lpfc_cmpl_fabric_iocb: Completion callback function for fabric iocb. 6311 * lpfc_cmpl_fabric_iocb - Completion callback function for fabric iocb
6329 * @phba: pointer to lpfc hba data structure. 6312 * @phba: pointer to lpfc hba data structure.
6330 * @cmdiocb: pointer to lpfc command iocb data structure. 6313 * @cmdiocb: pointer to lpfc command iocb data structure.
6331 * @rspiocb: pointer to lpfc response iocb data structure. 6314 * @rspiocb: pointer to lpfc response iocb data structure.
@@ -6384,7 +6367,7 @@ lpfc_cmpl_fabric_iocb(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
6384} 6367}
6385 6368
6386/** 6369/**
6387 * lpfc_issue_fabric_iocb: Issue a fabric iocb command. 6370 * lpfc_issue_fabric_iocb - Issue a fabric iocb command
6388 * @phba: pointer to lpfc hba data structure. 6371 * @phba: pointer to lpfc hba data structure.
6389 * @iocb: pointer to lpfc command iocb data structure. 6372 * @iocb: pointer to lpfc command iocb data structure.
6390 * 6373 *
@@ -6453,7 +6436,7 @@ lpfc_issue_fabric_iocb(struct lpfc_hba *phba, struct lpfc_iocbq *iocb)
6453} 6436}
6454 6437
6455/** 6438/**
6456 * lpfc_fabric_abort_vport: Abort a vport's iocbs from driver fabric iocb list. 6439 * lpfc_fabric_abort_vport - Abort a vport's iocbs from driver fabric iocb list
6457 * @vport: pointer to a virtual N_Port data structure. 6440 * @vport: pointer to a virtual N_Port data structure.
6458 * 6441 *
6459 * This routine aborts all the IOCBs associated with a @vport from the 6442 * This routine aborts all the IOCBs associated with a @vport from the
@@ -6468,7 +6451,6 @@ static void lpfc_fabric_abort_vport(struct lpfc_vport *vport)
6468 LIST_HEAD(completions); 6451 LIST_HEAD(completions);
6469 struct lpfc_hba *phba = vport->phba; 6452 struct lpfc_hba *phba = vport->phba;
6470 struct lpfc_iocbq *tmp_iocb, *piocb; 6453 struct lpfc_iocbq *tmp_iocb, *piocb;
6471 IOCB_t *cmd;
6472 6454
6473 spin_lock_irq(&phba->hbalock); 6455 spin_lock_irq(&phba->hbalock);
6474 list_for_each_entry_safe(piocb, tmp_iocb, &phba->fabric_iocb_list, 6456 list_for_each_entry_safe(piocb, tmp_iocb, &phba->fabric_iocb_list,
@@ -6481,19 +6463,13 @@ static void lpfc_fabric_abort_vport(struct lpfc_vport *vport)
6481 } 6463 }
6482 spin_unlock_irq(&phba->hbalock); 6464 spin_unlock_irq(&phba->hbalock);
6483 6465
6484 while (!list_empty(&completions)) { 6466 /* Cancel all the IOCBs from the completions list */
6485 piocb = list_get_first(&completions, struct lpfc_iocbq, list); 6467 lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT,
6486 list_del_init(&piocb->list); 6468 IOERR_SLI_ABORTED);
6487
6488 cmd = &piocb->iocb;
6489 cmd->ulpStatus = IOSTAT_LOCAL_REJECT;
6490 cmd->un.ulpWord[4] = IOERR_SLI_ABORTED;
6491 (piocb->iocb_cmpl) (phba, piocb, piocb);
6492 }
6493} 6469}
6494 6470
6495/** 6471/**
6496 * lpfc_fabric_abort_nport: Abort a ndlp's iocbs from driver fabric iocb list. 6472 * lpfc_fabric_abort_nport - Abort a ndlp's iocbs from driver fabric iocb list
6497 * @ndlp: pointer to a node-list data structure. 6473 * @ndlp: pointer to a node-list data structure.
6498 * 6474 *
6499 * This routine aborts all the IOCBs associated with an @ndlp from the 6475 * This routine aborts all the IOCBs associated with an @ndlp from the
@@ -6506,10 +6482,9 @@ static void lpfc_fabric_abort_vport(struct lpfc_vport *vport)
6506void lpfc_fabric_abort_nport(struct lpfc_nodelist *ndlp) 6482void lpfc_fabric_abort_nport(struct lpfc_nodelist *ndlp)
6507{ 6483{
6508 LIST_HEAD(completions); 6484 LIST_HEAD(completions);
6509 struct lpfc_hba *phba = ndlp->vport->phba; 6485 struct lpfc_hba *phba = ndlp->phba;
6510 struct lpfc_iocbq *tmp_iocb, *piocb; 6486 struct lpfc_iocbq *tmp_iocb, *piocb;
6511 struct lpfc_sli_ring *pring = &phba->sli.ring[LPFC_ELS_RING]; 6487 struct lpfc_sli_ring *pring = &phba->sli.ring[LPFC_ELS_RING];
6512 IOCB_t *cmd;
6513 6488
6514 spin_lock_irq(&phba->hbalock); 6489 spin_lock_irq(&phba->hbalock);
6515 list_for_each_entry_safe(piocb, tmp_iocb, &phba->fabric_iocb_list, 6490 list_for_each_entry_safe(piocb, tmp_iocb, &phba->fabric_iocb_list,
@@ -6521,19 +6496,13 @@ void lpfc_fabric_abort_nport(struct lpfc_nodelist *ndlp)
6521 } 6496 }
6522 spin_unlock_irq(&phba->hbalock); 6497 spin_unlock_irq(&phba->hbalock);
6523 6498
6524 while (!list_empty(&completions)) { 6499 /* Cancel all the IOCBs from the completions list */
6525 piocb = list_get_first(&completions, struct lpfc_iocbq, list); 6500 lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT,
6526 list_del_init(&piocb->list); 6501 IOERR_SLI_ABORTED);
6527
6528 cmd = &piocb->iocb;
6529 cmd->ulpStatus = IOSTAT_LOCAL_REJECT;
6530 cmd->un.ulpWord[4] = IOERR_SLI_ABORTED;
6531 (piocb->iocb_cmpl) (phba, piocb, piocb);
6532 }
6533} 6502}
6534 6503
6535/** 6504/**
6536 * lpfc_fabric_abort_hba: Abort all iocbs on driver fabric iocb list. 6505 * lpfc_fabric_abort_hba - Abort all iocbs on driver fabric iocb list
6537 * @phba: pointer to lpfc hba data structure. 6506 * @phba: pointer to lpfc hba data structure.
6538 * 6507 *
6539 * This routine aborts all the IOCBs currently on the driver internal 6508 * This routine aborts all the IOCBs currently on the driver internal
@@ -6546,20 +6515,12 @@ void lpfc_fabric_abort_nport(struct lpfc_nodelist *ndlp)
6546void lpfc_fabric_abort_hba(struct lpfc_hba *phba) 6515void lpfc_fabric_abort_hba(struct lpfc_hba *phba)
6547{ 6516{
6548 LIST_HEAD(completions); 6517 LIST_HEAD(completions);
6549 struct lpfc_iocbq *piocb;
6550 IOCB_t *cmd;
6551 6518
6552 spin_lock_irq(&phba->hbalock); 6519 spin_lock_irq(&phba->hbalock);
6553 list_splice_init(&phba->fabric_iocb_list, &completions); 6520 list_splice_init(&phba->fabric_iocb_list, &completions);
6554 spin_unlock_irq(&phba->hbalock); 6521 spin_unlock_irq(&phba->hbalock);
6555 6522
6556 while (!list_empty(&completions)) { 6523 /* Cancel all the IOCBs from the completions list */
6557 piocb = list_get_first(&completions, struct lpfc_iocbq, list); 6524 lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT,
6558 list_del_init(&piocb->list); 6525 IOERR_SLI_ABORTED);
6559
6560 cmd = &piocb->iocb;
6561 cmd->ulpStatus = IOSTAT_LOCAL_REJECT;
6562 cmd->un.ulpWord[4] = IOERR_SLI_ABORTED;
6563 (piocb->iocb_cmpl) (phba, piocb, piocb);
6564 }
6565} 6526}
diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
index 311ed6dea726..e764ce0bf704 100644
--- a/drivers/scsi/lpfc/lpfc_hbadisc.c
+++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
@@ -78,7 +78,7 @@ lpfc_terminate_rport_io(struct fc_rport *rport)
78 return; 78 return;
79 } 79 }
80 80
81 phba = ndlp->vport->phba; 81 phba = ndlp->phba;
82 82
83 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_RPORT, 83 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_RPORT,
84 "rport terminate: sid:x%x did:x%x flg:x%x", 84 "rport terminate: sid:x%x did:x%x flg:x%x",
@@ -276,7 +276,7 @@ lpfc_dev_loss_tmo_handler(struct lpfc_nodelist *ndlp)
276} 276}
277 277
278/** 278/**
279 * lpfc_alloc_fast_evt: Allocates data structure for posting event. 279 * lpfc_alloc_fast_evt - Allocates data structure for posting event
280 * @phba: Pointer to hba context object. 280 * @phba: Pointer to hba context object.
281 * 281 *
282 * This function is called from the functions which need to post 282 * This function is called from the functions which need to post
@@ -303,7 +303,7 @@ lpfc_alloc_fast_evt(struct lpfc_hba *phba) {
303} 303}
304 304
305/** 305/**
306 * lpfc_free_fast_evt: Frees event data structure. 306 * lpfc_free_fast_evt - Frees event data structure
307 * @phba: Pointer to hba context object. 307 * @phba: Pointer to hba context object.
308 * @evt: Event object which need to be freed. 308 * @evt: Event object which need to be freed.
309 * 309 *
@@ -319,7 +319,7 @@ lpfc_free_fast_evt(struct lpfc_hba *phba,
319} 319}
320 320
321/** 321/**
322 * lpfc_send_fastpath_evt: Posts events generated from fast path. 322 * lpfc_send_fastpath_evt - Posts events generated from fast path
323 * @phba: Pointer to hba context object. 323 * @phba: Pointer to hba context object.
324 * @evtp: Event data structure. 324 * @evtp: Event data structure.
325 * 325 *
@@ -1858,13 +1858,18 @@ lpfc_disable_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
1858 NLP_STE_UNUSED_NODE); 1858 NLP_STE_UNUSED_NODE);
1859} 1859}
1860/** 1860/**
1861 * lpfc_initialize_node: Initialize all fields of node object. 1861 * lpfc_initialize_node - Initialize all fields of node object
1862 * @vport: Pointer to Virtual Port object. 1862 * @vport: Pointer to Virtual Port object.
1863 * @ndlp: Pointer to FC node object. 1863 * @ndlp: Pointer to FC node object.
1864 * @did: FC_ID of the node. 1864 * @did: FC_ID of the node.
1865 * This function is always called when node object need to 1865 *
1866 * be initialized. It initializes all the fields of the node 1866 * This function is always called when node object need to be initialized.
1867 * object. 1867 * It initializes all the fields of the node object. Although the reference
1868 * to phba from @ndlp can be obtained indirectly through it's reference to
1869 * @vport, a direct reference to phba is taken here by @ndlp. This is due
1870 * to the life-span of the @ndlp might go beyond the existence of @vport as
1871 * the final release of ndlp is determined by its reference count. And, the
1872 * operation on @ndlp needs the reference to phba.
1868 **/ 1873 **/
1869static inline void 1874static inline void
1870lpfc_initialize_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, 1875lpfc_initialize_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
@@ -1877,6 +1882,7 @@ lpfc_initialize_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
1877 ndlp->nlp_delayfunc.data = (unsigned long)ndlp; 1882 ndlp->nlp_delayfunc.data = (unsigned long)ndlp;
1878 ndlp->nlp_DID = did; 1883 ndlp->nlp_DID = did;
1879 ndlp->vport = vport; 1884 ndlp->vport = vport;
1885 ndlp->phba = vport->phba;
1880 ndlp->nlp_sid = NLP_NO_SID; 1886 ndlp->nlp_sid = NLP_NO_SID;
1881 kref_init(&ndlp->kref); 1887 kref_init(&ndlp->kref);
1882 NLP_INT_NODE_ACT(ndlp); 1888 NLP_INT_NODE_ACT(ndlp);
@@ -2086,7 +2092,6 @@ lpfc_no_rpi(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp)
2086 struct lpfc_sli *psli; 2092 struct lpfc_sli *psli;
2087 struct lpfc_sli_ring *pring; 2093 struct lpfc_sli_ring *pring;
2088 struct lpfc_iocbq *iocb, *next_iocb; 2094 struct lpfc_iocbq *iocb, *next_iocb;
2089 IOCB_t *icmd;
2090 uint32_t rpi, i; 2095 uint32_t rpi, i;
2091 2096
2092 lpfc_fabric_abort_nport(ndlp); 2097 lpfc_fabric_abort_nport(ndlp);
@@ -2122,19 +2127,9 @@ lpfc_no_rpi(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp)
2122 } 2127 }
2123 } 2128 }
2124 2129
2125 while (!list_empty(&completions)) { 2130 /* Cancel all the IOCBs from the completions list */
2126 iocb = list_get_first(&completions, struct lpfc_iocbq, list); 2131 lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT,
2127 list_del_init(&iocb->list); 2132 IOERR_SLI_ABORTED);
2128
2129 if (!iocb->iocb_cmpl)
2130 lpfc_sli_release_iocbq(phba, iocb);
2131 else {
2132 icmd = &iocb->iocb;
2133 icmd->ulpStatus = IOSTAT_LOCAL_REJECT;
2134 icmd->un.ulpWord[4] = IOERR_SLI_ABORTED;
2135 (iocb->iocb_cmpl)(phba, iocb, iocb);
2136 }
2137 }
2138 2133
2139 return 0; 2134 return 0;
2140} 2135}
@@ -2186,9 +2181,13 @@ lpfc_unreg_all_rpis(struct lpfc_vport *vport)
2186 mbox->mbox_cmpl = lpfc_sli_def_mbox_cmpl; 2181 mbox->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
2187 mbox->context1 = NULL; 2182 mbox->context1 = NULL;
2188 rc = lpfc_sli_issue_mbox_wait(phba, mbox, LPFC_MBOX_TMO); 2183 rc = lpfc_sli_issue_mbox_wait(phba, mbox, LPFC_MBOX_TMO);
2189 if (rc == MBX_NOT_FINISHED) { 2184 if (rc != MBX_TIMEOUT)
2190 mempool_free(mbox, phba->mbox_mem_pool); 2185 mempool_free(mbox, phba->mbox_mem_pool);
2191 } 2186
2187 if ((rc == MBX_TIMEOUT) || (rc == MBX_NOT_FINISHED))
2188 lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX | LOG_VPORT,
2189 "1836 Could not issue "
2190 "unreg_login(all_rpis) status %d\n", rc);
2192 } 2191 }
2193} 2192}
2194 2193
@@ -2206,12 +2205,14 @@ lpfc_unreg_default_rpis(struct lpfc_vport *vport)
2206 mbox->mbox_cmpl = lpfc_sli_def_mbox_cmpl; 2205 mbox->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
2207 mbox->context1 = NULL; 2206 mbox->context1 = NULL;
2208 rc = lpfc_sli_issue_mbox_wait(phba, mbox, LPFC_MBOX_TMO); 2207 rc = lpfc_sli_issue_mbox_wait(phba, mbox, LPFC_MBOX_TMO);
2209 if (rc == MBX_NOT_FINISHED) { 2208 if (rc != MBX_TIMEOUT)
2209 mempool_free(mbox, phba->mbox_mem_pool);
2210
2211 if ((rc == MBX_TIMEOUT) || (rc == MBX_NOT_FINISHED))
2210 lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX | LOG_VPORT, 2212 lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX | LOG_VPORT,
2211 "1815 Could not issue " 2213 "1815 Could not issue "
2212 "unreg_did (default rpis)\n"); 2214 "unreg_did (default rpis) status %d\n",
2213 mempool_free(mbox, phba->mbox_mem_pool); 2215 rc);
2214 }
2215 } 2216 }
2216} 2217}
2217 2218
@@ -2470,14 +2471,13 @@ lpfc_setup_disc_node(struct lpfc_vport *vport, uint32_t did)
2470 if (ndlp->nlp_flag & NLP_RCV_PLOGI) 2471 if (ndlp->nlp_flag & NLP_RCV_PLOGI)
2471 return NULL; 2472 return NULL;
2472 2473
2473 spin_lock_irq(shost->host_lock);
2474 ndlp->nlp_flag |= NLP_NPR_2B_DISC;
2475 spin_unlock_irq(shost->host_lock);
2476
2477 /* Since this node is marked for discovery, 2474 /* Since this node is marked for discovery,
2478 * delay timeout is not needed. 2475 * delay timeout is not needed.
2479 */ 2476 */
2480 lpfc_cancel_retry_delay_tmo(vport, ndlp); 2477 lpfc_cancel_retry_delay_tmo(vport, ndlp);
2478 spin_lock_irq(shost->host_lock);
2479 ndlp->nlp_flag |= NLP_NPR_2B_DISC;
2480 spin_unlock_irq(shost->host_lock);
2481 } else 2481 } else
2482 ndlp = NULL; 2482 ndlp = NULL;
2483 } else { 2483 } else {
@@ -2740,19 +2740,9 @@ lpfc_free_tx(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp)
2740 } 2740 }
2741 spin_unlock_irq(&phba->hbalock); 2741 spin_unlock_irq(&phba->hbalock);
2742 2742
2743 while (!list_empty(&completions)) { 2743 /* Cancel all the IOCBs from the completions list */
2744 iocb = list_get_first(&completions, struct lpfc_iocbq, list); 2744 lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT,
2745 list_del_init(&iocb->list); 2745 IOERR_SLI_ABORTED);
2746
2747 if (!iocb->iocb_cmpl)
2748 lpfc_sli_release_iocbq(phba, iocb);
2749 else {
2750 icmd = &iocb->iocb;
2751 icmd->ulpStatus = IOSTAT_LOCAL_REJECT;
2752 icmd->un.ulpWord[4] = IOERR_SLI_ABORTED;
2753 (iocb->iocb_cmpl) (phba, iocb, iocb);
2754 }
2755 }
2756} 2746}
2757 2747
2758static void 2748static void
@@ -3173,7 +3163,7 @@ lpfc_nlp_release(struct kref *kref)
3173 lpfc_nlp_remove(ndlp->vport, ndlp); 3163 lpfc_nlp_remove(ndlp->vport, ndlp);
3174 3164
3175 /* clear the ndlp active flag for all release cases */ 3165 /* clear the ndlp active flag for all release cases */
3176 phba = ndlp->vport->phba; 3166 phba = ndlp->phba;
3177 spin_lock_irqsave(&phba->ndlp_lock, flags); 3167 spin_lock_irqsave(&phba->ndlp_lock, flags);
3178 NLP_CLR_NODE_ACT(ndlp); 3168 NLP_CLR_NODE_ACT(ndlp);
3179 spin_unlock_irqrestore(&phba->ndlp_lock, flags); 3169 spin_unlock_irqrestore(&phba->ndlp_lock, flags);
@@ -3181,7 +3171,7 @@ lpfc_nlp_release(struct kref *kref)
3181 /* free ndlp memory for final ndlp release */ 3171 /* free ndlp memory for final ndlp release */
3182 if (NLP_CHK_FREE_REQ(ndlp)) { 3172 if (NLP_CHK_FREE_REQ(ndlp)) {
3183 kfree(ndlp->lat_data); 3173 kfree(ndlp->lat_data);
3184 mempool_free(ndlp, ndlp->vport->phba->nlp_mem_pool); 3174 mempool_free(ndlp, ndlp->phba->nlp_mem_pool);
3185 } 3175 }
3186} 3176}
3187 3177
@@ -3204,7 +3194,7 @@ lpfc_nlp_get(struct lpfc_nodelist *ndlp)
3204 * ndlp reference count that is in the process of being 3194 * ndlp reference count that is in the process of being
3205 * released. 3195 * released.
3206 */ 3196 */
3207 phba = ndlp->vport->phba; 3197 phba = ndlp->phba;
3208 spin_lock_irqsave(&phba->ndlp_lock, flags); 3198 spin_lock_irqsave(&phba->ndlp_lock, flags);
3209 if (!NLP_CHK_NODE_ACT(ndlp) || NLP_CHK_FREE_ACK(ndlp)) { 3199 if (!NLP_CHK_NODE_ACT(ndlp) || NLP_CHK_FREE_ACK(ndlp)) {
3210 spin_unlock_irqrestore(&phba->ndlp_lock, flags); 3200 spin_unlock_irqrestore(&phba->ndlp_lock, flags);
@@ -3240,7 +3230,7 @@ lpfc_nlp_put(struct lpfc_nodelist *ndlp)
3240 "node put: did:x%x flg:x%x refcnt:x%x", 3230 "node put: did:x%x flg:x%x refcnt:x%x",
3241 ndlp->nlp_DID, ndlp->nlp_flag, 3231 ndlp->nlp_DID, ndlp->nlp_flag,
3242 atomic_read(&ndlp->kref.refcount)); 3232 atomic_read(&ndlp->kref.refcount));
3243 phba = ndlp->vport->phba; 3233 phba = ndlp->phba;
3244 spin_lock_irqsave(&phba->ndlp_lock, flags); 3234 spin_lock_irqsave(&phba->ndlp_lock, flags);
3245 /* Check the ndlp memory free acknowledge flag to avoid the 3235 /* Check the ndlp memory free acknowledge flag to avoid the
3246 * possible race condition that kref_put got invoked again 3236 * possible race condition that kref_put got invoked again
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index 06874e6009ea..86d1bdcbf2d8 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -60,7 +60,7 @@ static struct scsi_transport_template *lpfc_vport_transport_template = NULL;
60static DEFINE_IDR(lpfc_hba_index); 60static DEFINE_IDR(lpfc_hba_index);
61 61
62/** 62/**
63 * lpfc_config_port_prep: Perform lpfc initialization prior to config port. 63 * lpfc_config_port_prep - Perform lpfc initialization prior to config port
64 * @phba: pointer to lpfc hba data structure. 64 * @phba: pointer to lpfc hba data structure.
65 * 65 *
66 * This routine will do LPFC initialization prior to issuing the CONFIG_PORT 66 * This routine will do LPFC initialization prior to issuing the CONFIG_PORT
@@ -221,7 +221,7 @@ out_free_mbox:
221} 221}
222 222
223/** 223/**
224 * lpfc_config_async_cmpl: Completion handler for config async event mbox cmd. 224 * lpfc_config_async_cmpl - Completion handler for config async event mbox cmd
225 * @phba: pointer to lpfc hba data structure. 225 * @phba: pointer to lpfc hba data structure.
226 * @pmboxq: pointer to the driver internal queue element for mailbox command. 226 * @pmboxq: pointer to the driver internal queue element for mailbox command.
227 * 227 *
@@ -242,8 +242,7 @@ lpfc_config_async_cmpl(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmboxq)
242} 242}
243 243
244/** 244/**
245 * lpfc_dump_wakeup_param_cmpl: Completion handler for dump memory mailbox 245 * lpfc_dump_wakeup_param_cmpl - dump memory mailbox command completion handler
246 * command used for getting wake up parameters.
247 * @phba: pointer to lpfc hba data structure. 246 * @phba: pointer to lpfc hba data structure.
248 * @pmboxq: pointer to the driver internal queue element for mailbox command. 247 * @pmboxq: pointer to the driver internal queue element for mailbox command.
249 * 248 *
@@ -287,7 +286,7 @@ lpfc_dump_wakeup_param_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq)
287} 286}
288 287
289/** 288/**
290 * lpfc_config_port_post: Perform lpfc initialization after config port. 289 * lpfc_config_port_post - Perform lpfc initialization after config port
291 * @phba: pointer to lpfc hba data structure. 290 * @phba: pointer to lpfc hba data structure.
292 * 291 *
293 * This routine will do LPFC initialization after the CONFIG_PORT mailbox 292 * This routine will do LPFC initialization after the CONFIG_PORT mailbox
@@ -303,6 +302,7 @@ int
303lpfc_config_port_post(struct lpfc_hba *phba) 302lpfc_config_port_post(struct lpfc_hba *phba)
304{ 303{
305 struct lpfc_vport *vport = phba->pport; 304 struct lpfc_vport *vport = phba->pport;
305 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
306 LPFC_MBOXQ_t *pmb; 306 LPFC_MBOXQ_t *pmb;
307 MAILBOX_t *mb; 307 MAILBOX_t *mb;
308 struct lpfc_dmabuf *mp; 308 struct lpfc_dmabuf *mp;
@@ -360,6 +360,11 @@ lpfc_config_port_post(struct lpfc_hba *phba)
360 sizeof (struct lpfc_name)); 360 sizeof (struct lpfc_name));
361 memcpy(&vport->fc_portname, &vport->fc_sparam.portName, 361 memcpy(&vport->fc_portname, &vport->fc_sparam.portName,
362 sizeof (struct lpfc_name)); 362 sizeof (struct lpfc_name));
363
364 /* Update the fc_host data structures with new wwn. */
365 fc_host_node_name(shost) = wwn_to_u64(vport->fc_nodename.u.wwn);
366 fc_host_port_name(shost) = wwn_to_u64(vport->fc_portname.u.wwn);
367
363 /* If no serial number in VPD data, use low 6 bytes of WWNN */ 368 /* If no serial number in VPD data, use low 6 bytes of WWNN */
364 /* This should be consolidated into parse_vpd ? - mr */ 369 /* This should be consolidated into parse_vpd ? - mr */
365 if (phba->SerialNumber[0] == 0) { 370 if (phba->SerialNumber[0] == 0) {
@@ -551,7 +556,7 @@ lpfc_config_port_post(struct lpfc_hba *phba)
551} 556}
552 557
553/** 558/**
554 * lpfc_hba_down_prep: Perform lpfc uninitialization prior to HBA reset. 559 * lpfc_hba_down_prep - Perform lpfc uninitialization prior to HBA reset
555 * @phba: pointer to lpfc HBA data structure. 560 * @phba: pointer to lpfc HBA data structure.
556 * 561 *
557 * This routine will do LPFC uninitialization before the HBA is reset when 562 * This routine will do LPFC uninitialization before the HBA is reset when
@@ -583,7 +588,7 @@ lpfc_hba_down_prep(struct lpfc_hba *phba)
583} 588}
584 589
585/** 590/**
586 * lpfc_hba_down_post: Perform lpfc uninitialization after HBA reset. 591 * lpfc_hba_down_post - Perform lpfc uninitialization after HBA reset
587 * @phba: pointer to lpfc HBA data structure. 592 * @phba: pointer to lpfc HBA data structure.
588 * 593 *
589 * This routine will do uninitialization after the HBA is reset when bring 594 * This routine will do uninitialization after the HBA is reset when bring
@@ -599,8 +604,6 @@ lpfc_hba_down_post(struct lpfc_hba *phba)
599 struct lpfc_sli *psli = &phba->sli; 604 struct lpfc_sli *psli = &phba->sli;
600 struct lpfc_sli_ring *pring; 605 struct lpfc_sli_ring *pring;
601 struct lpfc_dmabuf *mp, *next_mp; 606 struct lpfc_dmabuf *mp, *next_mp;
602 struct lpfc_iocbq *iocb;
603 IOCB_t *cmd = NULL;
604 LIST_HEAD(completions); 607 LIST_HEAD(completions);
605 int i; 608 int i;
606 609
@@ -628,20 +631,9 @@ lpfc_hba_down_post(struct lpfc_hba *phba)
628 pring->txcmplq_cnt = 0; 631 pring->txcmplq_cnt = 0;
629 spin_unlock_irq(&phba->hbalock); 632 spin_unlock_irq(&phba->hbalock);
630 633
631 while (!list_empty(&completions)) { 634 /* Cancel all the IOCBs from the completions list */
632 iocb = list_get_first(&completions, struct lpfc_iocbq, 635 lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT,
633 list); 636 IOERR_SLI_ABORTED);
634 cmd = &iocb->iocb;
635 list_del_init(&iocb->list);
636
637 if (!iocb->iocb_cmpl)
638 lpfc_sli_release_iocbq(phba, iocb);
639 else {
640 cmd->ulpStatus = IOSTAT_LOCAL_REJECT;
641 cmd->un.ulpWord[4] = IOERR_SLI_ABORTED;
642 (iocb->iocb_cmpl) (phba, iocb, iocb);
643 }
644 }
645 637
646 lpfc_sli_abort_iocb_ring(phba, pring); 638 lpfc_sli_abort_iocb_ring(phba, pring);
647 spin_lock_irq(&phba->hbalock); 639 spin_lock_irq(&phba->hbalock);
@@ -652,7 +644,7 @@ lpfc_hba_down_post(struct lpfc_hba *phba)
652} 644}
653 645
654/** 646/**
655 * lpfc_hb_timeout: The HBA-timer timeout handler. 647 * lpfc_hb_timeout - The HBA-timer timeout handler
656 * @ptr: unsigned long holds the pointer to lpfc hba data structure. 648 * @ptr: unsigned long holds the pointer to lpfc hba data structure.
657 * 649 *
658 * This is the HBA-timer timeout handler registered to the lpfc driver. When 650 * This is the HBA-timer timeout handler registered to the lpfc driver. When
@@ -686,7 +678,7 @@ lpfc_hb_timeout(unsigned long ptr)
686} 678}
687 679
688/** 680/**
689 * lpfc_hb_mbox_cmpl: The lpfc heart-beat mailbox command callback function. 681 * lpfc_hb_mbox_cmpl - The lpfc heart-beat mailbox command callback function
690 * @phba: pointer to lpfc hba data structure. 682 * @phba: pointer to lpfc hba data structure.
691 * @pmboxq: pointer to the driver internal queue element for mailbox command. 683 * @pmboxq: pointer to the driver internal queue element for mailbox command.
692 * 684 *
@@ -721,7 +713,7 @@ lpfc_hb_mbox_cmpl(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmboxq)
721} 713}
722 714
723/** 715/**
724 * lpfc_hb_timeout_handler: The HBA-timer timeout handler. 716 * lpfc_hb_timeout_handler - The HBA-timer timeout handler
725 * @phba: pointer to lpfc hba data structure. 717 * @phba: pointer to lpfc hba data structure.
726 * 718 *
727 * This is the actual HBA-timer timeout handler to be invoked by the worker 719 * This is the actual HBA-timer timeout handler to be invoked by the worker
@@ -830,7 +822,7 @@ lpfc_hb_timeout_handler(struct lpfc_hba *phba)
830} 822}
831 823
832/** 824/**
833 * lpfc_offline_eratt: Bring lpfc offline on hardware error attention. 825 * lpfc_offline_eratt - Bring lpfc offline on hardware error attention
834 * @phba: pointer to lpfc hba data structure. 826 * @phba: pointer to lpfc hba data structure.
835 * 827 *
836 * This routine is called to bring the HBA offline when HBA hardware error 828 * This routine is called to bring the HBA offline when HBA hardware error
@@ -857,7 +849,73 @@ lpfc_offline_eratt(struct lpfc_hba *phba)
857} 849}
858 850
859/** 851/**
860 * lpfc_handle_eratt: The HBA hardware error handler. 852 * lpfc_handle_deferred_eratt - The HBA hardware deferred error handler
853 * @phba: pointer to lpfc hba data structure.
854 *
855 * This routine is invoked to handle the deferred HBA hardware error
856 * conditions. This type of error is indicated by HBA by setting ER1
857 * and another ER bit in the host status register. The driver will
858 * wait until the ER1 bit clears before handling the error condition.
859 **/
860static void
861lpfc_handle_deferred_eratt(struct lpfc_hba *phba)
862{
863 uint32_t old_host_status = phba->work_hs;
864 struct lpfc_sli_ring *pring;
865 struct lpfc_sli *psli = &phba->sli;
866
867 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
868 "0479 Deferred Adapter Hardware Error "
869 "Data: x%x x%x x%x\n",
870 phba->work_hs,
871 phba->work_status[0], phba->work_status[1]);
872
873 spin_lock_irq(&phba->hbalock);
874 psli->sli_flag &= ~LPFC_SLI2_ACTIVE;
875 spin_unlock_irq(&phba->hbalock);
876
877
878 /*
879 * Firmware stops when it triggred erratt. That could cause the I/Os
880 * dropped by the firmware. Error iocb (I/O) on txcmplq and let the
881 * SCSI layer retry it after re-establishing link.
882 */
883 pring = &psli->ring[psli->fcp_ring];
884 lpfc_sli_abort_iocb_ring(phba, pring);
885
886 /*
887 * There was a firmware error. Take the hba offline and then
888 * attempt to restart it.
889 */
890 lpfc_offline_prep(phba);
891 lpfc_offline(phba);
892
893 /* Wait for the ER1 bit to clear.*/
894 while (phba->work_hs & HS_FFER1) {
895 msleep(100);
896 phba->work_hs = readl(phba->HSregaddr);
897 /* If driver is unloading let the worker thread continue */
898 if (phba->pport->load_flag & FC_UNLOADING) {
899 phba->work_hs = 0;
900 break;
901 }
902 }
903
904 /*
905 * This is to ptrotect against a race condition in which
906 * first write to the host attention register clear the
907 * host status register.
908 */
909 if ((!phba->work_hs) && (!(phba->pport->load_flag & FC_UNLOADING)))
910 phba->work_hs = old_host_status & ~HS_FFER1;
911
912 phba->hba_flag &= ~DEFER_ERATT;
913 phba->work_status[0] = readl(phba->MBslimaddr + 0xa8);
914 phba->work_status[1] = readl(phba->MBslimaddr + 0xac);
915}
916
917/**
918 * lpfc_handle_eratt - The HBA hardware error handler
861 * @phba: pointer to lpfc hba data structure. 919 * @phba: pointer to lpfc hba data structure.
862 * 920 *
863 * This routine is invoked to handle the following HBA hardware error 921 * This routine is invoked to handle the following HBA hardware error
@@ -895,6 +953,9 @@ lpfc_handle_eratt(struct lpfc_hba *phba)
895 (char *) &board_event, 953 (char *) &board_event,
896 LPFC_NL_VENDOR_ID); 954 LPFC_NL_VENDOR_ID);
897 955
956 if (phba->hba_flag & DEFER_ERATT)
957 lpfc_handle_deferred_eratt(phba);
958
898 if (phba->work_hs & HS_FFER6) { 959 if (phba->work_hs & HS_FFER6) {
899 /* Re-establishing Link */ 960 /* Re-establishing Link */
900 lpfc_printf_log(phba, KERN_INFO, LOG_LINK_EVENT, 961 lpfc_printf_log(phba, KERN_INFO, LOG_LINK_EVENT,
@@ -976,7 +1037,7 @@ lpfc_handle_eratt(struct lpfc_hba *phba)
976} 1037}
977 1038
978/** 1039/**
979 * lpfc_handle_latt: The HBA link event handler. 1040 * lpfc_handle_latt - The HBA link event handler
980 * @phba: pointer to lpfc hba data structure. 1041 * @phba: pointer to lpfc hba data structure.
981 * 1042 *
982 * This routine is invoked from the worker thread to handle a HBA host 1043 * This routine is invoked from the worker thread to handle a HBA host
@@ -1063,7 +1124,7 @@ lpfc_handle_latt_err_exit:
1063} 1124}
1064 1125
1065/** 1126/**
1066 * lpfc_parse_vpd: Parse VPD (Vital Product Data). 1127 * lpfc_parse_vpd - Parse VPD (Vital Product Data)
1067 * @phba: pointer to lpfc hba data structure. 1128 * @phba: pointer to lpfc hba data structure.
1068 * @vpd: pointer to the vital product data. 1129 * @vpd: pointer to the vital product data.
1069 * @len: length of the vital product data in bytes. 1130 * @len: length of the vital product data in bytes.
@@ -1213,7 +1274,7 @@ lpfc_parse_vpd(struct lpfc_hba *phba, uint8_t *vpd, int len)
1213} 1274}
1214 1275
1215/** 1276/**
1216 * lpfc_get_hba_model_desc: Retrieve HBA device model name and description. 1277 * lpfc_get_hba_model_desc - Retrieve HBA device model name and description
1217 * @phba: pointer to lpfc hba data structure. 1278 * @phba: pointer to lpfc hba data structure.
1218 * @mdp: pointer to the data structure to hold the derived model name. 1279 * @mdp: pointer to the data structure to hold the derived model name.
1219 * @descp: pointer to the data structure to hold the derived description. 1280 * @descp: pointer to the data structure to hold the derived description.
@@ -1322,7 +1383,8 @@ lpfc_get_hba_model_desc(struct lpfc_hba *phba, uint8_t *mdp, uint8_t *descp)
1322 m = (typeof(m)){"LPe11000", max_speed, "PCIe"}; 1383 m = (typeof(m)){"LPe11000", max_speed, "PCIe"};
1323 break; 1384 break;
1324 case PCI_DEVICE_ID_ZEPHYR_DCSP: 1385 case PCI_DEVICE_ID_ZEPHYR_DCSP:
1325 m = (typeof(m)){"LPe11002-SP", max_speed, "PCIe"}; 1386 m = (typeof(m)){"LP2105", max_speed, "PCIe"};
1387 GE = 1;
1326 break; 1388 break;
1327 case PCI_DEVICE_ID_ZMID: 1389 case PCI_DEVICE_ID_ZMID:
1328 m = (typeof(m)){"LPe1150", max_speed, "PCIe"}; 1390 m = (typeof(m)){"LPe1150", max_speed, "PCIe"};
@@ -1392,7 +1454,7 @@ lpfc_get_hba_model_desc(struct lpfc_hba *phba, uint8_t *mdp, uint8_t *descp)
1392} 1454}
1393 1455
1394/** 1456/**
1395 * lpfc_post_buffer: Post IOCB(s) with DMA buffer descriptor(s) to a IOCB ring. 1457 * lpfc_post_buffer - Post IOCB(s) with DMA buffer descriptor(s) to a IOCB ring
1396 * @phba: pointer to lpfc hba data structure. 1458 * @phba: pointer to lpfc hba data structure.
1397 * @pring: pointer to a IOCB ring. 1459 * @pring: pointer to a IOCB ring.
1398 * @cnt: the number of IOCBs to be posted to the IOCB ring. 1460 * @cnt: the number of IOCBs to be posted to the IOCB ring.
@@ -1493,7 +1555,7 @@ lpfc_post_buffer(struct lpfc_hba *phba, struct lpfc_sli_ring *pring, int cnt)
1493} 1555}
1494 1556
1495/** 1557/**
1496 * lpfc_post_rcv_buf: Post the initial receive IOCB buffers to ELS ring. 1558 * lpfc_post_rcv_buf - Post the initial receive IOCB buffers to ELS ring
1497 * @phba: pointer to lpfc hba data structure. 1559 * @phba: pointer to lpfc hba data structure.
1498 * 1560 *
1499 * This routine posts initial receive IOCB buffers to the ELS ring. The 1561 * This routine posts initial receive IOCB buffers to the ELS ring. The
@@ -1518,7 +1580,7 @@ lpfc_post_rcv_buf(struct lpfc_hba *phba)
1518#define S(N,V) (((V)<<(N))|((V)>>(32-(N)))) 1580#define S(N,V) (((V)<<(N))|((V)>>(32-(N))))
1519 1581
1520/** 1582/**
1521 * lpfc_sha_init: Set up initial array of hash table entries. 1583 * lpfc_sha_init - Set up initial array of hash table entries
1522 * @HashResultPointer: pointer to an array as hash table. 1584 * @HashResultPointer: pointer to an array as hash table.
1523 * 1585 *
1524 * This routine sets up the initial values to the array of hash table entries 1586 * This routine sets up the initial values to the array of hash table entries
@@ -1535,7 +1597,7 @@ lpfc_sha_init(uint32_t * HashResultPointer)
1535} 1597}
1536 1598
1537/** 1599/**
1538 * lpfc_sha_iterate: Iterate initial hash table with the working hash table. 1600 * lpfc_sha_iterate - Iterate initial hash table with the working hash table
1539 * @HashResultPointer: pointer to an initial/result hash table. 1601 * @HashResultPointer: pointer to an initial/result hash table.
1540 * @HashWorkingPointer: pointer to an working hash table. 1602 * @HashWorkingPointer: pointer to an working hash table.
1541 * 1603 *
@@ -1592,7 +1654,7 @@ lpfc_sha_iterate(uint32_t * HashResultPointer, uint32_t * HashWorkingPointer)
1592} 1654}
1593 1655
1594/** 1656/**
1595 * lpfc_challenge_key: Create challenge key based on WWPN of the HBA. 1657 * lpfc_challenge_key - Create challenge key based on WWPN of the HBA
1596 * @RandomChallenge: pointer to the entry of host challenge random number array. 1658 * @RandomChallenge: pointer to the entry of host challenge random number array.
1597 * @HashWorking: pointer to the entry of the working hash array. 1659 * @HashWorking: pointer to the entry of the working hash array.
1598 * 1660 *
@@ -1608,7 +1670,7 @@ lpfc_challenge_key(uint32_t * RandomChallenge, uint32_t * HashWorking)
1608} 1670}
1609 1671
1610/** 1672/**
1611 * lpfc_hba_init: Perform special handling for LC HBA initialization. 1673 * lpfc_hba_init - Perform special handling for LC HBA initialization
1612 * @phba: pointer to lpfc hba data structure. 1674 * @phba: pointer to lpfc hba data structure.
1613 * @hbainit: pointer to an array of unsigned 32-bit integers. 1675 * @hbainit: pointer to an array of unsigned 32-bit integers.
1614 * 1676 *
@@ -1637,7 +1699,7 @@ lpfc_hba_init(struct lpfc_hba *phba, uint32_t *hbainit)
1637} 1699}
1638 1700
1639/** 1701/**
1640 * lpfc_cleanup: Performs vport cleanups before deleting a vport. 1702 * lpfc_cleanup - Performs vport cleanups before deleting a vport
1641 * @vport: pointer to a virtual N_Port data structure. 1703 * @vport: pointer to a virtual N_Port data structure.
1642 * 1704 *
1643 * This routine performs the necessary cleanups before deleting the @vport. 1705 * This routine performs the necessary cleanups before deleting the @vport.
@@ -1724,7 +1786,7 @@ lpfc_cleanup(struct lpfc_vport *vport)
1724} 1786}
1725 1787
1726/** 1788/**
1727 * lpfc_stop_vport_timers: Stop all the timers associated with a vport. 1789 * lpfc_stop_vport_timers - Stop all the timers associated with a vport
1728 * @vport: pointer to a virtual N_Port data structure. 1790 * @vport: pointer to a virtual N_Port data structure.
1729 * 1791 *
1730 * This routine stops all the timers associated with a @vport. This function 1792 * This routine stops all the timers associated with a @vport. This function
@@ -1741,7 +1803,7 @@ lpfc_stop_vport_timers(struct lpfc_vport *vport)
1741} 1803}
1742 1804
1743/** 1805/**
1744 * lpfc_stop_phba_timers: Stop all the timers associated with an HBA. 1806 * lpfc_stop_phba_timers - Stop all the timers associated with an HBA
1745 * @phba: pointer to lpfc hba data structure. 1807 * @phba: pointer to lpfc hba data structure.
1746 * 1808 *
1747 * This routine stops all the timers associated with a HBA. This function is 1809 * This routine stops all the timers associated with a HBA. This function is
@@ -1761,7 +1823,7 @@ lpfc_stop_phba_timers(struct lpfc_hba *phba)
1761} 1823}
1762 1824
1763/** 1825/**
1764 * lpfc_block_mgmt_io: Mark a HBA's management interface as blocked. 1826 * lpfc_block_mgmt_io - Mark a HBA's management interface as blocked
1765 * @phba: pointer to lpfc hba data structure. 1827 * @phba: pointer to lpfc hba data structure.
1766 * 1828 *
1767 * This routine marks a HBA's management interface as blocked. Once the HBA's 1829 * This routine marks a HBA's management interface as blocked. Once the HBA's
@@ -1781,7 +1843,7 @@ lpfc_block_mgmt_io(struct lpfc_hba * phba)
1781} 1843}
1782 1844
1783/** 1845/**
1784 * lpfc_online: Initialize and bring a HBA online. 1846 * lpfc_online - Initialize and bring a HBA online
1785 * @phba: pointer to lpfc hba data structure. 1847 * @phba: pointer to lpfc hba data structure.
1786 * 1848 *
1787 * This routine initializes the HBA and brings a HBA online. During this 1849 * This routine initializes the HBA and brings a HBA online. During this
@@ -1839,7 +1901,7 @@ lpfc_online(struct lpfc_hba *phba)
1839} 1901}
1840 1902
1841/** 1903/**
1842 * lpfc_unblock_mgmt_io: Mark a HBA's management interface to be not blocked. 1904 * lpfc_unblock_mgmt_io - Mark a HBA's management interface to be not blocked
1843 * @phba: pointer to lpfc hba data structure. 1905 * @phba: pointer to lpfc hba data structure.
1844 * 1906 *
1845 * This routine marks a HBA's management interface as not blocked. Once the 1907 * This routine marks a HBA's management interface as not blocked. Once the
@@ -1860,7 +1922,7 @@ lpfc_unblock_mgmt_io(struct lpfc_hba * phba)
1860} 1922}
1861 1923
1862/** 1924/**
1863 * lpfc_offline_prep: Prepare a HBA to be brought offline. 1925 * lpfc_offline_prep - Prepare a HBA to be brought offline
1864 * @phba: pointer to lpfc hba data structure. 1926 * @phba: pointer to lpfc hba data structure.
1865 * 1927 *
1866 * This routine is invoked to prepare a HBA to be brought offline. It performs 1928 * This routine is invoked to prepare a HBA to be brought offline. It performs
@@ -1917,7 +1979,7 @@ lpfc_offline_prep(struct lpfc_hba * phba)
1917} 1979}
1918 1980
1919/** 1981/**
1920 * lpfc_offline: Bring a HBA offline. 1982 * lpfc_offline - Bring a HBA offline
1921 * @phba: pointer to lpfc hba data structure. 1983 * @phba: pointer to lpfc hba data structure.
1922 * 1984 *
1923 * This routine actually brings a HBA offline. It stops all the timers 1985 * This routine actually brings a HBA offline. It stops all the timers
@@ -1962,7 +2024,7 @@ lpfc_offline(struct lpfc_hba *phba)
1962} 2024}
1963 2025
1964/** 2026/**
1965 * lpfc_scsi_free: Free all the SCSI buffers and IOCBs from driver lists. 2027 * lpfc_scsi_free - Free all the SCSI buffers and IOCBs from driver lists
1966 * @phba: pointer to lpfc hba data structure. 2028 * @phba: pointer to lpfc hba data structure.
1967 * 2029 *
1968 * This routine is to free all the SCSI buffers and IOCBs from the driver 2030 * This routine is to free all the SCSI buffers and IOCBs from the driver
@@ -2001,7 +2063,7 @@ lpfc_scsi_free(struct lpfc_hba *phba)
2001} 2063}
2002 2064
2003/** 2065/**
2004 * lpfc_create_port: Create an FC port. 2066 * lpfc_create_port - Create an FC port
2005 * @phba: pointer to lpfc hba data structure. 2067 * @phba: pointer to lpfc hba data structure.
2006 * @instance: a unique integer ID to this FC port. 2068 * @instance: a unique integer ID to this FC port.
2007 * @dev: pointer to the device data structure. 2069 * @dev: pointer to the device data structure.
@@ -2091,7 +2153,7 @@ out:
2091} 2153}
2092 2154
2093/** 2155/**
2094 * destroy_port: Destroy an FC port. 2156 * destroy_port - destroy an FC port
2095 * @vport: pointer to an lpfc virtual N_Port data structure. 2157 * @vport: pointer to an lpfc virtual N_Port data structure.
2096 * 2158 *
2097 * This routine destroys a FC port from the upper layer protocol. All the 2159 * This routine destroys a FC port from the upper layer protocol. All the
@@ -2116,7 +2178,7 @@ destroy_port(struct lpfc_vport *vport)
2116} 2178}
2117 2179
2118/** 2180/**
2119 * lpfc_get_instance: Get a unique integer ID. 2181 * lpfc_get_instance - Get a unique integer ID
2120 * 2182 *
2121 * This routine allocates a unique integer ID from lpfc_hba_index pool. It 2183 * This routine allocates a unique integer ID from lpfc_hba_index pool. It
2122 * uses the kernel idr facility to perform the task. 2184 * uses the kernel idr facility to perform the task.
@@ -2139,7 +2201,7 @@ lpfc_get_instance(void)
2139} 2201}
2140 2202
2141/** 2203/**
2142 * lpfc_scan_finished: method for SCSI layer to detect whether scan is done. 2204 * lpfc_scan_finished - method for SCSI layer to detect whether scan is done
2143 * @shost: pointer to SCSI host data structure. 2205 * @shost: pointer to SCSI host data structure.
2144 * @time: elapsed time of the scan in jiffies. 2206 * @time: elapsed time of the scan in jiffies.
2145 * 2207 *
@@ -2197,7 +2259,7 @@ finished:
2197} 2259}
2198 2260
2199/** 2261/**
2200 * lpfc_host_attrib_init: Initialize SCSI host attributes on a FC port. 2262 * lpfc_host_attrib_init - Initialize SCSI host attributes on a FC port
2201 * @shost: pointer to SCSI host data structure. 2263 * @shost: pointer to SCSI host data structure.
2202 * 2264 *
2203 * This routine initializes a given SCSI host attributes on a FC port. The 2265 * This routine initializes a given SCSI host attributes on a FC port. The
@@ -2252,7 +2314,7 @@ void lpfc_host_attrib_init(struct Scsi_Host *shost)
2252} 2314}
2253 2315
2254/** 2316/**
2255 * lpfc_enable_msix: Enable MSI-X interrupt mode. 2317 * lpfc_enable_msix - Enable MSI-X interrupt mode
2256 * @phba: pointer to lpfc hba data structure. 2318 * @phba: pointer to lpfc hba data structure.
2257 * 2319 *
2258 * This routine is invoked to enable the MSI-X interrupt vectors. The kernel 2320 * This routine is invoked to enable the MSI-X interrupt vectors. The kernel
@@ -2366,7 +2428,7 @@ msi_fail_out:
2366} 2428}
2367 2429
2368/** 2430/**
2369 * lpfc_disable_msix: Disable MSI-X interrupt mode. 2431 * lpfc_disable_msix - Disable MSI-X interrupt mode
2370 * @phba: pointer to lpfc hba data structure. 2432 * @phba: pointer to lpfc hba data structure.
2371 * 2433 *
2372 * This routine is invoked to release the MSI-X vectors and then disable the 2434 * This routine is invoked to release the MSI-X vectors and then disable the
@@ -2385,7 +2447,7 @@ lpfc_disable_msix(struct lpfc_hba *phba)
2385} 2447}
2386 2448
2387/** 2449/**
2388 * lpfc_enable_msi: Enable MSI interrupt mode. 2450 * lpfc_enable_msi - Enable MSI interrupt mode
2389 * @phba: pointer to lpfc hba data structure. 2451 * @phba: pointer to lpfc hba data structure.
2390 * 2452 *
2391 * This routine is invoked to enable the MSI interrupt mode. The kernel 2453 * This routine is invoked to enable the MSI interrupt mode. The kernel
@@ -2423,7 +2485,7 @@ lpfc_enable_msi(struct lpfc_hba *phba)
2423} 2485}
2424 2486
2425/** 2487/**
2426 * lpfc_disable_msi: Disable MSI interrupt mode. 2488 * lpfc_disable_msi - Disable MSI interrupt mode
2427 * @phba: pointer to lpfc hba data structure. 2489 * @phba: pointer to lpfc hba data structure.
2428 * 2490 *
2429 * This routine is invoked to disable the MSI interrupt mode. The driver 2491 * This routine is invoked to disable the MSI interrupt mode. The driver
@@ -2441,7 +2503,7 @@ lpfc_disable_msi(struct lpfc_hba *phba)
2441} 2503}
2442 2504
2443/** 2505/**
2444 * lpfc_log_intr_mode: Log the active interrupt mode 2506 * lpfc_log_intr_mode - Log the active interrupt mode
2445 * @phba: pointer to lpfc hba data structure. 2507 * @phba: pointer to lpfc hba data structure.
2446 * @intr_mode: active interrupt mode adopted. 2508 * @intr_mode: active interrupt mode adopted.
2447 * 2509 *
@@ -2490,7 +2552,7 @@ lpfc_stop_port(struct lpfc_hba *phba)
2490} 2552}
2491 2553
2492/** 2554/**
2493 * lpfc_enable_intr: Enable device interrupt. 2555 * lpfc_enable_intr - Enable device interrupt
2494 * @phba: pointer to lpfc hba data structure. 2556 * @phba: pointer to lpfc hba data structure.
2495 * 2557 *
2496 * This routine is invoked to enable device interrupt and associate driver's 2558 * This routine is invoked to enable device interrupt and associate driver's
@@ -2547,7 +2609,7 @@ lpfc_enable_intr(struct lpfc_hba *phba, uint32_t cfg_mode)
2547} 2609}
2548 2610
2549/** 2611/**
2550 * lpfc_disable_intr: Disable device interrupt. 2612 * lpfc_disable_intr - Disable device interrupt
2551 * @phba: pointer to lpfc hba data structure. 2613 * @phba: pointer to lpfc hba data structure.
2552 * 2614 *
2553 * This routine is invoked to disable device interrupt and disassociate the 2615 * This routine is invoked to disable device interrupt and disassociate the
@@ -2574,7 +2636,7 @@ lpfc_disable_intr(struct lpfc_hba *phba)
2574} 2636}
2575 2637
2576/** 2638/**
2577 * lpfc_pci_probe_one: lpfc PCI probe func to register device to PCI subsystem. 2639 * lpfc_pci_probe_one - lpfc PCI probe func to register device to PCI subsystem
2578 * @pdev: pointer to PCI device 2640 * @pdev: pointer to PCI device
2579 * @pid: pointer to PCI device identifier 2641 * @pid: pointer to PCI device identifier
2580 * 2642 *
@@ -3010,7 +3072,7 @@ out:
3010} 3072}
3011 3073
3012/** 3074/**
3013 * lpfc_pci_remove_one: lpfc PCI func to unregister device from PCI subsystem. 3075 * lpfc_pci_remove_one - lpfc PCI func to unregister device from PCI subsystem
3014 * @pdev: pointer to PCI device 3076 * @pdev: pointer to PCI device
3015 * 3077 *
3016 * This routine is to be registered to the kernel's PCI subsystem. When an 3078 * This routine is to be registered to the kernel's PCI subsystem. When an
@@ -3033,8 +3095,6 @@ lpfc_pci_remove_one(struct pci_dev *pdev)
3033 3095
3034 lpfc_free_sysfs_attr(vport); 3096 lpfc_free_sysfs_attr(vport);
3035 3097
3036 kthread_stop(phba->worker_thread);
3037
3038 /* Release all the vports against this physical port */ 3098 /* Release all the vports against this physical port */
3039 vports = lpfc_create_vport_work_array(phba); 3099 vports = lpfc_create_vport_work_array(phba);
3040 if (vports != NULL) 3100 if (vports != NULL)
@@ -3052,7 +3112,12 @@ lpfc_pci_remove_one(struct pci_dev *pdev)
3052 * clears the rings, discards all mailbox commands, and resets 3112 * clears the rings, discards all mailbox commands, and resets
3053 * the HBA. 3113 * the HBA.
3054 */ 3114 */
3115
3116 /* HBA interrupt will be diabled after this call */
3055 lpfc_sli_hba_down(phba); 3117 lpfc_sli_hba_down(phba);
3118 /* Stop kthread signal shall trigger work_done one more time */
3119 kthread_stop(phba->worker_thread);
3120 /* Final cleanup of txcmplq and reset the HBA */
3056 lpfc_sli_brdrestart(phba); 3121 lpfc_sli_brdrestart(phba);
3057 3122
3058 lpfc_stop_phba_timers(phba); 3123 lpfc_stop_phba_timers(phba);
@@ -3095,7 +3160,7 @@ lpfc_pci_remove_one(struct pci_dev *pdev)
3095} 3160}
3096 3161
3097/** 3162/**
3098 * lpfc_pci_suspend_one: lpfc PCI func to suspend device for power management. 3163 * lpfc_pci_suspend_one - lpfc PCI func to suspend device for power management
3099 * @pdev: pointer to PCI device 3164 * @pdev: pointer to PCI device
3100 * @msg: power management message 3165 * @msg: power management message
3101 * 3166 *
@@ -3139,7 +3204,7 @@ lpfc_pci_suspend_one(struct pci_dev *pdev, pm_message_t msg)
3139} 3204}
3140 3205
3141/** 3206/**
3142 * lpfc_pci_resume_one: lpfc PCI func to resume device for power management. 3207 * lpfc_pci_resume_one - lpfc PCI func to resume device for power management
3143 * @pdev: pointer to PCI device 3208 * @pdev: pointer to PCI device
3144 * 3209 *
3145 * This routine is to be registered to the kernel's PCI subsystem to support 3210 * This routine is to be registered to the kernel's PCI subsystem to support
@@ -3204,7 +3269,7 @@ lpfc_pci_resume_one(struct pci_dev *pdev)
3204} 3269}
3205 3270
3206/** 3271/**
3207 * lpfc_io_error_detected: Driver method for handling PCI I/O error detected. 3272 * lpfc_io_error_detected - Driver method for handling PCI I/O error detected
3208 * @pdev: pointer to PCI device. 3273 * @pdev: pointer to PCI device.
3209 * @state: the current PCI connection state. 3274 * @state: the current PCI connection state.
3210 * 3275 *
@@ -3254,7 +3319,7 @@ static pci_ers_result_t lpfc_io_error_detected(struct pci_dev *pdev,
3254} 3319}
3255 3320
3256/** 3321/**
3257 * lpfc_io_slot_reset: Restart a PCI device from scratch. 3322 * lpfc_io_slot_reset - Restart a PCI device from scratch
3258 * @pdev: pointer to PCI device. 3323 * @pdev: pointer to PCI device.
3259 * 3324 *
3260 * This routine is registered to the PCI subsystem for error handling. This is 3325 * This routine is registered to the PCI subsystem for error handling. This is
@@ -3313,7 +3378,7 @@ static pci_ers_result_t lpfc_io_slot_reset(struct pci_dev *pdev)
3313} 3378}
3314 3379
3315/** 3380/**
3316 * lpfc_io_resume: Resume PCI I/O operation. 3381 * lpfc_io_resume - Resume PCI I/O operation
3317 * @pdev: pointer to PCI device 3382 * @pdev: pointer to PCI device
3318 * 3383 *
3319 * This routine is registered to the PCI subsystem for error handling. It is 3384 * This routine is registered to the PCI subsystem for error handling. It is
@@ -3426,7 +3491,7 @@ static struct pci_driver lpfc_driver = {
3426}; 3491};
3427 3492
3428/** 3493/**
3429 * lpfc_init: lpfc module initialization routine. 3494 * lpfc_init - lpfc module initialization routine
3430 * 3495 *
3431 * This routine is to be invoked when the lpfc module is loaded into the 3496 * This routine is to be invoked when the lpfc module is loaded into the
3432 * kernel. The special kernel macro module_init() is used to indicate the 3497 * kernel. The special kernel macro module_init() is used to indicate the
@@ -3472,7 +3537,7 @@ lpfc_init(void)
3472} 3537}
3473 3538
3474/** 3539/**
3475 * lpfc_exit: lpfc module removal routine. 3540 * lpfc_exit - lpfc module removal routine
3476 * 3541 *
3477 * This routine is invoked when the lpfc module is removed from the kernel. 3542 * This routine is invoked when the lpfc module is removed from the kernel.
3478 * The special kernel macro module_exit() is used to indicate the role of 3543 * The special kernel macro module_exit() is used to indicate the role of
diff --git a/drivers/scsi/lpfc/lpfc_logmsg.h b/drivers/scsi/lpfc/lpfc_logmsg.h
index a85b7c196bbc..1aa85709b012 100644
--- a/drivers/scsi/lpfc/lpfc_logmsg.h
+++ b/drivers/scsi/lpfc/lpfc_logmsg.h
@@ -27,7 +27,7 @@
27#define LOG_FCP 0x40 /* FCP traffic history */ 27#define LOG_FCP 0x40 /* FCP traffic history */
28#define LOG_NODE 0x80 /* Node table events */ 28#define LOG_NODE 0x80 /* Node table events */
29#define LOG_TEMP 0x100 /* Temperature sensor events */ 29#define LOG_TEMP 0x100 /* Temperature sensor events */
30#define LOG_BG 0x200 /* BlockBuard events */ 30#define LOG_BG 0x200 /* BlockGuard events */
31#define LOG_MISC 0x400 /* Miscellaneous events */ 31#define LOG_MISC 0x400 /* Miscellaneous events */
32#define LOG_SLI 0x800 /* SLI events */ 32#define LOG_SLI 0x800 /* SLI events */
33#define LOG_FCP_ERROR 0x1000 /* log errors, not underruns */ 33#define LOG_FCP_ERROR 0x1000 /* log errors, not underruns */
diff --git a/drivers/scsi/lpfc/lpfc_mbox.c b/drivers/scsi/lpfc/lpfc_mbox.c
index 34eeb086a667..134fc7fc2127 100644
--- a/drivers/scsi/lpfc/lpfc_mbox.c
+++ b/drivers/scsi/lpfc/lpfc_mbox.c
@@ -39,7 +39,7 @@
39#include "lpfc_compat.h" 39#include "lpfc_compat.h"
40 40
41/** 41/**
42 * lpfc_dump_mem: Prepare a mailbox command for retrieving HBA's VPD memory. 42 * lpfc_dump_mem - Prepare a mailbox command for retrieving HBA's VPD memory
43 * @phba: pointer to lpfc hba data structure. 43 * @phba: pointer to lpfc hba data structure.
44 * @pmb: pointer to the driver internal queue element for mailbox command. 44 * @pmb: pointer to the driver internal queue element for mailbox command.
45 * @offset: offset for dumping VPD memory mailbox command. 45 * @offset: offset for dumping VPD memory mailbox command.
@@ -77,9 +77,10 @@ lpfc_dump_mem(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmb, uint16_t offset)
77} 77}
78 78
79/** 79/**
80 * lpfc_dump_mem: Prepare a mailbox command for retrieving wakeup params. 80 * lpfc_dump_wakeup_param - Prepare mailbox command for retrieving wakeup params
81 * @phba: pointer to lpfc hba data structure. 81 * @phba: pointer to lpfc hba data structure.
82 * @pmb: pointer to the driver internal queue element for mailbox command. 82 * @pmb: pointer to the driver internal queue element for mailbox command.
83 *
83 * This function create a dump memory mailbox command to dump wake up 84 * This function create a dump memory mailbox command to dump wake up
84 * parameters. 85 * parameters.
85 */ 86 */
@@ -109,7 +110,7 @@ lpfc_dump_wakeup_param(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
109} 110}
110 111
111/** 112/**
112 * lpfc_read_nv: Prepare a mailbox command for reading HBA's NVRAM param. 113 * lpfc_read_nv - Prepare a mailbox command for reading HBA's NVRAM param
113 * @phba: pointer to lpfc hba data structure. 114 * @phba: pointer to lpfc hba data structure.
114 * @pmb: pointer to the driver internal queue element for mailbox command. 115 * @pmb: pointer to the driver internal queue element for mailbox command.
115 * 116 *
@@ -132,7 +133,7 @@ lpfc_read_nv(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmb)
132} 133}
133 134
134/** 135/**
135 * lpfc_config_async: Prepare a mailbox command for enabling HBA async event. 136 * lpfc_config_async - Prepare a mailbox command for enabling HBA async event
136 * @phba: pointer to lpfc hba data structure. 137 * @phba: pointer to lpfc hba data structure.
137 * @pmb: pointer to the driver internal queue element for mailbox command. 138 * @pmb: pointer to the driver internal queue element for mailbox command.
138 * @ring: ring number for the asynchronous event to be configured. 139 * @ring: ring number for the asynchronous event to be configured.
@@ -159,7 +160,7 @@ lpfc_config_async(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmb,
159} 160}
160 161
161/** 162/**
162 * lpfc_heart_beat: Prepare a mailbox command for heart beat. 163 * lpfc_heart_beat - Prepare a mailbox command for heart beat
163 * @phba: pointer to lpfc hba data structure. 164 * @phba: pointer to lpfc hba data structure.
164 * @pmb: pointer to the driver internal queue element for mailbox command. 165 * @pmb: pointer to the driver internal queue element for mailbox command.
165 * 166 *
@@ -184,7 +185,7 @@ lpfc_heart_beat(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmb)
184} 185}
185 186
186/** 187/**
187 * lpfc_read_la: Prepare a mailbox command for reading HBA link attention. 188 * lpfc_read_la - Prepare a mailbox command for reading HBA link attention
188 * @phba: pointer to lpfc hba data structure. 189 * @phba: pointer to lpfc hba data structure.
189 * @pmb: pointer to the driver internal queue element for mailbox command. 190 * @pmb: pointer to the driver internal queue element for mailbox command.
190 * @mp: DMA buffer memory for reading the link attention information into. 191 * @mp: DMA buffer memory for reading the link attention information into.
@@ -228,7 +229,7 @@ lpfc_read_la(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmb, struct lpfc_dmabuf *mp)
228} 229}
229 230
230/** 231/**
231 * lpfc_clear_la: Prepare a mailbox command for clearing HBA link attention. 232 * lpfc_clear_la - Prepare a mailbox command for clearing HBA link attention
232 * @phba: pointer to lpfc hba data structure. 233 * @phba: pointer to lpfc hba data structure.
233 * @pmb: pointer to the driver internal queue element for mailbox command. 234 * @pmb: pointer to the driver internal queue element for mailbox command.
234 * 235 *
@@ -257,7 +258,7 @@ lpfc_clear_la(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmb)
257} 258}
258 259
259/** 260/**
260 * lpfc_config_link: Prepare a mailbox command for configuring link on a HBA. 261 * lpfc_config_link - Prepare a mailbox command for configuring link on a HBA
261 * @phba: pointer to lpfc hba data structure. 262 * @phba: pointer to lpfc hba data structure.
262 * @pmb: pointer to the driver internal queue element for mailbox command. 263 * @pmb: pointer to the driver internal queue element for mailbox command.
263 * 264 *
@@ -305,7 +306,7 @@ lpfc_config_link(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmb)
305} 306}
306 307
307/** 308/**
308 * lpfc_config_msi: Prepare a mailbox command for configuring msi-x. 309 * lpfc_config_msi - Prepare a mailbox command for configuring msi-x
309 * @phba: pointer to lpfc hba data structure. 310 * @phba: pointer to lpfc hba data structure.
310 * @pmb: pointer to the driver internal queue element for mailbox command. 311 * @pmb: pointer to the driver internal queue element for mailbox command.
311 * 312 *
@@ -383,7 +384,7 @@ lpfc_config_msi(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
383} 384}
384 385
385/** 386/**
386 * lpfc_init_link: Prepare a mailbox command for initialize link on a HBA. 387 * lpfc_init_link - Prepare a mailbox command for initialize link on a HBA
387 * @phba: pointer to lpfc hba data structure. 388 * @phba: pointer to lpfc hba data structure.
388 * @pmb: pointer to the driver internal queue element for mailbox command. 389 * @pmb: pointer to the driver internal queue element for mailbox command.
389 * @topology: the link topology for the link to be initialized to. 390 * @topology: the link topology for the link to be initialized to.
@@ -463,7 +464,7 @@ lpfc_init_link(struct lpfc_hba * phba,
463} 464}
464 465
465/** 466/**
466 * lpfc_read_sparam: Prepare a mailbox command for reading HBA parameters. 467 * lpfc_read_sparam - Prepare a mailbox command for reading HBA parameters
467 * @phba: pointer to lpfc hba data structure. 468 * @phba: pointer to lpfc hba data structure.
468 * @pmb: pointer to the driver internal queue element for mailbox command. 469 * @pmb: pointer to the driver internal queue element for mailbox command.
469 * @vpi: virtual N_Port identifier. 470 * @vpi: virtual N_Port identifier.
@@ -523,7 +524,7 @@ lpfc_read_sparam(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb, int vpi)
523} 524}
524 525
525/** 526/**
526 * lpfc_unreg_did: Prepare a mailbox command for unregistering DID. 527 * lpfc_unreg_did - Prepare a mailbox command for unregistering DID
527 * @phba: pointer to lpfc hba data structure. 528 * @phba: pointer to lpfc hba data structure.
528 * @vpi: virtual N_Port identifier. 529 * @vpi: virtual N_Port identifier.
529 * @did: remote port identifier. 530 * @did: remote port identifier.
@@ -555,7 +556,7 @@ lpfc_unreg_did(struct lpfc_hba * phba, uint16_t vpi, uint32_t did,
555} 556}
556 557
557/** 558/**
558 * lpfc_read_config: Prepare a mailbox command for reading HBA configuration. 559 * lpfc_read_config - Prepare a mailbox command for reading HBA configuration
559 * @phba: pointer to lpfc hba data structure. 560 * @phba: pointer to lpfc hba data structure.
560 * @pmb: pointer to the driver internal queue element for mailbox command. 561 * @pmb: pointer to the driver internal queue element for mailbox command.
561 * 562 *
@@ -581,7 +582,7 @@ lpfc_read_config(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmb)
581} 582}
582 583
583/** 584/**
584 * lpfc_read_lnk_stat: Prepare a mailbox command for reading HBA link stats. 585 * lpfc_read_lnk_stat - Prepare a mailbox command for reading HBA link stats
585 * @phba: pointer to lpfc hba data structure. 586 * @phba: pointer to lpfc hba data structure.
586 * @pmb: pointer to the driver internal queue element for mailbox command. 587 * @pmb: pointer to the driver internal queue element for mailbox command.
587 * 588 *
@@ -606,7 +607,7 @@ lpfc_read_lnk_stat(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmb)
606} 607}
607 608
608/** 609/**
609 * lpfc_reg_login: Prepare a mailbox command for registering remote login. 610 * lpfc_reg_login - Prepare a mailbox command for registering remote login
610 * @phba: pointer to lpfc hba data structure. 611 * @phba: pointer to lpfc hba data structure.
611 * @vpi: virtual N_Port identifier. 612 * @vpi: virtual N_Port identifier.
612 * @did: remote port identifier. 613 * @did: remote port identifier.
@@ -677,7 +678,7 @@ lpfc_reg_login(struct lpfc_hba *phba, uint16_t vpi, uint32_t did,
677} 678}
678 679
679/** 680/**
680 * lpfc_unreg_login: Prepare a mailbox command for unregistering remote login. 681 * lpfc_unreg_login - Prepare a mailbox command for unregistering remote login
681 * @phba: pointer to lpfc hba data structure. 682 * @phba: pointer to lpfc hba data structure.
682 * @vpi: virtual N_Port identifier. 683 * @vpi: virtual N_Port identifier.
683 * @rpi: remote port identifier 684 * @rpi: remote port identifier
@@ -709,7 +710,7 @@ lpfc_unreg_login(struct lpfc_hba *phba, uint16_t vpi, uint32_t rpi,
709} 710}
710 711
711/** 712/**
712 * lpfc_reg_vpi: Prepare a mailbox command for registering vport identifier. 713 * lpfc_reg_vpi - Prepare a mailbox command for registering vport identifier
713 * @phba: pointer to lpfc hba data structure. 714 * @phba: pointer to lpfc hba data structure.
714 * @vpi: virtual N_Port identifier. 715 * @vpi: virtual N_Port identifier.
715 * @sid: Fibre Channel S_ID (N_Port_ID assigned to a virtual N_Port). 716 * @sid: Fibre Channel S_ID (N_Port_ID assigned to a virtual N_Port).
@@ -741,7 +742,7 @@ lpfc_reg_vpi(struct lpfc_hba *phba, uint16_t vpi, uint32_t sid,
741} 742}
742 743
743/** 744/**
744 * lpfc_unreg_vpi: Prepare a mailbox command for unregistering vport id. 745 * lpfc_unreg_vpi - Prepare a mailbox command for unregistering vport id
745 * @phba: pointer to lpfc hba data structure. 746 * @phba: pointer to lpfc hba data structure.
746 * @vpi: virtual N_Port identifier. 747 * @vpi: virtual N_Port identifier.
747 * @pmb: pointer to the driver internal queue element for mailbox command. 748 * @pmb: pointer to the driver internal queue element for mailbox command.
@@ -771,7 +772,7 @@ lpfc_unreg_vpi(struct lpfc_hba *phba, uint16_t vpi, LPFC_MBOXQ_t *pmb)
771} 772}
772 773
773/** 774/**
774 * lpfc_config_pcb_setup: Set up IOCB rings in the Port Control Block (PCB) 775 * lpfc_config_pcb_setup - Set up IOCB rings in the Port Control Block (PCB)
775 * @phba: pointer to lpfc hba data structure. 776 * @phba: pointer to lpfc hba data structure.
776 * 777 *
777 * This routine sets up and initializes the IOCB rings in the Port Control 778 * This routine sets up and initializes the IOCB rings in the Port Control
@@ -835,7 +836,7 @@ lpfc_config_pcb_setup(struct lpfc_hba * phba)
835} 836}
836 837
837/** 838/**
838 * lpfc_read_rev: Prepare a mailbox command for reading HBA revision. 839 * lpfc_read_rev - Prepare a mailbox command for reading HBA revision
839 * @phba: pointer to lpfc hba data structure. 840 * @phba: pointer to lpfc hba data structure.
840 * @pmb: pointer to the driver internal queue element for mailbox command. 841 * @pmb: pointer to the driver internal queue element for mailbox command.
841 * 842 *
@@ -861,7 +862,7 @@ lpfc_read_rev(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmb)
861} 862}
862 863
863/** 864/**
864 * lpfc_build_hbq_profile2: Set up the HBQ Selection Profile 2. 865 * lpfc_build_hbq_profile2 - Set up the HBQ Selection Profile 2
865 * @hbqmb: pointer to the HBQ configuration data structure in mailbox command. 866 * @hbqmb: pointer to the HBQ configuration data structure in mailbox command.
866 * @hbq_desc: pointer to the HBQ selection profile descriptor. 867 * @hbq_desc: pointer to the HBQ selection profile descriptor.
867 * 868 *
@@ -880,7 +881,7 @@ lpfc_build_hbq_profile2(struct config_hbq_var *hbqmb,
880} 881}
881 882
882/** 883/**
883 * lpfc_build_hbq_profile3: Set up the HBQ Selection Profile 3. 884 * lpfc_build_hbq_profile3 - Set up the HBQ Selection Profile 3
884 * @hbqmb: pointer to the HBQ configuration data structure in mailbox command. 885 * @hbqmb: pointer to the HBQ configuration data structure in mailbox command.
885 * @hbq_desc: pointer to the HBQ selection profile descriptor. 886 * @hbq_desc: pointer to the HBQ selection profile descriptor.
886 * 887 *
@@ -902,7 +903,7 @@ lpfc_build_hbq_profile3(struct config_hbq_var *hbqmb,
902} 903}
903 904
904/** 905/**
905 * lpfc_build_hbq_profile5: Set up the HBQ Selection Profile 5. 906 * lpfc_build_hbq_profile5 - Set up the HBQ Selection Profile 5
906 * @hbqmb: pointer to the HBQ configuration data structure in mailbox command. 907 * @hbqmb: pointer to the HBQ configuration data structure in mailbox command.
907 * @hbq_desc: pointer to the HBQ selection profile descriptor. 908 * @hbq_desc: pointer to the HBQ selection profile descriptor.
908 * 909 *
@@ -925,7 +926,7 @@ lpfc_build_hbq_profile5(struct config_hbq_var *hbqmb,
925} 926}
926 927
927/** 928/**
928 * lpfc_config_hbq: Prepare a mailbox command for configuring an HBQ. 929 * lpfc_config_hbq - Prepare a mailbox command for configuring an HBQ
929 * @phba: pointer to lpfc hba data structure. 930 * @phba: pointer to lpfc hba data structure.
930 * @id: HBQ identifier. 931 * @id: HBQ identifier.
931 * @hbq_desc: pointer to the HBA descriptor data structure. 932 * @hbq_desc: pointer to the HBA descriptor data structure.
@@ -999,7 +1000,7 @@ lpfc_config_hbq(struct lpfc_hba *phba, uint32_t id,
999} 1000}
1000 1001
1001/** 1002/**
1002 * lpfc_config_ring: Prepare a mailbox command for configuring an IOCB ring. 1003 * lpfc_config_ring - Prepare a mailbox command for configuring an IOCB ring
1003 * @phba: pointer to lpfc hba data structure. 1004 * @phba: pointer to lpfc hba data structure.
1004 * @ring: 1005 * @ring:
1005 * @pmb: pointer to the driver internal queue element for mailbox command. 1006 * @pmb: pointer to the driver internal queue element for mailbox command.
@@ -1057,7 +1058,7 @@ lpfc_config_ring(struct lpfc_hba * phba, int ring, LPFC_MBOXQ_t * pmb)
1057} 1058}
1058 1059
1059/** 1060/**
1060 * lpfc_config_port: Prepare a mailbox command for configuring port. 1061 * lpfc_config_port - Prepare a mailbox command for configuring port
1061 * @phba: pointer to lpfc hba data structure. 1062 * @phba: pointer to lpfc hba data structure.
1062 * @pmb: pointer to the driver internal queue element for mailbox command. 1063 * @pmb: pointer to the driver internal queue element for mailbox command.
1063 * 1064 *
@@ -1227,7 +1228,7 @@ lpfc_config_port(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
1227} 1228}
1228 1229
1229/** 1230/**
1230 * lpfc_kill_board: Prepare a mailbox command for killing board. 1231 * lpfc_kill_board - Prepare a mailbox command for killing board
1231 * @phba: pointer to lpfc hba data structure. 1232 * @phba: pointer to lpfc hba data structure.
1232 * @pmb: pointer to the driver internal queue element for mailbox command. 1233 * @pmb: pointer to the driver internal queue element for mailbox command.
1233 * 1234 *
@@ -1253,7 +1254,7 @@ lpfc_kill_board(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmb)
1253} 1254}
1254 1255
1255/** 1256/**
1256 * lpfc_mbox_put: Put a mailbox cmd into the tail of driver's mailbox queue. 1257 * lpfc_mbox_put - Put a mailbox cmd into the tail of driver's mailbox queue
1257 * @phba: pointer to lpfc hba data structure. 1258 * @phba: pointer to lpfc hba data structure.
1258 * @mbq: pointer to the driver internal queue element for mailbox command. 1259 * @mbq: pointer to the driver internal queue element for mailbox command.
1259 * 1260 *
@@ -1277,7 +1278,7 @@ lpfc_mbox_put(struct lpfc_hba * phba, LPFC_MBOXQ_t * mbq)
1277} 1278}
1278 1279
1279/** 1280/**
1280 * lpfc_mbox_get: Remove a mailbox cmd from the head of driver's mailbox queue. 1281 * lpfc_mbox_get - Remove a mailbox cmd from the head of driver's mailbox queue
1281 * @phba: pointer to lpfc hba data structure. 1282 * @phba: pointer to lpfc hba data structure.
1282 * 1283 *
1283 * Driver maintains a internal mailbox command queue implemented as a linked 1284 * Driver maintains a internal mailbox command queue implemented as a linked
@@ -1304,7 +1305,7 @@ lpfc_mbox_get(struct lpfc_hba * phba)
1304} 1305}
1305 1306
1306/** 1307/**
1307 * lpfc_mbox_cmpl_put: Put mailbox command into mailbox command complete list. 1308 * lpfc_mbox_cmpl_put - Put mailbox command into mailbox command complete list
1308 * @phba: pointer to lpfc hba data structure. 1309 * @phba: pointer to lpfc hba data structure.
1309 * @mbq: pointer to the driver internal queue element for mailbox command. 1310 * @mbq: pointer to the driver internal queue element for mailbox command.
1310 * 1311 *
@@ -1327,7 +1328,7 @@ lpfc_mbox_cmpl_put(struct lpfc_hba * phba, LPFC_MBOXQ_t * mbq)
1327} 1328}
1328 1329
1329/** 1330/**
1330 * lpfc_mbox_tmo_val: Retrieve mailbox command timeout value. 1331 * lpfc_mbox_tmo_val - Retrieve mailbox command timeout value
1331 * @phba: pointer to lpfc hba data structure. 1332 * @phba: pointer to lpfc hba data structure.
1332 * @cmd: mailbox command code. 1333 * @cmd: mailbox command code.
1333 * 1334 *
diff --git a/drivers/scsi/lpfc/lpfc_mem.c b/drivers/scsi/lpfc/lpfc_mem.c
index a4bba2069248..35a976733398 100644
--- a/drivers/scsi/lpfc/lpfc_mem.c
+++ b/drivers/scsi/lpfc/lpfc_mem.c
@@ -41,7 +41,7 @@
41 41
42 42
43/** 43/**
44 * lpfc_mem_alloc: create and allocate all PCI and memory pools 44 * lpfc_mem_alloc - create and allocate all PCI and memory pools
45 * @phba: HBA to allocate pools for 45 * @phba: HBA to allocate pools for
46 * 46 *
47 * Description: Creates and allocates PCI pools lpfc_scsi_dma_buf_pool, 47 * Description: Creates and allocates PCI pools lpfc_scsi_dma_buf_pool,
@@ -136,12 +136,12 @@ lpfc_mem_alloc(struct lpfc_hba * phba)
136} 136}
137 137
138/** 138/**
139 * lpfc_mem_free: Frees all PCI and memory allocated by lpfc_mem_alloc 139 * lpfc_mem_free - Frees all PCI and memory allocated by lpfc_mem_alloc
140 * @phba: HBA to free memory for 140 * @phba: HBA to free memory for
141 * 141 *
142 * Description: Frees PCI pools lpfc_scsi_dma_buf_pool, lpfc_mbuf_pool, 142 * Description: Frees PCI pools lpfc_scsi_dma_buf_pool, lpfc_mbuf_pool,
143 * lpfc_hbq_pool. Frees kmalloc-backed mempools for LPFC_MBOXQ_t and 143 * lpfc_hbq_pool. Frees kmalloc-backed mempools for LPFC_MBOXQ_t and
144 * lpfc_nodelist. Also frees the VPI bitmask. 144 * lpfc_nodelist. Also frees the VPI bitmask
145 * 145 *
146 * Returns: None 146 * Returns: None
147 **/ 147 **/
@@ -212,7 +212,7 @@ lpfc_mem_free(struct lpfc_hba * phba)
212} 212}
213 213
214/** 214/**
215 * lpfc_mbuf_alloc: Allocate an mbuf from the lpfc_mbuf_pool PCI pool 215 * lpfc_mbuf_alloc - Allocate an mbuf from the lpfc_mbuf_pool PCI pool
216 * @phba: HBA which owns the pool to allocate from 216 * @phba: HBA which owns the pool to allocate from
217 * @mem_flags: indicates if this is a priority (MEM_PRI) allocation 217 * @mem_flags: indicates if this is a priority (MEM_PRI) allocation
218 * @handle: used to return the DMA-mapped address of the mbuf 218 * @handle: used to return the DMA-mapped address of the mbuf
@@ -249,7 +249,7 @@ lpfc_mbuf_alloc(struct lpfc_hba *phba, int mem_flags, dma_addr_t *handle)
249} 249}
250 250
251/** 251/**
252 * __lpfc_mem_free: Free an mbuf from the lpfc_mbuf_pool PCI pool (locked) 252 * __lpfc_mbuf_free - Free an mbuf from the lpfc_mbuf_pool PCI pool (locked)
253 * @phba: HBA which owns the pool to return to 253 * @phba: HBA which owns the pool to return to
254 * @virt: mbuf to free 254 * @virt: mbuf to free
255 * @dma: the DMA-mapped address of the lpfc_mbuf_pool to be freed 255 * @dma: the DMA-mapped address of the lpfc_mbuf_pool to be freed
@@ -278,7 +278,7 @@ __lpfc_mbuf_free(struct lpfc_hba * phba, void *virt, dma_addr_t dma)
278} 278}
279 279
280/** 280/**
281 * lpfc_mem_free: Free an mbuf from the lpfc_mbuf_pool PCI pool (unlocked) 281 * lpfc_mbuf_free - Free an mbuf from the lpfc_mbuf_pool PCI pool (unlocked)
282 * @phba: HBA which owns the pool to return to 282 * @phba: HBA which owns the pool to return to
283 * @virt: mbuf to free 283 * @virt: mbuf to free
284 * @dma: the DMA-mapped address of the lpfc_mbuf_pool to be freed 284 * @dma: the DMA-mapped address of the lpfc_mbuf_pool to be freed
@@ -291,7 +291,6 @@ __lpfc_mbuf_free(struct lpfc_hba * phba, void *virt, dma_addr_t dma)
291 * Returns: None 291 * Returns: None
292 **/ 292 **/
293void 293void
294
295lpfc_mbuf_free(struct lpfc_hba * phba, void *virt, dma_addr_t dma) 294lpfc_mbuf_free(struct lpfc_hba * phba, void *virt, dma_addr_t dma)
296{ 295{
297 unsigned long iflags; 296 unsigned long iflags;
@@ -303,7 +302,7 @@ lpfc_mbuf_free(struct lpfc_hba * phba, void *virt, dma_addr_t dma)
303} 302}
304 303
305/** 304/**
306 * lpfc_els_hbq_alloc: Allocate an HBQ buffer 305 * lpfc_els_hbq_alloc - Allocate an HBQ buffer
307 * @phba: HBA to allocate HBQ buffer for 306 * @phba: HBA to allocate HBQ buffer for
308 * 307 *
309 * Description: Allocates a DMA-mapped HBQ buffer from the lpfc_hbq_pool PCI 308 * Description: Allocates a DMA-mapped HBQ buffer from the lpfc_hbq_pool PCI
@@ -335,7 +334,7 @@ lpfc_els_hbq_alloc(struct lpfc_hba *phba)
335} 334}
336 335
337/** 336/**
338 * lpfc_mem_hbq_free: Frees an HBQ buffer allocated with lpfc_els_hbq_alloc 337 * lpfc_mem_hbq_free - Frees an HBQ buffer allocated with lpfc_els_hbq_alloc
339 * @phba: HBA buffer was allocated for 338 * @phba: HBA buffer was allocated for
340 * @hbqbp: HBQ container returned by lpfc_els_hbq_alloc 339 * @hbqbp: HBQ container returned by lpfc_els_hbq_alloc
341 * 340 *
@@ -355,7 +354,7 @@ lpfc_els_hbq_free(struct lpfc_hba *phba, struct hbq_dmabuf *hbqbp)
355} 354}
356 355
357/** 356/**
358 * lpfc_in_buf_free: Free a DMA buffer 357 * lpfc_in_buf_free - Free a DMA buffer
359 * @phba: HBA buffer is associated with 358 * @phba: HBA buffer is associated with
360 * @mp: Buffer to free 359 * @mp: Buffer to free
361 * 360 *
diff --git a/drivers/scsi/lpfc/lpfc_nportdisc.c b/drivers/scsi/lpfc/lpfc_nportdisc.c
index 8f548adae9cc..08cdc77af41c 100644
--- a/drivers/scsi/lpfc/lpfc_nportdisc.c
+++ b/drivers/scsi/lpfc/lpfc_nportdisc.c
@@ -192,7 +192,6 @@ lpfc_els_abort(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp)
192 struct lpfc_sli *psli = &phba->sli; 192 struct lpfc_sli *psli = &phba->sli;
193 struct lpfc_sli_ring *pring = &psli->ring[LPFC_ELS_RING]; 193 struct lpfc_sli_ring *pring = &psli->ring[LPFC_ELS_RING];
194 struct lpfc_iocbq *iocb, *next_iocb; 194 struct lpfc_iocbq *iocb, *next_iocb;
195 IOCB_t *cmd;
196 195
197 /* Abort outstanding I/O on NPort <nlp_DID> */ 196 /* Abort outstanding I/O on NPort <nlp_DID> */
198 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_DISCOVERY, 197 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_DISCOVERY,
@@ -223,19 +222,10 @@ lpfc_els_abort(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp)
223 } 222 }
224 spin_unlock_irq(&phba->hbalock); 223 spin_unlock_irq(&phba->hbalock);
225 224
226 while (!list_empty(&completions)) { 225 /* Cancel all the IOCBs from the completions list */
227 iocb = list_get_first(&completions, struct lpfc_iocbq, list); 226 lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT,
228 cmd = &iocb->iocb; 227 IOERR_SLI_ABORTED);
229 list_del_init(&iocb->list); 228
230
231 if (!iocb->iocb_cmpl)
232 lpfc_sli_release_iocbq(phba, iocb);
233 else {
234 cmd->ulpStatus = IOSTAT_LOCAL_REJECT;
235 cmd->un.ulpWord[4] = IOERR_SLI_ABORTED;
236 (iocb->iocb_cmpl) (phba, iocb, iocb);
237 }
238 }
239 lpfc_cancel_retry_delay_tmo(phba->pport, ndlp); 229 lpfc_cancel_retry_delay_tmo(phba->pport, ndlp);
240 return 0; 230 return 0;
241} 231}
diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c
index b1bd3fc7bae8..167b66dd34c7 100644
--- a/drivers/scsi/lpfc/lpfc_scsi.c
+++ b/drivers/scsi/lpfc/lpfc_scsi.c
@@ -112,7 +112,7 @@ lpfc_debug_save_dif(struct scsi_cmnd *cmnd)
112} 112}
113 113
114/** 114/**
115 * lpfc_update_stats: Update statistical data for the command completion. 115 * lpfc_update_stats - Update statistical data for the command completion
116 * @phba: Pointer to HBA object. 116 * @phba: Pointer to HBA object.
117 * @lpfc_cmd: lpfc scsi command object pointer. 117 * @lpfc_cmd: lpfc scsi command object pointer.
118 * 118 *
@@ -165,8 +165,7 @@ lpfc_update_stats(struct lpfc_hba *phba, struct lpfc_scsi_buf *lpfc_cmd)
165} 165}
166 166
167/** 167/**
168 * lpfc_send_sdev_queuedepth_change_event: Posts a queuedepth change 168 * lpfc_send_sdev_queuedepth_change_event - Posts a queuedepth change event
169 * event.
170 * @phba: Pointer to HBA context object. 169 * @phba: Pointer to HBA context object.
171 * @vport: Pointer to vport object. 170 * @vport: Pointer to vport object.
172 * @ndlp: Pointer to FC node associated with the target. 171 * @ndlp: Pointer to FC node associated with the target.
@@ -220,7 +219,7 @@ lpfc_send_sdev_queuedepth_change_event(struct lpfc_hba *phba,
220} 219}
221 220
222/** 221/**
223 * lpfc_rampdown_queue_depth: Post RAMP_DOWN_QUEUE event to worker thread. 222 * lpfc_rampdown_queue_depth - Post RAMP_DOWN_QUEUE event to worker thread
224 * @phba: The Hba for which this call is being executed. 223 * @phba: The Hba for which this call is being executed.
225 * 224 *
226 * This routine is called when there is resource error in driver or firmware. 225 * This routine is called when there is resource error in driver or firmware.
@@ -261,7 +260,7 @@ lpfc_rampdown_queue_depth(struct lpfc_hba *phba)
261} 260}
262 261
263/** 262/**
264 * lpfc_rampup_queue_depth: Post RAMP_UP_QUEUE event for worker thread. 263 * lpfc_rampup_queue_depth - Post RAMP_UP_QUEUE event for worker thread
265 * @phba: The Hba for which this call is being executed. 264 * @phba: The Hba for which this call is being executed.
266 * 265 *
267 * This routine post WORKER_RAMP_UP_QUEUE event for @phba vport. This routine 266 * This routine post WORKER_RAMP_UP_QUEUE event for @phba vport. This routine
@@ -273,14 +272,14 @@ lpfc_rampdown_queue_depth(struct lpfc_hba *phba)
273 **/ 272 **/
274static inline void 273static inline void
275lpfc_rampup_queue_depth(struct lpfc_vport *vport, 274lpfc_rampup_queue_depth(struct lpfc_vport *vport,
276 struct scsi_device *sdev) 275 uint32_t queue_depth)
277{ 276{
278 unsigned long flags; 277 unsigned long flags;
279 struct lpfc_hba *phba = vport->phba; 278 struct lpfc_hba *phba = vport->phba;
280 uint32_t evt_posted; 279 uint32_t evt_posted;
281 atomic_inc(&phba->num_cmd_success); 280 atomic_inc(&phba->num_cmd_success);
282 281
283 if (vport->cfg_lun_queue_depth <= sdev->queue_depth) 282 if (vport->cfg_lun_queue_depth <= queue_depth)
284 return; 283 return;
285 spin_lock_irqsave(&phba->hbalock, flags); 284 spin_lock_irqsave(&phba->hbalock, flags);
286 if (((phba->last_ramp_up_time + QUEUE_RAMP_UP_INTERVAL) > jiffies) || 285 if (((phba->last_ramp_up_time + QUEUE_RAMP_UP_INTERVAL) > jiffies) ||
@@ -303,7 +302,7 @@ lpfc_rampup_queue_depth(struct lpfc_vport *vport,
303} 302}
304 303
305/** 304/**
306 * lpfc_ramp_down_queue_handler: WORKER_RAMP_DOWN_QUEUE event handler. 305 * lpfc_ramp_down_queue_handler - WORKER_RAMP_DOWN_QUEUE event handler
307 * @phba: The Hba for which this call is being executed. 306 * @phba: The Hba for which this call is being executed.
308 * 307 *
309 * This routine is called to process WORKER_RAMP_DOWN_QUEUE event for worker 308 * This routine is called to process WORKER_RAMP_DOWN_QUEUE event for worker
@@ -361,7 +360,7 @@ lpfc_ramp_down_queue_handler(struct lpfc_hba *phba)
361} 360}
362 361
363/** 362/**
364 * lpfc_ramp_up_queue_handler: WORKER_RAMP_UP_QUEUE event handler. 363 * lpfc_ramp_up_queue_handler - WORKER_RAMP_UP_QUEUE event handler
365 * @phba: The Hba for which this call is being executed. 364 * @phba: The Hba for which this call is being executed.
366 * 365 *
367 * This routine is called to process WORKER_RAMP_UP_QUEUE event for worker 366 * This routine is called to process WORKER_RAMP_UP_QUEUE event for worker
@@ -410,7 +409,7 @@ lpfc_ramp_up_queue_handler(struct lpfc_hba *phba)
410} 409}
411 410
412/** 411/**
413 * lpfc_scsi_dev_block: set all scsi hosts to block state. 412 * lpfc_scsi_dev_block - set all scsi hosts to block state
414 * @phba: Pointer to HBA context object. 413 * @phba: Pointer to HBA context object.
415 * 414 *
416 * This function walks vport list and set each SCSI host to block state 415 * This function walks vport list and set each SCSI host to block state
@@ -439,7 +438,7 @@ lpfc_scsi_dev_block(struct lpfc_hba *phba)
439} 438}
440 439
441/** 440/**
442 * lpfc_new_scsi_buf: Scsi buffer allocator. 441 * lpfc_new_scsi_buf - Scsi buffer allocator
443 * @vport: The virtual port for which this call being executed. 442 * @vport: The virtual port for which this call being executed.
444 * 443 *
445 * This routine allocates a scsi buffer, which contains all the necessary 444 * This routine allocates a scsi buffer, which contains all the necessary
@@ -563,7 +562,7 @@ lpfc_new_scsi_buf(struct lpfc_vport *vport)
563} 562}
564 563
565/** 564/**
566 * lpfc_get_scsi_buf: Get a scsi buffer from lpfc_scsi_buf_list list of Hba. 565 * lpfc_get_scsi_buf - Get a scsi buffer from lpfc_scsi_buf_list list of Hba
567 * @phba: The Hba for which this call is being executed. 566 * @phba: The Hba for which this call is being executed.
568 * 567 *
569 * This routine removes a scsi buffer from head of @phba lpfc_scsi_buf_list list 568 * This routine removes a scsi buffer from head of @phba lpfc_scsi_buf_list list
@@ -592,7 +591,7 @@ lpfc_get_scsi_buf(struct lpfc_hba * phba)
592} 591}
593 592
594/** 593/**
595 * lpfc_release_scsi_buf: Return a scsi buffer back to hba lpfc_scsi_buf_list list. 594 * lpfc_release_scsi_buf - Return a scsi buffer back to hba's lpfc_scsi_buf_list
596 * @phba: The Hba for which this call is being executed. 595 * @phba: The Hba for which this call is being executed.
597 * @psb: The scsi buffer which is being released. 596 * @psb: The scsi buffer which is being released.
598 * 597 *
@@ -611,7 +610,7 @@ lpfc_release_scsi_buf(struct lpfc_hba *phba, struct lpfc_scsi_buf *psb)
611} 610}
612 611
613/** 612/**
614 * lpfc_scsi_prep_dma_buf: Routine to do DMA mapping for scsi buffer. 613 * lpfc_scsi_prep_dma_buf - Routine to do DMA mapping for scsi buffer
615 * @phba: The Hba for which this call is being executed. 614 * @phba: The Hba for which this call is being executed.
616 * @lpfc_cmd: The scsi buffer which is going to be mapped. 615 * @lpfc_cmd: The scsi buffer which is going to be mapped.
617 * 616 *
@@ -738,7 +737,7 @@ lpfc_scsi_prep_dma_buf(struct lpfc_hba *phba, struct lpfc_scsi_buf *lpfc_cmd)
738 * Due to difference in data length between DIF/non-DIF paths, 737 * Due to difference in data length between DIF/non-DIF paths,
739 * we need to set word 4 of IOCB here 738 * we need to set word 4 of IOCB here
740 */ 739 */
741 iocb_cmd->un.fcpi.fcpi_parm = le32_to_cpu(scsi_bufflen(scsi_cmnd)); 740 iocb_cmd->un.fcpi.fcpi_parm = scsi_bufflen(scsi_cmnd);
742 return 0; 741 return 0;
743} 742}
744 743
@@ -823,9 +822,9 @@ lpfc_cmd_blksize(struct scsi_cmnd *sc)
823/** 822/**
824 * lpfc_get_cmd_dif_parms - Extract DIF parameters from SCSI command 823 * lpfc_get_cmd_dif_parms - Extract DIF parameters from SCSI command
825 * @sc: in: SCSI command 824 * @sc: in: SCSI command
826 * @apptagmask out: app tag mask 825 * @apptagmask: out: app tag mask
827 * @apptagval out: app tag value 826 * @apptagval: out: app tag value
828 * @reftag out: ref tag (reference tag) 827 * @reftag: out: ref tag (reference tag)
829 * 828 *
830 * Description: 829 * Description:
831 * Extract DIF paramters from the command if possible. Otherwise, 830 * Extract DIF paramters from the command if possible. Otherwise,
@@ -1394,7 +1393,7 @@ lpfc_parse_bg_err(struct lpfc_hba *phba, struct lpfc_scsi_buf *lpfc_cmd,
1394 */ 1393 */
1395 cmd->sense_buffer[8] = 0; /* Information */ 1394 cmd->sense_buffer[8] = 0; /* Information */
1396 cmd->sense_buffer[9] = 0xa; /* Add. length */ 1395 cmd->sense_buffer[9] = 0xa; /* Add. length */
1397 do_div(bghm, cmd->device->sector_size); 1396 bghm /= cmd->device->sector_size;
1398 1397
1399 failing_sector = scsi_get_lba(cmd); 1398 failing_sector = scsi_get_lba(cmd);
1400 failing_sector += bghm; 1399 failing_sector += bghm;
@@ -1413,7 +1412,7 @@ out:
1413} 1412}
1414 1413
1415/** 1414/**
1416 * lpfc_send_scsi_error_event: Posts an event when there is SCSI error. 1415 * lpfc_send_scsi_error_event - Posts an event when there is SCSI error
1417 * @phba: Pointer to hba context object. 1416 * @phba: Pointer to hba context object.
1418 * @vport: Pointer to vport object. 1417 * @vport: Pointer to vport object.
1419 * @lpfc_cmd: Pointer to lpfc scsi command which reported the error. 1418 * @lpfc_cmd: Pointer to lpfc scsi command which reported the error.
@@ -1505,7 +1504,7 @@ lpfc_send_scsi_error_event(struct lpfc_hba *phba, struct lpfc_vport *vport,
1505} 1504}
1506 1505
1507/** 1506/**
1508 * lpfc_scsi_unprep_dma_buf: Routine to un-map DMA mapping of scatter gather. 1507 * lpfc_scsi_unprep_dma_buf - Routine to un-map DMA mapping of scatter gather
1509 * @phba: The Hba for which this call is being executed. 1508 * @phba: The Hba for which this call is being executed.
1510 * @psb: The scsi buffer which is going to be un-mapped. 1509 * @psb: The scsi buffer which is going to be un-mapped.
1511 * 1510 *
@@ -1530,7 +1529,7 @@ lpfc_scsi_unprep_dma_buf(struct lpfc_hba * phba, struct lpfc_scsi_buf * psb)
1530} 1529}
1531 1530
1532/** 1531/**
1533 * lpfc_handler_fcp_err: FCP response handler. 1532 * lpfc_handler_fcp_err - FCP response handler
1534 * @vport: The virtual port for which this call is being executed. 1533 * @vport: The virtual port for which this call is being executed.
1535 * @lpfc_cmd: Pointer to lpfc_scsi_buf data structure. 1534 * @lpfc_cmd: Pointer to lpfc_scsi_buf data structure.
1536 * @rsp_iocb: The response IOCB which contains FCP error. 1535 * @rsp_iocb: The response IOCB which contains FCP error.
@@ -1674,7 +1673,7 @@ lpfc_handle_fcp_err(struct lpfc_vport *vport, struct lpfc_scsi_buf *lpfc_cmd,
1674} 1673}
1675 1674
1676/** 1675/**
1677 * lpfc_scsi_cmd_iocb_cmpl: Scsi cmnd IOCB completion routine. 1676 * lpfc_scsi_cmd_iocb_cmpl - Scsi cmnd IOCB completion routine
1678 * @phba: The Hba for which this call is being executed. 1677 * @phba: The Hba for which this call is being executed.
1679 * @pIocbIn: The command IOCBQ for the scsi cmnd. 1678 * @pIocbIn: The command IOCBQ for the scsi cmnd.
1680 * @pIocbOut: The response IOCBQ for the scsi cmnd . 1679 * @pIocbOut: The response IOCBQ for the scsi cmnd .
@@ -1694,10 +1693,12 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
1694 struct lpfc_nodelist *pnode = rdata->pnode; 1693 struct lpfc_nodelist *pnode = rdata->pnode;
1695 struct scsi_cmnd *cmd = lpfc_cmd->pCmd; 1694 struct scsi_cmnd *cmd = lpfc_cmd->pCmd;
1696 int result; 1695 int result;
1697 struct scsi_device *sdev, *tmp_sdev; 1696 struct scsi_device *tmp_sdev;
1698 int depth = 0; 1697 int depth = 0;
1699 unsigned long flags; 1698 unsigned long flags;
1700 struct lpfc_fast_path_event *fast_path_evt; 1699 struct lpfc_fast_path_event *fast_path_evt;
1700 struct Scsi_Host *shost = cmd->device->host;
1701 uint32_t queue_depth, scsi_id;
1701 1702
1702 lpfc_cmd->result = pIocbOut->iocb.un.ulpWord[4]; 1703 lpfc_cmd->result = pIocbOut->iocb.un.ulpWord[4];
1703 lpfc_cmd->status = pIocbOut->iocb.ulpStatus; 1704 lpfc_cmd->status = pIocbOut->iocb.ulpStatus;
@@ -1808,11 +1809,10 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
1808 1809
1809 lpfc_update_stats(phba, lpfc_cmd); 1810 lpfc_update_stats(phba, lpfc_cmd);
1810 result = cmd->result; 1811 result = cmd->result;
1811 sdev = cmd->device;
1812 if (vport->cfg_max_scsicmpl_time && 1812 if (vport->cfg_max_scsicmpl_time &&
1813 time_after(jiffies, lpfc_cmd->start_time + 1813 time_after(jiffies, lpfc_cmd->start_time +
1814 msecs_to_jiffies(vport->cfg_max_scsicmpl_time))) { 1814 msecs_to_jiffies(vport->cfg_max_scsicmpl_time))) {
1815 spin_lock_irqsave(sdev->host->host_lock, flags); 1815 spin_lock_irqsave(shost->host_lock, flags);
1816 if (pnode && NLP_CHK_NODE_ACT(pnode)) { 1816 if (pnode && NLP_CHK_NODE_ACT(pnode)) {
1817 if (pnode->cmd_qdepth > 1817 if (pnode->cmd_qdepth >
1818 atomic_read(&pnode->cmd_pending) && 1818 atomic_read(&pnode->cmd_pending) &&
@@ -1825,22 +1825,26 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
1825 1825
1826 pnode->last_change_time = jiffies; 1826 pnode->last_change_time = jiffies;
1827 } 1827 }
1828 spin_unlock_irqrestore(sdev->host->host_lock, flags); 1828 spin_unlock_irqrestore(shost->host_lock, flags);
1829 } else if (pnode && NLP_CHK_NODE_ACT(pnode)) { 1829 } else if (pnode && NLP_CHK_NODE_ACT(pnode)) {
1830 if ((pnode->cmd_qdepth < LPFC_MAX_TGT_QDEPTH) && 1830 if ((pnode->cmd_qdepth < LPFC_MAX_TGT_QDEPTH) &&
1831 time_after(jiffies, pnode->last_change_time + 1831 time_after(jiffies, pnode->last_change_time +
1832 msecs_to_jiffies(LPFC_TGTQ_INTERVAL))) { 1832 msecs_to_jiffies(LPFC_TGTQ_INTERVAL))) {
1833 spin_lock_irqsave(sdev->host->host_lock, flags); 1833 spin_lock_irqsave(shost->host_lock, flags);
1834 pnode->cmd_qdepth += pnode->cmd_qdepth * 1834 pnode->cmd_qdepth += pnode->cmd_qdepth *
1835 LPFC_TGTQ_RAMPUP_PCENT / 100; 1835 LPFC_TGTQ_RAMPUP_PCENT / 100;
1836 if (pnode->cmd_qdepth > LPFC_MAX_TGT_QDEPTH) 1836 if (pnode->cmd_qdepth > LPFC_MAX_TGT_QDEPTH)
1837 pnode->cmd_qdepth = LPFC_MAX_TGT_QDEPTH; 1837 pnode->cmd_qdepth = LPFC_MAX_TGT_QDEPTH;
1838 pnode->last_change_time = jiffies; 1838 pnode->last_change_time = jiffies;
1839 spin_unlock_irqrestore(sdev->host->host_lock, flags); 1839 spin_unlock_irqrestore(shost->host_lock, flags);
1840 } 1840 }
1841 } 1841 }
1842 1842
1843 lpfc_scsi_unprep_dma_buf(phba, lpfc_cmd); 1843 lpfc_scsi_unprep_dma_buf(phba, lpfc_cmd);
1844
1845 /* The sdev is not guaranteed to be valid post scsi_done upcall. */
1846 queue_depth = cmd->device->queue_depth;
1847 scsi_id = cmd->device->id;
1844 cmd->scsi_done(cmd); 1848 cmd->scsi_done(cmd);
1845 1849
1846 if (phba->cfg_poll & ENABLE_FCP_RING_POLLING) { 1850 if (phba->cfg_poll & ENABLE_FCP_RING_POLLING) {
@@ -1848,28 +1852,28 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
1848 * If there is a thread waiting for command completion 1852 * If there is a thread waiting for command completion
1849 * wake up the thread. 1853 * wake up the thread.
1850 */ 1854 */
1851 spin_lock_irqsave(sdev->host->host_lock, flags); 1855 spin_lock_irqsave(shost->host_lock, flags);
1852 lpfc_cmd->pCmd = NULL; 1856 lpfc_cmd->pCmd = NULL;
1853 if (lpfc_cmd->waitq) 1857 if (lpfc_cmd->waitq)
1854 wake_up(lpfc_cmd->waitq); 1858 wake_up(lpfc_cmd->waitq);
1855 spin_unlock_irqrestore(sdev->host->host_lock, flags); 1859 spin_unlock_irqrestore(shost->host_lock, flags);
1856 lpfc_release_scsi_buf(phba, lpfc_cmd); 1860 lpfc_release_scsi_buf(phba, lpfc_cmd);
1857 return; 1861 return;
1858 } 1862 }
1859 1863
1860 1864
1861 if (!result) 1865 if (!result)
1862 lpfc_rampup_queue_depth(vport, sdev); 1866 lpfc_rampup_queue_depth(vport, queue_depth);
1863 1867
1864 if (!result && pnode && NLP_CHK_NODE_ACT(pnode) && 1868 if (!result && pnode && NLP_CHK_NODE_ACT(pnode) &&
1865 ((jiffies - pnode->last_ramp_up_time) > 1869 ((jiffies - pnode->last_ramp_up_time) >
1866 LPFC_Q_RAMP_UP_INTERVAL * HZ) && 1870 LPFC_Q_RAMP_UP_INTERVAL * HZ) &&
1867 ((jiffies - pnode->last_q_full_time) > 1871 ((jiffies - pnode->last_q_full_time) >
1868 LPFC_Q_RAMP_UP_INTERVAL * HZ) && 1872 LPFC_Q_RAMP_UP_INTERVAL * HZ) &&
1869 (vport->cfg_lun_queue_depth > sdev->queue_depth)) { 1873 (vport->cfg_lun_queue_depth > queue_depth)) {
1870 shost_for_each_device(tmp_sdev, sdev->host) { 1874 shost_for_each_device(tmp_sdev, shost) {
1871 if (vport->cfg_lun_queue_depth > tmp_sdev->queue_depth){ 1875 if (vport->cfg_lun_queue_depth > tmp_sdev->queue_depth){
1872 if (tmp_sdev->id != sdev->id) 1876 if (tmp_sdev->id != scsi_id)
1873 continue; 1877 continue;
1874 if (tmp_sdev->ordered_tags) 1878 if (tmp_sdev->ordered_tags)
1875 scsi_adjust_queue_depth(tmp_sdev, 1879 scsi_adjust_queue_depth(tmp_sdev,
@@ -1885,7 +1889,7 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
1885 } 1889 }
1886 lpfc_send_sdev_queuedepth_change_event(phba, vport, pnode, 1890 lpfc_send_sdev_queuedepth_change_event(phba, vport, pnode,
1887 0xFFFFFFFF, 1891 0xFFFFFFFF,
1888 sdev->queue_depth - 1, sdev->queue_depth); 1892 queue_depth , queue_depth + 1);
1889 } 1893 }
1890 1894
1891 /* 1895 /*
@@ -1896,8 +1900,8 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
1896 NLP_CHK_NODE_ACT(pnode)) { 1900 NLP_CHK_NODE_ACT(pnode)) {
1897 pnode->last_q_full_time = jiffies; 1901 pnode->last_q_full_time = jiffies;
1898 1902
1899 shost_for_each_device(tmp_sdev, sdev->host) { 1903 shost_for_each_device(tmp_sdev, shost) {
1900 if (tmp_sdev->id != sdev->id) 1904 if (tmp_sdev->id != scsi_id)
1901 continue; 1905 continue;
1902 depth = scsi_track_queue_full(tmp_sdev, 1906 depth = scsi_track_queue_full(tmp_sdev,
1903 tmp_sdev->queue_depth - 1); 1907 tmp_sdev->queue_depth - 1);
@@ -1909,7 +1913,7 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
1909 * scsi_track_queue_full. 1913 * scsi_track_queue_full.
1910 */ 1914 */
1911 if (depth == -1) 1915 if (depth == -1)
1912 depth = sdev->host->cmd_per_lun; 1916 depth = shost->cmd_per_lun;
1913 1917
1914 if (depth) { 1918 if (depth) {
1915 lpfc_printf_vlog(vport, KERN_WARNING, LOG_FCP, 1919 lpfc_printf_vlog(vport, KERN_WARNING, LOG_FCP,
@@ -1925,17 +1929,17 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
1925 * If there is a thread waiting for command completion 1929 * If there is a thread waiting for command completion
1926 * wake up the thread. 1930 * wake up the thread.
1927 */ 1931 */
1928 spin_lock_irqsave(sdev->host->host_lock, flags); 1932 spin_lock_irqsave(shost->host_lock, flags);
1929 lpfc_cmd->pCmd = NULL; 1933 lpfc_cmd->pCmd = NULL;
1930 if (lpfc_cmd->waitq) 1934 if (lpfc_cmd->waitq)
1931 wake_up(lpfc_cmd->waitq); 1935 wake_up(lpfc_cmd->waitq);
1932 spin_unlock_irqrestore(sdev->host->host_lock, flags); 1936 spin_unlock_irqrestore(shost->host_lock, flags);
1933 1937
1934 lpfc_release_scsi_buf(phba, lpfc_cmd); 1938 lpfc_release_scsi_buf(phba, lpfc_cmd);
1935} 1939}
1936 1940
1937/** 1941/**
1938 * lpfc_fcpcmd_to_iocb - copy the fcp_cmd data into the IOCB. 1942 * lpfc_fcpcmd_to_iocb - copy the fcp_cmd data into the IOCB
1939 * @data: A pointer to the immediate command data portion of the IOCB. 1943 * @data: A pointer to the immediate command data portion of the IOCB.
1940 * @fcp_cmnd: The FCP Command that is provided by the SCSI layer. 1944 * @fcp_cmnd: The FCP Command that is provided by the SCSI layer.
1941 * 1945 *
@@ -1953,7 +1957,7 @@ lpfc_fcpcmd_to_iocb(uint8_t *data, struct fcp_cmnd *fcp_cmnd)
1953} 1957}
1954 1958
1955/** 1959/**
1956 * lpfc_scsi_prep_cmnd: Routine to convert scsi cmnd to FCP information unit. 1960 * lpfc_scsi_prep_cmnd - Routine to convert scsi cmnd to FCP information unit
1957 * @vport: The virtual port for which this call is being executed. 1961 * @vport: The virtual port for which this call is being executed.
1958 * @lpfc_cmd: The scsi command which needs to send. 1962 * @lpfc_cmd: The scsi command which needs to send.
1959 * @pnode: Pointer to lpfc_nodelist. 1963 * @pnode: Pointer to lpfc_nodelist.
@@ -2047,7 +2051,7 @@ lpfc_scsi_prep_cmnd(struct lpfc_vport *vport, struct lpfc_scsi_buf *lpfc_cmd,
2047} 2051}
2048 2052
2049/** 2053/**
2050 * lpfc_scsi_prep_task_mgmt_cmnd: Convert scsi TM cmnd to FCP information unit. 2054 * lpfc_scsi_prep_task_mgmt_cmnd - Convert scsi TM cmnd to FCP information unit
2051 * @vport: The virtual port for which this call is being executed. 2055 * @vport: The virtual port for which this call is being executed.
2052 * @lpfc_cmd: Pointer to lpfc_scsi_buf data structure. 2056 * @lpfc_cmd: Pointer to lpfc_scsi_buf data structure.
2053 * @lun: Logical unit number. 2057 * @lun: Logical unit number.
@@ -2110,7 +2114,7 @@ lpfc_scsi_prep_task_mgmt_cmd(struct lpfc_vport *vport,
2110} 2114}
2111 2115
2112/** 2116/**
2113 * lpc_taskmgmt_def_cmpl: IOCB completion routine for task management command. 2117 * lpfc_taskmgmt_def_cmpl - IOCB completion routine for task management command
2114 * @phba: The Hba for which this call is being executed. 2118 * @phba: The Hba for which this call is being executed.
2115 * @cmdiocbq: Pointer to lpfc_iocbq data structure. 2119 * @cmdiocbq: Pointer to lpfc_iocbq data structure.
2116 * @rspiocbq: Pointer to lpfc_iocbq data structure. 2120 * @rspiocbq: Pointer to lpfc_iocbq data structure.
@@ -2131,7 +2135,7 @@ lpfc_tskmgmt_def_cmpl(struct lpfc_hba *phba,
2131} 2135}
2132 2136
2133/** 2137/**
2134 * lpfc_scsi_tgt_reset: Target reset handler. 2138 * lpfc_scsi_tgt_reset - Target reset handler
2135 * @lpfc_cmd: Pointer to lpfc_scsi_buf data structure 2139 * @lpfc_cmd: Pointer to lpfc_scsi_buf data structure
2136 * @vport: The virtual port for which this call is being executed. 2140 * @vport: The virtual port for which this call is being executed.
2137 * @tgt_id: Target ID. 2141 * @tgt_id: Target ID.
@@ -2198,7 +2202,7 @@ lpfc_scsi_tgt_reset(struct lpfc_scsi_buf *lpfc_cmd, struct lpfc_vport *vport,
2198} 2202}
2199 2203
2200/** 2204/**
2201 * lpfc_info: Info entry point of scsi_host_template data structure. 2205 * lpfc_info - Info entry point of scsi_host_template data structure
2202 * @host: The scsi host for which this call is being executed. 2206 * @host: The scsi host for which this call is being executed.
2203 * 2207 *
2204 * This routine provides module information about hba. 2208 * This routine provides module information about hba.
@@ -2236,7 +2240,7 @@ lpfc_info(struct Scsi_Host *host)
2236} 2240}
2237 2241
2238/** 2242/**
2239 * lpfc_poll_rearm_time: Routine to modify fcp_poll timer of hba. 2243 * lpfc_poll_rearm_time - Routine to modify fcp_poll timer of hba
2240 * @phba: The Hba for which this call is being executed. 2244 * @phba: The Hba for which this call is being executed.
2241 * 2245 *
2242 * This routine modifies fcp_poll_timer field of @phba by cfg_poll_tmo. 2246 * This routine modifies fcp_poll_timer field of @phba by cfg_poll_tmo.
@@ -2253,7 +2257,7 @@ static __inline__ void lpfc_poll_rearm_timer(struct lpfc_hba * phba)
2253} 2257}
2254 2258
2255/** 2259/**
2256 * lpfc_poll_start_timer: Routine to start fcp_poll_timer of HBA. 2260 * lpfc_poll_start_timer - Routine to start fcp_poll_timer of HBA
2257 * @phba: The Hba for which this call is being executed. 2261 * @phba: The Hba for which this call is being executed.
2258 * 2262 *
2259 * This routine starts the fcp_poll_timer of @phba. 2263 * This routine starts the fcp_poll_timer of @phba.
@@ -2264,7 +2268,7 @@ void lpfc_poll_start_timer(struct lpfc_hba * phba)
2264} 2268}
2265 2269
2266/** 2270/**
2267 * lpfc_poll_timeout: Restart polling timer. 2271 * lpfc_poll_timeout - Restart polling timer
2268 * @ptr: Map to lpfc_hba data structure pointer. 2272 * @ptr: Map to lpfc_hba data structure pointer.
2269 * 2273 *
2270 * This routine restarts fcp_poll timer, when FCP ring polling is enable 2274 * This routine restarts fcp_poll timer, when FCP ring polling is enable
@@ -2283,8 +2287,7 @@ void lpfc_poll_timeout(unsigned long ptr)
2283} 2287}
2284 2288
2285/** 2289/**
2286 * lpfc_queuecommand: Queuecommand entry point of Scsi Host Templater data 2290 * lpfc_queuecommand - scsi_host_template queuecommand entry point
2287 * structure.
2288 * @cmnd: Pointer to scsi_cmnd data structure. 2291 * @cmnd: Pointer to scsi_cmnd data structure.
2289 * @done: Pointer to done routine. 2292 * @done: Pointer to done routine.
2290 * 2293 *
@@ -2450,7 +2453,7 @@ lpfc_queuecommand(struct scsi_cmnd *cmnd, void (*done) (struct scsi_cmnd *))
2450} 2453}
2451 2454
2452/** 2455/**
2453 * lpfc_block_error_handler: Routine to block error handler. 2456 * lpfc_block_error_handler - Routine to block error handler
2454 * @cmnd: Pointer to scsi_cmnd data structure. 2457 * @cmnd: Pointer to scsi_cmnd data structure.
2455 * 2458 *
2456 * This routine blocks execution till fc_rport state is not FC_PORSTAT_BLCOEKD. 2459 * This routine blocks execution till fc_rport state is not FC_PORSTAT_BLCOEKD.
@@ -2472,8 +2475,7 @@ lpfc_block_error_handler(struct scsi_cmnd *cmnd)
2472} 2475}
2473 2476
2474/** 2477/**
2475 * lpfc_abort_handler: Eh_abort_handler entry point of Scsi Host Template data 2478 * lpfc_abort_handler - scsi_host_template eh_abort_handler entry point
2476 *structure.
2477 * @cmnd: Pointer to scsi_cmnd data structure. 2479 * @cmnd: Pointer to scsi_cmnd data structure.
2478 * 2480 *
2479 * This routine aborts @cmnd pending in base driver. 2481 * This routine aborts @cmnd pending in base driver.
@@ -2578,8 +2580,7 @@ lpfc_abort_handler(struct scsi_cmnd *cmnd)
2578} 2580}
2579 2581
2580/** 2582/**
2581 * lpfc_device_reset_handler: eh_device_reset entry point of Scsi Host Template 2583 * lpfc_device_reset_handler - scsi_host_template eh_device_reset entry point
2582 *data structure.
2583 * @cmnd: Pointer to scsi_cmnd data structure. 2584 * @cmnd: Pointer to scsi_cmnd data structure.
2584 * 2585 *
2585 * This routine does a device reset by sending a TARGET_RESET task management 2586 * This routine does a device reset by sending a TARGET_RESET task management
@@ -2587,7 +2588,7 @@ lpfc_abort_handler(struct scsi_cmnd *cmnd)
2587 * 2588 *
2588 * Return code : 2589 * Return code :
2589 * 0x2003 - Error 2590 * 0x2003 - Error
2590 * 0ex2002 - Success 2591 * 0x2002 - Success
2591 **/ 2592 **/
2592static int 2593static int
2593lpfc_device_reset_handler(struct scsi_cmnd *cmnd) 2594lpfc_device_reset_handler(struct scsi_cmnd *cmnd)
@@ -2707,8 +2708,7 @@ lpfc_device_reset_handler(struct scsi_cmnd *cmnd)
2707} 2708}
2708 2709
2709/** 2710/**
2710 * lpfc_bus_reset_handler: eh_bus_reset_handler entry point of Scsi Host 2711 * lpfc_bus_reset_handler - scsi_host_template eh_bus_reset_handler entry point
2711 * Template data structure.
2712 * @cmnd: Pointer to scsi_cmnd data structure. 2712 * @cmnd: Pointer to scsi_cmnd data structure.
2713 * 2713 *
2714 * This routine does target reset to all target on @cmnd->device->host. 2714 * This routine does target reset to all target on @cmnd->device->host.
@@ -2808,8 +2808,7 @@ lpfc_bus_reset_handler(struct scsi_cmnd *cmnd)
2808} 2808}
2809 2809
2810/** 2810/**
2811 * lpfc_slave_alloc: slave_alloc entry point of Scsi Host Template data 2811 * lpfc_slave_alloc - scsi_host_template slave_alloc entry point
2812 * structure.
2813 * @sdev: Pointer to scsi_device. 2812 * @sdev: Pointer to scsi_device.
2814 * 2813 *
2815 * This routine populates the cmds_per_lun count + 2 scsi_bufs into this host's 2814 * This routine populates the cmds_per_lun count + 2 scsi_bufs into this host's
@@ -2883,8 +2882,7 @@ lpfc_slave_alloc(struct scsi_device *sdev)
2883} 2882}
2884 2883
2885/** 2884/**
2886 * lpfc_slave_configure: slave_configure entry point of Scsi Host Templater data 2885 * lpfc_slave_configure - scsi_host_template slave_configure entry point
2887 * structure.
2888 * @sdev: Pointer to scsi_device. 2886 * @sdev: Pointer to scsi_device.
2889 * 2887 *
2890 * This routine configures following items 2888 * This routine configures following items
@@ -2925,7 +2923,7 @@ lpfc_slave_configure(struct scsi_device *sdev)
2925} 2923}
2926 2924
2927/** 2925/**
2928 * lpfc_slave_destroy: slave_destroy entry point of SHT data structure. 2926 * lpfc_slave_destroy - slave_destroy entry point of SHT data structure
2929 * @sdev: Pointer to scsi_device. 2927 * @sdev: Pointer to scsi_device.
2930 * 2928 *
2931 * This routine sets @sdev hostatdata filed to null. 2929 * This routine sets @sdev hostatdata filed to null.
diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
index a36a120561e2..eb5c75c45ba4 100644
--- a/drivers/scsi/lpfc/lpfc_sli.c
+++ b/drivers/scsi/lpfc/lpfc_sli.c
@@ -68,7 +68,7 @@ typedef enum _lpfc_iocb_type {
68} lpfc_iocb_type; 68} lpfc_iocb_type;
69 69
70/** 70/**
71 * lpfc_cmd_iocb: Get next command iocb entry in the ring. 71 * lpfc_cmd_iocb - Get next command iocb entry in the ring
72 * @phba: Pointer to HBA context object. 72 * @phba: Pointer to HBA context object.
73 * @pring: Pointer to driver SLI ring object. 73 * @pring: Pointer to driver SLI ring object.
74 * 74 *
@@ -85,7 +85,7 @@ lpfc_cmd_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
85} 85}
86 86
87/** 87/**
88 * lpfc_resp_iocb: Get next response iocb entry in the ring. 88 * lpfc_resp_iocb - Get next response iocb entry in the ring
89 * @phba: Pointer to HBA context object. 89 * @phba: Pointer to HBA context object.
90 * @pring: Pointer to driver SLI ring object. 90 * @pring: Pointer to driver SLI ring object.
91 * 91 *
@@ -102,7 +102,7 @@ lpfc_resp_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
102} 102}
103 103
104/** 104/**
105 * __lpfc_sli_get_iocbq: Allocates an iocb object from iocb pool. 105 * __lpfc_sli_get_iocbq - Allocates an iocb object from iocb pool
106 * @phba: Pointer to HBA context object. 106 * @phba: Pointer to HBA context object.
107 * 107 *
108 * This function is called with hbalock held. This function 108 * This function is called with hbalock held. This function
@@ -121,7 +121,7 @@ __lpfc_sli_get_iocbq(struct lpfc_hba *phba)
121} 121}
122 122
123/** 123/**
124 * lpfc_sli_get_iocbq: Allocates an iocb object from iocb pool. 124 * lpfc_sli_get_iocbq - Allocates an iocb object from iocb pool
125 * @phba: Pointer to HBA context object. 125 * @phba: Pointer to HBA context object.
126 * 126 *
127 * This function is called with no lock held. This function 127 * This function is called with no lock held. This function
@@ -142,7 +142,7 @@ lpfc_sli_get_iocbq(struct lpfc_hba *phba)
142} 142}
143 143
144/** 144/**
145 * __lpfc_sli_release_iocbq: Release iocb to the iocb pool. 145 * __lpfc_sli_release_iocbq - Release iocb to the iocb pool
146 * @phba: Pointer to HBA context object. 146 * @phba: Pointer to HBA context object.
147 * @iocbq: Pointer to driver iocb object. 147 * @iocbq: Pointer to driver iocb object.
148 * 148 *
@@ -164,7 +164,7 @@ __lpfc_sli_release_iocbq(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
164} 164}
165 165
166/** 166/**
167 * lpfc_sli_release_iocbq: Release iocb to the iocb pool. 167 * lpfc_sli_release_iocbq - Release iocb to the iocb pool
168 * @phba: Pointer to HBA context object. 168 * @phba: Pointer to HBA context object.
169 * @iocbq: Pointer to driver iocb object. 169 * @iocbq: Pointer to driver iocb object.
170 * 170 *
@@ -185,8 +185,40 @@ lpfc_sli_release_iocbq(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
185} 185}
186 186
187/** 187/**
188 * lpfc_sli_iocb_cmd_type: Get the iocb type. 188 * lpfc_sli_cancel_iocbs - Cancel all iocbs from a list.
189 * @iocb_cmnd : iocb command code. 189 * @phba: Pointer to HBA context object.
190 * @iocblist: List of IOCBs.
191 * @ulpstatus: ULP status in IOCB command field.
192 * @ulpWord4: ULP word-4 in IOCB command field.
193 *
194 * This function is called with a list of IOCBs to cancel. It cancels the IOCB
195 * on the list by invoking the complete callback function associated with the
196 * IOCB with the provided @ulpstatus and @ulpword4 set to the IOCB commond
197 * fields.
198 **/
199void
200lpfc_sli_cancel_iocbs(struct lpfc_hba *phba, struct list_head *iocblist,
201 uint32_t ulpstatus, uint32_t ulpWord4)
202{
203 struct lpfc_iocbq *piocb;
204
205 while (!list_empty(iocblist)) {
206 list_remove_head(iocblist, piocb, struct lpfc_iocbq, list);
207
208 if (!piocb->iocb_cmpl)
209 lpfc_sli_release_iocbq(phba, piocb);
210 else {
211 piocb->iocb.ulpStatus = ulpstatus;
212 piocb->iocb.un.ulpWord[4] = ulpWord4;
213 (piocb->iocb_cmpl) (phba, piocb, piocb);
214 }
215 }
216 return;
217}
218
219/**
220 * lpfc_sli_iocb_cmd_type - Get the iocb type
221 * @iocb_cmnd: iocb command code.
190 * 222 *
191 * This function is called by ring event handler function to get the iocb type. 223 * This function is called by ring event handler function to get the iocb type.
192 * This function translates the iocb command to an iocb command type used to 224 * This function translates the iocb command to an iocb command type used to
@@ -295,7 +327,7 @@ lpfc_sli_iocb_cmd_type(uint8_t iocb_cmnd)
295} 327}
296 328
297/** 329/**
298 * lpfc_sli_ring_map: Issue config_ring mbox for all rings. 330 * lpfc_sli_ring_map - Issue config_ring mbox for all rings
299 * @phba: Pointer to HBA context object. 331 * @phba: Pointer to HBA context object.
300 * 332 *
301 * This function is called from SLI initialization code 333 * This function is called from SLI initialization code
@@ -338,7 +370,7 @@ lpfc_sli_ring_map(struct lpfc_hba *phba)
338} 370}
339 371
340/** 372/**
341 * lpfc_sli_ringtxcmpl_put: Adds new iocb to the txcmplq. 373 * lpfc_sli_ringtxcmpl_put - Adds new iocb to the txcmplq
342 * @phba: Pointer to HBA context object. 374 * @phba: Pointer to HBA context object.
343 * @pring: Pointer to driver SLI ring object. 375 * @pring: Pointer to driver SLI ring object.
344 * @piocb: Pointer to the driver iocb object. 376 * @piocb: Pointer to the driver iocb object.
@@ -370,7 +402,7 @@ lpfc_sli_ringtxcmpl_put(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
370} 402}
371 403
372/** 404/**
373 * lpfc_sli_ringtx_get: Get first element of the txq. 405 * lpfc_sli_ringtx_get - Get first element of the txq
374 * @phba: Pointer to HBA context object. 406 * @phba: Pointer to HBA context object.
375 * @pring: Pointer to driver SLI ring object. 407 * @pring: Pointer to driver SLI ring object.
376 * 408 *
@@ -391,7 +423,7 @@ lpfc_sli_ringtx_get(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
391} 423}
392 424
393/** 425/**
394 * lpfc_sli_next_iocb_slot: Get next iocb slot in the ring. 426 * lpfc_sli_next_iocb_slot - Get next iocb slot in the ring
395 * @phba: Pointer to HBA context object. 427 * @phba: Pointer to HBA context object.
396 * @pring: Pointer to driver SLI ring object. 428 * @pring: Pointer to driver SLI ring object.
397 * 429 *
@@ -445,7 +477,7 @@ lpfc_sli_next_iocb_slot (struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
445} 477}
446 478
447/** 479/**
448 * lpfc_sli_next_iotag: Get an iotag for the iocb. 480 * lpfc_sli_next_iotag - Get an iotag for the iocb
449 * @phba: Pointer to HBA context object. 481 * @phba: Pointer to HBA context object.
450 * @iocbq: Pointer to driver iocb object. 482 * @iocbq: Pointer to driver iocb object.
451 * 483 *
@@ -520,7 +552,7 @@ lpfc_sli_next_iotag(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
520} 552}
521 553
522/** 554/**
523 * lpfc_sli_submit_iocb: Submit an iocb to the firmware. 555 * lpfc_sli_submit_iocb - Submit an iocb to the firmware
524 * @phba: Pointer to HBA context object. 556 * @phba: Pointer to HBA context object.
525 * @pring: Pointer to driver SLI ring object. 557 * @pring: Pointer to driver SLI ring object.
526 * @iocb: Pointer to iocb slot in the ring. 558 * @iocb: Pointer to iocb slot in the ring.
@@ -577,7 +609,7 @@ lpfc_sli_submit_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
577} 609}
578 610
579/** 611/**
580 * lpfc_sli_update_full_ring: Update the chip attention register. 612 * lpfc_sli_update_full_ring - Update the chip attention register
581 * @phba: Pointer to HBA context object. 613 * @phba: Pointer to HBA context object.
582 * @pring: Pointer to driver SLI ring object. 614 * @pring: Pointer to driver SLI ring object.
583 * 615 *
@@ -608,7 +640,7 @@ lpfc_sli_update_full_ring(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
608} 640}
609 641
610/** 642/**
611 * lpfc_sli_update_ring: Update chip attention register. 643 * lpfc_sli_update_ring - Update chip attention register
612 * @phba: Pointer to HBA context object. 644 * @phba: Pointer to HBA context object.
613 * @pring: Pointer to driver SLI ring object. 645 * @pring: Pointer to driver SLI ring object.
614 * 646 *
@@ -632,7 +664,7 @@ lpfc_sli_update_ring(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
632} 664}
633 665
634/** 666/**
635 * lpfc_sli_resume_iocb: Process iocbs in the txq. 667 * lpfc_sli_resume_iocb - Process iocbs in the txq
636 * @phba: Pointer to HBA context object. 668 * @phba: Pointer to HBA context object.
637 * @pring: Pointer to driver SLI ring object. 669 * @pring: Pointer to driver SLI ring object.
638 * 670 *
@@ -672,7 +704,7 @@ lpfc_sli_resume_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
672} 704}
673 705
674/** 706/**
675 * lpfc_sli_next_hbq_slot: Get next hbq entry for the HBQ. 707 * lpfc_sli_next_hbq_slot - Get next hbq entry for the HBQ
676 * @phba: Pointer to HBA context object. 708 * @phba: Pointer to HBA context object.
677 * @hbqno: HBQ number. 709 * @hbqno: HBQ number.
678 * 710 *
@@ -717,7 +749,7 @@ lpfc_sli_next_hbq_slot(struct lpfc_hba *phba, uint32_t hbqno)
717} 749}
718 750
719/** 751/**
720 * lpfc_sli_hbqbuf_free_all: Free all the hbq buffers. 752 * lpfc_sli_hbqbuf_free_all - Free all the hbq buffers
721 * @phba: Pointer to HBA context object. 753 * @phba: Pointer to HBA context object.
722 * 754 *
723 * This function is called with no lock held to free all the 755 * This function is called with no lock held to free all the
@@ -771,7 +803,7 @@ lpfc_sli_hbqbuf_free_all(struct lpfc_hba *phba)
771} 803}
772 804
773/** 805/**
774 * lpfc_sli_hbq_to_firmware: Post the hbq buffer to firmware. 806 * lpfc_sli_hbq_to_firmware - Post the hbq buffer to firmware
775 * @phba: Pointer to HBA context object. 807 * @phba: Pointer to HBA context object.
776 * @hbqno: HBQ number. 808 * @hbqno: HBQ number.
777 * @hbq_buf: Pointer to HBQ buffer. 809 * @hbq_buf: Pointer to HBQ buffer.
@@ -818,8 +850,8 @@ static struct lpfc_hbq_init lpfc_els_hbq = {
818 .profile = 0, 850 .profile = 0,
819 .ring_mask = (1 << LPFC_ELS_RING), 851 .ring_mask = (1 << LPFC_ELS_RING),
820 .buffer_count = 0, 852 .buffer_count = 0,
821 .init_count = 20, 853 .init_count = 40,
822 .add_count = 5, 854 .add_count = 40,
823}; 855};
824 856
825/* HBQ for the extra ring if needed */ 857/* HBQ for the extra ring if needed */
@@ -841,7 +873,7 @@ struct lpfc_hbq_init *lpfc_hbq_defs[] = {
841}; 873};
842 874
843/** 875/**
844 * lpfc_sli_hbqbuf_fill_hbqs: Post more hbq buffers to HBQ. 876 * lpfc_sli_hbqbuf_fill_hbqs - Post more hbq buffers to HBQ
845 * @phba: Pointer to HBA context object. 877 * @phba: Pointer to HBA context object.
846 * @hbqno: HBQ number. 878 * @hbqno: HBQ number.
847 * @count: Number of HBQ buffers to be posted. 879 * @count: Number of HBQ buffers to be posted.
@@ -901,7 +933,7 @@ err:
901} 933}
902 934
903/** 935/**
904 * lpfc_sli_hbqbuf_add_hbqs: Post more HBQ buffers to firmware. 936 * lpfc_sli_hbqbuf_add_hbqs - Post more HBQ buffers to firmware
905 * @phba: Pointer to HBA context object. 937 * @phba: Pointer to HBA context object.
906 * @qno: HBQ number. 938 * @qno: HBQ number.
907 * 939 *
@@ -917,7 +949,7 @@ lpfc_sli_hbqbuf_add_hbqs(struct lpfc_hba *phba, uint32_t qno)
917} 949}
918 950
919/** 951/**
920 * lpfc_sli_hbqbuf_init_hbqs: Post initial buffers to the HBQ. 952 * lpfc_sli_hbqbuf_init_hbqs - Post initial buffers to the HBQ
921 * @phba: Pointer to HBA context object. 953 * @phba: Pointer to HBA context object.
922 * @qno: HBQ queue number. 954 * @qno: HBQ queue number.
923 * 955 *
@@ -933,7 +965,7 @@ lpfc_sli_hbqbuf_init_hbqs(struct lpfc_hba *phba, uint32_t qno)
933} 965}
934 966
935/** 967/**
936 * lpfc_sli_hbqbuf_find: Find the hbq buffer associated with a tag. 968 * lpfc_sli_hbqbuf_find - Find the hbq buffer associated with a tag
937 * @phba: Pointer to HBA context object. 969 * @phba: Pointer to HBA context object.
938 * @tag: Tag of the hbq buffer. 970 * @tag: Tag of the hbq buffer.
939 * 971 *
@@ -966,7 +998,7 @@ lpfc_sli_hbqbuf_find(struct lpfc_hba *phba, uint32_t tag)
966} 998}
967 999
968/** 1000/**
969 * lpfc_sli_free_hbq: Give back the hbq buffer to firmware. 1001 * lpfc_sli_free_hbq - Give back the hbq buffer to firmware
970 * @phba: Pointer to HBA context object. 1002 * @phba: Pointer to HBA context object.
971 * @hbq_buffer: Pointer to HBQ buffer. 1003 * @hbq_buffer: Pointer to HBQ buffer.
972 * 1004 *
@@ -988,7 +1020,7 @@ lpfc_sli_free_hbq(struct lpfc_hba *phba, struct hbq_dmabuf *hbq_buffer)
988} 1020}
989 1021
990/** 1022/**
991 * lpfc_sli_chk_mbx_command: Check if the mailbox is a legitimate mailbox. 1023 * lpfc_sli_chk_mbx_command - Check if the mailbox is a legitimate mailbox
992 * @mbxCommand: mailbox command code. 1024 * @mbxCommand: mailbox command code.
993 * 1025 *
994 * This function is called by the mailbox event handler function to verify 1026 * This function is called by the mailbox event handler function to verify
@@ -1064,8 +1096,7 @@ lpfc_sli_chk_mbx_command(uint8_t mbxCommand)
1064} 1096}
1065 1097
1066/** 1098/**
1067 * lpfc_sli_wake_mbox_wait: Completion handler for mbox issued from 1099 * lpfc_sli_wake_mbox_wait - lpfc_sli_issue_mbox_wait mbox completion handler
1068 * lpfc_sli_issue_mbox_wait.
1069 * @phba: Pointer to HBA context object. 1100 * @phba: Pointer to HBA context object.
1070 * @pmboxq: Pointer to mailbox command. 1101 * @pmboxq: Pointer to mailbox command.
1071 * 1102 *
@@ -1096,7 +1127,7 @@ lpfc_sli_wake_mbox_wait(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq)
1096 1127
1097 1128
1098/** 1129/**
1099 * lpfc_sli_def_mbox_cmpl: Default mailbox completion handler. 1130 * lpfc_sli_def_mbox_cmpl - Default mailbox completion handler
1100 * @phba: Pointer to HBA context object. 1131 * @phba: Pointer to HBA context object.
1101 * @pmb: Pointer to mailbox object. 1132 * @pmb: Pointer to mailbox object.
1102 * 1133 *
@@ -1140,7 +1171,7 @@ lpfc_sli_def_mbox_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
1140} 1171}
1141 1172
1142/** 1173/**
1143 * lpfc_sli_handle_mb_event: Handle mailbox completions from firmware. 1174 * lpfc_sli_handle_mb_event - Handle mailbox completions from firmware
1144 * @phba: Pointer to HBA context object. 1175 * @phba: Pointer to HBA context object.
1145 * 1176 *
1146 * This function is called with no lock held. This function processes all 1177 * This function is called with no lock held. This function processes all
@@ -1260,7 +1291,7 @@ lpfc_sli_handle_mb_event(struct lpfc_hba *phba)
1260} 1291}
1261 1292
1262/** 1293/**
1263 * lpfc_sli_get_buff: Get the buffer associated with the buffer tag. 1294 * lpfc_sli_get_buff - Get the buffer associated with the buffer tag
1264 * @phba: Pointer to HBA context object. 1295 * @phba: Pointer to HBA context object.
1265 * @pring: Pointer to driver SLI ring object. 1296 * @pring: Pointer to driver SLI ring object.
1266 * @tag: buffer tag. 1297 * @tag: buffer tag.
@@ -1288,7 +1319,7 @@ lpfc_sli_get_buff(struct lpfc_hba *phba,
1288 1319
1289 1320
1290/** 1321/**
1291 * lpfc_sli_process_unsol_iocb: Unsolicited iocb handler. 1322 * lpfc_sli_process_unsol_iocb - Unsolicited iocb handler
1292 * @phba: Pointer to HBA context object. 1323 * @phba: Pointer to HBA context object.
1293 * @pring: Pointer to driver SLI ring object. 1324 * @pring: Pointer to driver SLI ring object.
1294 * @saveq: Pointer to the unsolicited iocb. 1325 * @saveq: Pointer to the unsolicited iocb.
@@ -1484,7 +1515,7 @@ lpfc_sli_process_unsol_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
1484} 1515}
1485 1516
1486/** 1517/**
1487 * lpfc_sli_iocbq_lookup: Find command iocb for the given response iocb. 1518 * lpfc_sli_iocbq_lookup - Find command iocb for the given response iocb
1488 * @phba: Pointer to HBA context object. 1519 * @phba: Pointer to HBA context object.
1489 * @pring: Pointer to driver SLI ring object. 1520 * @pring: Pointer to driver SLI ring object.
1490 * @prspiocb: Pointer to response iocb object. 1521 * @prspiocb: Pointer to response iocb object.
@@ -1521,7 +1552,7 @@ lpfc_sli_iocbq_lookup(struct lpfc_hba *phba,
1521} 1552}
1522 1553
1523/** 1554/**
1524 * lpfc_sli_process_sol_iocb: process solicited iocb completion. 1555 * lpfc_sli_process_sol_iocb - process solicited iocb completion
1525 * @phba: Pointer to HBA context object. 1556 * @phba: Pointer to HBA context object.
1526 * @pring: Pointer to driver SLI ring object. 1557 * @pring: Pointer to driver SLI ring object.
1527 * @saveq: Pointer to the response iocb to be processed. 1558 * @saveq: Pointer to the response iocb to be processed.
@@ -1597,7 +1628,7 @@ lpfc_sli_process_sol_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
1597 * Ring <ringno> handler: unexpected completion IoTag 1628 * Ring <ringno> handler: unexpected completion IoTag
1598 * <IoTag> 1629 * <IoTag>
1599 */ 1630 */
1600 lpfc_printf_vlog(cmdiocbp->vport, KERN_WARNING, LOG_SLI, 1631 lpfc_printf_log(phba, KERN_WARNING, LOG_SLI,
1601 "0322 Ring %d handler: " 1632 "0322 Ring %d handler: "
1602 "unexpected completion IoTag x%x " 1633 "unexpected completion IoTag x%x "
1603 "Data: x%x x%x x%x x%x\n", 1634 "Data: x%x x%x x%x x%x\n",
@@ -1614,7 +1645,7 @@ lpfc_sli_process_sol_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
1614} 1645}
1615 1646
1616/** 1647/**
1617 * lpfc_sli_rsp_pointers_error: Response ring pointer error handler. 1648 * lpfc_sli_rsp_pointers_error - Response ring pointer error handler
1618 * @phba: Pointer to HBA context object. 1649 * @phba: Pointer to HBA context object.
1619 * @pring: Pointer to driver SLI ring object. 1650 * @pring: Pointer to driver SLI ring object.
1620 * 1651 *
@@ -1652,7 +1683,7 @@ lpfc_sli_rsp_pointers_error(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
1652} 1683}
1653 1684
1654/** 1685/**
1655 * lpfc_poll_eratt: Error attention polling timer timeout handler. 1686 * lpfc_poll_eratt - Error attention polling timer timeout handler
1656 * @ptr: Pointer to address of HBA context object. 1687 * @ptr: Pointer to address of HBA context object.
1657 * 1688 *
1658 * This function is invoked by the Error Attention polling timer when the 1689 * This function is invoked by the Error Attention polling timer when the
@@ -1682,7 +1713,7 @@ void lpfc_poll_eratt(unsigned long ptr)
1682} 1713}
1683 1714
1684/** 1715/**
1685 * lpfc_sli_poll_fcp_ring: Handle FCP ring completion in polling mode. 1716 * lpfc_sli_poll_fcp_ring - Handle FCP ring completion in polling mode
1686 * @phba: Pointer to HBA context object. 1717 * @phba: Pointer to HBA context object.
1687 * 1718 *
1688 * This function is called from lpfc_queuecommand, lpfc_poll_timeout, 1719 * This function is called from lpfc_queuecommand, lpfc_poll_timeout,
@@ -1845,7 +1876,7 @@ void lpfc_sli_poll_fcp_ring(struct lpfc_hba *phba)
1845} 1876}
1846 1877
1847/** 1878/**
1848 * lpfc_sli_handle_fast_ring_event: Handle ring events on FCP ring. 1879 * lpfc_sli_handle_fast_ring_event - Handle ring events on FCP ring
1849 * @phba: Pointer to HBA context object. 1880 * @phba: Pointer to HBA context object.
1850 * @pring: Pointer to driver SLI ring object. 1881 * @pring: Pointer to driver SLI ring object.
1851 * @mask: Host attention register mask for this ring. 1882 * @mask: Host attention register mask for this ring.
@@ -2037,7 +2068,7 @@ lpfc_sli_handle_fast_ring_event(struct lpfc_hba *phba,
2037} 2068}
2038 2069
2039/** 2070/**
2040 * lpfc_sli_handle_slow_ring_event: Handle ring events for non-FCP rings. 2071 * lpfc_sli_handle_slow_ring_event - Handle ring events for non-FCP rings
2041 * @phba: Pointer to HBA context object. 2072 * @phba: Pointer to HBA context object.
2042 * @pring: Pointer to driver SLI ring object. 2073 * @pring: Pointer to driver SLI ring object.
2043 * @mask: Host attention register mask for this ring. 2074 * @mask: Host attention register mask for this ring.
@@ -2311,7 +2342,7 @@ lpfc_sli_handle_slow_ring_event(struct lpfc_hba *phba,
2311} 2342}
2312 2343
2313/** 2344/**
2314 * lpfc_sli_abort_iocb_ring: Abort all iocbs in the ring. 2345 * lpfc_sli_abort_iocb_ring - Abort all iocbs in the ring
2315 * @phba: Pointer to HBA context object. 2346 * @phba: Pointer to HBA context object.
2316 * @pring: Pointer to driver SLI ring object. 2347 * @pring: Pointer to driver SLI ring object.
2317 * 2348 *
@@ -2325,7 +2356,6 @@ lpfc_sli_abort_iocb_ring(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
2325{ 2356{
2326 LIST_HEAD(completions); 2357 LIST_HEAD(completions);
2327 struct lpfc_iocbq *iocb, *next_iocb; 2358 struct lpfc_iocbq *iocb, *next_iocb;
2328 IOCB_t *cmd = NULL;
2329 2359
2330 if (pring->ringno == LPFC_ELS_RING) { 2360 if (pring->ringno == LPFC_ELS_RING) {
2331 lpfc_fabric_abort_hba(phba); 2361 lpfc_fabric_abort_hba(phba);
@@ -2344,23 +2374,13 @@ lpfc_sli_abort_iocb_ring(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
2344 2374
2345 spin_unlock_irq(&phba->hbalock); 2375 spin_unlock_irq(&phba->hbalock);
2346 2376
2347 while (!list_empty(&completions)) { 2377 /* Cancel all the IOCBs from the completions list */
2348 iocb = list_get_first(&completions, struct lpfc_iocbq, list); 2378 lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT,
2349 cmd = &iocb->iocb; 2379 IOERR_SLI_ABORTED);
2350 list_del_init(&iocb->list);
2351
2352 if (!iocb->iocb_cmpl)
2353 lpfc_sli_release_iocbq(phba, iocb);
2354 else {
2355 cmd->ulpStatus = IOSTAT_LOCAL_REJECT;
2356 cmd->un.ulpWord[4] = IOERR_SLI_ABORTED;
2357 (iocb->iocb_cmpl) (phba, iocb, iocb);
2358 }
2359 }
2360} 2380}
2361 2381
2362/** 2382/**
2363 * lpfc_sli_flush_fcp_rings: flush all iocbs in the fcp ring. 2383 * lpfc_sli_flush_fcp_rings - flush all iocbs in the fcp ring
2364 * @phba: Pointer to HBA context object. 2384 * @phba: Pointer to HBA context object.
2365 * 2385 *
2366 * This function flushes all iocbs in the fcp ring and frees all the iocb 2386 * This function flushes all iocbs in the fcp ring and frees all the iocb
@@ -2374,8 +2394,6 @@ lpfc_sli_flush_fcp_rings(struct lpfc_hba *phba)
2374{ 2394{
2375 LIST_HEAD(txq); 2395 LIST_HEAD(txq);
2376 LIST_HEAD(txcmplq); 2396 LIST_HEAD(txcmplq);
2377 struct lpfc_iocbq *iocb;
2378 IOCB_t *cmd = NULL;
2379 struct lpfc_sli *psli = &phba->sli; 2397 struct lpfc_sli *psli = &phba->sli;
2380 struct lpfc_sli_ring *pring; 2398 struct lpfc_sli_ring *pring;
2381 2399
@@ -2393,38 +2411,16 @@ lpfc_sli_flush_fcp_rings(struct lpfc_hba *phba)
2393 spin_unlock_irq(&phba->hbalock); 2411 spin_unlock_irq(&phba->hbalock);
2394 2412
2395 /* Flush the txq */ 2413 /* Flush the txq */
2396 while (!list_empty(&txq)) { 2414 lpfc_sli_cancel_iocbs(phba, &txq, IOSTAT_LOCAL_REJECT,
2397 iocb = list_get_first(&txq, struct lpfc_iocbq, list); 2415 IOERR_SLI_DOWN);
2398 cmd = &iocb->iocb;
2399 list_del_init(&iocb->list);
2400
2401 if (!iocb->iocb_cmpl)
2402 lpfc_sli_release_iocbq(phba, iocb);
2403 else {
2404 cmd->ulpStatus = IOSTAT_LOCAL_REJECT;
2405 cmd->un.ulpWord[4] = IOERR_SLI_DOWN;
2406 (iocb->iocb_cmpl) (phba, iocb, iocb);
2407 }
2408 }
2409 2416
2410 /* Flush the txcmpq */ 2417 /* Flush the txcmpq */
2411 while (!list_empty(&txcmplq)) { 2418 lpfc_sli_cancel_iocbs(phba, &txcmplq, IOSTAT_LOCAL_REJECT,
2412 iocb = list_get_first(&txcmplq, struct lpfc_iocbq, list); 2419 IOERR_SLI_DOWN);
2413 cmd = &iocb->iocb;
2414 list_del_init(&iocb->list);
2415
2416 if (!iocb->iocb_cmpl)
2417 lpfc_sli_release_iocbq(phba, iocb);
2418 else {
2419 cmd->ulpStatus = IOSTAT_LOCAL_REJECT;
2420 cmd->un.ulpWord[4] = IOERR_SLI_DOWN;
2421 (iocb->iocb_cmpl) (phba, iocb, iocb);
2422 }
2423 }
2424} 2420}
2425 2421
2426/** 2422/**
2427 * lpfc_sli_brdready: Check for host status bits. 2423 * lpfc_sli_brdready - Check for host status bits
2428 * @phba: Pointer to HBA context object. 2424 * @phba: Pointer to HBA context object.
2429 * @mask: Bit mask to be checked. 2425 * @mask: Bit mask to be checked.
2430 * 2426 *
@@ -2484,7 +2480,7 @@ lpfc_sli_brdready(struct lpfc_hba *phba, uint32_t mask)
2484#define BARRIER_TEST_PATTERN (0xdeadbeef) 2480#define BARRIER_TEST_PATTERN (0xdeadbeef)
2485 2481
2486/** 2482/**
2487 * lpfc_reset_barrier: Make HBA ready for HBA reset. 2483 * lpfc_reset_barrier - Make HBA ready for HBA reset
2488 * @phba: Pointer to HBA context object. 2484 * @phba: Pointer to HBA context object.
2489 * 2485 *
2490 * This function is called before resetting an HBA. This 2486 * This function is called before resetting an HBA. This
@@ -2564,7 +2560,7 @@ restore_hc:
2564} 2560}
2565 2561
2566/** 2562/**
2567 * lpfc_sli_brdkill: Issue a kill_board mailbox command. 2563 * lpfc_sli_brdkill - Issue a kill_board mailbox command
2568 * @phba: Pointer to HBA context object. 2564 * @phba: Pointer to HBA context object.
2569 * 2565 *
2570 * This function issues a kill_board mailbox command and waits for 2566 * This function issues a kill_board mailbox command and waits for
@@ -2651,7 +2647,7 @@ lpfc_sli_brdkill(struct lpfc_hba *phba)
2651} 2647}
2652 2648
2653/** 2649/**
2654 * lpfc_sli_brdreset: Reset the HBA. 2650 * lpfc_sli_brdreset - Reset the HBA
2655 * @phba: Pointer to HBA context object. 2651 * @phba: Pointer to HBA context object.
2656 * 2652 *
2657 * This function resets the HBA by writing HC_INITFF to the control 2653 * This function resets the HBA by writing HC_INITFF to the control
@@ -2714,7 +2710,7 @@ lpfc_sli_brdreset(struct lpfc_hba *phba)
2714} 2710}
2715 2711
2716/** 2712/**
2717 * lpfc_sli_brdrestart: Restart the HBA. 2713 * lpfc_sli_brdrestart - Restart the HBA
2718 * @phba: Pointer to HBA context object. 2714 * @phba: Pointer to HBA context object.
2719 * 2715 *
2720 * This function is called in the SLI initialization code path to 2716 * This function is called in the SLI initialization code path to
@@ -2781,7 +2777,7 @@ lpfc_sli_brdrestart(struct lpfc_hba *phba)
2781} 2777}
2782 2778
2783/** 2779/**
2784 * lpfc_sli_chipset_init: Wait for the restart of the HBA after a restart. 2780 * lpfc_sli_chipset_init - Wait for the restart of the HBA after a restart
2785 * @phba: Pointer to HBA context object. 2781 * @phba: Pointer to HBA context object.
2786 * 2782 *
2787 * This function is called after a HBA restart to wait for successful 2783 * This function is called after a HBA restart to wait for successful
@@ -2876,7 +2872,7 @@ lpfc_sli_chipset_init(struct lpfc_hba *phba)
2876} 2872}
2877 2873
2878/** 2874/**
2879 * lpfc_sli_hbq_count: Get the number of HBQs to be configured. 2875 * lpfc_sli_hbq_count - Get the number of HBQs to be configured
2880 * 2876 *
2881 * This function calculates and returns the number of HBQs required to be 2877 * This function calculates and returns the number of HBQs required to be
2882 * configured. 2878 * configured.
@@ -2888,7 +2884,7 @@ lpfc_sli_hbq_count(void)
2888} 2884}
2889 2885
2890/** 2886/**
2891 * lpfc_sli_hbq_entry_count: Calculate total number of hbq entries. 2887 * lpfc_sli_hbq_entry_count - Calculate total number of hbq entries
2892 * 2888 *
2893 * This function adds the number of hbq entries in every HBQ to get 2889 * This function adds the number of hbq entries in every HBQ to get
2894 * the total number of hbq entries required for the HBA and returns 2890 * the total number of hbq entries required for the HBA and returns
@@ -2907,7 +2903,7 @@ lpfc_sli_hbq_entry_count(void)
2907} 2903}
2908 2904
2909/** 2905/**
2910 * lpfc_sli_hbq_size: Calculate memory required for all hbq entries. 2906 * lpfc_sli_hbq_size - Calculate memory required for all hbq entries
2911 * 2907 *
2912 * This function calculates amount of memory required for all hbq entries 2908 * This function calculates amount of memory required for all hbq entries
2913 * to be configured and returns the total memory required. 2909 * to be configured and returns the total memory required.
@@ -2919,7 +2915,7 @@ lpfc_sli_hbq_size(void)
2919} 2915}
2920 2916
2921/** 2917/**
2922 * lpfc_sli_hbq_setup: configure and initialize HBQs. 2918 * lpfc_sli_hbq_setup - configure and initialize HBQs
2923 * @phba: Pointer to HBA context object. 2919 * @phba: Pointer to HBA context object.
2924 * 2920 *
2925 * This function is called during the SLI initialization to configure 2921 * This function is called during the SLI initialization to configure
@@ -2988,7 +2984,7 @@ lpfc_sli_hbq_setup(struct lpfc_hba *phba)
2988} 2984}
2989 2985
2990/** 2986/**
2991 * lpfc_sli_config_port: Issue config port mailbox command. 2987 * lpfc_sli_config_port - Issue config port mailbox command
2992 * @phba: Pointer to HBA context object. 2988 * @phba: Pointer to HBA context object.
2993 * @sli_mode: sli mode - 2/3 2989 * @sli_mode: sli mode - 2/3
2994 * 2990 *
@@ -3114,7 +3110,7 @@ do_prep_failed:
3114 3110
3115 3111
3116/** 3112/**
3117 * lpfc_sli_hba_setup: SLI intialization function. 3113 * lpfc_sli_hba_setup - SLI intialization function
3118 * @phba: Pointer to HBA context object. 3114 * @phba: Pointer to HBA context object.
3119 * 3115 *
3120 * This function is the main SLI intialization function. This function 3116 * This function is the main SLI intialization function. This function
@@ -3206,7 +3202,7 @@ lpfc_sli_hba_setup_error:
3206 3202
3207 3203
3208/** 3204/**
3209 * lpfc_mbox_timeout: Timeout call back function for mbox timer. 3205 * lpfc_mbox_timeout - Timeout call back function for mbox timer
3210 * @ptr: context object - pointer to hba structure. 3206 * @ptr: context object - pointer to hba structure.
3211 * 3207 *
3212 * This is the callback function for mailbox timer. The mailbox 3208 * This is the callback function for mailbox timer. The mailbox
@@ -3237,7 +3233,7 @@ lpfc_mbox_timeout(unsigned long ptr)
3237 3233
3238 3234
3239/** 3235/**
3240 * lpfc_mbox_timeout_handler: Worker thread function to handle mailbox timeout. 3236 * lpfc_mbox_timeout_handler - Worker thread function to handle mailbox timeout
3241 * @phba: Pointer to HBA context object. 3237 * @phba: Pointer to HBA context object.
3242 * 3238 *
3243 * This function is called from worker thread when a mailbox command times out. 3239 * This function is called from worker thread when a mailbox command times out.
@@ -3252,6 +3248,21 @@ lpfc_mbox_timeout_handler(struct lpfc_hba *phba)
3252 struct lpfc_sli *psli = &phba->sli; 3248 struct lpfc_sli *psli = &phba->sli;
3253 struct lpfc_sli_ring *pring; 3249 struct lpfc_sli_ring *pring;
3254 3250
3251 /* Check the pmbox pointer first. There is a race condition
3252 * between the mbox timeout handler getting executed in the
3253 * worklist and the mailbox actually completing. When this
3254 * race condition occurs, the mbox_active will be NULL.
3255 */
3256 spin_lock_irq(&phba->hbalock);
3257 if (pmbox == NULL) {
3258 lpfc_printf_log(phba, KERN_WARNING,
3259 LOG_MBOX | LOG_SLI,
3260 "0353 Active Mailbox cleared - mailbox timeout "
3261 "exiting\n");
3262 spin_unlock_irq(&phba->hbalock);
3263 return;
3264 }
3265
3255 /* Mbox cmd <mbxCommand> timeout */ 3266 /* Mbox cmd <mbxCommand> timeout */
3256 lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI, 3267 lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
3257 "0310 Mailbox command x%x timeout Data: x%x x%x x%p\n", 3268 "0310 Mailbox command x%x timeout Data: x%x x%x x%p\n",
@@ -3259,6 +3270,7 @@ lpfc_mbox_timeout_handler(struct lpfc_hba *phba)
3259 phba->pport->port_state, 3270 phba->pport->port_state,
3260 phba->sli.sli_flag, 3271 phba->sli.sli_flag,
3261 phba->sli.mbox_active); 3272 phba->sli.mbox_active);
3273 spin_unlock_irq(&phba->hbalock);
3262 3274
3263 /* Setting state unknown so lpfc_sli_abort_iocb_ring 3275 /* Setting state unknown so lpfc_sli_abort_iocb_ring
3264 * would get IOCB_ERROR from lpfc_sli_issue_iocb, allowing 3276 * would get IOCB_ERROR from lpfc_sli_issue_iocb, allowing
@@ -3295,7 +3307,7 @@ lpfc_mbox_timeout_handler(struct lpfc_hba *phba)
3295} 3307}
3296 3308
3297/** 3309/**
3298 * lpfc_sli_issue_mbox: Issue a mailbox command to firmware. 3310 * lpfc_sli_issue_mbox - Issue a mailbox command to firmware
3299 * @phba: Pointer to HBA context object. 3311 * @phba: Pointer to HBA context object.
3300 * @pmbox: Pointer to mailbox object. 3312 * @pmbox: Pointer to mailbox object.
3301 * @flag: Flag indicating how the mailbox need to be processed. 3313 * @flag: Flag indicating how the mailbox need to be processed.
@@ -3365,6 +3377,12 @@ lpfc_sli_issue_mbox(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmbox, uint32_t flag)
3365 goto out_not_finished; 3377 goto out_not_finished;
3366 } 3378 }
3367 3379
3380 /* If HBA has a deferred error attention, fail the iocb. */
3381 if (unlikely(phba->hba_flag & DEFER_ERATT)) {
3382 spin_unlock_irqrestore(&phba->hbalock, drvr_flag);
3383 goto out_not_finished;
3384 }
3385
3368 psli = &phba->sli; 3386 psli = &phba->sli;
3369 3387
3370 mb = &pmbox->mb; 3388 mb = &pmbox->mb;
@@ -3632,7 +3650,7 @@ out_not_finished:
3632} 3650}
3633 3651
3634/** 3652/**
3635 * __lpfc_sli_ringtx_put: Add an iocb to the txq. 3653 * __lpfc_sli_ringtx_put - Add an iocb to the txq
3636 * @phba: Pointer to HBA context object. 3654 * @phba: Pointer to HBA context object.
3637 * @pring: Pointer to driver SLI ring object. 3655 * @pring: Pointer to driver SLI ring object.
3638 * @piocb: Pointer to address of newly added command iocb. 3656 * @piocb: Pointer to address of newly added command iocb.
@@ -3651,7 +3669,7 @@ __lpfc_sli_ringtx_put(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
3651} 3669}
3652 3670
3653/** 3671/**
3654 * lpfc_sli_next_iocb: Get the next iocb in the txq. 3672 * lpfc_sli_next_iocb - Get the next iocb in the txq
3655 * @phba: Pointer to HBA context object. 3673 * @phba: Pointer to HBA context object.
3656 * @pring: Pointer to driver SLI ring object. 3674 * @pring: Pointer to driver SLI ring object.
3657 * @piocb: Pointer to address of newly added command iocb. 3675 * @piocb: Pointer to address of newly added command iocb.
@@ -3683,7 +3701,7 @@ lpfc_sli_next_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
3683} 3701}
3684 3702
3685/** 3703/**
3686 * __lpfc_sli_issue_iocb: Lockless version of lpfc_sli_issue_iocb. 3704 * __lpfc_sli_issue_iocb - Lockless version of lpfc_sli_issue_iocb
3687 * @phba: Pointer to HBA context object. 3705 * @phba: Pointer to HBA context object.
3688 * @pring: Pointer to driver SLI ring object. 3706 * @pring: Pointer to driver SLI ring object.
3689 * @piocb: Pointer to command iocb. 3707 * @piocb: Pointer to command iocb.
@@ -3729,6 +3747,10 @@ __lpfc_sli_issue_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
3729 if (unlikely(pci_channel_offline(phba->pcidev))) 3747 if (unlikely(pci_channel_offline(phba->pcidev)))
3730 return IOCB_ERROR; 3748 return IOCB_ERROR;
3731 3749
3750 /* If HBA has a deferred error attention, fail the iocb. */
3751 if (unlikely(phba->hba_flag & DEFER_ERATT))
3752 return IOCB_ERROR;
3753
3732 /* 3754 /*
3733 * We should never get an IOCB if we are in a < LINK_DOWN state 3755 * We should never get an IOCB if we are in a < LINK_DOWN state
3734 */ 3756 */
@@ -3813,7 +3835,7 @@ __lpfc_sli_issue_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
3813 3835
3814 3836
3815/** 3837/**
3816 * lpfc_sli_issue_iocb: Wrapper function for __lpfc_sli_issue_iocb. 3838 * lpfc_sli_issue_iocb - Wrapper function for __lpfc_sli_issue_iocb
3817 * @phba: Pointer to HBA context object. 3839 * @phba: Pointer to HBA context object.
3818 * @pring: Pointer to driver SLI ring object. 3840 * @pring: Pointer to driver SLI ring object.
3819 * @piocb: Pointer to command iocb. 3841 * @piocb: Pointer to command iocb.
@@ -3840,7 +3862,7 @@ lpfc_sli_issue_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
3840} 3862}
3841 3863
3842/** 3864/**
3843 * lpfc_extra_ring_setup: Extra ring setup function. 3865 * lpfc_extra_ring_setup - Extra ring setup function
3844 * @phba: Pointer to HBA context object. 3866 * @phba: Pointer to HBA context object.
3845 * 3867 *
3846 * This function is called while driver attaches with the 3868 * This function is called while driver attaches with the
@@ -3886,7 +3908,7 @@ lpfc_extra_ring_setup( struct lpfc_hba *phba)
3886} 3908}
3887 3909
3888/** 3910/**
3889 * lpfc_sli_async_event_handler: ASYNC iocb handler function. 3911 * lpfc_sli_async_event_handler - ASYNC iocb handler function
3890 * @phba: Pointer to HBA context object. 3912 * @phba: Pointer to HBA context object.
3891 * @pring: Pointer to driver SLI ring object. 3913 * @pring: Pointer to driver SLI ring object.
3892 * @iocbq: Pointer to iocb object. 3914 * @iocbq: Pointer to iocb object.
@@ -3907,6 +3929,7 @@ lpfc_sli_async_event_handler(struct lpfc_hba * phba,
3907 uint16_t temp; 3929 uint16_t temp;
3908 struct temp_event temp_event_data; 3930 struct temp_event temp_event_data;
3909 struct Scsi_Host *shost; 3931 struct Scsi_Host *shost;
3932 uint32_t *iocb_w;
3910 3933
3911 icmd = &iocbq->iocb; 3934 icmd = &iocbq->iocb;
3912 evt_code = icmd->un.asyncstat.evt_code; 3935 evt_code = icmd->un.asyncstat.evt_code;
@@ -3914,13 +3937,23 @@ lpfc_sli_async_event_handler(struct lpfc_hba * phba,
3914 3937
3915 if ((evt_code != ASYNC_TEMP_WARN) && 3938 if ((evt_code != ASYNC_TEMP_WARN) &&
3916 (evt_code != ASYNC_TEMP_SAFE)) { 3939 (evt_code != ASYNC_TEMP_SAFE)) {
3940 iocb_w = (uint32_t *) icmd;
3917 lpfc_printf_log(phba, 3941 lpfc_printf_log(phba,
3918 KERN_ERR, 3942 KERN_ERR,
3919 LOG_SLI, 3943 LOG_SLI,
3920 "0346 Ring %d handler: unexpected ASYNC_STATUS" 3944 "0346 Ring %d handler: unexpected ASYNC_STATUS"
3921 " evt_code 0x%x\n", 3945 " evt_code 0x%x \n"
3946 "W0 0x%08x W1 0x%08x W2 0x%08x W3 0x%08x\n"
3947 "W4 0x%08x W5 0x%08x W6 0x%08x W7 0x%08x\n"
3948 "W8 0x%08x W9 0x%08x W10 0x%08x W11 0x%08x\n"
3949 "W12 0x%08x W13 0x%08x W14 0x%08x W15 0x%08x\n",
3922 pring->ringno, 3950 pring->ringno,
3923 icmd->un.asyncstat.evt_code); 3951 icmd->un.asyncstat.evt_code,
3952 iocb_w[0], iocb_w[1], iocb_w[2], iocb_w[3],
3953 iocb_w[4], iocb_w[5], iocb_w[6], iocb_w[7],
3954 iocb_w[8], iocb_w[9], iocb_w[10], iocb_w[11],
3955 iocb_w[12], iocb_w[13], iocb_w[14], iocb_w[15]);
3956
3924 return; 3957 return;
3925 } 3958 }
3926 temp_event_data.data = (uint32_t)temp; 3959 temp_event_data.data = (uint32_t)temp;
@@ -3954,7 +3987,7 @@ lpfc_sli_async_event_handler(struct lpfc_hba * phba,
3954 3987
3955 3988
3956/** 3989/**
3957 * lpfc_sli_setup: SLI ring setup function. 3990 * lpfc_sli_setup - SLI ring setup function
3958 * @phba: Pointer to HBA context object. 3991 * @phba: Pointer to HBA context object.
3959 * 3992 *
3960 * lpfc_sli_setup sets up rings of the SLI interface with 3993 * lpfc_sli_setup sets up rings of the SLI interface with
@@ -4076,7 +4109,7 @@ lpfc_sli_setup(struct lpfc_hba *phba)
4076} 4109}
4077 4110
4078/** 4111/**
4079 * lpfc_sli_queue_setup: Queue initialization function. 4112 * lpfc_sli_queue_setup - Queue initialization function
4080 * @phba: Pointer to HBA context object. 4113 * @phba: Pointer to HBA context object.
4081 * 4114 *
4082 * lpfc_sli_queue_setup sets up mailbox queues and iocb queues for each 4115 * lpfc_sli_queue_setup sets up mailbox queues and iocb queues for each
@@ -4115,7 +4148,7 @@ lpfc_sli_queue_setup(struct lpfc_hba *phba)
4115} 4148}
4116 4149
4117/** 4150/**
4118 * lpfc_sli_host_down: Vport cleanup function. 4151 * lpfc_sli_host_down - Vport cleanup function
4119 * @vport: Pointer to virtual port object. 4152 * @vport: Pointer to virtual port object.
4120 * 4153 *
4121 * lpfc_sli_host_down is called to clean up the resources 4154 * lpfc_sli_host_down is called to clean up the resources
@@ -4179,22 +4212,14 @@ lpfc_sli_host_down(struct lpfc_vport *vport)
4179 4212
4180 spin_unlock_irqrestore(&phba->hbalock, flags); 4213 spin_unlock_irqrestore(&phba->hbalock, flags);
4181 4214
4182 while (!list_empty(&completions)) { 4215 /* Cancel all the IOCBs from the completions list */
4183 list_remove_head(&completions, iocb, struct lpfc_iocbq, list); 4216 lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT,
4184 4217 IOERR_SLI_DOWN);
4185 if (!iocb->iocb_cmpl)
4186 lpfc_sli_release_iocbq(phba, iocb);
4187 else {
4188 iocb->iocb.ulpStatus = IOSTAT_LOCAL_REJECT;
4189 iocb->iocb.un.ulpWord[4] = IOERR_SLI_DOWN;
4190 (iocb->iocb_cmpl) (phba, iocb, iocb);
4191 }
4192 }
4193 return 1; 4218 return 1;
4194} 4219}
4195 4220
4196/** 4221/**
4197 * lpfc_sli_hba_down: Resource cleanup function for the HBA. 4222 * lpfc_sli_hba_down - Resource cleanup function for the HBA
4198 * @phba: Pointer to HBA context object. 4223 * @phba: Pointer to HBA context object.
4199 * 4224 *
4200 * This function cleans up all iocb, buffers, mailbox commands 4225 * This function cleans up all iocb, buffers, mailbox commands
@@ -4216,8 +4241,6 @@ lpfc_sli_hba_down(struct lpfc_hba *phba)
4216 struct lpfc_sli_ring *pring; 4241 struct lpfc_sli_ring *pring;
4217 struct lpfc_dmabuf *buf_ptr; 4242 struct lpfc_dmabuf *buf_ptr;
4218 LPFC_MBOXQ_t *pmb; 4243 LPFC_MBOXQ_t *pmb;
4219 struct lpfc_iocbq *iocb;
4220 IOCB_t *cmd = NULL;
4221 int i; 4244 int i;
4222 unsigned long flags = 0; 4245 unsigned long flags = 0;
4223 4246
@@ -4245,18 +4268,9 @@ lpfc_sli_hba_down(struct lpfc_hba *phba)
4245 } 4268 }
4246 spin_unlock_irqrestore(&phba->hbalock, flags); 4269 spin_unlock_irqrestore(&phba->hbalock, flags);
4247 4270
4248 while (!list_empty(&completions)) { 4271 /* Cancel all the IOCBs from the completions list */
4249 list_remove_head(&completions, iocb, struct lpfc_iocbq, list); 4272 lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT,
4250 cmd = &iocb->iocb; 4273 IOERR_SLI_DOWN);
4251
4252 if (!iocb->iocb_cmpl)
4253 lpfc_sli_release_iocbq(phba, iocb);
4254 else {
4255 cmd->ulpStatus = IOSTAT_LOCAL_REJECT;
4256 cmd->un.ulpWord[4] = IOERR_SLI_DOWN;
4257 (iocb->iocb_cmpl) (phba, iocb, iocb);
4258 }
4259 }
4260 4274
4261 spin_lock_irqsave(&phba->hbalock, flags); 4275 spin_lock_irqsave(&phba->hbalock, flags);
4262 list_splice_init(&phba->elsbuf, &completions); 4276 list_splice_init(&phba->elsbuf, &completions);
@@ -4299,7 +4313,7 @@ lpfc_sli_hba_down(struct lpfc_hba *phba)
4299} 4313}
4300 4314
4301/** 4315/**
4302 * lpfc_sli_pcimem_bcopy: SLI memory copy function. 4316 * lpfc_sli_pcimem_bcopy - SLI memory copy function
4303 * @srcp: Source memory pointer. 4317 * @srcp: Source memory pointer.
4304 * @destp: Destination memory pointer. 4318 * @destp: Destination memory pointer.
4305 * @cnt: Number of words required to be copied. 4319 * @cnt: Number of words required to be copied.
@@ -4329,7 +4343,7 @@ lpfc_sli_pcimem_bcopy(void *srcp, void *destp, uint32_t cnt)
4329 4343
4330 4344
4331/** 4345/**
4332 * lpfc_sli_ringpostbuf_put: Function to add a buffer to postbufq. 4346 * lpfc_sli_ringpostbuf_put - Function to add a buffer to postbufq
4333 * @phba: Pointer to HBA context object. 4347 * @phba: Pointer to HBA context object.
4334 * @pring: Pointer to driver SLI ring object. 4348 * @pring: Pointer to driver SLI ring object.
4335 * @mp: Pointer to driver buffer object. 4349 * @mp: Pointer to driver buffer object.
@@ -4352,8 +4366,7 @@ lpfc_sli_ringpostbuf_put(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
4352} 4366}
4353 4367
4354/** 4368/**
4355 * lpfc_sli_get_buffer_tag: Tag allocation function for a buffer posted 4369 * lpfc_sli_get_buffer_tag - allocates a tag for a CMD_QUE_XRI64_CX buffer
4356 * using CMD_QUE_XRI64_CX iocb.
4357 * @phba: Pointer to HBA context object. 4370 * @phba: Pointer to HBA context object.
4358 * 4371 *
4359 * When HBQ is enabled, buffers are searched based on tags. This function 4372 * When HBQ is enabled, buffers are searched based on tags. This function
@@ -4378,8 +4391,7 @@ lpfc_sli_get_buffer_tag(struct lpfc_hba *phba)
4378} 4391}
4379 4392
4380/** 4393/**
4381 * lpfc_sli_ring_taggedbuf_get: Search HBQ buffer associated with 4394 * lpfc_sli_ring_taggedbuf_get - find HBQ buffer associated with given tag
4382 * posted using CMD_QUE_XRI64_CX iocb.
4383 * @phba: Pointer to HBA context object. 4395 * @phba: Pointer to HBA context object.
4384 * @pring: Pointer to driver SLI ring object. 4396 * @pring: Pointer to driver SLI ring object.
4385 * @tag: Buffer tag. 4397 * @tag: Buffer tag.
@@ -4422,8 +4434,7 @@ lpfc_sli_ring_taggedbuf_get(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
4422} 4434}
4423 4435
4424/** 4436/**
4425 * lpfc_sli_ringpostbuf_get: SLI2 buffer search function for 4437 * lpfc_sli_ringpostbuf_get - search buffers for unsolicited CT and ELS events
4426 * unsolicited ct and els events.
4427 * @phba: Pointer to HBA context object. 4438 * @phba: Pointer to HBA context object.
4428 * @pring: Pointer to driver SLI ring object. 4439 * @pring: Pointer to driver SLI ring object.
4429 * @phys: DMA address of the buffer. 4440 * @phys: DMA address of the buffer.
@@ -4466,7 +4477,7 @@ lpfc_sli_ringpostbuf_get(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
4466} 4477}
4467 4478
4468/** 4479/**
4469 * lpfc_sli_abort_els_cmpl: Completion handler for the els abort iocbs. 4480 * lpfc_sli_abort_els_cmpl - Completion handler for the els abort iocbs
4470 * @phba: Pointer to HBA context object. 4481 * @phba: Pointer to HBA context object.
4471 * @cmdiocb: Pointer to driver command iocb object. 4482 * @cmdiocb: Pointer to driver command iocb object.
4472 * @rspiocb: Pointer to driver response iocb object. 4483 * @rspiocb: Pointer to driver response iocb object.
@@ -4542,7 +4553,7 @@ lpfc_sli_abort_els_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
4542} 4553}
4543 4554
4544/** 4555/**
4545 * lpfc_ignore_els_cmpl: Completion handler for aborted ELS command. 4556 * lpfc_ignore_els_cmpl - Completion handler for aborted ELS command
4546 * @phba: Pointer to HBA context object. 4557 * @phba: Pointer to HBA context object.
4547 * @cmdiocb: Pointer to driver command iocb object. 4558 * @cmdiocb: Pointer to driver command iocb object.
4548 * @rspiocb: Pointer to driver response iocb object. 4559 * @rspiocb: Pointer to driver response iocb object.
@@ -4572,7 +4583,7 @@ lpfc_ignore_els_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
4572} 4583}
4573 4584
4574/** 4585/**
4575 * lpfc_sli_issue_abort_iotag: Abort function for a command iocb. 4586 * lpfc_sli_issue_abort_iotag - Abort function for a command iocb
4576 * @phba: Pointer to HBA context object. 4587 * @phba: Pointer to HBA context object.
4577 * @pring: Pointer to driver SLI ring object. 4588 * @pring: Pointer to driver SLI ring object.
4578 * @cmdiocb: Pointer to driver command iocb object. 4589 * @cmdiocb: Pointer to driver command iocb object.
@@ -4658,15 +4669,14 @@ abort_iotag_exit:
4658} 4669}
4659 4670
4660/** 4671/**
4661 * lpfc_sli_validate_fcp_iocb: Filtering function, used to find commands 4672 * lpfc_sli_validate_fcp_iocb - find commands associated with a vport or LUN
4662 * associated with a vport/SCSI target/lun.
4663 * @iocbq: Pointer to driver iocb object. 4673 * @iocbq: Pointer to driver iocb object.
4664 * @vport: Pointer to driver virtual port object. 4674 * @vport: Pointer to driver virtual port object.
4665 * @tgt_id: SCSI ID of the target. 4675 * @tgt_id: SCSI ID of the target.
4666 * @lun_id: LUN ID of the scsi device. 4676 * @lun_id: LUN ID of the scsi device.
4667 * @ctx_cmd: LPFC_CTX_LUN/LPFC_CTX_TGT/LPFC_CTX_HOST 4677 * @ctx_cmd: LPFC_CTX_LUN/LPFC_CTX_TGT/LPFC_CTX_HOST
4668 * 4678 *
4669 * This function acts as iocb filter for functions which abort or count 4679 * This function acts as an iocb filter for functions which abort or count
4670 * all FCP iocbs pending on a lun/SCSI target/SCSI host. It will return 4680 * all FCP iocbs pending on a lun/SCSI target/SCSI host. It will return
4671 * 0 if the filtering criteria is met for the given iocb and will return 4681 * 0 if the filtering criteria is met for the given iocb and will return
4672 * 1 if the filtering criteria is not met. 4682 * 1 if the filtering criteria is not met.
@@ -4724,7 +4734,7 @@ lpfc_sli_validate_fcp_iocb(struct lpfc_iocbq *iocbq, struct lpfc_vport *vport,
4724} 4734}
4725 4735
4726/** 4736/**
4727 * lpfc_sli_sum_iocb: Function to count the number of FCP iocbs pending. 4737 * lpfc_sli_sum_iocb - Function to count the number of FCP iocbs pending
4728 * @vport: Pointer to virtual port. 4738 * @vport: Pointer to virtual port.
4729 * @tgt_id: SCSI ID of the target. 4739 * @tgt_id: SCSI ID of the target.
4730 * @lun_id: LUN ID of the scsi device. 4740 * @lun_id: LUN ID of the scsi device.
@@ -4762,8 +4772,7 @@ lpfc_sli_sum_iocb(struct lpfc_vport *vport, uint16_t tgt_id, uint64_t lun_id,
4762} 4772}
4763 4773
4764/** 4774/**
4765 * lpfc_sli_abort_fcp_cmpl: Completion handler function for an aborted 4775 * lpfc_sli_abort_fcp_cmpl - Completion handler function for aborted FCP IOCBs
4766 * FCP iocb.
4767 * @phba: Pointer to HBA context object 4776 * @phba: Pointer to HBA context object
4768 * @cmdiocb: Pointer to command iocb object. 4777 * @cmdiocb: Pointer to command iocb object.
4769 * @rspiocb: Pointer to response iocb object. 4778 * @rspiocb: Pointer to response iocb object.
@@ -4781,8 +4790,7 @@ lpfc_sli_abort_fcp_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
4781} 4790}
4782 4791
4783/** 4792/**
4784 * lpfc_sli_abort_iocb: This function issue abort for all SCSI commands 4793 * lpfc_sli_abort_iocb - issue abort for all commands on a host/target/LUN
4785 * pending on a SCSI host(vport)/target/lun.
4786 * @vport: Pointer to virtual port. 4794 * @vport: Pointer to virtual port.
4787 * @pring: Pointer to driver SLI ring object. 4795 * @pring: Pointer to driver SLI ring object.
4788 * @tgt_id: SCSI ID of the target. 4796 * @tgt_id: SCSI ID of the target.
@@ -4854,8 +4862,7 @@ lpfc_sli_abort_iocb(struct lpfc_vport *vport, struct lpfc_sli_ring *pring,
4854} 4862}
4855 4863
4856/** 4864/**
4857 * lpfc_sli_wake_iocb_wait: iocb completion handler for iocb issued using 4865 * lpfc_sli_wake_iocb_wait - lpfc_sli_issue_iocb_wait's completion handler
4858 * lpfc_sli_issue_iocb_wait.
4859 * @phba: Pointer to HBA context object. 4866 * @phba: Pointer to HBA context object.
4860 * @cmdiocbq: Pointer to command iocb. 4867 * @cmdiocbq: Pointer to command iocb.
4861 * @rspiocbq: Pointer to response iocb. 4868 * @rspiocbq: Pointer to response iocb.
@@ -4893,7 +4900,7 @@ lpfc_sli_wake_iocb_wait(struct lpfc_hba *phba,
4893} 4900}
4894 4901
4895/** 4902/**
4896 * lpfc_sli_issue_iocb_wait: Synchronous function to issue iocb commands. 4903 * lpfc_sli_issue_iocb_wait - Synchronous function to issue iocb commands
4897 * @phba: Pointer to HBA context object.. 4904 * @phba: Pointer to HBA context object..
4898 * @pring: Pointer to sli ring. 4905 * @pring: Pointer to sli ring.
4899 * @piocb: Pointer to command iocb. 4906 * @piocb: Pointer to command iocb.
@@ -5000,7 +5007,7 @@ lpfc_sli_issue_iocb_wait(struct lpfc_hba *phba,
5000} 5007}
5001 5008
5002/** 5009/**
5003 * lpfc_sli_issue_mbox_wait: Synchronous function to issue mailbox. 5010 * lpfc_sli_issue_mbox_wait - Synchronous function to issue mailbox
5004 * @phba: Pointer to HBA context object. 5011 * @phba: Pointer to HBA context object.
5005 * @pmboxq: Pointer to driver mailbox object. 5012 * @pmboxq: Pointer to driver mailbox object.
5006 * @timeout: Timeout in number of seconds. 5013 * @timeout: Timeout in number of seconds.
@@ -5070,7 +5077,7 @@ lpfc_sli_issue_mbox_wait(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq,
5070} 5077}
5071 5078
5072/** 5079/**
5073 * lpfc_sli_flush_mbox_queue: mailbox queue cleanup function. 5080 * lpfc_sli_flush_mbox_queue - mailbox queue cleanup function
5074 * @phba: Pointer to HBA context. 5081 * @phba: Pointer to HBA context.
5075 * 5082 *
5076 * This function is called to cleanup any pending mailbox 5083 * This function is called to cleanup any pending mailbox
@@ -5113,7 +5120,7 @@ lpfc_sli_flush_mbox_queue(struct lpfc_hba * phba)
5113} 5120}
5114 5121
5115/** 5122/**
5116 * lpfc_sli_check_eratt: check error attention events 5123 * lpfc_sli_check_eratt - check error attention events
5117 * @phba: Pointer to HBA context. 5124 * @phba: Pointer to HBA context.
5118 * 5125 *
5119 * This function is called form timer soft interrupt context to check HBA's 5126 * This function is called form timer soft interrupt context to check HBA's
@@ -5145,11 +5152,31 @@ lpfc_sli_check_eratt(struct lpfc_hba *phba)
5145 return 0; 5152 return 0;
5146 } 5153 }
5147 5154
5155 /*
5156 * If there is deferred error attention, do not check for error
5157 * attention
5158 */
5159 if (unlikely(phba->hba_flag & DEFER_ERATT)) {
5160 spin_unlock_irq(&phba->hbalock);
5161 return 0;
5162 }
5163
5148 /* Read chip Host Attention (HA) register */ 5164 /* Read chip Host Attention (HA) register */
5149 ha_copy = readl(phba->HAregaddr); 5165 ha_copy = readl(phba->HAregaddr);
5150 if (ha_copy & HA_ERATT) { 5166 if (ha_copy & HA_ERATT) {
5151 /* Read host status register to retrieve error event */ 5167 /* Read host status register to retrieve error event */
5152 lpfc_sli_read_hs(phba); 5168 lpfc_sli_read_hs(phba);
5169
5170 /* Check if there is a deferred error condition is active */
5171 if ((HS_FFER1 & phba->work_hs) &&
5172 ((HS_FFER2 | HS_FFER3 | HS_FFER4 | HS_FFER5 |
5173 HS_FFER6 | HS_FFER7) & phba->work_hs)) {
5174 phba->hba_flag |= DEFER_ERATT;
5175 /* Clear all interrupt enable conditions */
5176 writel(0, phba->HCregaddr);
5177 readl(phba->HCregaddr);
5178 }
5179
5153 /* Set the driver HA work bitmap */ 5180 /* Set the driver HA work bitmap */
5154 phba->work_ha |= HA_ERATT; 5181 phba->work_ha |= HA_ERATT;
5155 /* Indicate polling handles this ERATT */ 5182 /* Indicate polling handles this ERATT */
@@ -5162,7 +5189,7 @@ lpfc_sli_check_eratt(struct lpfc_hba *phba)
5162} 5189}
5163 5190
5164/** 5191/**
5165 * lpfc_sp_intr_handler: The slow-path interrupt handler of lpfc driver. 5192 * lpfc_sp_intr_handler - The slow-path interrupt handler of lpfc driver
5166 * @irq: Interrupt number. 5193 * @irq: Interrupt number.
5167 * @dev_id: The device context pointer. 5194 * @dev_id: The device context pointer.
5168 * 5195 *
@@ -5238,6 +5265,16 @@ lpfc_sp_intr_handler(int irq, void *dev_id)
5238 /* Indicate interrupt handler handles ERATT */ 5265 /* Indicate interrupt handler handles ERATT */
5239 phba->hba_flag |= HBA_ERATT_HANDLED; 5266 phba->hba_flag |= HBA_ERATT_HANDLED;
5240 } 5267 }
5268
5269 /*
5270 * If there is deferred error attention, do not check for any
5271 * interrupt.
5272 */
5273 if (unlikely(phba->hba_flag & DEFER_ERATT)) {
5274 spin_unlock_irq(&phba->hbalock);
5275 return IRQ_NONE;
5276 }
5277
5241 /* Clear up only attention source related to slow-path */ 5278 /* Clear up only attention source related to slow-path */
5242 writel((ha_copy & (HA_MBATT | HA_R2_CLR_MSK)), 5279 writel((ha_copy & (HA_MBATT | HA_R2_CLR_MSK)),
5243 phba->HAregaddr); 5280 phba->HAregaddr);
@@ -5309,8 +5346,22 @@ lpfc_sp_intr_handler(int irq, void *dev_id)
5309 } 5346 }
5310 } 5347 }
5311 spin_lock_irqsave(&phba->hbalock, iflag); 5348 spin_lock_irqsave(&phba->hbalock, iflag);
5312 if (work_ha_copy & HA_ERATT) 5349 if (work_ha_copy & HA_ERATT) {
5313 lpfc_sli_read_hs(phba); 5350 lpfc_sli_read_hs(phba);
5351 /*
5352 * Check if there is a deferred error condition
5353 * is active
5354 */
5355 if ((HS_FFER1 & phba->work_hs) &&
5356 ((HS_FFER2 | HS_FFER3 | HS_FFER4 | HS_FFER5 |
5357 HS_FFER6 | HS_FFER7) & phba->work_hs)) {
5358 phba->hba_flag |= DEFER_ERATT;
5359 /* Clear all interrupt enable conditions */
5360 writel(0, phba->HCregaddr);
5361 readl(phba->HCregaddr);
5362 }
5363 }
5364
5314 if ((work_ha_copy & HA_MBATT) && (phba->sli.mbox_active)) { 5365 if ((work_ha_copy & HA_MBATT) && (phba->sli.mbox_active)) {
5315 pmb = phba->sli.mbox_active; 5366 pmb = phba->sli.mbox_active;
5316 pmbox = &pmb->mb; 5367 pmbox = &pmb->mb;
@@ -5423,7 +5474,7 @@ send_current_mbox:
5423} /* lpfc_sp_intr_handler */ 5474} /* lpfc_sp_intr_handler */
5424 5475
5425/** 5476/**
5426 * lpfc_fp_intr_handler: The fast-path interrupt handler of lpfc driver. 5477 * lpfc_fp_intr_handler - The fast-path interrupt handler of lpfc driver
5427 * @irq: Interrupt number. 5478 * @irq: Interrupt number.
5428 * @dev_id: The device context pointer. 5479 * @dev_id: The device context pointer.
5429 * 5480 *
@@ -5474,6 +5525,14 @@ lpfc_fp_intr_handler(int irq, void *dev_id)
5474 ha_copy = readl(phba->HAregaddr); 5525 ha_copy = readl(phba->HAregaddr);
5475 /* Clear up only attention source related to fast-path */ 5526 /* Clear up only attention source related to fast-path */
5476 spin_lock_irqsave(&phba->hbalock, iflag); 5527 spin_lock_irqsave(&phba->hbalock, iflag);
5528 /*
5529 * If there is deferred error attention, do not check for
5530 * any interrupt.
5531 */
5532 if (unlikely(phba->hba_flag & DEFER_ERATT)) {
5533 spin_unlock_irq(&phba->hbalock);
5534 return IRQ_NONE;
5535 }
5477 writel((ha_copy & (HA_R0_CLR_MSK | HA_R1_CLR_MSK)), 5536 writel((ha_copy & (HA_R0_CLR_MSK | HA_R1_CLR_MSK)),
5478 phba->HAregaddr); 5537 phba->HAregaddr);
5479 readl(phba->HAregaddr); /* flush */ 5538 readl(phba->HAregaddr); /* flush */
@@ -5510,7 +5569,7 @@ lpfc_fp_intr_handler(int irq, void *dev_id)
5510} /* lpfc_fp_intr_handler */ 5569} /* lpfc_fp_intr_handler */
5511 5570
5512/** 5571/**
5513 * lpfc_intr_handler: The device-level interrupt handler of lpfc driver. 5572 * lpfc_intr_handler - The device-level interrupt handler of lpfc driver
5514 * @irq: Interrupt number. 5573 * @irq: Interrupt number.
5515 * @dev_id: The device context pointer. 5574 * @dev_id: The device context pointer.
5516 * 5575 *
@@ -5566,6 +5625,14 @@ lpfc_intr_handler(int irq, void *dev_id)
5566 phba->hba_flag |= HBA_ERATT_HANDLED; 5625 phba->hba_flag |= HBA_ERATT_HANDLED;
5567 } 5626 }
5568 5627
5628 /*
5629 * If there is deferred error attention, do not check for any interrupt.
5630 */
5631 if (unlikely(phba->hba_flag & DEFER_ERATT)) {
5632 spin_unlock_irq(&phba->hbalock);
5633 return IRQ_NONE;
5634 }
5635
5569 /* Clear attention sources except link and error attentions */ 5636 /* Clear attention sources except link and error attentions */
5570 writel((phba->ha_copy & ~(HA_LATT | HA_ERATT)), phba->HAregaddr); 5637 writel((phba->ha_copy & ~(HA_LATT | HA_ERATT)), phba->HAregaddr);
5571 readl(phba->HAregaddr); /* flush */ 5638 readl(phba->HAregaddr); /* flush */
diff --git a/drivers/scsi/lpfc/lpfc_version.h b/drivers/scsi/lpfc/lpfc_version.h
index 7e32e95c5392..e599519e3078 100644
--- a/drivers/scsi/lpfc/lpfc_version.h
+++ b/drivers/scsi/lpfc/lpfc_version.h
@@ -1,7 +1,7 @@
1/******************************************************************* 1/*******************************************************************
2 * This file is part of the Emulex Linux Device Driver for * 2 * This file is part of the Emulex Linux Device Driver for *
3 * Fibre Channel Host Bus Adapters. * 3 * Fibre Channel Host Bus Adapters. *
4 * Copyright (C) 2004-2008 Emulex. All rights reserved. * 4 * Copyright (C) 2004-2009 Emulex. All rights reserved. *
5 * EMULEX and SLI are trademarks of Emulex. * 5 * EMULEX and SLI are trademarks of Emulex. *
6 * www.emulex.com * 6 * www.emulex.com *
7 * * 7 * *
@@ -18,7 +18,7 @@
18 * included with this package. * 18 * included with this package. *
19 *******************************************************************/ 19 *******************************************************************/
20 20
21#define LPFC_DRIVER_VERSION "8.3.0" 21#define LPFC_DRIVER_VERSION "8.3.1"
22 22
23#define LPFC_DRIVER_NAME "lpfc" 23#define LPFC_DRIVER_NAME "lpfc"
24#define LPFC_SP_DRIVER_HANDLER_NAME "lpfc:sp" 24#define LPFC_SP_DRIVER_HANDLER_NAME "lpfc:sp"
@@ -26,4 +26,4 @@
26 26
27#define LPFC_MODULE_DESC "Emulex LightPulse Fibre Channel SCSI driver " \ 27#define LPFC_MODULE_DESC "Emulex LightPulse Fibre Channel SCSI driver " \
28 LPFC_DRIVER_VERSION 28 LPFC_DRIVER_VERSION
29#define LPFC_COPYRIGHT "Copyright(c) 2004-2008 Emulex. All rights reserved." 29#define LPFC_COPYRIGHT "Copyright(c) 2004-2009 Emulex. All rights reserved."
diff --git a/drivers/scsi/lpfc/lpfc_vport.c b/drivers/scsi/lpfc/lpfc_vport.c
index 63b54c66756c..917ad56b0aff 100644
--- a/drivers/scsi/lpfc/lpfc_vport.c
+++ b/drivers/scsi/lpfc/lpfc_vport.c
@@ -206,7 +206,7 @@ lpfc_unique_wwpn(struct lpfc_hba *phba, struct lpfc_vport *new_vport)
206} 206}
207 207
208/** 208/**
209 * lpfc_discovery_wait: Wait for driver discovery to quiesce. 209 * lpfc_discovery_wait - Wait for driver discovery to quiesce
210 * @vport: The virtual port for which this call is being executed. 210 * @vport: The virtual port for which this call is being executed.
211 * 211 *
212 * This driver calls this routine specifically from lpfc_vport_delete 212 * This driver calls this routine specifically from lpfc_vport_delete
@@ -741,7 +741,7 @@ lpfc_destroy_vport_work_array(struct lpfc_hba *phba, struct lpfc_vport **vports)
741 741
742 742
743/** 743/**
744 * lpfc_vport_reset_stat_data: Reset the statistical data for the vport. 744 * lpfc_vport_reset_stat_data - Reset the statistical data for the vport
745 * @vport: Pointer to vport object. 745 * @vport: Pointer to vport object.
746 * 746 *
747 * This function resets the statistical data for the vport. This function 747 * This function resets the statistical data for the vport. This function
@@ -763,8 +763,7 @@ lpfc_vport_reset_stat_data(struct lpfc_vport *vport)
763 763
764 764
765/** 765/**
766 * lpfc_alloc_bucket: Allocate data buffer required for collecting 766 * lpfc_alloc_bucket - Allocate data buffer required for statistical data
767 * statistical data.
768 * @vport: Pointer to vport object. 767 * @vport: Pointer to vport object.
769 * 768 *
770 * This function allocates data buffer required for all the FC 769 * This function allocates data buffer required for all the FC
@@ -797,8 +796,7 @@ lpfc_alloc_bucket(struct lpfc_vport *vport)
797} 796}
798 797
799/** 798/**
800 * lpfc_free_bucket: Free data buffer required for collecting 799 * lpfc_free_bucket - Free data buffer required for statistical data
801 * statistical data.
802 * @vport: Pointer to vport object. 800 * @vport: Pointer to vport object.
803 * 801 *
804 * Th function frees statistical data buffer of all the FC 802 * Th function frees statistical data buffer of all the FC
diff --git a/drivers/scsi/mpt2sas/mpt2sas_base.c b/drivers/scsi/mpt2sas/mpt2sas_base.c
index 52427a8324f5..f3da592f7bcc 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_base.c
+++ b/drivers/scsi/mpt2sas/mpt2sas_base.c
@@ -636,6 +636,14 @@ _base_unmask_interrupts(struct MPT2SAS_ADAPTER *ioc)
636static irqreturn_t 636static irqreturn_t
637_base_interrupt(int irq, void *bus_id) 637_base_interrupt(int irq, void *bus_id)
638{ 638{
639 union reply_descriptor {
640 u64 word;
641 struct {
642 u32 low;
643 u32 high;
644 } u;
645 };
646 union reply_descriptor rd;
639 u32 post_index, post_index_next, completed_cmds; 647 u32 post_index, post_index_next, completed_cmds;
640 u8 request_desript_type; 648 u8 request_desript_type;
641 u16 smid; 649 u16 smid;
@@ -656,7 +664,8 @@ _base_interrupt(int irq, void *bus_id)
656 664
657 completed_cmds = 0; 665 completed_cmds = 0;
658 do { 666 do {
659 if (ioc->reply_post_free[post_index].Words == ~0ULL) 667 rd.word = ioc->reply_post_free[post_index].Words;
668 if (rd.u.low == UINT_MAX || rd.u.high == UINT_MAX)
660 goto out; 669 goto out;
661 reply = 0; 670 reply = 0;
662 cb_idx = 0xFF; 671 cb_idx = 0xFF;
@@ -721,7 +730,7 @@ _base_interrupt(int irq, void *bus_id)
721 for (i = 0 ; i < completed_cmds; i++) { 730 for (i = 0 ; i < completed_cmds; i++) {
722 post_index = post_index_next; 731 post_index = post_index_next;
723 /* poison the reply post descriptor */ 732 /* poison the reply post descriptor */
724 ioc->reply_post_free[post_index_next].Words = ~0ULL; 733 ioc->reply_post_free[post_index_next].Words = ULLONG_MAX;
725 post_index_next = (post_index == 734 post_index_next = (post_index ==
726 (ioc->reply_post_queue_depth - 1)) 735 (ioc->reply_post_queue_depth - 1))
727 ? 0 : post_index + 1; 736 ? 0 : post_index + 1;
@@ -855,9 +864,9 @@ _base_config_dma_addressing(struct MPT2SAS_ADAPTER *ioc, struct pci_dev *pdev)
855 if (sizeof(dma_addr_t) > 4) { 864 if (sizeof(dma_addr_t) > 4) {
856 const uint64_t required_mask = 865 const uint64_t required_mask =
857 dma_get_required_mask(&pdev->dev); 866 dma_get_required_mask(&pdev->dev);
858 if ((required_mask > DMA_32BIT_MASK) && !pci_set_dma_mask(pdev, 867 if ((required_mask > DMA_BIT_MASK(32)) && !pci_set_dma_mask(pdev,
859 DMA_64BIT_MASK) && !pci_set_consistent_dma_mask(pdev, 868 DMA_BIT_MASK(64)) && !pci_set_consistent_dma_mask(pdev,
860 DMA_64BIT_MASK)) { 869 DMA_BIT_MASK(64))) {
861 ioc->base_add_sg_single = &_base_add_sg_single_64; 870 ioc->base_add_sg_single = &_base_add_sg_single_64;
862 ioc->sge_size = sizeof(Mpi2SGESimple64_t); 871 ioc->sge_size = sizeof(Mpi2SGESimple64_t);
863 desc = "64"; 872 desc = "64";
@@ -865,8 +874,8 @@ _base_config_dma_addressing(struct MPT2SAS_ADAPTER *ioc, struct pci_dev *pdev)
865 } 874 }
866 } 875 }
867 876
868 if (!pci_set_dma_mask(pdev, DMA_32BIT_MASK) 877 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))
869 && !pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK)) { 878 && !pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) {
870 ioc->base_add_sg_single = &_base_add_sg_single_32; 879 ioc->base_add_sg_single = &_base_add_sg_single_32;
871 ioc->sge_size = sizeof(Mpi2SGESimple32_t); 880 ioc->sge_size = sizeof(Mpi2SGESimple32_t);
872 desc = "32"; 881 desc = "32";
@@ -1387,6 +1396,64 @@ mpt2sas_base_put_smid_target_assist(struct MPT2SAS_ADAPTER *ioc, u16 smid,
1387} 1396}
1388 1397
1389/** 1398/**
1399 * _base_display_dell_branding - Disply branding string
1400 * @ioc: per adapter object
1401 *
1402 * Return nothing.
1403 */
1404static void
1405_base_display_dell_branding(struct MPT2SAS_ADAPTER *ioc)
1406{
1407 char dell_branding[MPT2SAS_DELL_BRANDING_SIZE];
1408
1409 if (ioc->pdev->subsystem_vendor != PCI_VENDOR_ID_DELL)
1410 return;
1411
1412 memset(dell_branding, 0, MPT2SAS_DELL_BRANDING_SIZE);
1413 switch (ioc->pdev->subsystem_device) {
1414 case MPT2SAS_DELL_6GBPS_SAS_HBA_SSDID:
1415 strncpy(dell_branding, MPT2SAS_DELL_6GBPS_SAS_HBA_BRANDING,
1416 MPT2SAS_DELL_BRANDING_SIZE - 1);
1417 break;
1418 case MPT2SAS_DELL_PERC_H200_ADAPTER_SSDID:
1419 strncpy(dell_branding, MPT2SAS_DELL_PERC_H200_ADAPTER_BRANDING,
1420 MPT2SAS_DELL_BRANDING_SIZE - 1);
1421 break;
1422 case MPT2SAS_DELL_PERC_H200_INTEGRATED_SSDID:
1423 strncpy(dell_branding,
1424 MPT2SAS_DELL_PERC_H200_INTEGRATED_BRANDING,
1425 MPT2SAS_DELL_BRANDING_SIZE - 1);
1426 break;
1427 case MPT2SAS_DELL_PERC_H200_MODULAR_SSDID:
1428 strncpy(dell_branding,
1429 MPT2SAS_DELL_PERC_H200_MODULAR_BRANDING,
1430 MPT2SAS_DELL_BRANDING_SIZE - 1);
1431 break;
1432 case MPT2SAS_DELL_PERC_H200_EMBEDDED_SSDID:
1433 strncpy(dell_branding,
1434 MPT2SAS_DELL_PERC_H200_EMBEDDED_BRANDING,
1435 MPT2SAS_DELL_BRANDING_SIZE - 1);
1436 break;
1437 case MPT2SAS_DELL_PERC_H200_SSDID:
1438 strncpy(dell_branding, MPT2SAS_DELL_PERC_H200_BRANDING,
1439 MPT2SAS_DELL_BRANDING_SIZE - 1);
1440 break;
1441 case MPT2SAS_DELL_6GBPS_SAS_SSDID:
1442 strncpy(dell_branding, MPT2SAS_DELL_6GBPS_SAS_BRANDING,
1443 MPT2SAS_DELL_BRANDING_SIZE - 1);
1444 break;
1445 default:
1446 sprintf(dell_branding, "0x%4X", ioc->pdev->subsystem_device);
1447 break;
1448 }
1449
1450 printk(MPT2SAS_INFO_FMT "%s: Vendor(0x%04X), Device(0x%04X),"
1451 " SSVID(0x%04X), SSDID(0x%04X)\n", ioc->name, dell_branding,
1452 ioc->pdev->vendor, ioc->pdev->device, ioc->pdev->subsystem_vendor,
1453 ioc->pdev->subsystem_device);
1454}
1455
1456/**
1390 * _base_display_ioc_capabilities - Disply IOC's capabilities. 1457 * _base_display_ioc_capabilities - Disply IOC's capabilities.
1391 * @ioc: per adapter object 1458 * @ioc: per adapter object
1392 * 1459 *
@@ -1427,6 +1494,8 @@ _base_display_ioc_capabilities(struct MPT2SAS_ADAPTER *ioc)
1427 i++; 1494 i++;
1428 } 1495 }
1429 1496
1497 _base_display_dell_branding(ioc);
1498
1430 i = 0; 1499 i = 0;
1431 printk("), "); 1500 printk("), ");
1432 printk("Capabilities=("); 1501 printk("Capabilities=(");
@@ -3068,7 +3137,7 @@ _base_make_ioc_operational(struct MPT2SAS_ADAPTER *ioc, u8 VF_ID,
3068 3137
3069 /* initialize Reply Post Free Queue */ 3138 /* initialize Reply Post Free Queue */
3070 for (i = 0; i < ioc->reply_post_queue_depth; i++) 3139 for (i = 0; i < ioc->reply_post_queue_depth; i++)
3071 ioc->reply_post_free[i].Words = ~0ULL; 3140 ioc->reply_post_free[i].Words = ULLONG_MAX;
3072 3141
3073 r = _base_send_ioc_init(ioc, VF_ID, sleep_flag); 3142 r = _base_send_ioc_init(ioc, VF_ID, sleep_flag);
3074 if (r) 3143 if (r)
diff --git a/drivers/scsi/mpt2sas/mpt2sas_base.h b/drivers/scsi/mpt2sas/mpt2sas_base.h
index 6945ff4d382e..babd4cc0cb25 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_base.h
+++ b/drivers/scsi/mpt2sas/mpt2sas_base.h
@@ -68,11 +68,11 @@
68#define MPT2SAS_DRIVER_NAME "mpt2sas" 68#define MPT2SAS_DRIVER_NAME "mpt2sas"
69#define MPT2SAS_AUTHOR "LSI Corporation <DL-MPTFusionLinux@lsi.com>" 69#define MPT2SAS_AUTHOR "LSI Corporation <DL-MPTFusionLinux@lsi.com>"
70#define MPT2SAS_DESCRIPTION "LSI MPT Fusion SAS 2.0 Device Driver" 70#define MPT2SAS_DESCRIPTION "LSI MPT Fusion SAS 2.0 Device Driver"
71#define MPT2SAS_DRIVER_VERSION "00.100.11.16" 71#define MPT2SAS_DRIVER_VERSION "01.100.02.00"
72#define MPT2SAS_MAJOR_VERSION 00 72#define MPT2SAS_MAJOR_VERSION 00
73#define MPT2SAS_MINOR_VERSION 100 73#define MPT2SAS_MINOR_VERSION 100
74#define MPT2SAS_BUILD_VERSION 11 74#define MPT2SAS_BUILD_VERSION 02
75#define MPT2SAS_RELEASE_VERSION 16 75#define MPT2SAS_RELEASE_VERSION 00
76 76
77/* 77/*
78 * Set MPT2SAS_SG_DEPTH value based on user input. 78 * Set MPT2SAS_SG_DEPTH value based on user input.
@@ -130,6 +130,30 @@
130#define MPT2SAS_ERR_FMT KERN_ERR MPT2SAS_FMT 130#define MPT2SAS_ERR_FMT KERN_ERR MPT2SAS_FMT
131 131
132/* 132/*
133 * Dell HBA branding
134 */
135#define MPT2SAS_DELL_BRANDING_SIZE 32
136
137#define MPT2SAS_DELL_6GBPS_SAS_HBA_BRANDING "Dell 6Gbps SAS HBA"
138#define MPT2SAS_DELL_PERC_H200_ADAPTER_BRANDING "Dell PERC H200 Adapter"
139#define MPT2SAS_DELL_PERC_H200_INTEGRATED_BRANDING "Dell PERC H200 Integrated"
140#define MPT2SAS_DELL_PERC_H200_MODULAR_BRANDING "Dell PERC H200 Modular"
141#define MPT2SAS_DELL_PERC_H200_EMBEDDED_BRANDING "Dell PERC H200 Embedded"
142#define MPT2SAS_DELL_PERC_H200_BRANDING "Dell PERC H200"
143#define MPT2SAS_DELL_6GBPS_SAS_BRANDING "Dell 6Gbps SAS"
144
145/*
146 * Dell HBA SSDIDs
147 */
148#define MPT2SAS_DELL_6GBPS_SAS_HBA_SSDID 0x1F1C
149#define MPT2SAS_DELL_PERC_H200_ADAPTER_SSDID 0x1F1D
150#define MPT2SAS_DELL_PERC_H200_INTEGRATED_SSDID 0x1F1E
151#define MPT2SAS_DELL_PERC_H200_MODULAR_SSDID 0x1F1F
152#define MPT2SAS_DELL_PERC_H200_EMBEDDED_SSDID 0x1F20
153#define MPT2SAS_DELL_PERC_H200_SSDID 0x1F21
154#define MPT2SAS_DELL_6GBPS_SAS_SSDID 0x1F22
155
156/*
133 * per target private data 157 * per target private data
134 */ 158 */
135#define MPT_TARGET_FLAGS_RAID_COMPONENT 0x01 159#define MPT_TARGET_FLAGS_RAID_COMPONENT 0x01
diff --git a/drivers/scsi/mpt2sas/mpt2sas_ctl.c b/drivers/scsi/mpt2sas/mpt2sas_ctl.c
index 2d4f85c9d7a1..ba6ab170bdf0 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_ctl.c
+++ b/drivers/scsi/mpt2sas/mpt2sas_ctl.c
@@ -64,6 +64,9 @@
64static struct fasync_struct *async_queue; 64static struct fasync_struct *async_queue;
65static DECLARE_WAIT_QUEUE_HEAD(ctl_poll_wait); 65static DECLARE_WAIT_QUEUE_HEAD(ctl_poll_wait);
66 66
67static int _ctl_send_release(struct MPT2SAS_ADAPTER *ioc, u8 buffer_type,
68 u8 *issue_reset);
69
67/** 70/**
68 * enum block_state - blocking state 71 * enum block_state - blocking state
69 * @NON_BLOCKING: non blocking 72 * @NON_BLOCKING: non blocking
@@ -378,10 +381,22 @@ _ctl_verify_adapter(int ioc_number, struct MPT2SAS_ADAPTER **iocpp)
378void 381void
379mpt2sas_ctl_reset_handler(struct MPT2SAS_ADAPTER *ioc, int reset_phase) 382mpt2sas_ctl_reset_handler(struct MPT2SAS_ADAPTER *ioc, int reset_phase)
380{ 383{
384 int i;
385 u8 issue_reset;
386
381 switch (reset_phase) { 387 switch (reset_phase) {
382 case MPT2_IOC_PRE_RESET: 388 case MPT2_IOC_PRE_RESET:
383 dtmprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s: " 389 dtmprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s: "
384 "MPT2_IOC_PRE_RESET\n", ioc->name, __func__)); 390 "MPT2_IOC_PRE_RESET\n", ioc->name, __func__));
391 for (i = 0; i < MPI2_DIAG_BUF_TYPE_COUNT; i++) {
392 if (!(ioc->diag_buffer_status[i] &
393 MPT2_DIAG_BUFFER_IS_REGISTERED))
394 continue;
395 if ((ioc->diag_buffer_status[i] &
396 MPT2_DIAG_BUFFER_IS_RELEASED))
397 continue;
398 _ctl_send_release(ioc, i, &issue_reset);
399 }
385 break; 400 break;
386 case MPT2_IOC_AFTER_RESET: 401 case MPT2_IOC_AFTER_RESET:
387 dtmprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s: " 402 dtmprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s: "
@@ -395,6 +410,17 @@ mpt2sas_ctl_reset_handler(struct MPT2SAS_ADAPTER *ioc, int reset_phase)
395 case MPT2_IOC_DONE_RESET: 410 case MPT2_IOC_DONE_RESET:
396 dtmprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s: " 411 dtmprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s: "
397 "MPT2_IOC_DONE_RESET\n", ioc->name, __func__)); 412 "MPT2_IOC_DONE_RESET\n", ioc->name, __func__));
413
414 for (i = 0; i < MPI2_DIAG_BUF_TYPE_COUNT; i++) {
415 if (!(ioc->diag_buffer_status[i] &
416 MPT2_DIAG_BUFFER_IS_REGISTERED))
417 continue;
418 if ((ioc->diag_buffer_status[i] &
419 MPT2_DIAG_BUFFER_IS_RELEASED))
420 continue;
421 ioc->diag_buffer_status[i] |=
422 MPT2_DIAG_BUFFER_IS_DIAG_RESET;
423 }
398 break; 424 break;
399 } 425 }
400} 426}
@@ -714,8 +740,10 @@ _ctl_do_mpt_command(struct MPT2SAS_ADAPTER *ioc,
714 740
715 if (tm_request->TaskType == 741 if (tm_request->TaskType ==
716 MPI2_SCSITASKMGMT_TASKTYPE_ABORT_TASK) { 742 MPI2_SCSITASKMGMT_TASKTYPE_ABORT_TASK) {
717 if (_ctl_do_task_abort(ioc, &karg, tm_request)) 743 if (_ctl_do_task_abort(ioc, &karg, tm_request)) {
744 mpt2sas_base_free_smid(ioc, smid);
718 goto out; 745 goto out;
746 }
719 } 747 }
720 748
721 mutex_lock(&ioc->tm_cmds.mutex); 749 mutex_lock(&ioc->tm_cmds.mutex);
@@ -915,9 +943,9 @@ _ctl_getiocinfo(void __user *arg)
915 karg.pci_information.u.bits.function = PCI_FUNC(ioc->pdev->devfn); 943 karg.pci_information.u.bits.function = PCI_FUNC(ioc->pdev->devfn);
916 karg.pci_information.segment_id = pci_domain_nr(ioc->pdev->bus); 944 karg.pci_information.segment_id = pci_domain_nr(ioc->pdev->bus);
917 karg.firmware_version = ioc->facts.FWVersion.Word; 945 karg.firmware_version = ioc->facts.FWVersion.Word;
918 strncpy(karg.driver_version, MPT2SAS_DRIVER_VERSION, 946 strcpy(karg.driver_version, MPT2SAS_DRIVER_NAME);
919 MPT2_IOCTL_VERSION_LENGTH); 947 strcat(karg.driver_version, "-");
920 karg.driver_version[MPT2_IOCTL_VERSION_LENGTH - 1] = '\0'; 948 strcat(karg.driver_version, MPT2SAS_DRIVER_VERSION);
921 karg.bios_version = le32_to_cpu(ioc->bios_pg3.BiosVersion); 949 karg.bios_version = le32_to_cpu(ioc->bios_pg3.BiosVersion);
922 950
923 if (copy_to_user(arg, &karg, sizeof(karg))) { 951 if (copy_to_user(arg, &karg, sizeof(karg))) {
@@ -1551,81 +1579,38 @@ _ctl_diag_query(void __user *arg)
1551} 1579}
1552 1580
1553/** 1581/**
1554 * _ctl_diag_release - request to send Diag Release Message to firmware 1582 * _ctl_send_release - Diag Release Message
1555 * @arg - user space buffer containing ioctl content 1583 * @ioc: per adapter object
1556 * @state - NON_BLOCKING or BLOCKING 1584 * @buffer_type - specifies either TRACE or SNAPSHOT
1585 * @issue_reset - specifies whether host reset is required.
1557 * 1586 *
1558 * This allows ownership of the specified buffer to returned to the driver,
1559 * allowing an application to read the buffer without fear that firmware is
1560 * overwritting information in the buffer.
1561 */ 1587 */
1562static long 1588static int
1563_ctl_diag_release(void __user *arg, enum block_state state) 1589_ctl_send_release(struct MPT2SAS_ADAPTER *ioc, u8 buffer_type, u8 *issue_reset)
1564{ 1590{
1565 struct mpt2_diag_release karg;
1566 struct MPT2SAS_ADAPTER *ioc;
1567 void *request_data;
1568 int rc;
1569 Mpi2DiagReleaseRequest_t *mpi_request; 1591 Mpi2DiagReleaseRequest_t *mpi_request;
1570 Mpi2DiagReleaseReply_t *mpi_reply; 1592 Mpi2DiagReleaseReply_t *mpi_reply;
1571 u8 buffer_type;
1572 unsigned long timeleft;
1573 u16 smid; 1593 u16 smid;
1574 u16 ioc_status; 1594 u16 ioc_status;
1575 u8 issue_reset = 0; 1595 u32 ioc_state;
1576 1596 int rc;
1577 if (copy_from_user(&karg, arg, sizeof(karg))) { 1597 unsigned long timeleft;
1578 printk(KERN_ERR "failure at %s:%d/%s()!\n",
1579 __FILE__, __LINE__, __func__);
1580 return -EFAULT;
1581 }
1582 if (_ctl_verify_adapter(karg.hdr.ioc_number, &ioc) == -1 || !ioc)
1583 return -ENODEV;
1584 1598
1585 dctlprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s\n", ioc->name, 1599 dctlprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s\n", ioc->name,
1586 __func__)); 1600 __func__));
1587 1601
1588 buffer_type = karg.unique_id & 0x000000ff; 1602 rc = 0;
1589 if (!_ctl_diag_capability(ioc, buffer_type)) { 1603 *issue_reset = 0;
1590 printk(MPT2SAS_ERR_FMT "%s: doesn't have capability for "
1591 "buffer_type(0x%02x)\n", ioc->name, __func__, buffer_type);
1592 return -EPERM;
1593 }
1594
1595 if ((ioc->diag_buffer_status[buffer_type] &
1596 MPT2_DIAG_BUFFER_IS_REGISTERED) == 0) {
1597 printk(MPT2SAS_ERR_FMT "%s: buffer_type(0x%02x) is not "
1598 "registered\n", ioc->name, __func__, buffer_type);
1599 return -EINVAL;
1600 }
1601
1602 if (karg.unique_id != ioc->unique_id[buffer_type]) {
1603 printk(MPT2SAS_ERR_FMT "%s: unique_id(0x%08x) is not "
1604 "registered\n", ioc->name, __func__, karg.unique_id);
1605 return -EINVAL;
1606 }
1607
1608 if (ioc->diag_buffer_status[buffer_type] &
1609 MPT2_DIAG_BUFFER_IS_RELEASED) {
1610 printk(MPT2SAS_ERR_FMT "%s: buffer_type(0x%02x) "
1611 "is already released\n", ioc->name, __func__,
1612 buffer_type);
1613 return 0;
1614 }
1615
1616 request_data = ioc->diag_buffer[buffer_type];
1617 1604
1618 if (!request_data) { 1605 ioc_state = mpt2sas_base_get_iocstate(ioc, 1);
1619 printk(MPT2SAS_ERR_FMT "%s: doesn't have memory allocated for " 1606 if (ioc_state != MPI2_IOC_STATE_OPERATIONAL) {
1620 "buffer_type(0x%02x)\n", ioc->name, __func__, buffer_type); 1607 dctlprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s: "
1621 return -ENOMEM; 1608 "skipping due to FAULT state\n", ioc->name,
1609 __func__));
1610 rc = -EAGAIN;
1611 goto out;
1622 } 1612 }
1623 1613
1624 if (state == NON_BLOCKING && !mutex_trylock(&ioc->ctl_cmds.mutex))
1625 return -EAGAIN;
1626 else if (mutex_lock_interruptible(&ioc->ctl_cmds.mutex))
1627 return -ERESTARTSYS;
1628
1629 if (ioc->ctl_cmds.status != MPT2_CMD_NOT_USED) { 1614 if (ioc->ctl_cmds.status != MPT2_CMD_NOT_USED) {
1630 printk(MPT2SAS_ERR_FMT "%s: ctl_cmd in use\n", 1615 printk(MPT2SAS_ERR_FMT "%s: ctl_cmd in use\n",
1631 ioc->name, __func__); 1616 ioc->name, __func__);
@@ -1641,7 +1626,6 @@ _ctl_diag_release(void __user *arg, enum block_state state)
1641 goto out; 1626 goto out;
1642 } 1627 }
1643 1628
1644 rc = 0;
1645 ioc->ctl_cmds.status = MPT2_CMD_PENDING; 1629 ioc->ctl_cmds.status = MPT2_CMD_PENDING;
1646 memset(ioc->ctl_cmds.reply, 0, ioc->reply_sz); 1630 memset(ioc->ctl_cmds.reply, 0, ioc->reply_sz);
1647 mpi_request = mpt2sas_base_get_msg_frame(ioc, smid); 1631 mpi_request = mpt2sas_base_get_msg_frame(ioc, smid);
@@ -1660,8 +1644,9 @@ _ctl_diag_release(void __user *arg, enum block_state state)
1660 _debug_dump_mf(mpi_request, 1644 _debug_dump_mf(mpi_request,
1661 sizeof(Mpi2DiagReleaseRequest_t)/4); 1645 sizeof(Mpi2DiagReleaseRequest_t)/4);
1662 if (!(ioc->ctl_cmds.status & MPT2_CMD_RESET)) 1646 if (!(ioc->ctl_cmds.status & MPT2_CMD_RESET))
1663 issue_reset = 1; 1647 *issue_reset = 1;
1664 goto issue_host_reset; 1648 rc = -EFAULT;
1649 goto out;
1665 } 1650 }
1666 1651
1667 /* process the completed Reply Message Frame */ 1652 /* process the completed Reply Message Frame */
@@ -1687,14 +1672,101 @@ _ctl_diag_release(void __user *arg, enum block_state state)
1687 rc = -EFAULT; 1672 rc = -EFAULT;
1688 } 1673 }
1689 1674
1690 issue_host_reset: 1675 out:
1676 ioc->ctl_cmds.status = MPT2_CMD_NOT_USED;
1677 return rc;
1678}
1679
1680/**
1681 * _ctl_diag_release - request to send Diag Release Message to firmware
1682 * @arg - user space buffer containing ioctl content
1683 * @state - NON_BLOCKING or BLOCKING
1684 *
1685 * This allows ownership of the specified buffer to returned to the driver,
1686 * allowing an application to read the buffer without fear that firmware is
1687 * overwritting information in the buffer.
1688 */
1689static long
1690_ctl_diag_release(void __user *arg, enum block_state state)
1691{
1692 struct mpt2_diag_release karg;
1693 struct MPT2SAS_ADAPTER *ioc;
1694 void *request_data;
1695 int rc;
1696 u8 buffer_type;
1697 u8 issue_reset = 0;
1698
1699 if (copy_from_user(&karg, arg, sizeof(karg))) {
1700 printk(KERN_ERR "failure at %s:%d/%s()!\n",
1701 __FILE__, __LINE__, __func__);
1702 return -EFAULT;
1703 }
1704 if (_ctl_verify_adapter(karg.hdr.ioc_number, &ioc) == -1 || !ioc)
1705 return -ENODEV;
1706
1707 dctlprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s\n", ioc->name,
1708 __func__));
1709
1710 buffer_type = karg.unique_id & 0x000000ff;
1711 if (!_ctl_diag_capability(ioc, buffer_type)) {
1712 printk(MPT2SAS_ERR_FMT "%s: doesn't have capability for "
1713 "buffer_type(0x%02x)\n", ioc->name, __func__, buffer_type);
1714 return -EPERM;
1715 }
1716
1717 if ((ioc->diag_buffer_status[buffer_type] &
1718 MPT2_DIAG_BUFFER_IS_REGISTERED) == 0) {
1719 printk(MPT2SAS_ERR_FMT "%s: buffer_type(0x%02x) is not "
1720 "registered\n", ioc->name, __func__, buffer_type);
1721 return -EINVAL;
1722 }
1723
1724 if (karg.unique_id != ioc->unique_id[buffer_type]) {
1725 printk(MPT2SAS_ERR_FMT "%s: unique_id(0x%08x) is not "
1726 "registered\n", ioc->name, __func__, karg.unique_id);
1727 return -EINVAL;
1728 }
1729
1730 if (ioc->diag_buffer_status[buffer_type] &
1731 MPT2_DIAG_BUFFER_IS_RELEASED) {
1732 printk(MPT2SAS_ERR_FMT "%s: buffer_type(0x%02x) "
1733 "is already released\n", ioc->name, __func__,
1734 buffer_type);
1735 return 0;
1736 }
1737
1738 request_data = ioc->diag_buffer[buffer_type];
1739
1740 if (!request_data) {
1741 printk(MPT2SAS_ERR_FMT "%s: doesn't have memory allocated for "
1742 "buffer_type(0x%02x)\n", ioc->name, __func__, buffer_type);
1743 return -ENOMEM;
1744 }
1745
1746 /* buffers were released by due to host reset */
1747 if ((ioc->diag_buffer_status[buffer_type] &
1748 MPT2_DIAG_BUFFER_IS_DIAG_RESET)) {
1749 ioc->diag_buffer_status[buffer_type] |=
1750 MPT2_DIAG_BUFFER_IS_RELEASED;
1751 ioc->diag_buffer_status[buffer_type] &=
1752 ~MPT2_DIAG_BUFFER_IS_DIAG_RESET;
1753 printk(MPT2SAS_ERR_FMT "%s: buffer_type(0x%02x) "
1754 "was released due to host reset\n", ioc->name, __func__,
1755 buffer_type);
1756 return 0;
1757 }
1758
1759 if (state == NON_BLOCKING && !mutex_trylock(&ioc->ctl_cmds.mutex))
1760 return -EAGAIN;
1761 else if (mutex_lock_interruptible(&ioc->ctl_cmds.mutex))
1762 return -ERESTARTSYS;
1763
1764 rc = _ctl_send_release(ioc, buffer_type, &issue_reset);
1765
1691 if (issue_reset) 1766 if (issue_reset)
1692 mpt2sas_base_hard_reset_handler(ioc, CAN_SLEEP, 1767 mpt2sas_base_hard_reset_handler(ioc, CAN_SLEEP,
1693 FORCE_BIG_HAMMER); 1768 FORCE_BIG_HAMMER);
1694 1769
1695 out:
1696
1697 ioc->ctl_cmds.status = MPT2_CMD_NOT_USED;
1698 mutex_unlock(&ioc->ctl_cmds.mutex); 1770 mutex_unlock(&ioc->ctl_cmds.mutex);
1699 return rc; 1771 return rc;
1700} 1772}
diff --git a/drivers/scsi/mpt2sas/mpt2sas_ctl.h b/drivers/scsi/mpt2sas/mpt2sas_ctl.h
index dbb6c0cf8889..4da11435533f 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_ctl.h
+++ b/drivers/scsi/mpt2sas/mpt2sas_ctl.h
@@ -50,7 +50,7 @@
50#endif 50#endif
51 51
52#define MPT2SAS_DEV_NAME "mpt2ctl" 52#define MPT2SAS_DEV_NAME "mpt2ctl"
53#define MPT2_MAGIC_NUMBER 'm' 53#define MPT2_MAGIC_NUMBER 'L'
54#define MPT2_IOCTL_DEFAULT_TIMEOUT (10) /* in seconds */ 54#define MPT2_IOCTL_DEFAULT_TIMEOUT (10) /* in seconds */
55 55
56/** 56/**
@@ -295,8 +295,9 @@ struct mpt2_ioctl_btdh_mapping {
295 295
296 296
297/* status bits for ioc->diag_buffer_status */ 297/* status bits for ioc->diag_buffer_status */
298#define MPT2_DIAG_BUFFER_IS_REGISTERED (0x01) 298#define MPT2_DIAG_BUFFER_IS_REGISTERED (0x01)
299#define MPT2_DIAG_BUFFER_IS_RELEASED (0x02) 299#define MPT2_DIAG_BUFFER_IS_RELEASED (0x02)
300#define MPT2_DIAG_BUFFER_IS_DIAG_RESET (0x04)
300 301
301/* application flags for mpt2_diag_register, mpt2_diag_query */ 302/* application flags for mpt2_diag_register, mpt2_diag_query */
302#define MPT2_APP_FLAGS_APP_OWNED (0x0001) 303#define MPT2_APP_FLAGS_APP_OWNED (0x0001)
diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
index 0c463c483c02..e3a7967259e7 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
+++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
@@ -119,7 +119,7 @@ struct sense_info {
119 */ 119 */
120struct fw_event_work { 120struct fw_event_work {
121 struct list_head list; 121 struct list_head list;
122 struct delayed_work work; 122 struct work_struct work;
123 struct MPT2SAS_ADAPTER *ioc; 123 struct MPT2SAS_ADAPTER *ioc;
124 u8 VF_ID; 124 u8 VF_ID;
125 u8 host_reset_handling; 125 u8 host_reset_handling;
@@ -516,12 +516,8 @@ _scsih_sas_device_add(struct MPT2SAS_ADAPTER *ioc,
516 handle = sas_device->handle; 516 handle = sas_device->handle;
517 parent_handle = sas_device->parent_handle; 517 parent_handle = sas_device->parent_handle;
518 sas_address = sas_device->sas_address; 518 sas_address = sas_device->sas_address;
519 if (!mpt2sas_transport_port_add(ioc, handle, parent_handle)) { 519 if (!mpt2sas_transport_port_add(ioc, handle, parent_handle))
520 _scsih_sas_device_remove(ioc, sas_device); 520 _scsih_sas_device_remove(ioc, sas_device);
521 } else if (!sas_device->starget) {
522 mpt2sas_transport_port_remove(ioc, sas_address, parent_handle);
523 _scsih_sas_device_remove(ioc, sas_device);
524 }
525} 521}
526 522
527/** 523/**
@@ -1203,7 +1199,9 @@ scsih_target_destroy(struct scsi_target *starget)
1203 rphy = dev_to_rphy(starget->dev.parent); 1199 rphy = dev_to_rphy(starget->dev.parent);
1204 sas_device = mpt2sas_scsih_sas_device_find_by_sas_address(ioc, 1200 sas_device = mpt2sas_scsih_sas_device_find_by_sas_address(ioc,
1205 rphy->identify.sas_address); 1201 rphy->identify.sas_address);
1206 if (sas_device) 1202 if (sas_device && (sas_device->starget == starget) &&
1203 (sas_device->id == starget->id) &&
1204 (sas_device->channel == starget->channel))
1207 sas_device->starget = NULL; 1205 sas_device->starget = NULL;
1208 1206
1209 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); 1207 spin_unlock_irqrestore(&ioc->sas_device_lock, flags);
@@ -2009,8 +2007,8 @@ _scsih_fw_event_add(struct MPT2SAS_ADAPTER *ioc, struct fw_event_work *fw_event)
2009 2007
2010 spin_lock_irqsave(&ioc->fw_event_lock, flags); 2008 spin_lock_irqsave(&ioc->fw_event_lock, flags);
2011 list_add_tail(&fw_event->list, &ioc->fw_event_list); 2009 list_add_tail(&fw_event->list, &ioc->fw_event_list);
2012 INIT_DELAYED_WORK(&fw_event->work, _firmware_event_work); 2010 INIT_WORK(&fw_event->work, _firmware_event_work);
2013 queue_delayed_work(ioc->firmware_event_thread, &fw_event->work, 1); 2011 queue_work(ioc->firmware_event_thread, &fw_event->work);
2014 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); 2012 spin_unlock_irqrestore(&ioc->fw_event_lock, flags);
2015} 2013}
2016 2014
@@ -2054,7 +2052,7 @@ _scsih_fw_event_requeue(struct MPT2SAS_ADAPTER *ioc, struct fw_event_work
2054 return; 2052 return;
2055 2053
2056 spin_lock_irqsave(&ioc->fw_event_lock, flags); 2054 spin_lock_irqsave(&ioc->fw_event_lock, flags);
2057 queue_delayed_work(ioc->firmware_event_thread, &fw_event->work, delay); 2055 queue_work(ioc->firmware_event_thread, &fw_event->work);
2058 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); 2056 spin_unlock_irqrestore(&ioc->fw_event_lock, flags);
2059} 2057}
2060 2058
@@ -2863,8 +2861,9 @@ scsih_io_done(struct MPT2SAS_ADAPTER *ioc, u16 smid, u8 VF_ID, u32 reply)
2863 struct sense_info data; 2861 struct sense_info data;
2864 const void *sense_data = mpt2sas_base_get_sense_buffer(ioc, 2862 const void *sense_data = mpt2sas_base_get_sense_buffer(ioc,
2865 smid); 2863 smid);
2866 memcpy(scmd->sense_buffer, sense_data, 2864 u32 sz = min_t(u32, SCSI_SENSE_BUFFERSIZE,
2867 le32_to_cpu(mpi_reply->SenseCount)); 2865 le32_to_cpu(mpi_reply->SenseCount));
2866 memcpy(scmd->sense_buffer, sense_data, sz);
2868 _scsih_normalize_sense(scmd->sense_buffer, &data); 2867 _scsih_normalize_sense(scmd->sense_buffer, &data);
2869 /* failure prediction threshold exceeded */ 2868 /* failure prediction threshold exceeded */
2870 if (data.asc == 0x5D) 2869 if (data.asc == 0x5D)
@@ -3923,7 +3922,7 @@ _scsih_sas_broadcast_primative_event(struct MPT2SAS_ADAPTER *ioc, u8 VF_ID,
3923 3922
3924 mpt2sas_scsih_issue_tm(ioc, handle, lun, 3923 mpt2sas_scsih_issue_tm(ioc, handle, lun,
3925 MPI2_SCSITASKMGMT_TASKTYPE_QUERY_TASK, smid, 30); 3924 MPI2_SCSITASKMGMT_TASKTYPE_QUERY_TASK, smid, 30);
3926 termination_count += le32_to_cpu(mpi_reply->TerminationCount); 3925 ioc->tm_cmds.status = MPT2_CMD_NOT_USED;
3927 3926
3928 if ((mpi_reply->IOCStatus == MPI2_IOCSTATUS_SUCCESS) && 3927 if ((mpi_reply->IOCStatus == MPI2_IOCSTATUS_SUCCESS) &&
3929 (mpi_reply->ResponseCode == 3928 (mpi_reply->ResponseCode ==
@@ -3933,10 +3932,10 @@ _scsih_sas_broadcast_primative_event(struct MPT2SAS_ADAPTER *ioc, u8 VF_ID,
3933 continue; 3932 continue;
3934 3933
3935 mpt2sas_scsih_issue_tm(ioc, handle, lun, 3934 mpt2sas_scsih_issue_tm(ioc, handle, lun,
3936 MPI2_SCSITASKMGMT_TASKTYPE_ABRT_TASK_SET, smid, 30); 3935 MPI2_SCSITASKMGMT_TASKTYPE_ABRT_TASK_SET, 0, 30);
3936 ioc->tm_cmds.status = MPT2_CMD_NOT_USED;
3937 termination_count += le32_to_cpu(mpi_reply->TerminationCount); 3937 termination_count += le32_to_cpu(mpi_reply->TerminationCount);
3938 } 3938 }
3939 ioc->tm_cmds.status = MPT2_CMD_NOT_USED;
3940 ioc->broadcast_aen_busy = 0; 3939 ioc->broadcast_aen_busy = 0;
3941 mutex_unlock(&ioc->tm_cmds.mutex); 3940 mutex_unlock(&ioc->tm_cmds.mutex);
3942 3941
@@ -4962,7 +4961,7 @@ static void
4962_firmware_event_work(struct work_struct *work) 4961_firmware_event_work(struct work_struct *work)
4963{ 4962{
4964 struct fw_event_work *fw_event = container_of(work, 4963 struct fw_event_work *fw_event = container_of(work,
4965 struct fw_event_work, work.work); 4964 struct fw_event_work, work);
4966 unsigned long flags; 4965 unsigned long flags;
4967 struct MPT2SAS_ADAPTER *ioc = fw_event->ioc; 4966 struct MPT2SAS_ADAPTER *ioc = fw_event->ioc;
4968 4967
diff --git a/drivers/scsi/osd/osd_initiator.c b/drivers/scsi/osd/osd_initiator.c
index 2a5f0777148d..1ce6b24abab2 100644
--- a/drivers/scsi/osd/osd_initiator.c
+++ b/drivers/scsi/osd/osd_initiator.c
@@ -205,6 +205,74 @@ static unsigned _osd_req_alist_elem_size(struct osd_request *or, unsigned len)
205 osdv2_attr_list_elem_size(len); 205 osdv2_attr_list_elem_size(len);
206} 206}
207 207
208static void _osd_req_alist_elem_encode(struct osd_request *or,
209 void *attr_last, const struct osd_attr *oa)
210{
211 if (osd_req_is_ver1(or)) {
212 struct osdv1_attributes_list_element *attr = attr_last;
213
214 attr->attr_page = cpu_to_be32(oa->attr_page);
215 attr->attr_id = cpu_to_be32(oa->attr_id);
216 attr->attr_bytes = cpu_to_be16(oa->len);
217 memcpy(attr->attr_val, oa->val_ptr, oa->len);
218 } else {
219 struct osdv2_attributes_list_element *attr = attr_last;
220
221 attr->attr_page = cpu_to_be32(oa->attr_page);
222 attr->attr_id = cpu_to_be32(oa->attr_id);
223 attr->attr_bytes = cpu_to_be16(oa->len);
224 memcpy(attr->attr_val, oa->val_ptr, oa->len);
225 }
226}
227
228static int _osd_req_alist_elem_decode(struct osd_request *or,
229 void *cur_p, struct osd_attr *oa, unsigned max_bytes)
230{
231 unsigned inc;
232 if (osd_req_is_ver1(or)) {
233 struct osdv1_attributes_list_element *attr = cur_p;
234
235 if (max_bytes < sizeof(*attr))
236 return -1;
237
238 oa->len = be16_to_cpu(attr->attr_bytes);
239 inc = _osd_req_alist_elem_size(or, oa->len);
240 if (inc > max_bytes)
241 return -1;
242
243 oa->attr_page = be32_to_cpu(attr->attr_page);
244 oa->attr_id = be32_to_cpu(attr->attr_id);
245
246 /* OSD1: On empty attributes we return a pointer to 2 bytes
247 * of zeros. This keeps similar behaviour with OSD2.
248 * (See below)
249 */
250 oa->val_ptr = likely(oa->len) ? attr->attr_val :
251 (u8 *)&attr->attr_bytes;
252 } else {
253 struct osdv2_attributes_list_element *attr = cur_p;
254
255 if (max_bytes < sizeof(*attr))
256 return -1;
257
258 oa->len = be16_to_cpu(attr->attr_bytes);
259 inc = _osd_req_alist_elem_size(or, oa->len);
260 if (inc > max_bytes)
261 return -1;
262
263 oa->attr_page = be32_to_cpu(attr->attr_page);
264 oa->attr_id = be32_to_cpu(attr->attr_id);
265
266 /* OSD2: For convenience, on empty attributes, we return 8 bytes
267 * of zeros here. This keeps the same behaviour with OSD2r04,
268 * and is nice with null terminating ASCII fields.
269 * oa->val_ptr == NULL marks the end-of-list, or error.
270 */
271 oa->val_ptr = likely(oa->len) ? attr->attr_val : attr->reserved;
272 }
273 return inc;
274}
275
208static unsigned _osd_req_alist_size(struct osd_request *or, void *list_head) 276static unsigned _osd_req_alist_size(struct osd_request *or, void *list_head)
209{ 277{
210 return osd_req_is_ver1(or) ? 278 return osd_req_is_ver1(or) ?
@@ -282,9 +350,9 @@ _osd_req_sec_params(struct osd_request *or)
282 struct osd_cdb *ocdb = &or->cdb; 350 struct osd_cdb *ocdb = &or->cdb;
283 351
284 if (osd_req_is_ver1(or)) 352 if (osd_req_is_ver1(or))
285 return &ocdb->v1.sec_params; 353 return (struct osd_security_parameters *)&ocdb->v1.sec_params;
286 else 354 else
287 return &ocdb->v2.sec_params; 355 return (struct osd_security_parameters *)&ocdb->v2.sec_params;
288} 356}
289 357
290void osd_dev_init(struct osd_dev *osdd, struct scsi_device *scsi_device) 358void osd_dev_init(struct osd_dev *osdd, struct scsi_device *scsi_device)
@@ -612,9 +680,9 @@ static int _osd_req_list_objects(struct osd_request *or,
612 680
613 WARN_ON(or->in.bio); 681 WARN_ON(or->in.bio);
614 bio = bio_map_kern(q, list, len, or->alloc_flags); 682 bio = bio_map_kern(q, list, len, or->alloc_flags);
615 if (!bio) { 683 if (IS_ERR(bio)) {
616 OSD_ERR("!!! Failed to allocate list_objects BIO\n"); 684 OSD_ERR("!!! Failed to allocate list_objects BIO\n");
617 return -ENOMEM; 685 return PTR_ERR(bio);
618 } 686 }
619 687
620 bio->bi_rw &= ~(1 << BIO_RW); 688 bio->bi_rw &= ~(1 << BIO_RW);
@@ -798,7 +866,6 @@ int osd_req_add_set_attr_list(struct osd_request *or,
798 attr_last = or->set_attr.buff + total_bytes; 866 attr_last = or->set_attr.buff + total_bytes;
799 867
800 for (; nelem; --nelem) { 868 for (; nelem; --nelem) {
801 struct osd_attributes_list_element *attr;
802 unsigned elem_size = _osd_req_alist_elem_size(or, oa->len); 869 unsigned elem_size = _osd_req_alist_elem_size(or, oa->len);
803 870
804 total_bytes += elem_size; 871 total_bytes += elem_size;
@@ -811,11 +878,7 @@ int osd_req_add_set_attr_list(struct osd_request *or,
811 or->set_attr.buff + or->set_attr.total_bytes; 878 or->set_attr.buff + or->set_attr.total_bytes;
812 } 879 }
813 880
814 attr = attr_last; 881 _osd_req_alist_elem_encode(or, attr_last, oa);
815 attr->attr_page = cpu_to_be32(oa->attr_page);
816 attr->attr_id = cpu_to_be32(oa->attr_id);
817 attr->attr_bytes = cpu_to_be16(oa->len);
818 memcpy(attr->attr_val, oa->val_ptr, oa->len);
819 882
820 attr_last += elem_size; 883 attr_last += elem_size;
821 ++oa; 884 ++oa;
@@ -1070,15 +1133,10 @@ int osd_req_decode_get_attr_list(struct osd_request *or,
1070 } 1133 }
1071 1134
1072 for (n = 0; (n < *nelem) && (cur_bytes < returned_bytes); ++n) { 1135 for (n = 0; (n < *nelem) && (cur_bytes < returned_bytes); ++n) {
1073 struct osd_attributes_list_element *attr = cur_p; 1136 int inc = _osd_req_alist_elem_decode(or, cur_p, oa,
1074 unsigned inc; 1137 returned_bytes - cur_bytes);
1075 1138
1076 oa->len = be16_to_cpu(attr->attr_bytes); 1139 if (inc < 0) {
1077 inc = _osd_req_alist_elem_size(or, oa->len);
1078 OSD_DEBUG("oa->len=%d inc=%d cur_bytes=%d\n",
1079 oa->len, inc, cur_bytes);
1080 cur_bytes += inc;
1081 if (cur_bytes > returned_bytes) {
1082 OSD_ERR("BAD FOOD from target. list not valid!" 1140 OSD_ERR("BAD FOOD from target. list not valid!"
1083 "c=%d r=%d n=%d\n", 1141 "c=%d r=%d n=%d\n",
1084 cur_bytes, returned_bytes, n); 1142 cur_bytes, returned_bytes, n);
@@ -1086,10 +1144,7 @@ int osd_req_decode_get_attr_list(struct osd_request *or,
1086 break; 1144 break;
1087 } 1145 }
1088 1146
1089 oa->attr_page = be32_to_cpu(attr->attr_page); 1147 cur_bytes += inc;
1090 oa->attr_id = be32_to_cpu(attr->attr_id);
1091 oa->val_ptr = attr->attr_val;
1092
1093 cur_p += inc; 1148 cur_p += inc;
1094 ++oa; 1149 ++oa;
1095 } 1150 }
@@ -1159,6 +1214,24 @@ static int _osd_req_finalize_attr_page(struct osd_request *or)
1159 return ret; 1214 return ret;
1160} 1215}
1161 1216
1217static inline void osd_sec_parms_set_out_offset(bool is_v1,
1218 struct osd_security_parameters *sec_parms, osd_cdb_offset offset)
1219{
1220 if (is_v1)
1221 sec_parms->v1.data_out_integrity_check_offset = offset;
1222 else
1223 sec_parms->v2.data_out_integrity_check_offset = offset;
1224}
1225
1226static inline void osd_sec_parms_set_in_offset(bool is_v1,
1227 struct osd_security_parameters *sec_parms, osd_cdb_offset offset)
1228{
1229 if (is_v1)
1230 sec_parms->v1.data_in_integrity_check_offset = offset;
1231 else
1232 sec_parms->v2.data_in_integrity_check_offset = offset;
1233}
1234
1162static int _osd_req_finalize_data_integrity(struct osd_request *or, 1235static int _osd_req_finalize_data_integrity(struct osd_request *or,
1163 bool has_in, bool has_out, const u8 *cap_key) 1236 bool has_in, bool has_out, const u8 *cap_key)
1164{ 1237{
@@ -1182,8 +1255,8 @@ static int _osd_req_finalize_data_integrity(struct osd_request *or,
1182 or->out_data_integ.get_attributes_bytes = cpu_to_be64( 1255 or->out_data_integ.get_attributes_bytes = cpu_to_be64(
1183 or->enc_get_attr.total_bytes); 1256 or->enc_get_attr.total_bytes);
1184 1257
1185 sec_parms->data_out_integrity_check_offset = 1258 osd_sec_parms_set_out_offset(osd_req_is_ver1(or), sec_parms,
1186 osd_req_encode_offset(or, or->out.total_bytes, &pad); 1259 osd_req_encode_offset(or, or->out.total_bytes, &pad));
1187 1260
1188 ret = _req_append_segment(or, pad, &seg, or->out.last_seg, 1261 ret = _req_append_segment(or, pad, &seg, or->out.last_seg,
1189 &or->out); 1262 &or->out);
@@ -1203,8 +1276,8 @@ static int _osd_req_finalize_data_integrity(struct osd_request *or,
1203 }; 1276 };
1204 unsigned pad; 1277 unsigned pad;
1205 1278
1206 sec_parms->data_in_integrity_check_offset = 1279 osd_sec_parms_set_in_offset(osd_req_is_ver1(or), sec_parms,
1207 osd_req_encode_offset(or, or->in.total_bytes, &pad); 1280 osd_req_encode_offset(or, or->in.total_bytes, &pad));
1208 1281
1209 ret = _req_append_segment(or, pad, &seg, or->in.last_seg, 1282 ret = _req_append_segment(or, pad, &seg, or->in.last_seg,
1210 &or->in); 1283 &or->in);
diff --git a/drivers/scsi/osd/osd_uld.c b/drivers/scsi/osd/osd_uld.c
index f644c9571eab..22b59e13ba83 100644
--- a/drivers/scsi/osd/osd_uld.c
+++ b/drivers/scsi/osd/osd_uld.c
@@ -173,26 +173,26 @@ static const struct file_operations osd_fops = {
173 .unlocked_ioctl = osd_uld_ioctl, 173 .unlocked_ioctl = osd_uld_ioctl,
174}; 174};
175 175
176struct osd_dev *osduld_path_lookup(const char *path) 176struct osd_dev *osduld_path_lookup(const char *name)
177{ 177{
178 struct nameidata nd; 178 struct path path;
179 struct inode *inode; 179 struct inode *inode;
180 struct cdev *cdev; 180 struct cdev *cdev;
181 struct osd_uld_device *uninitialized_var(oud); 181 struct osd_uld_device *uninitialized_var(oud);
182 int error; 182 int error;
183 183
184 if (!path || !*path) { 184 if (!name || !*name) {
185 OSD_ERR("Mount with !path || !*path\n"); 185 OSD_ERR("Mount with !path || !*path\n");
186 return ERR_PTR(-EINVAL); 186 return ERR_PTR(-EINVAL);
187 } 187 }
188 188
189 error = path_lookup(path, LOOKUP_FOLLOW, &nd); 189 error = kern_path(name, LOOKUP_FOLLOW, &path);
190 if (error) { 190 if (error) {
191 OSD_ERR("path_lookup of %s faild=>%d\n", path, error); 191 OSD_ERR("path_lookup of %s failed=>%d\n", name, error);
192 return ERR_PTR(error); 192 return ERR_PTR(error);
193 } 193 }
194 194
195 inode = nd.path.dentry->d_inode; 195 inode = path.dentry->d_inode;
196 error = -EINVAL; /* Not the right device e.g osd_uld_device */ 196 error = -EINVAL; /* Not the right device e.g osd_uld_device */
197 if (!S_ISCHR(inode->i_mode)) { 197 if (!S_ISCHR(inode->i_mode)) {
198 OSD_DEBUG("!S_ISCHR()\n"); 198 OSD_DEBUG("!S_ISCHR()\n");
@@ -202,15 +202,15 @@ struct osd_dev *osduld_path_lookup(const char *path)
202 cdev = inode->i_cdev; 202 cdev = inode->i_cdev;
203 if (!cdev) { 203 if (!cdev) {
204 OSD_ERR("Before mounting an OSD Based filesystem\n"); 204 OSD_ERR("Before mounting an OSD Based filesystem\n");
205 OSD_ERR(" user-mode must open+close the %s device\n", path); 205 OSD_ERR(" user-mode must open+close the %s device\n", name);
206 OSD_ERR(" Example: bash: echo < %s\n", path); 206 OSD_ERR(" Example: bash: echo < %s\n", name);
207 goto out; 207 goto out;
208 } 208 }
209 209
210 /* The Magic wand. Is it our char-dev */ 210 /* The Magic wand. Is it our char-dev */
211 /* TODO: Support sg devices */ 211 /* TODO: Support sg devices */
212 if (cdev->owner != THIS_MODULE) { 212 if (cdev->owner != THIS_MODULE) {
213 OSD_ERR("Error mounting %s - is not an OSD device\n", path); 213 OSD_ERR("Error mounting %s - is not an OSD device\n", name);
214 goto out; 214 goto out;
215 } 215 }
216 216
@@ -220,7 +220,7 @@ struct osd_dev *osduld_path_lookup(const char *path)
220 error = 0; 220 error = 0;
221 221
222out: 222out:
223 path_put(&nd.path); 223 path_put(&path);
224 return error ? ERR_PTR(error) : &oud->od; 224 return error ? ERR_PTR(error) : &oud->od;
225} 225}
226EXPORT_SYMBOL(osduld_path_lookup); 226EXPORT_SYMBOL(osduld_path_lookup);
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index d1cb64ad1a3f..bb218c8b6e98 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1291,10 +1291,8 @@ static inline int scsi_target_queue_ready(struct Scsi_Host *shost,
1291 if (--starget->target_blocked == 0) { 1291 if (--starget->target_blocked == 0) {
1292 SCSI_LOG_MLQUEUE(3, starget_printk(KERN_INFO, starget, 1292 SCSI_LOG_MLQUEUE(3, starget_printk(KERN_INFO, starget,
1293 "unblocking target at zero depth\n")); 1293 "unblocking target at zero depth\n"));
1294 } else { 1294 } else
1295 blk_plug_device(sdev->request_queue);
1296 return 0; 1295 return 0;
1297 }
1298 } 1296 }
1299 1297
1300 if (scsi_target_is_busy(starget)) { 1298 if (scsi_target_is_busy(starget)) {
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
index a14d245a66b8..6f51ca485f35 100644
--- a/drivers/scsi/scsi_scan.c
+++ b/drivers/scsi/scsi_scan.c
@@ -180,8 +180,6 @@ int scsi_complete_async_scans(void)
180 spin_unlock(&async_scan_lock); 180 spin_unlock(&async_scan_lock);
181 181
182 kfree(data); 182 kfree(data);
183 /* Synchronize async operations globally */
184 async_synchronize_full();
185 return 0; 183 return 0;
186} 184}
187 185
diff --git a/drivers/scsi/scsi_wait_scan.c b/drivers/scsi/scsi_wait_scan.c
index 2f21af21269a..74708fcaf82f 100644
--- a/drivers/scsi/scsi_wait_scan.c
+++ b/drivers/scsi/scsi_wait_scan.c
@@ -11,10 +11,21 @@
11 */ 11 */
12 12
13#include <linux/module.h> 13#include <linux/module.h>
14#include <linux/device.h>
14#include <scsi/scsi_scan.h> 15#include <scsi/scsi_scan.h>
15 16
16static int __init wait_scan_init(void) 17static int __init wait_scan_init(void)
17{ 18{
19 /*
20 * First we need to wait for device probing to finish;
21 * the drivers we just loaded might just still be probing
22 * and might not yet have reached the scsi async scanning
23 */
24 wait_for_device_probe();
25 /*
26 * and then we wait for the actual asynchronous scsi scan
27 * to finish.
28 */
18 scsi_complete_async_scans(); 29 scsi_complete_async_scans();
19 return 0; 30 return 0;
20} 31}
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index 3fcb64b91c43..84044233b637 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -50,6 +50,7 @@
50#include <linux/string_helpers.h> 50#include <linux/string_helpers.h>
51#include <linux/async.h> 51#include <linux/async.h>
52#include <asm/uaccess.h> 52#include <asm/uaccess.h>
53#include <asm/unaligned.h>
53 54
54#include <scsi/scsi.h> 55#include <scsi/scsi.h>
55#include <scsi/scsi_cmnd.h> 56#include <scsi/scsi_cmnd.h>
@@ -1344,12 +1345,8 @@ static int read_capacity_16(struct scsi_disk *sdkp, struct scsi_device *sdp,
1344 return -EINVAL; 1345 return -EINVAL;
1345 } 1346 }
1346 1347
1347 sector_size = (buffer[8] << 24) | (buffer[9] << 16) | 1348 sector_size = get_unaligned_be32(&buffer[8]);
1348 (buffer[10] << 8) | buffer[11]; 1349 lba = get_unaligned_be64(&buffer[0]);
1349 lba = (((u64)buffer[0] << 56) | ((u64)buffer[1] << 48) |
1350 ((u64)buffer[2] << 40) | ((u64)buffer[3] << 32) |
1351 ((u64)buffer[4] << 24) | ((u64)buffer[5] << 16) |
1352 ((u64)buffer[6] << 8) | (u64)buffer[7]);
1353 1350
1354 sd_read_protection_type(sdkp, buffer); 1351 sd_read_protection_type(sdkp, buffer);
1355 1352
@@ -1400,10 +1397,8 @@ static int read_capacity_10(struct scsi_disk *sdkp, struct scsi_device *sdp,
1400 return -EINVAL; 1397 return -EINVAL;
1401 } 1398 }
1402 1399
1403 sector_size = (buffer[4] << 24) | (buffer[5] << 16) | 1400 sector_size = get_unaligned_be32(&buffer[4]);
1404 (buffer[6] << 8) | buffer[7]; 1401 lba = get_unaligned_be32(&buffer[0]);
1405 lba = (buffer[0] << 24) | (buffer[1] << 16) |
1406 (buffer[2] << 8) | buffer[3];
1407 1402
1408 if ((sizeof(sdkp->capacity) == 4) && (lba == 0xffffffff)) { 1403 if ((sizeof(sdkp->capacity) == 4) && (lba == 0xffffffff)) {
1409 sd_printk(KERN_ERR, sdkp, "Too big for this kernel. Use a " 1404 sd_printk(KERN_ERR, sdkp, "Too big for this kernel. Use a "
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
index 82312df9b0bf..e1716f14cd47 100644
--- a/drivers/scsi/sg.c
+++ b/drivers/scsi/sg.c
@@ -179,7 +179,7 @@ typedef struct sg_device { /* holds the state of each scsi generic device */
179/* tasklet or soft irq callback */ 179/* tasklet or soft irq callback */
180static void sg_rq_end_io(struct request *rq, int uptodate); 180static void sg_rq_end_io(struct request *rq, int uptodate);
181static int sg_start_req(Sg_request *srp, unsigned char *cmd); 181static int sg_start_req(Sg_request *srp, unsigned char *cmd);
182static void sg_finish_rem_req(Sg_request * srp); 182static int sg_finish_rem_req(Sg_request * srp);
183static int sg_build_indirect(Sg_scatter_hold * schp, Sg_fd * sfp, int buff_size); 183static int sg_build_indirect(Sg_scatter_hold * schp, Sg_fd * sfp, int buff_size);
184static ssize_t sg_new_read(Sg_fd * sfp, char __user *buf, size_t count, 184static ssize_t sg_new_read(Sg_fd * sfp, char __user *buf, size_t count,
185 Sg_request * srp); 185 Sg_request * srp);
@@ -518,7 +518,7 @@ sg_new_read(Sg_fd * sfp, char __user *buf, size_t count, Sg_request * srp)
518 goto err_out; 518 goto err_out;
519 } 519 }
520err_out: 520err_out:
521 sg_finish_rem_req(srp); 521 err = sg_finish_rem_req(srp);
522 return (0 == err) ? count : err; 522 return (0 == err) ? count : err;
523} 523}
524 524
@@ -1696,9 +1696,10 @@ static int sg_start_req(Sg_request *srp, unsigned char *cmd)
1696 return res; 1696 return res;
1697} 1697}
1698 1698
1699static void 1699static int sg_finish_rem_req(Sg_request * srp)
1700sg_finish_rem_req(Sg_request * srp)
1701{ 1700{
1701 int ret = 0;
1702
1702 Sg_fd *sfp = srp->parentfp; 1703 Sg_fd *sfp = srp->parentfp;
1703 Sg_scatter_hold *req_schp = &srp->data; 1704 Sg_scatter_hold *req_schp = &srp->data;
1704 1705
@@ -1710,12 +1711,14 @@ sg_finish_rem_req(Sg_request * srp)
1710 1711
1711 if (srp->rq) { 1712 if (srp->rq) {
1712 if (srp->bio) 1713 if (srp->bio)
1713 blk_rq_unmap_user(srp->bio); 1714 ret = blk_rq_unmap_user(srp->bio);
1714 1715
1715 blk_put_request(srp->rq); 1716 blk_put_request(srp->rq);
1716 } 1717 }
1717 1718
1718 sg_remove_request(sfp, srp); 1719 sg_remove_request(sfp, srp);
1720
1721 return ret;
1719} 1722}
1720 1723
1721static int 1724static int
diff --git a/drivers/scsi/sr_ioctl.c b/drivers/scsi/sr_ioctl.c
index d92ff512d213..291236e6e435 100644
--- a/drivers/scsi/sr_ioctl.c
+++ b/drivers/scsi/sr_ioctl.c
@@ -309,6 +309,11 @@ int sr_drive_status(struct cdrom_device_info *cdi, int slot)
309 if (0 == sr_test_unit_ready(cd->device, &sshdr)) 309 if (0 == sr_test_unit_ready(cd->device, &sshdr))
310 return CDS_DISC_OK; 310 return CDS_DISC_OK;
311 311
312 /* SK/ASC/ASCQ of 2/4/1 means "unit is becoming ready" */
313 if (scsi_sense_valid(&sshdr) && sshdr.sense_key == NOT_READY
314 && sshdr.asc == 0x04 && sshdr.ascq == 0x01)
315 return CDS_DRIVE_NOT_READY;
316
312 if (!cdrom_get_media_event(cdi, &med)) { 317 if (!cdrom_get_media_event(cdi, &med)) {
313 if (med.media_present) 318 if (med.media_present)
314 return CDS_DISC_OK; 319 return CDS_DISC_OK;
diff --git a/drivers/serial/8250_pci.c b/drivers/serial/8250_pci.c
index 7ddff3f55087..938bc1b6c3fa 100644
--- a/drivers/serial/8250_pci.c
+++ b/drivers/serial/8250_pci.c
@@ -771,8 +771,6 @@ static int pci_netmos_init(struct pci_dev *dev)
771} 771}
772 772
773/* 773/*
774 * ITE support by Niels de Vos <niels.devos@wincor-nixdorf.com>
775 *
776 * These chips are available with optionally one parallel port and up to 774 * These chips are available with optionally one parallel port and up to
777 * two serial ports. Unfortunately they all have the same product id. 775 * two serial ports. Unfortunately they all have the same product id.
778 * 776 *
diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c
index 18ba812a4f84..d86123e03391 100644
--- a/drivers/serial/bfin_5xx.c
+++ b/drivers/serial/bfin_5xx.c
@@ -166,7 +166,7 @@ static void bfin_serial_start_tx(struct uart_port *port)
166 struct tty_struct *tty = uart->port.info->port.tty; 166 struct tty_struct *tty = uart->port.info->port.tty;
167 167
168#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS 168#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
169 if (uart->scts && (!bfin_serial_get_mctrl(&uart->port)&TIOCM_CTS)) { 169 if (uart->scts && !(bfin_serial_get_mctrl(&uart->port) & TIOCM_CTS)) {
170 uart->scts = 0; 170 uart->scts = 0;
171 uart_handle_cts_change(&uart->port, uart->scts); 171 uart_handle_cts_change(&uart->port, uart->scts);
172 } 172 }
@@ -368,7 +368,7 @@ static irqreturn_t bfin_serial_tx_int(int irq, void *dev_id)
368 struct bfin_serial_port *uart = dev_id; 368 struct bfin_serial_port *uart = dev_id;
369 369
370#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS 370#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
371 if (uart->scts && (!bfin_serial_get_mctrl(&uart->port)&TIOCM_CTS)) { 371 if (uart->scts && !(bfin_serial_get_mctrl(&uart->port) & TIOCM_CTS)) {
372 uart->scts = 0; 372 uart->scts = 0;
373 uart_handle_cts_change(&uart->port, uart->scts); 373 uart_handle_cts_change(&uart->port, uart->scts);
374 } 374 }
@@ -504,7 +504,7 @@ static irqreturn_t bfin_serial_dma_tx_int(int irq, void *dev_id)
504 struct circ_buf *xmit = &uart->port.info->xmit; 504 struct circ_buf *xmit = &uart->port.info->xmit;
505 505
506#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS 506#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
507 if (uart->scts && (!bfin_serial_get_mctrl(&uart->port)&TIOCM_CTS)) { 507 if (uart->scts && !(bfin_serial_get_mctrl(&uart->port)&TIOCM_CTS)) {
508 uart->scts = 0; 508 uart->scts = 0;
509 uart_handle_cts_change(&uart->port, uart->scts); 509 uart_handle_cts_change(&uart->port, uart->scts);
510 } 510 }
diff --git a/drivers/serial/crisv10.c b/drivers/serial/crisv10.c
index 7ba7d70f04d6..7be52fe288eb 100644
--- a/drivers/serial/crisv10.c
+++ b/drivers/serial/crisv10.c
@@ -23,16 +23,18 @@ static char *serial_version = "$Revision: 1.25 $";
23#include <linux/mm.h> 23#include <linux/mm.h>
24#include <linux/slab.h> 24#include <linux/slab.h>
25#include <linux/init.h> 25#include <linux/init.h>
26#include <asm/uaccess.h>
27#include <linux/kernel.h> 26#include <linux/kernel.h>
28#include <linux/mutex.h> 27#include <linux/mutex.h>
29#include <linux/bitops.h> 28#include <linux/bitops.h>
29#include <linux/seq_file.h>
30#include <linux/delay.h>
31#include <linux/module.h>
32#include <linux/uaccess.h>
33#include <linux/io.h>
30 34
31#include <asm/io.h>
32#include <asm/irq.h> 35#include <asm/irq.h>
33#include <asm/dma.h> 36#include <asm/dma.h>
34#include <asm/system.h> 37#include <asm/system.h>
35#include <linux/delay.h>
36 38
37#include <arch/svinto.h> 39#include <arch/svinto.h>
38 40
@@ -456,7 +458,6 @@ static struct e100_serial rs_table[] = {
456 458
457#define NR_PORTS (sizeof(rs_table)/sizeof(struct e100_serial)) 459#define NR_PORTS (sizeof(rs_table)/sizeof(struct e100_serial))
458 460
459static struct ktermios *serial_termios[NR_PORTS];
460#ifdef CONFIG_ETRAX_SERIAL_FAST_TIMER 461#ifdef CONFIG_ETRAX_SERIAL_FAST_TIMER
461static struct fast_timer fast_timers[NR_PORTS]; 462static struct fast_timer fast_timers[NR_PORTS];
462#endif 463#endif
@@ -4257,151 +4258,132 @@ rs_open(struct tty_struct *tty, struct file * filp)
4257 return 0; 4258 return 0;
4258} 4259}
4259 4260
4261#ifdef CONFIG_PROC_FS
4260/* 4262/*
4261 * /proc fs routines.... 4263 * /proc fs routines....
4262 */ 4264 */
4263 4265
4264static int line_info(char *buf, struct e100_serial *info) 4266static void seq_line_info(struct seq_file *m, struct e100_serial *info)
4265{ 4267{
4266 char stat_buf[30];
4267 int ret;
4268 unsigned long tmp; 4268 unsigned long tmp;
4269 4269
4270 ret = sprintf(buf, "%d: uart:E100 port:%lX irq:%d", 4270 seq_printf(m, "%d: uart:E100 port:%lX irq:%d",
4271 info->line, (unsigned long)info->ioport, info->irq); 4271 info->line, (unsigned long)info->ioport, info->irq);
4272 4272
4273 if (!info->ioport || (info->type == PORT_UNKNOWN)) { 4273 if (!info->ioport || (info->type == PORT_UNKNOWN)) {
4274 ret += sprintf(buf+ret, "\n"); 4274 seq_printf(m, "\n");
4275 return ret; 4275 return;
4276 } 4276 }
4277 4277
4278 stat_buf[0] = 0; 4278 seq_printf(m, " baud:%d", info->baud);
4279 stat_buf[1] = 0; 4279 seq_printf(m, " tx:%lu rx:%lu",
4280 if (!E100_RTS_GET(info))
4281 strcat(stat_buf, "|RTS");
4282 if (!E100_CTS_GET(info))
4283 strcat(stat_buf, "|CTS");
4284 if (!E100_DTR_GET(info))
4285 strcat(stat_buf, "|DTR");
4286 if (!E100_DSR_GET(info))
4287 strcat(stat_buf, "|DSR");
4288 if (!E100_CD_GET(info))
4289 strcat(stat_buf, "|CD");
4290 if (!E100_RI_GET(info))
4291 strcat(stat_buf, "|RI");
4292
4293 ret += sprintf(buf+ret, " baud:%d", info->baud);
4294
4295 ret += sprintf(buf+ret, " tx:%lu rx:%lu",
4296 (unsigned long)info->icount.tx, 4280 (unsigned long)info->icount.tx,
4297 (unsigned long)info->icount.rx); 4281 (unsigned long)info->icount.rx);
4298 tmp = CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE); 4282 tmp = CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE);
4299 if (tmp) { 4283 if (tmp)
4300 ret += sprintf(buf+ret, " tx_pend:%lu/%lu", 4284 seq_printf(m, " tx_pend:%lu/%lu",
4301 (unsigned long)tmp, 4285 (unsigned long)tmp,
4302 (unsigned long)SERIAL_XMIT_SIZE); 4286 (unsigned long)SERIAL_XMIT_SIZE);
4303 }
4304 4287
4305 ret += sprintf(buf+ret, " rx_pend:%lu/%lu", 4288 seq_printf(m, " rx_pend:%lu/%lu",
4306 (unsigned long)info->recv_cnt, 4289 (unsigned long)info->recv_cnt,
4307 (unsigned long)info->max_recv_cnt); 4290 (unsigned long)info->max_recv_cnt);
4308 4291
4309#if 1 4292#if 1
4310 if (info->port.tty) { 4293 if (info->port.tty) {
4311
4312 if (info->port.tty->stopped) 4294 if (info->port.tty->stopped)
4313 ret += sprintf(buf+ret, " stopped:%i", 4295 seq_printf(m, " stopped:%i",
4314 (int)info->port.tty->stopped); 4296 (int)info->port.tty->stopped);
4315 if (info->port.tty->hw_stopped) 4297 if (info->port.tty->hw_stopped)
4316 ret += sprintf(buf+ret, " hw_stopped:%i", 4298 seq_printf(m, " hw_stopped:%i",
4317 (int)info->port.tty->hw_stopped); 4299 (int)info->port.tty->hw_stopped);
4318 } 4300 }
4319 4301
4320 { 4302 {
4321 unsigned char rstat = info->ioport[REG_STATUS]; 4303 unsigned char rstat = info->ioport[REG_STATUS];
4322 if (rstat & IO_MASK(R_SERIAL0_STATUS, xoff_detect) ) 4304 if (rstat & IO_MASK(R_SERIAL0_STATUS, xoff_detect))
4323 ret += sprintf(buf+ret, " xoff_detect:1"); 4305 seq_printf(m, " xoff_detect:1");
4324 } 4306 }
4325 4307
4326#endif 4308#endif
4327 4309
4328
4329
4330
4331 if (info->icount.frame) 4310 if (info->icount.frame)
4332 ret += sprintf(buf+ret, " fe:%lu", 4311 seq_printf(m, " fe:%lu", (unsigned long)info->icount.frame);
4333 (unsigned long)info->icount.frame);
4334 4312
4335 if (info->icount.parity) 4313 if (info->icount.parity)
4336 ret += sprintf(buf+ret, " pe:%lu", 4314 seq_printf(m, " pe:%lu", (unsigned long)info->icount.parity);
4337 (unsigned long)info->icount.parity);
4338 4315
4339 if (info->icount.brk) 4316 if (info->icount.brk)
4340 ret += sprintf(buf+ret, " brk:%lu", 4317 seq_printf(m, " brk:%lu", (unsigned long)info->icount.brk);
4341 (unsigned long)info->icount.brk);
4342 4318
4343 if (info->icount.overrun) 4319 if (info->icount.overrun)
4344 ret += sprintf(buf+ret, " oe:%lu", 4320 seq_printf(m, " oe:%lu", (unsigned long)info->icount.overrun);
4345 (unsigned long)info->icount.overrun);
4346 4321
4347 /* 4322 /*
4348 * Last thing is the RS-232 status lines 4323 * Last thing is the RS-232 status lines
4349 */ 4324 */
4350 ret += sprintf(buf+ret, " %s\n", stat_buf+1); 4325 if (!E100_RTS_GET(info))
4351 return ret; 4326 seq_puts(m, "|RTS");
4327 if (!E100_CTS_GET(info))
4328 seq_puts(m, "|CTS");
4329 if (!E100_DTR_GET(info))
4330 seq_puts(m, "|DTR");
4331 if (!E100_DSR_GET(info))
4332 seq_puts(m, "|DSR");
4333 if (!E100_CD_GET(info))
4334 seq_puts(m, "|CD");
4335 if (!E100_RI_GET(info))
4336 seq_puts(m, "|RI");
4337 seq_puts(m, "\n");
4352} 4338}
4353 4339
4354int rs_read_proc(char *page, char **start, off_t off, int count, 4340
4355 int *eof, void *data) 4341static int crisv10_proc_show(struct seq_file *m, void *v)
4356{ 4342{
4357 int i, len = 0, l; 4343 int i;
4358 off_t begin = 0;
4359 4344
4360 len += sprintf(page, "serinfo:1.0 driver:%s\n", 4345 seq_printf(m, "serinfo:1.0 driver:%s\n", serial_version);
4361 serial_version); 4346
4362 for (i = 0; i < NR_PORTS && len < 4000; i++) { 4347 for (i = 0; i < NR_PORTS; i++) {
4363 if (!rs_table[i].enabled) 4348 if (!rs_table[i].enabled)
4364 continue; 4349 continue;
4365 l = line_info(page + len, &rs_table[i]); 4350 seq_line_info(m, &rs_table[i]);
4366 len += l;
4367 if (len+begin > off+count)
4368 goto done;
4369 if (len+begin < off) {
4370 begin += len;
4371 len = 0;
4372 }
4373 } 4351 }
4374#ifdef DEBUG_LOG_INCLUDED 4352#ifdef DEBUG_LOG_INCLUDED
4375 for (i = 0; i < debug_log_pos; i++) { 4353 for (i = 0; i < debug_log_pos; i++) {
4376 len += sprintf(page + len, "%-4i %lu.%lu ", i, debug_log[i].time, timer_data_to_ns(debug_log[i].timer_data)); 4354 seq_printf(m, "%-4i %lu.%lu ",
4377 len += sprintf(page + len, debug_log[i].string, debug_log[i].value); 4355 i, debug_log[i].time,
4378 if (len+begin > off+count) 4356 timer_data_to_ns(debug_log[i].timer_data));
4379 goto done; 4357 seq_printf(m, debug_log[i].string, debug_log[i].value);
4380 if (len+begin < off) {
4381 begin += len;
4382 len = 0;
4383 }
4384 } 4358 }
4385 len += sprintf(page + len, "debug_log %i/%i %li bytes\n", 4359 seq_printf(m, "debug_log %i/%i\n", i, DEBUG_LOG_SIZE);
4386 i, DEBUG_LOG_SIZE, begin+len);
4387 debug_log_pos = 0; 4360 debug_log_pos = 0;
4388#endif 4361#endif
4362 return 0;
4363}
4389 4364
4390 *eof = 1; 4365static int crisv10_proc_open(struct inode *inode, struct file *file)
4391done: 4366{
4392 if (off >= len+begin) 4367 return single_open(file, crisv10_proc_show, NULL);
4393 return 0;
4394 *start = page + (off-begin);
4395 return ((count < begin+len-off) ? count : begin+len-off);
4396} 4368}
4397 4369
4370static const struct file_operations crisv10_proc_fops = {
4371 .owner = THIS_MODULE,
4372 .open = crisv10_proc_open,
4373 .read = seq_read,
4374 .llseek = seq_lseek,
4375 .release = single_release,
4376};
4377#endif
4378
4379
4398/* Finally, routines used to initialize the serial driver. */ 4380/* Finally, routines used to initialize the serial driver. */
4399 4381
4400static void 4382static void show_serial_version(void)
4401show_serial_version(void)
4402{ 4383{
4403 printk(KERN_INFO 4384 printk(KERN_INFO
4404 "ETRAX 100LX serial-driver %s, (c) 2000-2004 Axis Communications AB\r\n", 4385 "ETRAX 100LX serial-driver %s, "
4386 "(c) 2000-2004 Axis Communications AB\r\n",
4405 &serial_version[11]); /* "$Revision: x.yy" */ 4387 &serial_version[11]); /* "$Revision: x.yy" */
4406} 4388}
4407 4389
@@ -4425,13 +4407,14 @@ static const struct tty_operations rs_ops = {
4425 .break_ctl = rs_break, 4407 .break_ctl = rs_break,
4426 .send_xchar = rs_send_xchar, 4408 .send_xchar = rs_send_xchar,
4427 .wait_until_sent = rs_wait_until_sent, 4409 .wait_until_sent = rs_wait_until_sent,
4428 .read_proc = rs_read_proc,
4429 .tiocmget = rs_tiocmget, 4410 .tiocmget = rs_tiocmget,
4430 .tiocmset = rs_tiocmset 4411 .tiocmset = rs_tiocmset,
4412#ifdef CONFIG_PROC_FS
4413 .proc_fops = &crisv10_proc_fops,
4414#endif
4431}; 4415};
4432 4416
4433static int __init 4417static int __init rs_init(void)
4434rs_init(void)
4435{ 4418{
4436 int i; 4419 int i;
4437 struct e100_serial *info; 4420 struct e100_serial *info;
diff --git a/drivers/serial/jsm/jsm.h b/drivers/serial/jsm/jsm.h
index 8871aaa3dba6..c0a3e2734e24 100644
--- a/drivers/serial/jsm/jsm.h
+++ b/drivers/serial/jsm/jsm.h
@@ -130,8 +130,6 @@ struct jsm_board
130 struct pci_dev *pci_dev; 130 struct pci_dev *pci_dev;
131 u32 maxports; /* MAX ports this board can handle */ 131 u32 maxports; /* MAX ports this board can handle */
132 132
133 spinlock_t bd_lock; /* Used to protect board */
134
135 spinlock_t bd_intr_lock; /* Used to protect the poller tasklet and 133 spinlock_t bd_intr_lock; /* Used to protect the poller tasklet and
136 * the interrupt routine from each other. 134 * the interrupt routine from each other.
137 */ 135 */
diff --git a/drivers/serial/jsm/jsm_driver.c b/drivers/serial/jsm/jsm_driver.c
index d2d32a198629..b3604aa322a4 100644
--- a/drivers/serial/jsm/jsm_driver.c
+++ b/drivers/serial/jsm/jsm_driver.c
@@ -88,7 +88,6 @@ static int __devinit jsm_probe_one(struct pci_dev *pdev, const struct pci_device
88 else 88 else
89 brd->maxports = 2; 89 brd->maxports = 2;
90 90
91 spin_lock_init(&brd->bd_lock);
92 spin_lock_init(&brd->bd_intr_lock); 91 spin_lock_init(&brd->bd_intr_lock);
93 92
94 /* store which revision we have */ 93 /* store which revision we have */
diff --git a/drivers/serial/nwpserial.c b/drivers/serial/nwpserial.c
index 32f3eaf0d262..9e150b19d726 100644
--- a/drivers/serial/nwpserial.c
+++ b/drivers/serial/nwpserial.c
@@ -145,11 +145,13 @@ static irqreturn_t nwpserial_interrupt(int irq, void *dev_id)
145 ch = dcr_read(up->dcr_host, UART_RX); 145 ch = dcr_read(up->dcr_host, UART_RX);
146 if (up->port.ignore_status_mask != NWPSERIAL_STATUS_RXVALID) 146 if (up->port.ignore_status_mask != NWPSERIAL_STATUS_RXVALID)
147 tty_insert_flip_char(tty, ch, TTY_NORMAL); 147 tty_insert_flip_char(tty, ch, TTY_NORMAL);
148 } while (dcr_read(up->dcr_host, UART_RX) & UART_LSR_DR); 148 } while (dcr_read(up->dcr_host, UART_LSR) & UART_LSR_DR);
149 149
150 tty_flip_buffer_push(tty); 150 tty_flip_buffer_push(tty);
151 ret = IRQ_HANDLED; 151 ret = IRQ_HANDLED;
152 152
153 /* clear interrupt */
154 dcr_write(up->dcr_host, UART_IIR, 1);
153out: 155out:
154 spin_unlock(&up->port.lock); 156 spin_unlock(&up->port.lock);
155 return ret; 157 return ret;
diff --git a/drivers/serial/s3c6400.c b/drivers/serial/s3c6400.c
index 06936d13393f..3e3785233682 100644
--- a/drivers/serial/s3c6400.c
+++ b/drivers/serial/s3c6400.c
@@ -102,6 +102,7 @@ static struct s3c24xx_uart_info s3c6400_uart_inf = {
102 .name = "Samsung S3C6400 UART", 102 .name = "Samsung S3C6400 UART",
103 .type = PORT_S3C6400, 103 .type = PORT_S3C6400,
104 .fifosize = 64, 104 .fifosize = 64,
105 .has_divslot = 1,
105 .rx_fifomask = S3C2440_UFSTAT_RXMASK, 106 .rx_fifomask = S3C2440_UFSTAT_RXMASK,
106 .rx_fifoshift = S3C2440_UFSTAT_RXSHIFT, 107 .rx_fifoshift = S3C2440_UFSTAT_RXSHIFT,
107 .rx_fifofull = S3C2440_UFSTAT_RXFULL, 108 .rx_fifofull = S3C2440_UFSTAT_RXFULL,
diff --git a/drivers/serial/samsung.c b/drivers/serial/samsung.c
index 41ac94872b8d..93b5d75db126 100644
--- a/drivers/serial/samsung.c
+++ b/drivers/serial/samsung.c
@@ -127,7 +127,7 @@ static void s3c24xx_serial_stop_tx(struct uart_port *port)
127 struct s3c24xx_uart_port *ourport = to_ourport(port); 127 struct s3c24xx_uart_port *ourport = to_ourport(port);
128 128
129 if (tx_enabled(port)) { 129 if (tx_enabled(port)) {
130 disable_irq(ourport->tx_irq); 130 disable_irq_nosync(ourport->tx_irq);
131 tx_enabled(port) = 0; 131 tx_enabled(port) = 0;
132 if (port->flags & UPF_CONS_FLOW) 132 if (port->flags & UPF_CONS_FLOW)
133 s3c24xx_serial_rx_enable(port); 133 s3c24xx_serial_rx_enable(port);
@@ -154,7 +154,7 @@ static void s3c24xx_serial_stop_rx(struct uart_port *port)
154 154
155 if (rx_enabled(port)) { 155 if (rx_enabled(port)) {
156 dbg("s3c24xx_serial_stop_rx: port=%p\n", port); 156 dbg("s3c24xx_serial_stop_rx: port=%p\n", port);
157 disable_irq(ourport->rx_irq); 157 disable_irq_nosync(ourport->rx_irq);
158 rx_enabled(port) = 0; 158 rx_enabled(port) = 0;
159 } 159 }
160} 160}
@@ -508,6 +508,7 @@ s3c24xx_serial_setsource(struct uart_port *port, struct s3c24xx_uart_clksrc *c)
508struct baud_calc { 508struct baud_calc {
509 struct s3c24xx_uart_clksrc *clksrc; 509 struct s3c24xx_uart_clksrc *clksrc;
510 unsigned int calc; 510 unsigned int calc;
511 unsigned int divslot;
511 unsigned int quot; 512 unsigned int quot;
512 struct clk *src; 513 struct clk *src;
513}; 514};
@@ -517,6 +518,7 @@ static int s3c24xx_serial_calcbaud(struct baud_calc *calc,
517 struct s3c24xx_uart_clksrc *clksrc, 518 struct s3c24xx_uart_clksrc *clksrc,
518 unsigned int baud) 519 unsigned int baud)
519{ 520{
521 struct s3c24xx_uart_port *ourport = to_ourport(port);
520 unsigned long rate; 522 unsigned long rate;
521 523
522 calc->src = clk_get(port->dev, clksrc->name); 524 calc->src = clk_get(port->dev, clksrc->name);
@@ -527,8 +529,24 @@ static int s3c24xx_serial_calcbaud(struct baud_calc *calc,
527 rate /= clksrc->divisor; 529 rate /= clksrc->divisor;
528 530
529 calc->clksrc = clksrc; 531 calc->clksrc = clksrc;
530 calc->quot = (rate + (8 * baud)) / (16 * baud); 532
531 calc->calc = (rate / (calc->quot * 16)); 533 if (ourport->info->has_divslot) {
534 unsigned long div = rate / baud;
535
536 /* The UDIVSLOT register on the newer UARTs allows us to
537 * get a divisor adjustment of 1/16th on the baud clock.
538 *
539 * We don't keep the UDIVSLOT value (the 16ths we calculated
540 * by not multiplying the baud by 16) as it is easy enough
541 * to recalculate.
542 */
543
544 calc->quot = div / 16;
545 calc->calc = rate / div;
546 } else {
547 calc->quot = (rate + (8 * baud)) / (16 * baud);
548 calc->calc = (rate / (calc->quot * 16));
549 }
532 550
533 calc->quot--; 551 calc->quot--;
534 return 1; 552 return 1;
@@ -611,6 +629,30 @@ static unsigned int s3c24xx_serial_getclk(struct uart_port *port,
611 return best->quot; 629 return best->quot;
612} 630}
613 631
632/* udivslot_table[]
633 *
634 * This table takes the fractional value of the baud divisor and gives
635 * the recommended setting for the UDIVSLOT register.
636 */
637static u16 udivslot_table[16] = {
638 [0] = 0x0000,
639 [1] = 0x0080,
640 [2] = 0x0808,
641 [3] = 0x0888,
642 [4] = 0x2222,
643 [5] = 0x4924,
644 [6] = 0x4A52,
645 [7] = 0x54AA,
646 [8] = 0x5555,
647 [9] = 0xD555,
648 [10] = 0xD5D5,
649 [11] = 0xDDD5,
650 [12] = 0xDDDD,
651 [13] = 0xDFDD,
652 [14] = 0xDFDF,
653 [15] = 0xFFDF,
654};
655
614static void s3c24xx_serial_set_termios(struct uart_port *port, 656static void s3c24xx_serial_set_termios(struct uart_port *port,
615 struct ktermios *termios, 657 struct ktermios *termios,
616 struct ktermios *old) 658 struct ktermios *old)
@@ -623,6 +665,7 @@ static void s3c24xx_serial_set_termios(struct uart_port *port,
623 unsigned int baud, quot; 665 unsigned int baud, quot;
624 unsigned int ulcon; 666 unsigned int ulcon;
625 unsigned int umcon; 667 unsigned int umcon;
668 unsigned int udivslot = 0;
626 669
627 /* 670 /*
628 * We don't support modem control lines. 671 * We don't support modem control lines.
@@ -644,6 +687,7 @@ static void s3c24xx_serial_set_termios(struct uart_port *port,
644 /* check to see if we need to change clock source */ 687 /* check to see if we need to change clock source */
645 688
646 if (ourport->clksrc != clksrc || ourport->baudclk != clk) { 689 if (ourport->clksrc != clksrc || ourport->baudclk != clk) {
690 dbg("selecting clock %p\n", clk);
647 s3c24xx_serial_setsource(port, clksrc); 691 s3c24xx_serial_setsource(port, clksrc);
648 692
649 if (ourport->baudclk != NULL && !IS_ERR(ourport->baudclk)) { 693 if (ourport->baudclk != NULL && !IS_ERR(ourport->baudclk)) {
@@ -658,6 +702,13 @@ static void s3c24xx_serial_set_termios(struct uart_port *port,
658 ourport->baudclk_rate = clk ? clk_get_rate(clk) : 0; 702 ourport->baudclk_rate = clk ? clk_get_rate(clk) : 0;
659 } 703 }
660 704
705 if (ourport->info->has_divslot) {
706 unsigned int div = ourport->baudclk_rate / baud;
707
708 udivslot = udivslot_table[div & 15];
709 dbg("udivslot = %04x (div %d)\n", udivslot, div & 15);
710 }
711
661 switch (termios->c_cflag & CSIZE) { 712 switch (termios->c_cflag & CSIZE) {
662 case CS5: 713 case CS5:
663 dbg("config: 5bits/char\n"); 714 dbg("config: 5bits/char\n");
@@ -697,12 +748,16 @@ static void s3c24xx_serial_set_termios(struct uart_port *port,
697 748
698 spin_lock_irqsave(&port->lock, flags); 749 spin_lock_irqsave(&port->lock, flags);
699 750
700 dbg("setting ulcon to %08x, brddiv to %d\n", ulcon, quot); 751 dbg("setting ulcon to %08x, brddiv to %d, udivslot %08x\n",
752 ulcon, quot, udivslot);
701 753
702 wr_regl(port, S3C2410_ULCON, ulcon); 754 wr_regl(port, S3C2410_ULCON, ulcon);
703 wr_regl(port, S3C2410_UBRDIV, quot); 755 wr_regl(port, S3C2410_UBRDIV, quot);
704 wr_regl(port, S3C2410_UMCON, umcon); 756 wr_regl(port, S3C2410_UMCON, umcon);
705 757
758 if (ourport->info->has_divslot)
759 wr_regl(port, S3C2443_DIVSLOT, udivslot);
760
706 dbg("uart: ulcon = 0x%08x, ucon = 0x%08x, ufcon = 0x%08x\n", 761 dbg("uart: ulcon = 0x%08x, ucon = 0x%08x, ufcon = 0x%08x\n",
707 rd_regl(port, S3C2410_ULCON), 762 rd_regl(port, S3C2410_ULCON),
708 rd_regl(port, S3C2410_UCON), 763 rd_regl(port, S3C2410_UCON),
diff --git a/drivers/serial/samsung.h b/drivers/serial/samsung.h
index 571d6b90d206..7afb94843a08 100644
--- a/drivers/serial/samsung.h
+++ b/drivers/serial/samsung.h
@@ -21,6 +21,10 @@ struct s3c24xx_uart_info {
21 unsigned long tx_fifoshift; 21 unsigned long tx_fifoshift;
22 unsigned long tx_fifofull; 22 unsigned long tx_fifofull;
23 23
24 /* uart port features */
25
26 unsigned int has_divslot:1;
27
24 /* clock source control */ 28 /* clock source control */
25 29
26 int (*get_clksrc)(struct uart_port *, struct s3c24xx_uart_clksrc *clk); 30 int (*get_clksrc)(struct uart_port *, struct s3c24xx_uart_clksrc *clk);
diff --git a/drivers/sh/intc.c b/drivers/sh/intc.c
index 7fb9b5c4669a..12d13d99b6f0 100644
--- a/drivers/sh/intc.c
+++ b/drivers/sh/intc.c
@@ -44,6 +44,7 @@ struct intc_handle_int {
44struct intc_desc_int { 44struct intc_desc_int {
45 struct list_head list; 45 struct list_head list;
46 struct sys_device sysdev; 46 struct sys_device sysdev;
47 pm_message_t state;
47 unsigned long *reg; 48 unsigned long *reg;
48#ifdef CONFIG_SMP 49#ifdef CONFIG_SMP
49 unsigned long *smp; 50 unsigned long *smp;
@@ -786,18 +787,44 @@ static int intc_suspend(struct sys_device *dev, pm_message_t state)
786 /* get intc controller associated with this sysdev */ 787 /* get intc controller associated with this sysdev */
787 d = container_of(dev, struct intc_desc_int, sysdev); 788 d = container_of(dev, struct intc_desc_int, sysdev);
788 789
789 /* enable wakeup irqs belonging to this intc controller */ 790 switch (state.event) {
790 for_each_irq_desc(irq, desc) { 791 case PM_EVENT_ON:
791 if ((desc->status & IRQ_WAKEUP) && (desc->chip == &d->chip)) 792 if (d->state.event != PM_EVENT_FREEZE)
792 intc_enable(irq); 793 break;
794 for_each_irq_desc(irq, desc) {
795 if (desc->chip != &d->chip)
796 continue;
797 if (desc->status & IRQ_DISABLED)
798 intc_disable(irq);
799 else
800 intc_enable(irq);
801 }
802 break;
803 case PM_EVENT_FREEZE:
804 /* nothing has to be done */
805 break;
806 case PM_EVENT_SUSPEND:
807 /* enable wakeup irqs belonging to this intc controller */
808 for_each_irq_desc(irq, desc) {
809 if ((desc->status & IRQ_WAKEUP) && (desc->chip == &d->chip))
810 intc_enable(irq);
811 }
812 break;
793 } 813 }
814 d->state = state;
794 815
795 return 0; 816 return 0;
796} 817}
797 818
819static int intc_resume(struct sys_device *dev)
820{
821 return intc_suspend(dev, PMSG_ON);
822}
823
798static struct sysdev_class intc_sysdev_class = { 824static struct sysdev_class intc_sysdev_class = {
799 .name = "intc", 825 .name = "intc",
800 .suspend = intc_suspend, 826 .suspend = intc_suspend,
827 .resume = intc_resume,
801}; 828};
802 829
803/* register this intc as sysdev to allow suspend/resume */ 830/* register this intc as sysdev to allow suspend/resume */
diff --git a/drivers/spi/pxa2xx_spi.c b/drivers/spi/pxa2xx_spi.c
index c1688c71f052..3f3c08c6ba4e 100644
--- a/drivers/spi/pxa2xx_spi.c
+++ b/drivers/spi/pxa2xx_spi.c
@@ -195,7 +195,7 @@ static void cs_deassert(struct driver_data *drv_data)
195 struct chip_data *chip = drv_data->cur_chip; 195 struct chip_data *chip = drv_data->cur_chip;
196 196
197 if (chip->cs_control) { 197 if (chip->cs_control) {
198 chip->cs_control(PXA2XX_CS_ASSERT); 198 chip->cs_control(PXA2XX_CS_DEASSERT);
199 return; 199 return;
200 } 200 }
201 201
@@ -213,7 +213,7 @@ static int flush(struct driver_data *drv_data)
213 while (read_SSSR(reg) & SSSR_RNE) { 213 while (read_SSSR(reg) & SSSR_RNE) {
214 read_SSDR(reg); 214 read_SSDR(reg);
215 } 215 }
216 } while ((read_SSSR(reg) & SSSR_BSY) && limit--); 216 } while ((read_SSSR(reg) & SSSR_BSY) && --limit);
217 write_SSSR(SSSR_ROR, reg); 217 write_SSSR(SSSR_ROR, reg);
218 218
219 return limit; 219 return limit;
@@ -484,7 +484,7 @@ static int wait_ssp_rx_stall(void const __iomem *ioaddr)
484{ 484{
485 unsigned long limit = loops_per_jiffy << 1; 485 unsigned long limit = loops_per_jiffy << 1;
486 486
487 while ((read_SSSR(ioaddr) & SSSR_BSY) && limit--) 487 while ((read_SSSR(ioaddr) & SSSR_BSY) && --limit)
488 cpu_relax(); 488 cpu_relax();
489 489
490 return limit; 490 return limit;
@@ -494,7 +494,7 @@ static int wait_dma_channel_stop(int channel)
494{ 494{
495 unsigned long limit = loops_per_jiffy << 1; 495 unsigned long limit = loops_per_jiffy << 1;
496 496
497 while (!(DCSR(channel) & DCSR_STOPSTATE) && limit--) 497 while (!(DCSR(channel) & DCSR_STOPSTATE) && --limit)
498 cpu_relax(); 498 cpu_relax();
499 499
500 return limit; 500 return limit;
@@ -1373,6 +1373,9 @@ static void cleanup(struct spi_device *spi)
1373{ 1373{
1374 struct chip_data *chip = spi_get_ctldata(spi); 1374 struct chip_data *chip = spi_get_ctldata(spi);
1375 1375
1376 if (!chip)
1377 return;
1378
1376 if (gpio_is_valid(chip->gpio_cs)) 1379 if (gpio_is_valid(chip->gpio_cs))
1377 gpio_free(chip->gpio_cs); 1380 gpio_free(chip->gpio_cs);
1378 1381
@@ -1700,6 +1703,13 @@ static int pxa2xx_spi_resume(struct platform_device *pdev)
1700 struct ssp_device *ssp = drv_data->ssp; 1703 struct ssp_device *ssp = drv_data->ssp;
1701 int status = 0; 1704 int status = 0;
1702 1705
1706 if (drv_data->rx_channel != -1)
1707 DRCMR(drv_data->ssp->drcmr_rx) =
1708 DRCMR_MAPVLD | drv_data->rx_channel;
1709 if (drv_data->tx_channel != -1)
1710 DRCMR(drv_data->ssp->drcmr_tx) =
1711 DRCMR_MAPVLD | drv_data->tx_channel;
1712
1703 /* Enable the SSP clock */ 1713 /* Enable the SSP clock */
1704 clk_enable(ssp->clk); 1714 clk_enable(ssp->clk);
1705 1715
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index 643908b74bc0..8eba98c8ed1e 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -658,7 +658,7 @@ int spi_write_then_read(struct spi_device *spi,
658 658
659 int status; 659 int status;
660 struct spi_message message; 660 struct spi_message message;
661 struct spi_transfer x; 661 struct spi_transfer x[2];
662 u8 *local_buf; 662 u8 *local_buf;
663 663
664 /* Use preallocated DMA-safe buffer. We can't avoid copying here, 664 /* Use preallocated DMA-safe buffer. We can't avoid copying here,
@@ -669,9 +669,15 @@ int spi_write_then_read(struct spi_device *spi,
669 return -EINVAL; 669 return -EINVAL;
670 670
671 spi_message_init(&message); 671 spi_message_init(&message);
672 memset(&x, 0, sizeof x); 672 memset(x, 0, sizeof x);
673 x.len = n_tx + n_rx; 673 if (n_tx) {
674 spi_message_add_tail(&x, &message); 674 x[0].len = n_tx;
675 spi_message_add_tail(&x[0], &message);
676 }
677 if (n_rx) {
678 x[1].len = n_rx;
679 spi_message_add_tail(&x[1], &message);
680 }
675 681
676 /* ... unless someone else is using the pre-allocated buffer */ 682 /* ... unless someone else is using the pre-allocated buffer */
677 if (!mutex_trylock(&lock)) { 683 if (!mutex_trylock(&lock)) {
@@ -682,15 +688,15 @@ int spi_write_then_read(struct spi_device *spi,
682 local_buf = buf; 688 local_buf = buf;
683 689
684 memcpy(local_buf, txbuf, n_tx); 690 memcpy(local_buf, txbuf, n_tx);
685 x.tx_buf = local_buf; 691 x[0].tx_buf = local_buf;
686 x.rx_buf = local_buf; 692 x[1].rx_buf = local_buf + n_tx;
687 693
688 /* do the i/o */ 694 /* do the i/o */
689 status = spi_sync(spi, &message); 695 status = spi_sync(spi, &message);
690 if (status == 0) 696 if (status == 0)
691 memcpy(rxbuf, x.rx_buf + n_tx, n_rx); 697 memcpy(rxbuf, x[1].rx_buf, n_rx);
692 698
693 if (x.tx_buf == buf) 699 if (x[0].tx_buf == buf)
694 mutex_unlock(&lock); 700 mutex_unlock(&lock);
695 else 701 else
696 kfree(local_buf); 702 kfree(local_buf);
diff --git a/drivers/staging/android/binder.c b/drivers/staging/android/binder.c
index 79e90fed27d3..299d29d1dadb 100644
--- a/drivers/staging/android/binder.c
+++ b/drivers/staging/android/binder.c
@@ -41,6 +41,8 @@ static int binder_last_id;
41static struct proc_dir_entry *binder_proc_dir_entry_root; 41static struct proc_dir_entry *binder_proc_dir_entry_root;
42static struct proc_dir_entry *binder_proc_dir_entry_proc; 42static struct proc_dir_entry *binder_proc_dir_entry_proc;
43static struct hlist_head binder_dead_nodes; 43static struct hlist_head binder_dead_nodes;
44static HLIST_HEAD(binder_deferred_list);
45static DEFINE_MUTEX(binder_deferred_lock);
44 46
45static int binder_read_proc_proc( 47static int binder_read_proc_proc(
46 char *page, char **start, off_t off, int count, int *eof, void *data); 48 char *page, char **start, off_t off, int count, int *eof, void *data);
@@ -54,11 +56,7 @@ static int binder_read_proc_proc(
54#define SZ_4M 0x400000 56#define SZ_4M 0x400000
55#endif 57#endif
56 58
57#ifndef __i386__
58#define FORBIDDEN_MMAP_FLAGS (VM_WRITE | VM_EXEC)
59#else
60#define FORBIDDEN_MMAP_FLAGS (VM_WRITE) 59#define FORBIDDEN_MMAP_FLAGS (VM_WRITE)
61#endif
62 60
63#define BINDER_SMALL_BUF_SIZE (PAGE_SIZE * 64) 61#define BINDER_SMALL_BUF_SIZE (PAGE_SIZE * 64)
64 62
@@ -236,6 +234,12 @@ struct binder_buffer {
236 uint8_t data[0]; 234 uint8_t data[0];
237}; 235};
238 236
237enum {
238 BINDER_DEFERRED_PUT_FILES = 0x01,
239 BINDER_DEFERRED_FLUSH = 0x02,
240 BINDER_DEFERRED_RELEASE = 0x04,
241};
242
239struct binder_proc { 243struct binder_proc {
240 struct hlist_node proc_node; 244 struct hlist_node proc_node;
241 struct rb_root threads; 245 struct rb_root threads;
@@ -245,8 +249,11 @@ struct binder_proc {
245 int pid; 249 int pid;
246 struct vm_area_struct *vma; 250 struct vm_area_struct *vma;
247 struct task_struct *tsk; 251 struct task_struct *tsk;
252 struct files_struct *files;
253 struct hlist_node deferred_work_node;
254 int deferred_work;
248 void *buffer; 255 void *buffer;
249 size_t user_buffer_offset; 256 ptrdiff_t user_buffer_offset;
250 257
251 struct list_head buffers; 258 struct list_head buffers;
252 struct rb_root free_buffers; 259 struct rb_root free_buffers;
@@ -310,12 +317,14 @@ struct binder_transaction {
310 uid_t sender_euid; 317 uid_t sender_euid;
311}; 318};
312 319
320static void binder_defer_work(struct binder_proc *proc, int defer);
321
313/* 322/*
314 * copied from get_unused_fd_flags 323 * copied from get_unused_fd_flags
315 */ 324 */
316int task_get_unused_fd_flags(struct task_struct *tsk, int flags) 325int task_get_unused_fd_flags(struct binder_proc *proc, int flags)
317{ 326{
318 struct files_struct *files = get_files_struct(tsk); 327 struct files_struct *files = proc->files;
319 int fd, error; 328 int fd, error;
320 struct fdtable *fdt; 329 struct fdtable *fdt;
321 unsigned long rlim_cur; 330 unsigned long rlim_cur;
@@ -337,9 +346,9 @@ repeat:
337 * will limit the total number of files that can be opened. 346 * will limit the total number of files that can be opened.
338 */ 347 */
339 rlim_cur = 0; 348 rlim_cur = 0;
340 if (lock_task_sighand(tsk, &irqs)) { 349 if (lock_task_sighand(proc->tsk, &irqs)) {
341 rlim_cur = tsk->signal->rlim[RLIMIT_NOFILE].rlim_cur; 350 rlim_cur = proc->tsk->signal->rlim[RLIMIT_NOFILE].rlim_cur;
342 unlock_task_sighand(tsk, &irqs); 351 unlock_task_sighand(proc->tsk, &irqs);
343 } 352 }
344 if (fd >= rlim_cur) 353 if (fd >= rlim_cur)
345 goto out; 354 goto out;
@@ -375,7 +384,6 @@ repeat:
375 384
376out: 385out:
377 spin_unlock(&files->file_lock); 386 spin_unlock(&files->file_lock);
378 put_files_struct(files);
379 return error; 387 return error;
380} 388}
381 389
@@ -383,9 +391,9 @@ out:
383 * copied from fd_install 391 * copied from fd_install
384 */ 392 */
385static void task_fd_install( 393static void task_fd_install(
386 struct task_struct *tsk, unsigned int fd, struct file *file) 394 struct binder_proc *proc, unsigned int fd, struct file *file)
387{ 395{
388 struct files_struct *files = get_files_struct(tsk); 396 struct files_struct *files = proc->files;
389 struct fdtable *fdt; 397 struct fdtable *fdt;
390 398
391 if (files == NULL) 399 if (files == NULL)
@@ -396,7 +404,6 @@ static void task_fd_install(
396 BUG_ON(fdt->fd[fd] != NULL); 404 BUG_ON(fdt->fd[fd] != NULL);
397 rcu_assign_pointer(fdt->fd[fd], file); 405 rcu_assign_pointer(fdt->fd[fd], file);
398 spin_unlock(&files->file_lock); 406 spin_unlock(&files->file_lock);
399 put_files_struct(files);
400} 407}
401 408
402/* 409/*
@@ -413,10 +420,10 @@ static void __put_unused_fd(struct files_struct *files, unsigned int fd)
413/* 420/*
414 * copied from sys_close 421 * copied from sys_close
415 */ 422 */
416static long task_close_fd(struct task_struct *tsk, unsigned int fd) 423static long task_close_fd(struct binder_proc *proc, unsigned int fd)
417{ 424{
418 struct file *filp; 425 struct file *filp;
419 struct files_struct *files = get_files_struct(tsk); 426 struct files_struct *files = proc->files;
420 struct fdtable *fdt; 427 struct fdtable *fdt;
421 int retval; 428 int retval;
422 429
@@ -443,12 +450,10 @@ static long task_close_fd(struct task_struct *tsk, unsigned int fd)
443 retval == -ERESTART_RESTARTBLOCK)) 450 retval == -ERESTART_RESTARTBLOCK))
444 retval = -EINTR; 451 retval = -EINTR;
445 452
446 put_files_struct(files);
447 return retval; 453 return retval;
448 454
449out_unlock: 455out_unlock:
450 spin_unlock(&files->file_lock); 456 spin_unlock(&files->file_lock);
451 put_files_struct(files);
452 return -EBADF; 457 return -EBADF;
453} 458}
454 459
@@ -618,7 +623,8 @@ static int binder_update_page_range(struct binder_proc *proc, int allocate,
618 proc->pid, page_addr); 623 proc->pid, page_addr);
619 goto err_map_kernel_failed; 624 goto err_map_kernel_failed;
620 } 625 }
621 user_page_addr = (size_t)page_addr + proc->user_buffer_offset; 626 user_page_addr =
627 (uintptr_t)page_addr + proc->user_buffer_offset;
622 ret = vm_insert_page(vma, user_page_addr, page[0]); 628 ret = vm_insert_page(vma, user_page_addr, page[0]);
623 if (ret) { 629 if (ret) {
624 printk(KERN_ERR "binder: %d: binder_alloc_buf failed " 630 printk(KERN_ERR "binder: %d: binder_alloc_buf failed "
@@ -639,7 +645,7 @@ free_range:
639 page_addr -= PAGE_SIZE) { 645 page_addr -= PAGE_SIZE) {
640 page = &proc->pages[(page_addr - proc->buffer) / PAGE_SIZE]; 646 page = &proc->pages[(page_addr - proc->buffer) / PAGE_SIZE];
641 if (vma) 647 if (vma)
642 zap_page_range(vma, (size_t)page_addr + 648 zap_page_range(vma, (uintptr_t)page_addr +
643 proc->user_buffer_offset, PAGE_SIZE, NULL); 649 proc->user_buffer_offset, PAGE_SIZE, NULL);
644err_vm_insert_page_failed: 650err_vm_insert_page_failed:
645 unmap_kernel_range((unsigned long)page_addr, PAGE_SIZE); 651 unmap_kernel_range((unsigned long)page_addr, PAGE_SIZE);
@@ -720,18 +726,19 @@ static struct binder_buffer *binder_alloc_buf(struct binder_proc *proc,
720 "er %p size %zd\n", proc->pid, size, buffer, buffer_size); 726 "er %p size %zd\n", proc->pid, size, buffer, buffer_size);
721 727
722 has_page_addr = 728 has_page_addr =
723 (void *)(((size_t)buffer->data + buffer_size) & PAGE_MASK); 729 (void *)(((uintptr_t)buffer->data + buffer_size) & PAGE_MASK);
724 if (n == NULL) { 730 if (n == NULL) {
725 if (size + sizeof(struct binder_buffer) + 4 >= buffer_size) 731 if (size + sizeof(struct binder_buffer) + 4 >= buffer_size)
726 buffer_size = size; /* no room for other buffers */ 732 buffer_size = size; /* no room for other buffers */
727 else 733 else
728 buffer_size = size + sizeof(struct binder_buffer); 734 buffer_size = size + sizeof(struct binder_buffer);
729 } 735 }
730 end_page_addr = (void *)PAGE_ALIGN((size_t)buffer->data + buffer_size); 736 end_page_addr =
737 (void *)PAGE_ALIGN((uintptr_t)buffer->data + buffer_size);
731 if (end_page_addr > has_page_addr) 738 if (end_page_addr > has_page_addr)
732 end_page_addr = has_page_addr; 739 end_page_addr = has_page_addr;
733 if (binder_update_page_range(proc, 1, 740 if (binder_update_page_range(proc, 1,
734 (void *)PAGE_ALIGN((size_t)buffer->data), end_page_addr, NULL)) 741 (void *)PAGE_ALIGN((uintptr_t)buffer->data), end_page_addr, NULL))
735 return NULL; 742 return NULL;
736 743
737 rb_erase(best_fit, &proc->free_buffers); 744 rb_erase(best_fit, &proc->free_buffers);
@@ -762,12 +769,12 @@ static struct binder_buffer *binder_alloc_buf(struct binder_proc *proc,
762 769
763static void *buffer_start_page(struct binder_buffer *buffer) 770static void *buffer_start_page(struct binder_buffer *buffer)
764{ 771{
765 return (void *)((size_t)buffer & PAGE_MASK); 772 return (void *)((uintptr_t)buffer & PAGE_MASK);
766} 773}
767 774
768static void *buffer_end_page(struct binder_buffer *buffer) 775static void *buffer_end_page(struct binder_buffer *buffer)
769{ 776{
770 return (void *)(((size_t)(buffer + 1) - 1) & PAGE_MASK); 777 return (void *)(((uintptr_t)(buffer + 1) - 1) & PAGE_MASK);
771} 778}
772 779
773static void binder_delete_free_buffer( 780static void binder_delete_free_buffer(
@@ -845,8 +852,8 @@ static void binder_free_buf(
845 } 852 }
846 853
847 binder_update_page_range(proc, 0, 854 binder_update_page_range(proc, 0,
848 (void *)PAGE_ALIGN((size_t)buffer->data), 855 (void *)PAGE_ALIGN((uintptr_t)buffer->data),
849 (void *)(((size_t)buffer->data + buffer_size) & PAGE_MASK), 856 (void *)(((uintptr_t)buffer->data + buffer_size) & PAGE_MASK),
850 NULL); 857 NULL);
851 rb_erase(&buffer->rb_node, &proc->allocated_buffers); 858 rb_erase(&buffer->rb_node, &proc->allocated_buffers);
852 buffer->free = 1; 859 buffer->free = 1;
@@ -1345,6 +1352,17 @@ binder_transaction(struct binder_proc *proc, struct binder_thread *thread,
1345 if (!(tr->flags & TF_ONE_WAY) && thread->transaction_stack) { 1352 if (!(tr->flags & TF_ONE_WAY) && thread->transaction_stack) {
1346 struct binder_transaction *tmp; 1353 struct binder_transaction *tmp;
1347 tmp = thread->transaction_stack; 1354 tmp = thread->transaction_stack;
1355 if (tmp->to_thread != thread) {
1356 binder_user_error("binder: %d:%d got new "
1357 "transaction with bad transaction stack"
1358 ", transaction %d has target %d:%d\n",
1359 proc->pid, thread->pid, tmp->debug_id,
1360 tmp->to_proc ? tmp->to_proc->pid : 0,
1361 tmp->to_thread ?
1362 tmp->to_thread->pid : 0);
1363 return_error = BR_FAILED_REPLY;
1364 goto err_bad_call_stack;
1365 }
1348 while (tmp) { 1366 while (tmp) {
1349 if (tmp->from && tmp->from->proc == target_proc) 1367 if (tmp->from && tmp->from->proc == target_proc)
1350 target_thread = tmp->from; 1368 target_thread = tmp->from;
@@ -1434,10 +1452,19 @@ binder_transaction(struct binder_proc *proc, struct binder_thread *thread,
1434 return_error = BR_FAILED_REPLY; 1452 return_error = BR_FAILED_REPLY;
1435 goto err_copy_data_failed; 1453 goto err_copy_data_failed;
1436 } 1454 }
1455 if (!IS_ALIGNED(tr->offsets_size, sizeof(size_t))) {
1456 binder_user_error("binder: %d:%d got transaction with "
1457 "invalid offsets size, %zd\n",
1458 proc->pid, thread->pid, tr->offsets_size);
1459 return_error = BR_FAILED_REPLY;
1460 goto err_bad_offset;
1461 }
1437 off_end = (void *)offp + tr->offsets_size; 1462 off_end = (void *)offp + tr->offsets_size;
1438 for (; offp < off_end; offp++) { 1463 for (; offp < off_end; offp++) {
1439 struct flat_binder_object *fp; 1464 struct flat_binder_object *fp;
1440 if (*offp > t->buffer->data_size - sizeof(*fp)) { 1465 if (*offp > t->buffer->data_size - sizeof(*fp) ||
1466 t->buffer->data_size < sizeof(*fp) ||
1467 !IS_ALIGNED(*offp, sizeof(void *))) {
1441 binder_user_error("binder: %d:%d got transaction with " 1468 binder_user_error("binder: %d:%d got transaction with "
1442 "invalid offset, %zd\n", 1469 "invalid offset, %zd\n",
1443 proc->pid, thread->pid, *offp); 1470 proc->pid, thread->pid, *offp);
@@ -1544,13 +1571,13 @@ binder_transaction(struct binder_proc *proc, struct binder_thread *thread,
1544 return_error = BR_FAILED_REPLY; 1571 return_error = BR_FAILED_REPLY;
1545 goto err_fget_failed; 1572 goto err_fget_failed;
1546 } 1573 }
1547 target_fd = task_get_unused_fd_flags(target_proc->tsk, O_CLOEXEC); 1574 target_fd = task_get_unused_fd_flags(target_proc, O_CLOEXEC);
1548 if (target_fd < 0) { 1575 if (target_fd < 0) {
1549 fput(file); 1576 fput(file);
1550 return_error = BR_FAILED_REPLY; 1577 return_error = BR_FAILED_REPLY;
1551 goto err_get_unused_fd_failed; 1578 goto err_get_unused_fd_failed;
1552 } 1579 }
1553 task_fd_install(target_proc->tsk, target_fd, file); 1580 task_fd_install(target_proc, target_fd, file);
1554 if (binder_debug_mask & BINDER_DEBUG_TRANSACTION) 1581 if (binder_debug_mask & BINDER_DEBUG_TRANSACTION)
1555 printk(KERN_INFO " fd %ld -> %d\n", fp->handle, target_fd); 1582 printk(KERN_INFO " fd %ld -> %d\n", fp->handle, target_fd);
1556 /* TODO: fput? */ 1583 /* TODO: fput? */
@@ -1655,7 +1682,9 @@ binder_transaction_buffer_release(struct binder_proc *proc, struct binder_buffer
1655 off_end = (void *)offp + buffer->offsets_size; 1682 off_end = (void *)offp + buffer->offsets_size;
1656 for (; offp < off_end; offp++) { 1683 for (; offp < off_end; offp++) {
1657 struct flat_binder_object *fp; 1684 struct flat_binder_object *fp;
1658 if (*offp > buffer->data_size - sizeof(*fp)) { 1685 if (*offp > buffer->data_size - sizeof(*fp) ||
1686 buffer->data_size < sizeof(*fp) ||
1687 !IS_ALIGNED(*offp, sizeof(void *))) {
1659 printk(KERN_ERR "binder: transaction release %d bad" 1688 printk(KERN_ERR "binder: transaction release %d bad"
1660 "offset %zd, size %zd\n", debug_id, *offp, buffer->data_size); 1689 "offset %zd, size %zd\n", debug_id, *offp, buffer->data_size);
1661 continue; 1690 continue;
@@ -1691,7 +1720,7 @@ binder_transaction_buffer_release(struct binder_proc *proc, struct binder_buffer
1691 if (binder_debug_mask & BINDER_DEBUG_TRANSACTION) 1720 if (binder_debug_mask & BINDER_DEBUG_TRANSACTION)
1692 printk(KERN_INFO " fd %ld\n", fp->handle); 1721 printk(KERN_INFO " fd %ld\n", fp->handle);
1693 if (failed_at) 1722 if (failed_at)
1694 task_close_fd(proc->tsk, fp->handle); 1723 task_close_fd(proc, fp->handle);
1695 break; 1724 break;
1696 1725
1697 default: 1726 default:
@@ -2340,7 +2369,7 @@ retry:
2340 2369
2341 tr.data_size = t->buffer->data_size; 2370 tr.data_size = t->buffer->data_size;
2342 tr.offsets_size = t->buffer->offsets_size; 2371 tr.offsets_size = t->buffer->offsets_size;
2343 tr.data.ptr.buffer = (void *)((void *)t->buffer->data + proc->user_buffer_offset); 2372 tr.data.ptr.buffer = (void *)t->buffer->data + proc->user_buffer_offset;
2344 tr.data.ptr.offsets = tr.data.ptr.buffer + ALIGN(t->buffer->data_size, sizeof(void *)); 2373 tr.data.ptr.offsets = tr.data.ptr.buffer + ALIGN(t->buffer->data_size, sizeof(void *));
2345 2374
2346 if (put_user(cmd, (uint32_t __user *)ptr)) 2375 if (put_user(cmd, (uint32_t __user *)ptr))
@@ -2656,6 +2685,7 @@ static void binder_vma_open(struct vm_area_struct *vma)
2656 (unsigned long)pgprot_val(vma->vm_page_prot)); 2685 (unsigned long)pgprot_val(vma->vm_page_prot));
2657 dump_stack(); 2686 dump_stack();
2658} 2687}
2688
2659static void binder_vma_close(struct vm_area_struct *vma) 2689static void binder_vma_close(struct vm_area_struct *vma)
2660{ 2690{
2661 struct binder_proc *proc = vma->vm_private_data; 2691 struct binder_proc *proc = vma->vm_private_data;
@@ -2666,6 +2696,7 @@ static void binder_vma_close(struct vm_area_struct *vma)
2666 (vma->vm_end - vma->vm_start) / SZ_1K, vma->vm_flags, 2696 (vma->vm_end - vma->vm_start) / SZ_1K, vma->vm_flags,
2667 (unsigned long)pgprot_val(vma->vm_page_prot)); 2697 (unsigned long)pgprot_val(vma->vm_page_prot));
2668 proc->vma = NULL; 2698 proc->vma = NULL;
2699 binder_defer_work(proc, BINDER_DEFERRED_PUT_FILES);
2669} 2700}
2670 2701
2671static struct vm_operations_struct binder_vm_ops = { 2702static struct vm_operations_struct binder_vm_ops = {
@@ -2698,6 +2729,12 @@ static int binder_mmap(struct file *filp, struct vm_area_struct *vma)
2698 } 2729 }
2699 vma->vm_flags = (vma->vm_flags | VM_DONTCOPY) & ~VM_MAYWRITE; 2730 vma->vm_flags = (vma->vm_flags | VM_DONTCOPY) & ~VM_MAYWRITE;
2700 2731
2732 if (proc->buffer) {
2733 ret = -EBUSY;
2734 failure_string = "already mapped";
2735 goto err_already_mapped;
2736 }
2737
2701 area = get_vm_area(vma->vm_end - vma->vm_start, VM_IOREMAP); 2738 area = get_vm_area(vma->vm_end - vma->vm_start, VM_IOREMAP);
2702 if (area == NULL) { 2739 if (area == NULL) {
2703 ret = -ENOMEM; 2740 ret = -ENOMEM;
@@ -2705,7 +2742,7 @@ static int binder_mmap(struct file *filp, struct vm_area_struct *vma)
2705 goto err_get_vm_area_failed; 2742 goto err_get_vm_area_failed;
2706 } 2743 }
2707 proc->buffer = area->addr; 2744 proc->buffer = area->addr;
2708 proc->user_buffer_offset = vma->vm_start - (size_t)proc->buffer; 2745 proc->user_buffer_offset = vma->vm_start - (uintptr_t)proc->buffer;
2709 2746
2710#ifdef CONFIG_CPU_CACHE_VIPT 2747#ifdef CONFIG_CPU_CACHE_VIPT
2711 if (cache_is_vipt_aliasing()) { 2748 if (cache_is_vipt_aliasing()) {
@@ -2738,6 +2775,7 @@ static int binder_mmap(struct file *filp, struct vm_area_struct *vma)
2738 binder_insert_free_buffer(proc, buffer); 2775 binder_insert_free_buffer(proc, buffer);
2739 proc->free_async_space = proc->buffer_size / 2; 2776 proc->free_async_space = proc->buffer_size / 2;
2740 barrier(); 2777 barrier();
2778 proc->files = get_files_struct(current);
2741 proc->vma = vma; 2779 proc->vma = vma;
2742 2780
2743 /*printk(KERN_INFO "binder_mmap: %d %lx-%lx maps %p\n", proc->pid, vma->vm_start, vma->vm_end, proc->buffer);*/ 2781 /*printk(KERN_INFO "binder_mmap: %d %lx-%lx maps %p\n", proc->pid, vma->vm_start, vma->vm_end, proc->buffer);*/
@@ -2745,10 +2783,12 @@ static int binder_mmap(struct file *filp, struct vm_area_struct *vma)
2745 2783
2746err_alloc_small_buf_failed: 2784err_alloc_small_buf_failed:
2747 kfree(proc->pages); 2785 kfree(proc->pages);
2786 proc->pages = NULL;
2748err_alloc_pages_failed: 2787err_alloc_pages_failed:
2749 vfree(proc->buffer); 2788 vfree(proc->buffer);
2789 proc->buffer = NULL;
2750err_get_vm_area_failed: 2790err_get_vm_area_failed:
2751 mutex_unlock(&binder_lock); 2791err_already_mapped:
2752err_bad_arg: 2792err_bad_arg:
2753 printk(KERN_ERR "binder_mmap: %d %lx-%lx %s failed %d\n", proc->pid, vma->vm_start, vma->vm_end, failure_string, ret); 2793 printk(KERN_ERR "binder_mmap: %d %lx-%lx %s failed %d\n", proc->pid, vma->vm_start, vma->vm_end, failure_string, ret);
2754 return ret; 2794 return ret;
@@ -2780,6 +2820,7 @@ static int binder_open(struct inode *nodp, struct file *filp)
2780 if (binder_proc_dir_entry_proc) { 2820 if (binder_proc_dir_entry_proc) {
2781 char strbuf[11]; 2821 char strbuf[11];
2782 snprintf(strbuf, sizeof(strbuf), "%u", proc->pid); 2822 snprintf(strbuf, sizeof(strbuf), "%u", proc->pid);
2823 remove_proc_entry(strbuf, binder_proc_dir_entry_proc);
2783 create_proc_read_entry(strbuf, S_IRUGO, binder_proc_dir_entry_proc, binder_read_proc_proc, proc); 2824 create_proc_read_entry(strbuf, S_IRUGO, binder_proc_dir_entry_proc, binder_read_proc_proc, proc);
2784 } 2825 }
2785 2826
@@ -2788,11 +2829,17 @@ static int binder_open(struct inode *nodp, struct file *filp)
2788 2829
2789static int binder_flush(struct file *filp, fl_owner_t id) 2830static int binder_flush(struct file *filp, fl_owner_t id)
2790{ 2831{
2791 struct rb_node *n;
2792 struct binder_proc *proc = filp->private_data; 2832 struct binder_proc *proc = filp->private_data;
2793 int wake_count = 0;
2794 2833
2795 mutex_lock(&binder_lock); 2834 binder_defer_work(proc, BINDER_DEFERRED_FLUSH);
2835
2836 return 0;
2837}
2838
2839static void binder_deferred_flush(struct binder_proc *proc)
2840{
2841 struct rb_node *n;
2842 int wake_count = 0;
2796 for (n = rb_first(&proc->threads); n != NULL; n = rb_next(n)) { 2843 for (n = rb_first(&proc->threads); n != NULL; n = rb_next(n)) {
2797 struct binder_thread *thread = rb_entry(n, struct binder_thread, rb_node); 2844 struct binder_thread *thread = rb_entry(n, struct binder_thread, rb_node);
2798 thread->looper |= BINDER_LOOPER_STATE_NEED_RETURN; 2845 thread->looper |= BINDER_LOOPER_STATE_NEED_RETURN;
@@ -2802,28 +2849,35 @@ static int binder_flush(struct file *filp, fl_owner_t id)
2802 } 2849 }
2803 } 2850 }
2804 wake_up_interruptible_all(&proc->wait); 2851 wake_up_interruptible_all(&proc->wait);
2805 mutex_unlock(&binder_lock);
2806 2852
2807 if (binder_debug_mask & BINDER_DEBUG_OPEN_CLOSE) 2853 if (binder_debug_mask & BINDER_DEBUG_OPEN_CLOSE)
2808 printk(KERN_INFO "binder_flush: %d woke %d threads\n", proc->pid, wake_count); 2854 printk(KERN_INFO "binder_flush: %d woke %d threads\n", proc->pid, wake_count);
2809
2810 return 0;
2811} 2855}
2812 2856
2813static int binder_release(struct inode *nodp, struct file *filp) 2857static int binder_release(struct inode *nodp, struct file *filp)
2814{ 2858{
2815 struct hlist_node *pos;
2816 struct binder_transaction *t;
2817 struct rb_node *n;
2818 struct binder_proc *proc = filp->private_data; 2859 struct binder_proc *proc = filp->private_data;
2819 int threads, nodes, incoming_refs, outgoing_refs, buffers, active_transactions, page_count;
2820
2821 if (binder_proc_dir_entry_proc) { 2860 if (binder_proc_dir_entry_proc) {
2822 char strbuf[11]; 2861 char strbuf[11];
2823 snprintf(strbuf, sizeof(strbuf), "%u", proc->pid); 2862 snprintf(strbuf, sizeof(strbuf), "%u", proc->pid);
2824 remove_proc_entry(strbuf, binder_proc_dir_entry_proc); 2863 remove_proc_entry(strbuf, binder_proc_dir_entry_proc);
2825 } 2864 }
2826 mutex_lock(&binder_lock); 2865
2866 binder_defer_work(proc, BINDER_DEFERRED_RELEASE);
2867
2868 return 0;
2869}
2870
2871static void binder_deferred_release(struct binder_proc *proc)
2872{
2873 struct hlist_node *pos;
2874 struct binder_transaction *t;
2875 struct rb_node *n;
2876 int threads, nodes, incoming_refs, outgoing_refs, buffers, active_transactions, page_count;
2877
2878 BUG_ON(proc->vma);
2879 BUG_ON(proc->files);
2880
2827 hlist_del(&proc->proc_node); 2881 hlist_del(&proc->proc_node);
2828 if (binder_context_mgr_node && binder_context_mgr_node->proc == proc) { 2882 if (binder_context_mgr_node && binder_context_mgr_node->proc == proc) {
2829 if (binder_debug_mask & BINDER_DEBUG_DEAD_BINDER) 2883 if (binder_debug_mask & BINDER_DEBUG_DEAD_BINDER)
@@ -2897,7 +2951,6 @@ static int binder_release(struct inode *nodp, struct file *filp)
2897 } 2951 }
2898 2952
2899 binder_stats.obj_deleted[BINDER_STAT_PROC]++; 2953 binder_stats.obj_deleted[BINDER_STAT_PROC]++;
2900 mutex_unlock(&binder_lock);
2901 2954
2902 page_count = 0; 2955 page_count = 0;
2903 if (proc->pages) { 2956 if (proc->pages) {
@@ -2921,7 +2974,57 @@ static int binder_release(struct inode *nodp, struct file *filp)
2921 proc->pid, threads, nodes, incoming_refs, outgoing_refs, active_transactions, buffers, page_count); 2974 proc->pid, threads, nodes, incoming_refs, outgoing_refs, active_transactions, buffers, page_count);
2922 2975
2923 kfree(proc); 2976 kfree(proc);
2924 return 0; 2977}
2978
2979static void binder_deferred_func(struct work_struct *work)
2980{
2981 struct binder_proc *proc;
2982 struct files_struct *files;
2983
2984 int defer;
2985 do {
2986 mutex_lock(&binder_lock);
2987 mutex_lock(&binder_deferred_lock);
2988 if (!hlist_empty(&binder_deferred_list)) {
2989 proc = hlist_entry(binder_deferred_list.first,
2990 struct binder_proc, deferred_work_node);
2991 hlist_del_init(&proc->deferred_work_node);
2992 defer = proc->deferred_work;
2993 proc->deferred_work = 0;
2994 } else {
2995 proc = NULL;
2996 defer = 0;
2997 }
2998 mutex_unlock(&binder_deferred_lock);
2999
3000 files = NULL;
3001 if (defer & BINDER_DEFERRED_PUT_FILES)
3002 if ((files = proc->files))
3003 proc->files = NULL;
3004
3005 if (defer & BINDER_DEFERRED_FLUSH)
3006 binder_deferred_flush(proc);
3007
3008 if (defer & BINDER_DEFERRED_RELEASE)
3009 binder_deferred_release(proc); /* frees proc */
3010
3011 mutex_unlock(&binder_lock);
3012 if (files)
3013 put_files_struct(files);
3014 } while (proc);
3015}
3016static DECLARE_WORK(binder_deferred_work, binder_deferred_func);
3017
3018static void binder_defer_work(struct binder_proc *proc, int defer)
3019{
3020 mutex_lock(&binder_deferred_lock);
3021 proc->deferred_work |= defer;
3022 if (hlist_unhashed(&proc->deferred_work_node)) {
3023 hlist_add_head(&proc->deferred_work_node,
3024 &binder_deferred_list);
3025 schedule_work(&binder_deferred_work);
3026 }
3027 mutex_unlock(&binder_deferred_lock);
2925} 3028}
2926 3029
2927static char *print_binder_transaction(char *buf, char *end, const char *prefix, struct binder_transaction *t) 3030static char *print_binder_transaction(char *buf, char *end, const char *prefix, struct binder_transaction *t)
diff --git a/drivers/staging/at76_usb/at76_usb.c b/drivers/staging/at76_usb/at76_usb.c
index 6f6e36a3bd9f..c8af9a868d62 100644
--- a/drivers/staging/at76_usb/at76_usb.c
+++ b/drivers/staging/at76_usb/at76_usb.c
@@ -5259,6 +5259,18 @@ static int at76_alloc_urbs(struct at76_priv *priv,
5259 return 0; 5259 return 0;
5260} 5260}
5261 5261
5262static const struct net_device_ops at76_netdev_ops = {
5263 .ndo_open = at76_open,
5264 .ndo_stop = at76_stop,
5265 .ndo_get_stats = at76_get_stats,
5266 .ndo_start_xmit = at76_tx,
5267 .ndo_tx_timeout = at76_tx_timeout,
5268 .ndo_set_multicast_list = at76_set_multicast,
5269 .ndo_set_mac_address = at76_set_mac_address,
5270 .ndo_validate_addr = eth_validate_addr,
5271 .ndo_change_mtu = eth_change_mtu,
5272};
5273
5262/* Register network device and initialize the hardware */ 5274/* Register network device and initialize the hardware */
5263static int at76_init_new_device(struct at76_priv *priv, 5275static int at76_init_new_device(struct at76_priv *priv,
5264 struct usb_interface *interface) 5276 struct usb_interface *interface)
@@ -5303,21 +5315,15 @@ static int at76_init_new_device(struct at76_priv *priv,
5303 priv->scan_mode = SCAN_TYPE_ACTIVE; 5315 priv->scan_mode = SCAN_TYPE_ACTIVE;
5304 5316
5305 netdev->flags &= ~IFF_MULTICAST; /* not yet or never */ 5317 netdev->flags &= ~IFF_MULTICAST; /* not yet or never */
5306 netdev->open = at76_open; 5318 netdev->netdev_ops = &at76_netdev_ops;
5307 netdev->stop = at76_stop;
5308 netdev->get_stats = at76_get_stats;
5309 netdev->ethtool_ops = &at76_ethtool_ops; 5319 netdev->ethtool_ops = &at76_ethtool_ops;
5310 5320
5311 /* Add pointers to enable iwspy support. */ 5321 /* Add pointers to enable iwspy support. */
5312 priv->wireless_data.spy_data = &priv->spy_data; 5322 priv->wireless_data.spy_data = &priv->spy_data;
5313 netdev->wireless_data = &priv->wireless_data; 5323 netdev->wireless_data = &priv->wireless_data;
5314 5324
5315 netdev->hard_start_xmit = at76_tx;
5316 netdev->tx_timeout = at76_tx_timeout;
5317 netdev->watchdog_timeo = 2 * HZ; 5325 netdev->watchdog_timeo = 2 * HZ;
5318 netdev->wireless_handlers = &at76_handler_def; 5326 netdev->wireless_handlers = &at76_handler_def;
5319 netdev->set_multicast_list = at76_set_multicast;
5320 netdev->set_mac_address = at76_set_mac_address;
5321 dev_alloc_name(netdev, "wlan%d"); 5327 dev_alloc_name(netdev, "wlan%d");
5322 5328
5323 ret = register_netdev(priv->netdev); 5329 ret = register_netdev(priv->netdev);
diff --git a/drivers/staging/b3dfg/b3dfg.c b/drivers/staging/b3dfg/b3dfg.c
index 0348072b3ab5..75ebe338c6f2 100644
--- a/drivers/staging/b3dfg/b3dfg.c
+++ b/drivers/staging/b3dfg/b3dfg.c
@@ -1000,7 +1000,7 @@ static int __devinit b3dfg_probe(struct pci_dev *pdev,
1000 1000
1001 pci_set_master(pdev); 1001 pci_set_master(pdev);
1002 1002
1003 r = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 1003 r = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
1004 if (r) { 1004 if (r) {
1005 dev_err(&pdev->dev, "no usable DMA configuration\n"); 1005 dev_err(&pdev->dev, "no usable DMA configuration\n");
1006 goto err_free_res; 1006 goto err_free_res;
diff --git a/drivers/staging/comedi/TODO b/drivers/staging/comedi/TODO
index 557812958464..15c9348fb938 100644
--- a/drivers/staging/comedi/TODO
+++ b/drivers/staging/comedi/TODO
@@ -11,4 +11,3 @@ Please send patches to Greg Kroah-Hartman <greg@kroah.com> and
11copy: 11copy:
12 Ian Abbott <abbotti@mev.co.uk> 12 Ian Abbott <abbotti@mev.co.uk>
13 Frank Mori Hess <fmhess@users.sourceforge.net> 13 Frank Mori Hess <fmhess@users.sourceforge.net>
14 David Schleef <ds@schleef.org>
diff --git a/drivers/staging/epl/VirtualEthernetLinux.c b/drivers/staging/epl/VirtualEthernetLinux.c
index 21206c4d22ff..077724a556cc 100644
--- a/drivers/staging/epl/VirtualEthernetLinux.c
+++ b/drivers/staging/epl/VirtualEthernetLinux.c
@@ -284,6 +284,17 @@ static tEplKernel VEthRecvFrame(tEplFrameInfo * pFrameInfo_p)
284 return Ret; 284 return Ret;
285} 285}
286 286
287static const struct net_device_ops epl_netdev_ops = {
288 .ndo_open = VEthOpen,
289 .ndo_stop = VEthClose,
290 .ndo_get_stats = VEthGetStats,
291 .ndo_start_xmit = VEthXmit,
292 .ndo_tx_timeout = VEthTimeout,
293 .ndo_change_mtu = eth_change_mtu,
294 .ndo_set_mac_address = eth_mac_addr,
295 .ndo_validate_addr = eth_validate_addr,
296};
297
287tEplKernel VEthAddInstance(tEplDllkInitParam *pInitParam_p) 298tEplKernel VEthAddInstance(tEplDllkInitParam *pInitParam_p)
288{ 299{
289 tEplKernel Ret = kEplSuccessful; 300 tEplKernel Ret = kEplSuccessful;
@@ -299,11 +310,7 @@ tEplKernel VEthAddInstance(tEplDllkInitParam *pInitParam_p)
299 goto Exit; 310 goto Exit;
300 } 311 }
301 312
302 pVEthNetDevice_g->open = VEthOpen; 313 pVEthNetDevice_g->netdev_ops = &epl_netdev_ops;
303 pVEthNetDevice_g->stop = VEthClose;
304 pVEthNetDevice_g->get_stats = VEthGetStats;
305 pVEthNetDevice_g->hard_start_xmit = VEthXmit;
306 pVEthNetDevice_g->tx_timeout = VEthTimeout;
307 pVEthNetDevice_g->watchdog_timeo = EPL_VETH_TX_TIMEOUT; 314 pVEthNetDevice_g->watchdog_timeo = EPL_VETH_TX_TIMEOUT;
308 pVEthNetDevice_g->destructor = free_netdev; 315 pVEthNetDevice_g->destructor = free_netdev;
309 316
diff --git a/drivers/staging/et131x/et131x_netdev.c b/drivers/staging/et131x/et131x_netdev.c
index de65972ff362..951c73d5db20 100644
--- a/drivers/staging/et131x/et131x_netdev.c
+++ b/drivers/staging/et131x/et131x_netdev.c
@@ -112,6 +112,19 @@ void et131x_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp);
112void et131x_vlan_rx_add_vid(struct net_device *netdev, uint16_t vid); 112void et131x_vlan_rx_add_vid(struct net_device *netdev, uint16_t vid);
113void et131x_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid); 113void et131x_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid);
114 114
115static const struct net_device_ops et131x_netdev_ops = {
116 .ndo_open = et131x_open,
117 .ndo_stop = et131x_close,
118 .ndo_start_xmit = et131x_tx,
119 .ndo_set_multicast_list = et131x_multicast,
120 .ndo_tx_timeout = et131x_tx_timeout,
121 .ndo_change_mtu = et131x_change_mtu,
122 .ndo_set_mac_address = et131x_set_mac_addr,
123 .ndo_validate_addr = eth_validate_addr,
124 .ndo_get_stats = et131x_stats,
125 .ndo_do_ioctl = et131x_ioctl,
126};
127
115/** 128/**
116 * et131x_device_alloc 129 * et131x_device_alloc
117 * 130 *
@@ -142,16 +155,8 @@ struct net_device *et131x_device_alloc(void)
142 */ 155 */
143 //netdev->init = &et131x_init; 156 //netdev->init = &et131x_init;
144 //netdev->set_config = &et131x_config; 157 //netdev->set_config = &et131x_config;
145 netdev->get_stats = &et131x_stats;
146 netdev->open = &et131x_open;
147 netdev->stop = &et131x_close;
148 netdev->do_ioctl = &et131x_ioctl;
149 netdev->set_multicast_list = &et131x_multicast;
150 netdev->hard_start_xmit = &et131x_tx;
151 netdev->tx_timeout = &et131x_tx_timeout;
152 netdev->watchdog_timeo = ET131X_TX_TIMEOUT; 158 netdev->watchdog_timeo = ET131X_TX_TIMEOUT;
153 netdev->change_mtu = &et131x_change_mtu; 159 netdev->netdev_ops = &et131x_netdev_ops;
154 netdev->set_mac_address = &et131x_set_mac_addr;
155 160
156 //netdev->ethtool_ops = &et131x_ethtool_ops; 161 //netdev->ethtool_ops = &et131x_ethtool_ops;
157 162
diff --git a/drivers/staging/go7007/go7007-driver.c b/drivers/staging/go7007/go7007-driver.c
index 58bfc8d81b3b..77b1e769ac92 100644
--- a/drivers/staging/go7007/go7007-driver.c
+++ b/drivers/staging/go7007/go7007-driver.c
@@ -191,8 +191,10 @@ int go7007_reset_encoder(struct go7007 *go)
191/* 191/*
192 * Attempt to instantiate an I2C client by ID, probably loading a module. 192 * Attempt to instantiate an I2C client by ID, probably loading a module.
193 */ 193 */
194static int init_i2c_module(struct i2c_adapter *adapter, int id, int addr) 194static int init_i2c_module(struct i2c_adapter *adapter, const char *type,
195 int id, int addr)
195{ 196{
197 struct i2c_board_info info;
196 char *modname; 198 char *modname;
197 199
198 switch (id) { 200 switch (id) {
@@ -226,7 +228,11 @@ static int init_i2c_module(struct i2c_adapter *adapter, int id, int addr)
226 } 228 }
227 if (modname != NULL) 229 if (modname != NULL)
228 request_module(modname); 230 request_module(modname);
229 if (wis_i2c_probe_device(adapter, id, addr) == 1) 231
232 memset(&info, 0, sizeof(struct i2c_board_info));
233 info.addr = addr;
234 strlcpy(info.type, type, I2C_NAME_SIZE);
235 if (!i2c_new_device(adapter, &info))
230 return 0; 236 return 0;
231 if (modname != NULL) 237 if (modname != NULL)
232 printk(KERN_INFO 238 printk(KERN_INFO
@@ -266,23 +272,9 @@ int go7007_register_encoder(struct go7007 *go)
266 if (go->i2c_adapter_online) { 272 if (go->i2c_adapter_online) {
267 for (i = 0; i < go->board_info->num_i2c_devs; ++i) 273 for (i = 0; i < go->board_info->num_i2c_devs; ++i)
268 init_i2c_module(&go->i2c_adapter, 274 init_i2c_module(&go->i2c_adapter,
275 go->board_info->i2c_devs[i].type,
269 go->board_info->i2c_devs[i].id, 276 go->board_info->i2c_devs[i].id,
270 go->board_info->i2c_devs[i].addr); 277 go->board_info->i2c_devs[i].addr);
271#ifdef TUNER_SET_TYPE_ADDR
272 if (go->tuner_type >= 0) {
273 struct tuner_setup tun_setup = {
274 .mode_mask = T_ANALOG_TV,
275 .addr = ADDR_UNSET,
276 .type = go->tuner_type
277 };
278 i2c_clients_command(&go->i2c_adapter,
279 TUNER_SET_TYPE_ADDR, &tun_setup);
280 }
281#else
282 if (go->tuner_type >= 0)
283 i2c_clients_command(&go->i2c_adapter,
284 TUNER_SET_TYPE, &go->tuner_type);
285#endif
286 if (go->board_id == GO7007_BOARDID_ADLINK_MPG24) 278 if (go->board_id == GO7007_BOARDID_ADLINK_MPG24)
287 i2c_clients_command(&go->i2c_adapter, 279 i2c_clients_command(&go->i2c_adapter,
288 DECODER_SET_CHANNEL, &go->channel_number); 280 DECODER_SET_CHANNEL, &go->channel_number);
diff --git a/drivers/staging/go7007/go7007-i2c.c b/drivers/staging/go7007/go7007-i2c.c
index cd55b76eabc7..c82867fdd28d 100644
--- a/drivers/staging/go7007/go7007-i2c.c
+++ b/drivers/staging/go7007/go7007-i2c.c
@@ -31,87 +31,6 @@
31#include "go7007-priv.h" 31#include "go7007-priv.h"
32#include "wis-i2c.h" 32#include "wis-i2c.h"
33 33
34/************** Registration interface for I2C client drivers **************/
35
36/* Since there's no way to auto-probe the I2C devices connected to the I2C
37 * bus on the go7007, we have this silly little registration system that
38 * client drivers can use to register their I2C driver ID and their
39 * detect_client function (the one that's normally passed to i2c_probe).
40 *
41 * When a new go7007 device is connected, we can look up in a board info
42 * table by the USB or PCI vendor/product/revision ID to determine
43 * which I2C client module to load. The client driver module will register
44 * itself here, and then we can call the registered detect_client function
45 * to force-load a new client at the address listed in the board info table.
46 *
47 * Really the I2C subsystem should have a way to force-load I2C client
48 * drivers when we have a priori knowledge of what's on the bus, especially
49 * since the existing I2C auto-probe mechanism is so hokey, but we'll use
50 * our own mechanism for the time being. */
51
52struct wis_i2c_client_driver {
53 unsigned int id;
54 found_proc found_proc;
55 struct list_head list;
56};
57
58static LIST_HEAD(i2c_client_drivers);
59static DECLARE_MUTEX(i2c_client_driver_list_lock);
60
61/* Client drivers register here by their I2C driver ID */
62int wis_i2c_add_driver(unsigned int id, found_proc found_proc)
63{
64 struct wis_i2c_client_driver *driver;
65
66 driver = kmalloc(sizeof(struct wis_i2c_client_driver), GFP_KERNEL);
67 if (driver == NULL)
68 return -ENOMEM;
69 driver->id = id;
70 driver->found_proc = found_proc;
71
72 down(&i2c_client_driver_list_lock);
73 list_add_tail(&driver->list, &i2c_client_drivers);
74 up(&i2c_client_driver_list_lock);
75
76 return 0;
77}
78EXPORT_SYMBOL(wis_i2c_add_driver);
79
80void wis_i2c_del_driver(found_proc found_proc)
81{
82 struct wis_i2c_client_driver *driver, *next;
83
84 down(&i2c_client_driver_list_lock);
85 list_for_each_entry_safe(driver, next, &i2c_client_drivers, list)
86 if (driver->found_proc == found_proc) {
87 list_del(&driver->list);
88 kfree(driver);
89 }
90 up(&i2c_client_driver_list_lock);
91}
92EXPORT_SYMBOL(wis_i2c_del_driver);
93
94/* The main go7007 driver calls this to instantiate a client by driver
95 * ID and bus address, which are both stored in the board info table */
96int wis_i2c_probe_device(struct i2c_adapter *adapter,
97 unsigned int id, int addr)
98{
99 struct wis_i2c_client_driver *driver;
100 int found = 0;
101
102 if (addr < 0 || addr > 0x7f)
103 return -1;
104 down(&i2c_client_driver_list_lock);
105 list_for_each_entry(driver, &i2c_client_drivers, list)
106 if (driver->id == id) {
107 if (driver->found_proc(adapter, addr, 0) == 0)
108 found = 1;
109 break;
110 }
111 up(&i2c_client_driver_list_lock);
112 return found;
113}
114
115/********************* Driver for on-board I2C adapter *********************/ 34/********************* Driver for on-board I2C adapter *********************/
116 35
117/* #define GO7007_I2C_DEBUG */ 36/* #define GO7007_I2C_DEBUG */
@@ -287,9 +206,7 @@ static struct i2c_algorithm go7007_algo = {
287 206
288static struct i2c_adapter go7007_adap_templ = { 207static struct i2c_adapter go7007_adap_templ = {
289 .owner = THIS_MODULE, 208 .owner = THIS_MODULE,
290 .class = I2C_CLASS_TV_ANALOG,
291 .name = "WIS GO7007SB", 209 .name = "WIS GO7007SB",
292 .id = I2C_ALGO_GO7007,
293 .algo = &go7007_algo, 210 .algo = &go7007_algo,
294}; 211};
295 212
diff --git a/drivers/staging/go7007/go7007-priv.h b/drivers/staging/go7007/go7007-priv.h
index 372f1f1c09b2..178d18119faa 100644
--- a/drivers/staging/go7007/go7007-priv.h
+++ b/drivers/staging/go7007/go7007-priv.h
@@ -87,6 +87,7 @@ struct go7007_board_info {
87 int audio_main_div; 87 int audio_main_div;
88 int num_i2c_devs; 88 int num_i2c_devs;
89 struct { 89 struct {
90 const char *type;
90 int id; 91 int id;
91 int addr; 92 int addr;
92 } i2c_devs[4]; 93 } i2c_devs[4];
diff --git a/drivers/staging/go7007/go7007-usb.c b/drivers/staging/go7007/go7007-usb.c
index 83eec920c7d3..aa4a9e0b9954 100644
--- a/drivers/staging/go7007/go7007-usb.c
+++ b/drivers/staging/go7007/go7007-usb.c
@@ -91,6 +91,7 @@ static struct go7007_usb_board board_matrix_ii = {
91 .num_i2c_devs = 1, 91 .num_i2c_devs = 1,
92 .i2c_devs = { 92 .i2c_devs = {
93 { 93 {
94 .type = "wis_saa7115",
94 .id = I2C_DRIVERID_WIS_SAA7115, 95 .id = I2C_DRIVERID_WIS_SAA7115,
95 .addr = 0x20, 96 .addr = 0x20,
96 }, 97 },
@@ -127,6 +128,7 @@ static struct go7007_usb_board board_matrix_reload = {
127 .num_i2c_devs = 1, 128 .num_i2c_devs = 1,
128 .i2c_devs = { 129 .i2c_devs = {
129 { 130 {
131 .type = "wis_saa7113",
130 .id = I2C_DRIVERID_WIS_SAA7113, 132 .id = I2C_DRIVERID_WIS_SAA7113,
131 .addr = 0x25, 133 .addr = 0x25,
132 }, 134 },
@@ -164,6 +166,7 @@ static struct go7007_usb_board board_star_trek = {
164 .num_i2c_devs = 1, 166 .num_i2c_devs = 1,
165 .i2c_devs = { 167 .i2c_devs = {
166 { 168 {
169 .type = "wis_saa7115",
167 .id = I2C_DRIVERID_WIS_SAA7115, 170 .id = I2C_DRIVERID_WIS_SAA7115,
168 .addr = 0x20, 171 .addr = 0x20,
169 }, 172 },
@@ -209,14 +212,17 @@ static struct go7007_usb_board board_px_tv402u = {
209 .num_i2c_devs = 3, 212 .num_i2c_devs = 3,
210 .i2c_devs = { 213 .i2c_devs = {
211 { 214 {
215 .type = "wis_saa7115",
212 .id = I2C_DRIVERID_WIS_SAA7115, 216 .id = I2C_DRIVERID_WIS_SAA7115,
213 .addr = 0x20, 217 .addr = 0x20,
214 }, 218 },
215 { 219 {
220 .type = "wis_uda1342",
216 .id = I2C_DRIVERID_WIS_UDA1342, 221 .id = I2C_DRIVERID_WIS_UDA1342,
217 .addr = 0x1a, 222 .addr = 0x1a,
218 }, 223 },
219 { 224 {
225 .type = "wis_sony_tuner",
220 .id = I2C_DRIVERID_WIS_SONY_TUNER, 226 .id = I2C_DRIVERID_WIS_SONY_TUNER,
221 .addr = 0x60, 227 .addr = 0x60,
222 }, 228 },
@@ -264,6 +270,7 @@ static struct go7007_usb_board board_xmen = {
264 .num_i2c_devs = 1, 270 .num_i2c_devs = 1,
265 .i2c_devs = { 271 .i2c_devs = {
266 { 272 {
273 .type = "wis_ov7640",
267 .id = I2C_DRIVERID_WIS_OV7640, 274 .id = I2C_DRIVERID_WIS_OV7640,
268 .addr = 0x21, 275 .addr = 0x21,
269 }, 276 },
@@ -296,6 +303,7 @@ static struct go7007_usb_board board_matrix_revolution = {
296 .num_i2c_devs = 1, 303 .num_i2c_devs = 1,
297 .i2c_devs = { 304 .i2c_devs = {
298 { 305 {
306 .type = "wis_tw9903",
299 .id = I2C_DRIVERID_WIS_TW9903, 307 .id = I2C_DRIVERID_WIS_TW9903,
300 .addr = 0x44, 308 .addr = 0x44,
301 }, 309 },
@@ -385,6 +393,7 @@ static struct go7007_usb_board board_adlink_mpg24 = {
385 .num_i2c_devs = 1, 393 .num_i2c_devs = 1,
386 .i2c_devs = { 394 .i2c_devs = {
387 { 395 {
396 .type = "wis_twTW2804",
388 .id = I2C_DRIVERID_WIS_TW2804, 397 .id = I2C_DRIVERID_WIS_TW2804,
389 .addr = 0x00, /* yes, really */ 398 .addr = 0x00, /* yes, really */
390 }, 399 },
@@ -415,8 +424,9 @@ static struct go7007_usb_board board_sensoray_2250 = {
415 .num_i2c_devs = 1, 424 .num_i2c_devs = 1,
416 .i2c_devs = { 425 .i2c_devs = {
417 { 426 {
427 .type = "s2250_board",
418 .id = I2C_DRIVERID_S2250, 428 .id = I2C_DRIVERID_S2250,
419 .addr = 0x34, 429 .addr = 0x43,
420 }, 430 },
421 }, 431 },
422 .num_inputs = 2, 432 .num_inputs = 2,
@@ -943,9 +953,7 @@ static struct i2c_algorithm go7007_usb_algo = {
943 953
944static struct i2c_adapter go7007_usb_adap_templ = { 954static struct i2c_adapter go7007_usb_adap_templ = {
945 .owner = THIS_MODULE, 955 .owner = THIS_MODULE,
946 .class = I2C_CLASS_TV_ANALOG,
947 .name = "WIS GO7007SB EZ-USB", 956 .name = "WIS GO7007SB EZ-USB",
948 .id = I2C_ALGO_GO7007_USB,
949 .algo = &go7007_usb_algo, 957 .algo = &go7007_usb_algo,
950}; 958};
951 959
diff --git a/drivers/staging/go7007/s2250-board.c b/drivers/staging/go7007/s2250-board.c
index d333ea2cd774..1706fbf06847 100644
--- a/drivers/staging/go7007/s2250-board.c
+++ b/drivers/staging/go7007/s2250-board.c
@@ -28,7 +28,6 @@ extern int s2250loader_init(void);
28extern void s2250loader_cleanup(void); 28extern void s2250loader_cleanup(void);
29 29
30#define TLV320_ADDRESS 0x34 30#define TLV320_ADDRESS 0x34
31#define S2250_VIDDEC 0x86
32#define VPX322_ADDR_ANALOGCONTROL1 0x02 31#define VPX322_ADDR_ANALOGCONTROL1 0x02
33#define VPX322_ADDR_BRIGHTNESS0 0x0127 32#define VPX322_ADDR_BRIGHTNESS0 0x0127
34#define VPX322_ADDR_BRIGHTNESS1 0x0131 33#define VPX322_ADDR_BRIGHTNESS1 0x0131
@@ -123,6 +122,7 @@ struct s2250 {
123 int hue; 122 int hue;
124 int reg12b_val; 123 int reg12b_val;
125 int audio_input; 124 int audio_input;
125 struct i2c_client *audio;
126}; 126};
127 127
128/* from go7007-usb.c which is Copyright (C) 2005-2006 Micronas USA Inc.*/ 128/* from go7007-usb.c which is Copyright (C) 2005-2006 Micronas USA Inc.*/
@@ -452,16 +452,15 @@ static int s2250_command(struct i2c_client *client,
452 { 452 {
453 struct v4l2_audio *audio = arg; 453 struct v4l2_audio *audio = arg;
454 454
455 client->addr = TLV320_ADDRESS;
456 switch (audio->index) { 455 switch (audio->index) {
457 case 0: 456 case 0:
458 write_reg(client, 0x08, 0x02); /* Line In */ 457 write_reg(dec->audio, 0x08, 0x02); /* Line In */
459 break; 458 break;
460 case 1: 459 case 1:
461 write_reg(client, 0x08, 0x04); /* Mic */ 460 write_reg(dec->audio, 0x08, 0x04); /* Mic */
462 break; 461 break;
463 case 2: 462 case 2:
464 write_reg(client, 0x08, 0x05); /* Mic Boost */ 463 write_reg(dec->audio, 0x08, 0x05); /* Mic Boost */
465 break; 464 break;
466 default: 465 default:
467 return -EINVAL; 466 return -EINVAL;
@@ -477,31 +476,23 @@ static int s2250_command(struct i2c_client *client,
477 return 0; 476 return 0;
478} 477}
479 478
480static struct i2c_driver s2250_driver; 479static int s2250_probe(struct i2c_client *client,
481 480 const struct i2c_device_id *id)
482static struct i2c_client s2250_client_templ = {
483 .name = "Sensoray 2250",
484 .driver = &s2250_driver,
485};
486
487static int s2250_detect(struct i2c_adapter *adapter, int addr, int kind)
488{ 481{
489 struct i2c_client *client; 482 struct i2c_client *audio;
483 struct i2c_adapter *adapter = client->adapter;
490 struct s2250 *dec; 484 struct s2250 *dec;
491 u8 *data; 485 u8 *data;
492 struct go7007 *go = i2c_get_adapdata(adapter); 486 struct go7007 *go = i2c_get_adapdata(adapter);
493 struct go7007_usb *usb = go->hpi_context; 487 struct go7007_usb *usb = go->hpi_context;
494 488
495 client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL); 489 audio = i2c_new_dummy(adapter, TLV320_ADDRESS >> 1);
496 if (client == NULL) 490 if (audio == NULL)
497 return -ENOMEM; 491 return -ENOMEM;
498 memcpy(client, &s2250_client_templ,
499 sizeof(s2250_client_templ));
500 client->adapter = adapter;
501 492
502 dec = kmalloc(sizeof(struct s2250), GFP_KERNEL); 493 dec = kmalloc(sizeof(struct s2250), GFP_KERNEL);
503 if (dec == NULL) { 494 if (dec == NULL) {
504 kfree(client); 495 i2c_unregister_device(audio);
505 return -ENOMEM; 496 return -ENOMEM;
506 } 497 }
507 498
@@ -510,7 +501,7 @@ static int s2250_detect(struct i2c_adapter *adapter, int addr, int kind)
510 dec->contrast = 50; 501 dec->contrast = 50;
511 dec->saturation = 50; 502 dec->saturation = 50;
512 dec->hue = 0; 503 dec->hue = 0;
513 client->addr = TLV320_ADDRESS; 504 dec->audio = audio;
514 i2c_set_clientdata(client, dec); 505 i2c_set_clientdata(client, dec);
515 506
516 printk(KERN_DEBUG 507 printk(KERN_DEBUG
@@ -518,28 +509,25 @@ static int s2250_detect(struct i2c_adapter *adapter, int addr, int kind)
518 adapter->name); 509 adapter->name);
519 510
520 /* initialize the audio */ 511 /* initialize the audio */
521 client->addr = TLV320_ADDRESS; 512 if (write_regs(audio, aud_regs) < 0) {
522 if (write_regs(client, aud_regs) < 0) {
523 printk(KERN_ERR 513 printk(KERN_ERR
524 "s2250: error initializing audio\n"); 514 "s2250: error initializing audio\n");
525 kfree(client); 515 i2c_unregister_device(audio);
526 kfree(dec); 516 kfree(dec);
527 return 0; 517 return 0;
528 } 518 }
529 client->addr = S2250_VIDDEC;
530 i2c_set_clientdata(client, dec);
531 519
532 if (write_regs(client, vid_regs) < 0) { 520 if (write_regs(client, vid_regs) < 0) {
533 printk(KERN_ERR 521 printk(KERN_ERR
534 "s2250: error initializing decoder\n"); 522 "s2250: error initializing decoder\n");
535 kfree(client); 523 i2c_unregister_device(audio);
536 kfree(dec); 524 kfree(dec);
537 return 0; 525 return 0;
538 } 526 }
539 if (write_regs_fp(client, vid_regs_fp) < 0) { 527 if (write_regs_fp(client, vid_regs_fp) < 0) {
540 printk(KERN_ERR 528 printk(KERN_ERR
541 "s2250: error initializing decoder\n"); 529 "s2250: error initializing decoder\n");
542 kfree(client); 530 i2c_unregister_device(audio);
543 kfree(dec); 531 kfree(dec);
544 return 0; 532 return 0;
545 } 533 }
@@ -575,32 +563,33 @@ static int s2250_detect(struct i2c_adapter *adapter, int addr, int kind)
575 up(&usb->i2c_lock); 563 up(&usb->i2c_lock);
576 } 564 }
577 565
578 i2c_attach_client(client);
579 printk("s2250: initialized successfully\n"); 566 printk("s2250: initialized successfully\n");
580 return 0; 567 return 0;
581} 568}
582 569
583static int s2250_detach(struct i2c_client *client) 570static int s2250_remove(struct i2c_client *client)
584{ 571{
585 struct s2250 *dec = i2c_get_clientdata(client); 572 struct s2250 *dec = i2c_get_clientdata(client);
586 int r;
587
588 r = i2c_detach_client(client);
589 if (r < 0)
590 return r;
591 573
592 kfree(client); 574 i2c_set_clientdata(client, NULL);
575 i2c_unregister_device(dec->audio);
593 kfree(dec); 576 kfree(dec);
594 return 0; 577 return 0;
595} 578}
596 579
580static struct i2c_device_id s2250_id[] = {
581 { "s2250_board", 0 },
582 { }
583};
584
597static struct i2c_driver s2250_driver = { 585static struct i2c_driver s2250_driver = {
598 .driver = { 586 .driver = {
599 .name = "Sensoray 2250 board driver", 587 .name = "Sensoray 2250 board driver",
600 }, 588 },
601 .id = I2C_DRIVERID_S2250, 589 .probe = s2250_probe,
602 .detach_client = s2250_detach, 590 .remove = s2250_remove,
603 .command = s2250_command, 591 .command = s2250_command,
592 .id_table = s2250_id,
604}; 593};
605 594
606static int __init s2250_init(void) 595static int __init s2250_init(void)
@@ -613,13 +602,13 @@ static int __init s2250_init(void)
613 602
614 r = i2c_add_driver(&s2250_driver); 603 r = i2c_add_driver(&s2250_driver);
615 if (r < 0) 604 if (r < 0)
616 return r; 605 s2250loader_cleanup();
617 return wis_i2c_add_driver(s2250_driver.id, s2250_detect); 606
607 return r;
618} 608}
619 609
620static void __exit s2250_cleanup(void) 610static void __exit s2250_cleanup(void)
621{ 611{
622 wis_i2c_del_driver(s2250_detect);
623 i2c_del_driver(&s2250_driver); 612 i2c_del_driver(&s2250_driver);
624 613
625 s2250loader_cleanup(); 614 s2250loader_cleanup();
diff --git a/drivers/staging/go7007/wis-i2c.h b/drivers/staging/go7007/wis-i2c.h
index 431f41dd3966..3c2b9be455df 100644
--- a/drivers/staging/go7007/wis-i2c.h
+++ b/drivers/staging/go7007/wis-i2c.h
@@ -24,21 +24,12 @@
24#define I2C_DRIVERID_WIS_OV7640 0xf0f5 24#define I2C_DRIVERID_WIS_OV7640 0xf0f5
25#define I2C_DRIVERID_WIS_TW2804 0xf0f6 25#define I2C_DRIVERID_WIS_TW2804 0xf0f6
26#define I2C_DRIVERID_S2250 0xf0f7 26#define I2C_DRIVERID_S2250 0xf0f7
27#define I2C_ALGO_GO7007 0xf00000
28#define I2C_ALGO_GO7007_USB 0xf10000
29 27
30/* Flag to indicate that the client needs to be accessed with SCCB semantics */ 28/* Flag to indicate that the client needs to be accessed with SCCB semantics */
31/* We re-use the I2C_M_TEN value so the flag passes through the masks in the 29/* We re-use the I2C_M_TEN value so the flag passes through the masks in the
32 * core I2C code. Major kludge, but the I2C layer ain't exactly flexible. */ 30 * core I2C code. Major kludge, but the I2C layer ain't exactly flexible. */
33#define I2C_CLIENT_SCCB 0x10 31#define I2C_CLIENT_SCCB 0x10
34 32
35typedef int (*found_proc) (struct i2c_adapter *, int, int);
36int wis_i2c_add_driver(unsigned int id, found_proc found_proc);
37void wis_i2c_del_driver(found_proc found_proc);
38
39int wis_i2c_probe_device(struct i2c_adapter *adapter,
40 unsigned int id, int addr);
41
42/* Definitions for new video decoder commands */ 33/* Definitions for new video decoder commands */
43 34
44struct video_decoder_resolution { 35struct video_decoder_resolution {
diff --git a/drivers/staging/go7007/wis-ov7640.c b/drivers/staging/go7007/wis-ov7640.c
index 2f9efca04606..04d6d3a498a3 100644
--- a/drivers/staging/go7007/wis-ov7640.c
+++ b/drivers/staging/go7007/wis-ov7640.c
@@ -50,76 +50,54 @@ static int write_regs(struct i2c_client *client, u8 *regs)
50 return 0; 50 return 0;
51} 51}
52 52
53static struct i2c_driver wis_ov7640_driver; 53static int wis_ov7640_probe(struct i2c_client *client,
54 54 const struct i2c_device_id *id)
55static struct i2c_client wis_ov7640_client_templ = {
56 .name = "OV7640 (WIS)",
57 .driver = &wis_ov7640_driver,
58};
59
60static int wis_ov7640_detect(struct i2c_adapter *adapter, int addr, int kind)
61{ 55{
62 struct i2c_client *client; 56 struct i2c_adapter *adapter = client->adapter;
63 57
64 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 58 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
65 return 0; 59 return -ENODEV;
66 60
67 client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
68 if (client == NULL)
69 return -ENOMEM;
70 memcpy(client, &wis_ov7640_client_templ,
71 sizeof(wis_ov7640_client_templ));
72 client->adapter = adapter;
73 client->addr = addr;
74 client->flags = I2C_CLIENT_SCCB; 61 client->flags = I2C_CLIENT_SCCB;
75 62
76 printk(KERN_DEBUG 63 printk(KERN_DEBUG
77 "wis-ov7640: initializing OV7640 at address %d on %s\n", 64 "wis-ov7640: initializing OV7640 at address %d on %s\n",
78 addr, adapter->name); 65 client->addr, adapter->name);
79 66
80 if (write_regs(client, initial_registers) < 0) { 67 if (write_regs(client, initial_registers) < 0) {
81 printk(KERN_ERR "wis-ov7640: error initializing OV7640\n"); 68 printk(KERN_ERR "wis-ov7640: error initializing OV7640\n");
82 kfree(client); 69 return -ENODEV;
83 return 0;
84 } 70 }
85 71
86 i2c_attach_client(client);
87 return 0; 72 return 0;
88} 73}
89 74
90static int wis_ov7640_detach(struct i2c_client *client) 75static int wis_ov7640_remove(struct i2c_client *client)
91{ 76{
92 int r;
93
94 r = i2c_detach_client(client);
95 if (r < 0)
96 return r;
97
98 kfree(client);
99 return 0; 77 return 0;
100} 78}
101 79
80static struct i2c_device_id wis_ov7640_id[] = {
81 { "wis_ov7640", 0 },
82 { }
83};
84
102static struct i2c_driver wis_ov7640_driver = { 85static struct i2c_driver wis_ov7640_driver = {
103 .driver = { 86 .driver = {
104 .name = "WIS OV7640 I2C driver", 87 .name = "WIS OV7640 I2C driver",
105 }, 88 },
106 .id = I2C_DRIVERID_WIS_OV7640, 89 .probe = wis_ov7640_probe,
107 .detach_client = wis_ov7640_detach, 90 .remove = wis_ov7640_remove,
91 .id_table = wis_ov7640_id,
108}; 92};
109 93
110static int __init wis_ov7640_init(void) 94static int __init wis_ov7640_init(void)
111{ 95{
112 int r; 96 return i2c_add_driver(&wis_ov7640_driver);
113
114 r = i2c_add_driver(&wis_ov7640_driver);
115 if (r < 0)
116 return r;
117 return wis_i2c_add_driver(wis_ov7640_driver.id, wis_ov7640_detect);
118} 97}
119 98
120static void __exit wis_ov7640_cleanup(void) 99static void __exit wis_ov7640_cleanup(void)
121{ 100{
122 wis_i2c_del_driver(wis_ov7640_detect);
123 i2c_del_driver(&wis_ov7640_driver); 101 i2c_del_driver(&wis_ov7640_driver);
124} 102}
125 103
diff --git a/drivers/staging/go7007/wis-saa7113.c b/drivers/staging/go7007/wis-saa7113.c
index 11689723945e..9ab893bd204e 100644
--- a/drivers/staging/go7007/wis-saa7113.c
+++ b/drivers/staging/go7007/wis-saa7113.c
@@ -261,34 +261,19 @@ static int wis_saa7113_command(struct i2c_client *client,
261 return 0; 261 return 0;
262} 262}
263 263
264static struct i2c_driver wis_saa7113_driver; 264static int wis_saa7113_probe(struct i2c_client *client,
265 265 const struct i2c_device_id *id)
266static struct i2c_client wis_saa7113_client_templ = {
267 .name = "SAA7113 (WIS)",
268 .driver = &wis_saa7113_driver,
269};
270
271static int wis_saa7113_detect(struct i2c_adapter *adapter, int addr, int kind)
272{ 266{
273 struct i2c_client *client; 267 struct i2c_adapter *adapter = client->adapter;
274 struct wis_saa7113 *dec; 268 struct wis_saa7113 *dec;
275 269
276 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 270 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
277 return 0; 271 return -ENODEV;
278
279 client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
280 if (client == NULL)
281 return -ENOMEM;
282 memcpy(client, &wis_saa7113_client_templ,
283 sizeof(wis_saa7113_client_templ));
284 client->adapter = adapter;
285 client->addr = addr;
286 272
287 dec = kmalloc(sizeof(struct wis_saa7113), GFP_KERNEL); 273 dec = kmalloc(sizeof(struct wis_saa7113), GFP_KERNEL);
288 if (dec == NULL) { 274 if (dec == NULL)
289 kfree(client);
290 return -ENOMEM; 275 return -ENOMEM;
291 } 276
292 dec->norm = V4L2_STD_NTSC; 277 dec->norm = V4L2_STD_NTSC;
293 dec->brightness = 128; 278 dec->brightness = 128;
294 dec->contrast = 71; 279 dec->contrast = 71;
@@ -298,56 +283,49 @@ static int wis_saa7113_detect(struct i2c_adapter *adapter, int addr, int kind)
298 283
299 printk(KERN_DEBUG 284 printk(KERN_DEBUG
300 "wis-saa7113: initializing SAA7113 at address %d on %s\n", 285 "wis-saa7113: initializing SAA7113 at address %d on %s\n",
301 addr, adapter->name); 286 client->addr, adapter->name);
302 287
303 if (write_regs(client, initial_registers) < 0) { 288 if (write_regs(client, initial_registers) < 0) {
304 printk(KERN_ERR 289 printk(KERN_ERR
305 "wis-saa7113: error initializing SAA7113\n"); 290 "wis-saa7113: error initializing SAA7113\n");
306 kfree(client);
307 kfree(dec); 291 kfree(dec);
308 return 0; 292 return -ENODEV;
309 } 293 }
310 294
311 i2c_attach_client(client);
312 return 0; 295 return 0;
313} 296}
314 297
315static int wis_saa7113_detach(struct i2c_client *client) 298static int wis_saa7113_remove(struct i2c_client *client)
316{ 299{
317 struct wis_saa7113 *dec = i2c_get_clientdata(client); 300 struct wis_saa7113 *dec = i2c_get_clientdata(client);
318 int r;
319
320 r = i2c_detach_client(client);
321 if (r < 0)
322 return r;
323 301
324 kfree(client); 302 i2c_set_clientdata(client, NULL);
325 kfree(dec); 303 kfree(dec);
326 return 0; 304 return 0;
327} 305}
328 306
307static struct i2c_device_id wis_saa7113_id[] = {
308 { "wis_saa7113", 0 },
309 { }
310};
311
329static struct i2c_driver wis_saa7113_driver = { 312static struct i2c_driver wis_saa7113_driver = {
330 .driver = { 313 .driver = {
331 .name = "WIS SAA7113 I2C driver", 314 .name = "WIS SAA7113 I2C driver",
332 }, 315 },
333 .id = I2C_DRIVERID_WIS_SAA7113, 316 .probe = wis_saa7113_probe,
334 .detach_client = wis_saa7113_detach, 317 .remove = wis_saa7113_remove,
335 .command = wis_saa7113_command, 318 .command = wis_saa7113_command,
319 .id_table = wis_saa7113_id,
336}; 320};
337 321
338static int __init wis_saa7113_init(void) 322static int __init wis_saa7113_init(void)
339{ 323{
340 int r; 324 return i2c_add_driver(&wis_saa7113_driver);
341
342 r = i2c_add_driver(&wis_saa7113_driver);
343 if (r < 0)
344 return r;
345 return wis_i2c_add_driver(wis_saa7113_driver.id, wis_saa7113_detect);
346} 325}
347 326
348static void __exit wis_saa7113_cleanup(void) 327static void __exit wis_saa7113_cleanup(void)
349{ 328{
350 wis_i2c_del_driver(wis_saa7113_detect);
351 i2c_del_driver(&wis_saa7113_driver); 329 i2c_del_driver(&wis_saa7113_driver);
352} 330}
353 331
diff --git a/drivers/staging/go7007/wis-saa7115.c b/drivers/staging/go7007/wis-saa7115.c
index 59417a7174d7..8687ad2de761 100644
--- a/drivers/staging/go7007/wis-saa7115.c
+++ b/drivers/staging/go7007/wis-saa7115.c
@@ -394,34 +394,19 @@ static int wis_saa7115_command(struct i2c_client *client,
394 return 0; 394 return 0;
395} 395}
396 396
397static struct i2c_driver wis_saa7115_driver; 397static int wis_saa7115_probe(struct i2c_client *client,
398 398 const struct i2c_device_id *id)
399static struct i2c_client wis_saa7115_client_templ = {
400 .name = "SAA7115 (WIS)",
401 .driver = &wis_saa7115_driver,
402};
403
404static int wis_saa7115_detect(struct i2c_adapter *adapter, int addr, int kind)
405{ 399{
406 struct i2c_client *client; 400 struct i2c_adapter *adapter = client->adapter;
407 struct wis_saa7115 *dec; 401 struct wis_saa7115 *dec;
408 402
409 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 403 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
410 return 0; 404 return -ENODEV;
411
412 client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
413 if (client == NULL)
414 return -ENOMEM;
415 memcpy(client, &wis_saa7115_client_templ,
416 sizeof(wis_saa7115_client_templ));
417 client->adapter = adapter;
418 client->addr = addr;
419 405
420 dec = kmalloc(sizeof(struct wis_saa7115), GFP_KERNEL); 406 dec = kmalloc(sizeof(struct wis_saa7115), GFP_KERNEL);
421 if (dec == NULL) { 407 if (dec == NULL)
422 kfree(client);
423 return -ENOMEM; 408 return -ENOMEM;
424 } 409
425 dec->norm = V4L2_STD_NTSC; 410 dec->norm = V4L2_STD_NTSC;
426 dec->brightness = 128; 411 dec->brightness = 128;
427 dec->contrast = 64; 412 dec->contrast = 64;
@@ -431,56 +416,49 @@ static int wis_saa7115_detect(struct i2c_adapter *adapter, int addr, int kind)
431 416
432 printk(KERN_DEBUG 417 printk(KERN_DEBUG
433 "wis-saa7115: initializing SAA7115 at address %d on %s\n", 418 "wis-saa7115: initializing SAA7115 at address %d on %s\n",
434 addr, adapter->name); 419 client->addr, adapter->name);
435 420
436 if (write_regs(client, initial_registers) < 0) { 421 if (write_regs(client, initial_registers) < 0) {
437 printk(KERN_ERR 422 printk(KERN_ERR
438 "wis-saa7115: error initializing SAA7115\n"); 423 "wis-saa7115: error initializing SAA7115\n");
439 kfree(client);
440 kfree(dec); 424 kfree(dec);
441 return 0; 425 return -ENODEV;
442 } 426 }
443 427
444 i2c_attach_client(client);
445 return 0; 428 return 0;
446} 429}
447 430
448static int wis_saa7115_detach(struct i2c_client *client) 431static int wis_saa7115_remove(struct i2c_client *client)
449{ 432{
450 struct wis_saa7115 *dec = i2c_get_clientdata(client); 433 struct wis_saa7115 *dec = i2c_get_clientdata(client);
451 int r;
452
453 r = i2c_detach_client(client);
454 if (r < 0)
455 return r;
456 434
457 kfree(client); 435 i2c_set_clientdata(client, NULL);
458 kfree(dec); 436 kfree(dec);
459 return 0; 437 return 0;
460} 438}
461 439
440static struct i2c_device_id wis_saa7115_id[] = {
441 { "wis_saa7115", 0 },
442 { }
443};
444
462static struct i2c_driver wis_saa7115_driver = { 445static struct i2c_driver wis_saa7115_driver = {
463 .driver = { 446 .driver = {
464 .name = "WIS SAA7115 I2C driver", 447 .name = "WIS SAA7115 I2C driver",
465 }, 448 },
466 .id = I2C_DRIVERID_WIS_SAA7115, 449 .probe = wis_saa7115_probe,
467 .detach_client = wis_saa7115_detach, 450 .remove = wis_saa7115_remove,
468 .command = wis_saa7115_command, 451 .command = wis_saa7115_command,
452 .id_table = wis_saa7115_id,
469}; 453};
470 454
471static int __init wis_saa7115_init(void) 455static int __init wis_saa7115_init(void)
472{ 456{
473 int r; 457 return i2c_add_driver(&wis_saa7115_driver);
474
475 r = i2c_add_driver(&wis_saa7115_driver);
476 if (r < 0)
477 return r;
478 return wis_i2c_add_driver(wis_saa7115_driver.id, wis_saa7115_detect);
479} 458}
480 459
481static void __exit wis_saa7115_cleanup(void) 460static void __exit wis_saa7115_cleanup(void)
482{ 461{
483 wis_i2c_del_driver(wis_saa7115_detect);
484 i2c_del_driver(&wis_saa7115_driver); 462 i2c_del_driver(&wis_saa7115_driver);
485} 463}
486 464
diff --git a/drivers/staging/go7007/wis-sony-tuner.c b/drivers/staging/go7007/wis-sony-tuner.c
index 58fddb122372..c965c601ac90 100644
--- a/drivers/staging/go7007/wis-sony-tuner.c
+++ b/drivers/staging/go7007/wis-sony-tuner.c
@@ -386,6 +386,7 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg)
386 struct wis_sony_tuner *t = i2c_get_clientdata(client); 386 struct wis_sony_tuner *t = i2c_get_clientdata(client);
387 387
388 switch (cmd) { 388 switch (cmd) {
389#if 0
389#ifdef TUNER_SET_TYPE_ADDR 390#ifdef TUNER_SET_TYPE_ADDR
390 case TUNER_SET_TYPE_ADDR: 391 case TUNER_SET_TYPE_ADDR:
391 { 392 {
@@ -463,6 +464,7 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg)
463 t->type, sony_tuners[t->type - 200].name); 464 t->type, sony_tuners[t->type - 200].name);
464 break; 465 break;
465 } 466 }
467#endif
466 case VIDIOC_G_FREQUENCY: 468 case VIDIOC_G_FREQUENCY:
467 { 469 {
468 struct v4l2_frequency *f = arg; 470 struct v4l2_frequency *f = arg;
@@ -651,35 +653,19 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg)
651 return 0; 653 return 0;
652} 654}
653 655
654static struct i2c_driver wis_sony_tuner_driver; 656static int wis_sony_tuner_probe(struct i2c_client *client,
655 657 const struct i2c_device_id *id)
656static struct i2c_client wis_sony_tuner_client_templ = {
657 .name = "Sony TV Tuner (WIS)",
658 .driver = &wis_sony_tuner_driver,
659};
660
661static int wis_sony_tuner_detect(struct i2c_adapter *adapter,
662 int addr, int kind)
663{ 658{
664 struct i2c_client *client; 659 struct i2c_adapter *adapter = client->adapter;
665 struct wis_sony_tuner *t; 660 struct wis_sony_tuner *t;
666 661
667 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_I2C_BLOCK)) 662 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_I2C_BLOCK))
668 return 0; 663 return -ENODEV;
669
670 client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
671 if (client == NULL)
672 return -ENOMEM;
673 memcpy(client, &wis_sony_tuner_client_templ,
674 sizeof(wis_sony_tuner_client_templ));
675 client->adapter = adapter;
676 client->addr = addr;
677 664
678 t = kmalloc(sizeof(struct wis_sony_tuner), GFP_KERNEL); 665 t = kmalloc(sizeof(struct wis_sony_tuner), GFP_KERNEL);
679 if (t == NULL) { 666 if (t == NULL)
680 kfree(client);
681 return -ENOMEM; 667 return -ENOMEM;
682 } 668
683 t->type = -1; 669 t->type = -1;
684 t->freq = 0; 670 t->freq = 0;
685 t->mpxmode = 0; 671 t->mpxmode = 0;
@@ -688,50 +674,42 @@ static int wis_sony_tuner_detect(struct i2c_adapter *adapter,
688 674
689 printk(KERN_DEBUG 675 printk(KERN_DEBUG
690 "wis-sony-tuner: initializing tuner at address %d on %s\n", 676 "wis-sony-tuner: initializing tuner at address %d on %s\n",
691 addr, adapter->name); 677 client->addr, adapter->name);
692
693 i2c_attach_client(client);
694 678
695 return 0; 679 return 0;
696} 680}
697 681
698static int wis_sony_tuner_detach(struct i2c_client *client) 682static int wis_sony_tuner_remove(struct i2c_client *client)
699{ 683{
700 struct wis_sony_tuner *t = i2c_get_clientdata(client); 684 struct wis_sony_tuner *t = i2c_get_clientdata(client);
701 int r;
702
703 r = i2c_detach_client(client);
704 if (r < 0)
705 return r;
706 685
686 i2c_set_clientdata(client, NULL);
707 kfree(t); 687 kfree(t);
708 kfree(client);
709 return 0; 688 return 0;
710} 689}
711 690
691static struct i2c_device_id wis_sony_tuner_id[] = {
692 { "wis_sony_tuner", 0 },
693 { }
694};
695
712static struct i2c_driver wis_sony_tuner_driver = { 696static struct i2c_driver wis_sony_tuner_driver = {
713 .driver = { 697 .driver = {
714 .name = "WIS Sony TV Tuner I2C driver", 698 .name = "WIS Sony TV Tuner I2C driver",
715 }, 699 },
716 .id = I2C_DRIVERID_WIS_SONY_TUNER, 700 .probe = wis_sony_tuner_probe,
717 .detach_client = wis_sony_tuner_detach, 701 .remove = wis_sony_tuner_remove,
718 .command = tuner_command, 702 .command = tuner_command,
703 .id_table = wis_sony_tuner_id,
719}; 704};
720 705
721static int __init wis_sony_tuner_init(void) 706static int __init wis_sony_tuner_init(void)
722{ 707{
723 int r; 708 return i2c_add_driver(&wis_sony_tuner_driver);
724
725 r = i2c_add_driver(&wis_sony_tuner_driver);
726 if (r < 0)
727 return r;
728 return wis_i2c_add_driver(wis_sony_tuner_driver.id,
729 wis_sony_tuner_detect);
730} 709}
731 710
732static void __exit wis_sony_tuner_cleanup(void) 711static void __exit wis_sony_tuner_cleanup(void)
733{ 712{
734 wis_i2c_del_driver(wis_sony_tuner_detect);
735 i2c_del_driver(&wis_sony_tuner_driver); 713 i2c_del_driver(&wis_sony_tuner_driver);
736} 714}
737 715
diff --git a/drivers/staging/go7007/wis-tw2804.c b/drivers/staging/go7007/wis-tw2804.c
index 57b8f2b1caa3..e15794a2a0ae 100644
--- a/drivers/staging/go7007/wis-tw2804.c
+++ b/drivers/staging/go7007/wis-tw2804.c
@@ -291,34 +291,19 @@ static int wis_tw2804_command(struct i2c_client *client,
291 return 0; 291 return 0;
292} 292}
293 293
294static struct i2c_driver wis_tw2804_driver; 294static int wis_tw2804_probe(struct i2c_client *client,
295 295 const struct i2c_device_id *id)
296static struct i2c_client wis_tw2804_client_templ = {
297 .name = "TW2804 (WIS)",
298 .driver = &wis_tw2804_driver,
299};
300
301static int wis_tw2804_detect(struct i2c_adapter *adapter, int addr, int kind)
302{ 296{
303 struct i2c_client *client; 297 struct i2c_adapter *adapter = client->adapter;
304 struct wis_tw2804 *dec; 298 struct wis_tw2804 *dec;
305 299
306 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 300 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
307 return 0; 301 return -ENODEV;
308
309 client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
310 if (client == NULL)
311 return -ENOMEM;
312 memcpy(client, &wis_tw2804_client_templ,
313 sizeof(wis_tw2804_client_templ));
314 client->adapter = adapter;
315 client->addr = addr;
316 302
317 dec = kmalloc(sizeof(struct wis_tw2804), GFP_KERNEL); 303 dec = kmalloc(sizeof(struct wis_tw2804), GFP_KERNEL);
318 if (dec == NULL) { 304 if (dec == NULL)
319 kfree(client);
320 return -ENOMEM; 305 return -ENOMEM;
321 } 306
322 dec->channel = -1; 307 dec->channel = -1;
323 dec->norm = V4L2_STD_NTSC; 308 dec->norm = V4L2_STD_NTSC;
324 dec->brightness = 128; 309 dec->brightness = 128;
@@ -328,48 +313,42 @@ static int wis_tw2804_detect(struct i2c_adapter *adapter, int addr, int kind)
328 i2c_set_clientdata(client, dec); 313 i2c_set_clientdata(client, dec);
329 314
330 printk(KERN_DEBUG "wis-tw2804: creating TW2804 at address %d on %s\n", 315 printk(KERN_DEBUG "wis-tw2804: creating TW2804 at address %d on %s\n",
331 addr, adapter->name); 316 client->addr, adapter->name);
332 317
333 i2c_attach_client(client);
334 return 0; 318 return 0;
335} 319}
336 320
337static int wis_tw2804_detach(struct i2c_client *client) 321static int wis_tw2804_remove(struct i2c_client *client)
338{ 322{
339 struct wis_tw2804 *dec = i2c_get_clientdata(client); 323 struct wis_tw2804 *dec = i2c_get_clientdata(client);
340 int r;
341
342 r = i2c_detach_client(client);
343 if (r < 0)
344 return r;
345 324
346 kfree(client); 325 i2c_set_clientdata(client, NULL);
347 kfree(dec); 326 kfree(dec);
348 return 0; 327 return 0;
349} 328}
350 329
330static struct i2c_device_id wis_tw2804_id[] = {
331 { "wis_tw2804", 0 },
332 { }
333};
334
351static struct i2c_driver wis_tw2804_driver = { 335static struct i2c_driver wis_tw2804_driver = {
352 .driver = { 336 .driver = {
353 .name = "WIS TW2804 I2C driver", 337 .name = "WIS TW2804 I2C driver",
354 }, 338 },
355 .id = I2C_DRIVERID_WIS_TW2804, 339 .probe = wis_tw2804_probe,
356 .detach_client = wis_tw2804_detach, 340 .remove = wis_tw2804_remove,
357 .command = wis_tw2804_command, 341 .command = wis_tw2804_command,
342 .id_table = wis_tw2804_id,
358}; 343};
359 344
360static int __init wis_tw2804_init(void) 345static int __init wis_tw2804_init(void)
361{ 346{
362 int r; 347 return i2c_add_driver(&wis_tw2804_driver);
363
364 r = i2c_add_driver(&wis_tw2804_driver);
365 if (r < 0)
366 return r;
367 return wis_i2c_add_driver(wis_tw2804_driver.id, wis_tw2804_detect);
368} 348}
369 349
370static void __exit wis_tw2804_cleanup(void) 350static void __exit wis_tw2804_cleanup(void)
371{ 351{
372 wis_i2c_del_driver(wis_tw2804_detect);
373 i2c_del_driver(&wis_tw2804_driver); 352 i2c_del_driver(&wis_tw2804_driver);
374} 353}
375 354
diff --git a/drivers/staging/go7007/wis-tw9903.c b/drivers/staging/go7007/wis-tw9903.c
index 40627b282cb4..6c3427bb6f4c 100644
--- a/drivers/staging/go7007/wis-tw9903.c
+++ b/drivers/staging/go7007/wis-tw9903.c
@@ -267,34 +267,19 @@ static int wis_tw9903_command(struct i2c_client *client,
267 return 0; 267 return 0;
268} 268}
269 269
270static struct i2c_driver wis_tw9903_driver; 270static int wis_tw9903_probe(struct i2c_client *client,
271 271 const struct i2c_device_id *id)
272static struct i2c_client wis_tw9903_client_templ = {
273 .name = "TW9903 (WIS)",
274 .driver = &wis_tw9903_driver,
275};
276
277static int wis_tw9903_detect(struct i2c_adapter *adapter, int addr, int kind)
278{ 272{
279 struct i2c_client *client; 273 struct i2c_adapter *adapter = client->adapter;
280 struct wis_tw9903 *dec; 274 struct wis_tw9903 *dec;
281 275
282 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 276 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
283 return 0; 277 return -ENODEV;
284
285 client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
286 if (client == NULL)
287 return -ENOMEM;
288 memcpy(client, &wis_tw9903_client_templ,
289 sizeof(wis_tw9903_client_templ));
290 client->adapter = adapter;
291 client->addr = addr;
292 278
293 dec = kmalloc(sizeof(struct wis_tw9903), GFP_KERNEL); 279 dec = kmalloc(sizeof(struct wis_tw9903), GFP_KERNEL);
294 if (dec == NULL) { 280 if (dec == NULL)
295 kfree(client);
296 return -ENOMEM; 281 return -ENOMEM;
297 } 282
298 dec->norm = V4L2_STD_NTSC; 283 dec->norm = V4L2_STD_NTSC;
299 dec->brightness = 0; 284 dec->brightness = 0;
300 dec->contrast = 0x60; 285 dec->contrast = 0x60;
@@ -303,55 +288,48 @@ static int wis_tw9903_detect(struct i2c_adapter *adapter, int addr, int kind)
303 288
304 printk(KERN_DEBUG 289 printk(KERN_DEBUG
305 "wis-tw9903: initializing TW9903 at address %d on %s\n", 290 "wis-tw9903: initializing TW9903 at address %d on %s\n",
306 addr, adapter->name); 291 client->addr, adapter->name);
307 292
308 if (write_regs(client, initial_registers) < 0) { 293 if (write_regs(client, initial_registers) < 0) {
309 printk(KERN_ERR "wis-tw9903: error initializing TW9903\n"); 294 printk(KERN_ERR "wis-tw9903: error initializing TW9903\n");
310 kfree(client);
311 kfree(dec); 295 kfree(dec);
312 return 0; 296 return -ENODEV;
313 } 297 }
314 298
315 i2c_attach_client(client);
316 return 0; 299 return 0;
317} 300}
318 301
319static int wis_tw9903_detach(struct i2c_client *client) 302static int wis_tw9903_remove(struct i2c_client *client)
320{ 303{
321 struct wis_tw9903 *dec = i2c_get_clientdata(client); 304 struct wis_tw9903 *dec = i2c_get_clientdata(client);
322 int r;
323
324 r = i2c_detach_client(client);
325 if (r < 0)
326 return r;
327 305
328 kfree(client); 306 i2c_set_clientdata(client, NULL);
329 kfree(dec); 307 kfree(dec);
330 return 0; 308 return 0;
331} 309}
332 310
311static struct i2c_device_id wis_tw9903_id[] = {
312 { "wis_tw9903", 0 },
313 { }
314};
315
333static struct i2c_driver wis_tw9903_driver = { 316static struct i2c_driver wis_tw9903_driver = {
334 .driver = { 317 .driver = {
335 .name = "WIS TW9903 I2C driver", 318 .name = "WIS TW9903 I2C driver",
336 }, 319 },
337 .id = I2C_DRIVERID_WIS_TW9903, 320 .probe = wis_tw9903_probe,
338 .detach_client = wis_tw9903_detach, 321 .remove = wis_tw9903_remove,
339 .command = wis_tw9903_command, 322 .command = wis_tw9903_command,
323 .id_table = wis_tw9903_id,
340}; 324};
341 325
342static int __init wis_tw9903_init(void) 326static int __init wis_tw9903_init(void)
343{ 327{
344 int r; 328 return i2c_add_driver(&wis_tw9903_driver);
345
346 r = i2c_add_driver(&wis_tw9903_driver);
347 if (r < 0)
348 return r;
349 return wis_i2c_add_driver(wis_tw9903_driver.id, wis_tw9903_detect);
350} 329}
351 330
352static void __exit wis_tw9903_cleanup(void) 331static void __exit wis_tw9903_cleanup(void)
353{ 332{
354 wis_i2c_del_driver(wis_tw9903_detect);
355 i2c_del_driver(&wis_tw9903_driver); 333 i2c_del_driver(&wis_tw9903_driver);
356} 334}
357 335
diff --git a/drivers/staging/go7007/wis-uda1342.c b/drivers/staging/go7007/wis-uda1342.c
index 555645c0cc1a..739c7ae8913f 100644
--- a/drivers/staging/go7007/wis-uda1342.c
+++ b/drivers/staging/go7007/wis-uda1342.c
@@ -59,73 +59,51 @@ static int wis_uda1342_command(struct i2c_client *client,
59 return 0; 59 return 0;
60} 60}
61 61
62static struct i2c_driver wis_uda1342_driver; 62static int wis_uda1342_probe(struct i2c_client *client,
63 63 const struct i2c_device_id *id)
64static struct i2c_client wis_uda1342_client_templ = {
65 .name = "UDA1342 (WIS)",
66 .driver = &wis_uda1342_driver,
67};
68
69static int wis_uda1342_detect(struct i2c_adapter *adapter, int addr, int kind)
70{ 64{
71 struct i2c_client *client; 65 struct i2c_adapter *adapter = client->adapter;
72 66
73 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_WORD_DATA)) 67 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_WORD_DATA))
74 return 0; 68 return -ENODEV;
75
76 client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
77 if (client == NULL)
78 return -ENOMEM;
79 memcpy(client, &wis_uda1342_client_templ,
80 sizeof(wis_uda1342_client_templ));
81 client->adapter = adapter;
82 client->addr = addr;
83 69
84 printk(KERN_DEBUG 70 printk(KERN_DEBUG
85 "wis-uda1342: initializing UDA1342 at address %d on %s\n", 71 "wis-uda1342: initializing UDA1342 at address %d on %s\n",
86 addr, adapter->name); 72 client->addr, adapter->name);
87 73
88 write_reg(client, 0x00, 0x8000); /* reset registers */ 74 write_reg(client, 0x00, 0x8000); /* reset registers */
89 write_reg(client, 0x00, 0x1241); /* select input 1 */ 75 write_reg(client, 0x00, 0x1241); /* select input 1 */
90 76
91 i2c_attach_client(client);
92 return 0; 77 return 0;
93} 78}
94 79
95static int wis_uda1342_detach(struct i2c_client *client) 80static int wis_uda1342_remove(struct i2c_client *client)
96{ 81{
97 int r;
98
99 r = i2c_detach_client(client);
100 if (r < 0)
101 return r;
102
103 kfree(client);
104 return 0; 82 return 0;
105} 83}
106 84
85static struct i2c_device_id wis_uda1342_id[] = {
86 { "wis_uda1342", 0 },
87 { }
88};
89
107static struct i2c_driver wis_uda1342_driver = { 90static struct i2c_driver wis_uda1342_driver = {
108 .driver = { 91 .driver = {
109 .name = "WIS UDA1342 I2C driver", 92 .name = "WIS UDA1342 I2C driver",
110 }, 93 },
111 .id = I2C_DRIVERID_WIS_UDA1342, 94 .probe = wis_uda1342_probe,
112 .detach_client = wis_uda1342_detach, 95 .remove = wis_uda1342_remove,
113 .command = wis_uda1342_command, 96 .command = wis_uda1342_command,
97 .id_table = wis_uda1342_id,
114}; 98};
115 99
116static int __init wis_uda1342_init(void) 100static int __init wis_uda1342_init(void)
117{ 101{
118 int r; 102 return i2c_add_driver(&wis_uda1342_driver);
119
120 r = i2c_add_driver(&wis_uda1342_driver);
121 if (r < 0)
122 return r;
123 return wis_i2c_add_driver(wis_uda1342_driver.id, wis_uda1342_detect);
124} 103}
125 104
126static void __exit wis_uda1342_cleanup(void) 105static void __exit wis_uda1342_cleanup(void)
127{ 106{
128 wis_i2c_del_driver(wis_uda1342_detect);
129 i2c_del_driver(&wis_uda1342_driver); 107 i2c_del_driver(&wis_uda1342_driver);
130} 108}
131 109
diff --git a/drivers/staging/line6/audio.c b/drivers/staging/line6/audio.c
index 3aa946899ced..e2ac8d60f8c2 100644
--- a/drivers/staging/line6/audio.c
+++ b/drivers/staging/line6/audio.c
@@ -27,11 +27,12 @@ int line6_init_audio(struct usb_line6 *line6)
27{ 27{
28 static int dev; 28 static int dev;
29 struct snd_card *card; 29 struct snd_card *card;
30 int err;
30 31
31 card = snd_card_new(line6_index[dev], line6_id[dev], THIS_MODULE, 0); 32 err = snd_card_create(line6_index[dev], line6_id[dev], THIS_MODULE, 0,
32 33 &card);
33 if (card == NULL) 34 if (err < 0)
34 return -ENOMEM; 35 return err;
35 36
36 line6->card = card; 37 line6->card = card;
37 38
diff --git a/drivers/staging/otus/usbdrv.c b/drivers/staging/otus/usbdrv.c
index 565a839589f5..540cbbb826f9 100644
--- a/drivers/staging/otus/usbdrv.c
+++ b/drivers/staging/otus/usbdrv.c
@@ -822,6 +822,21 @@ int zfLnxVapXmitFrame(struct sk_buff *skb, struct net_device *dev)
822 return 0; 822 return 0;
823} 823}
824 824
825static const struct net_device_ops vap_netdev_ops = {
826 .ndo_open = zfLnxVapOpen,
827 .ndo_stop = zfLnxVapClose,
828 .ndo_start_xmit = zfLnxVapXmitFrame,
829 .ndo_get_stats = usbdrv_get_stats,
830 .ndo_change_mtu = usbdrv_change_mtu,
831 .ndo_validate_addr = eth_validate_addr,
832 .ndo_set_mac_address = eth_mac_addr,
833#ifdef ZM_HOSTAPD_SUPPORT
834 .ndo_do_ioctl = usbdrv_ioctl,
835#else
836 .ndo_do_ioctl = NULL,
837#endif
838};
839
825int zfLnxRegisterVapDev(struct net_device* parentDev, u16_t vapId) 840int zfLnxRegisterVapDev(struct net_device* parentDev, u16_t vapId)
826{ 841{
827 /* Allocate net device structure */ 842 /* Allocate net device structure */
@@ -846,16 +861,7 @@ int zfLnxRegisterVapDev(struct net_device* parentDev, u16_t vapId)
846 vap[vapId].dev->ml_priv = parentDev->ml_priv; 861 vap[vapId].dev->ml_priv = parentDev->ml_priv;
847 862
848 //dev->hard_start_xmit = &zd1212_wds_xmit_frame; 863 //dev->hard_start_xmit = &zd1212_wds_xmit_frame;
849 vap[vapId].dev->hard_start_xmit = &zfLnxVapXmitFrame; 864 vap[vapId].dev->netdev_ops = &vap_netdev_ops;
850 vap[vapId].dev->open = &zfLnxVapOpen;
851 vap[vapId].dev->stop = &zfLnxVapClose;
852 vap[vapId].dev->get_stats = &usbdrv_get_stats;
853 vap[vapId].dev->change_mtu = &usbdrv_change_mtu;
854#ifdef ZM_HOSTAPD_SUPPORT
855 vap[vapId].dev->do_ioctl = usbdrv_ioctl;
856#else
857 vap[vapId].dev->do_ioctl = NULL;
858#endif
859 vap[vapId].dev->destructor = free_netdev; 865 vap[vapId].dev->destructor = free_netdev;
860 866
861 vap[vapId].dev->tx_queue_len = 0; 867 vap[vapId].dev->tx_queue_len = 0;
@@ -1068,6 +1074,18 @@ void zfLnxUnlinkAllUrbs(struct usbdrv_private *macp)
1068 usb_unlink_urb(macp->RegInUrb); 1074 usb_unlink_urb(macp->RegInUrb);
1069} 1075}
1070 1076
1077static const struct net_device_ops otus_netdev_ops = {
1078 .ndo_open = usbdrv_open,
1079 .ndo_stop = usbdrv_close,
1080 .ndo_start_xmit = usbdrv_xmit_frame,
1081 .ndo_change_mtu = usbdrv_change_mtu,
1082 .ndo_get_stats = usbdrv_get_stats,
1083 .ndo_set_multicast_list = usbdrv_set_multi,
1084 .ndo_set_mac_address = usbdrv_set_mac,
1085 .ndo_do_ioctl = usbdrv_ioctl,
1086 .ndo_validate_addr = eth_validate_addr,
1087};
1088
1071u8_t zfLnxInitSetup(struct net_device *dev, struct usbdrv_private *macp) 1089u8_t zfLnxInitSetup(struct net_device *dev, struct usbdrv_private *macp)
1072{ 1090{
1073 //unsigned char addr[6]; 1091 //unsigned char addr[6];
@@ -1092,14 +1110,7 @@ u8_t zfLnxInitSetup(struct net_device *dev, struct usbdrv_private *macp)
1092 dev->wireless_handlers = (struct iw_handler_def *)&p80211wext_handler_def; 1110 dev->wireless_handlers = (struct iw_handler_def *)&p80211wext_handler_def;
1093#endif 1111#endif
1094 1112
1095 dev->open = usbdrv_open; 1113 dev->netdev_ops = &otus_netdev_ops;
1096 dev->hard_start_xmit = usbdrv_xmit_frame;
1097 dev->stop = usbdrv_close;
1098 dev->change_mtu = &usbdrv_change_mtu;
1099 dev->get_stats = usbdrv_get_stats;
1100 dev->set_multicast_list = usbdrv_set_multi;
1101 dev->set_mac_address = usbdrv_set_mac;
1102 dev->do_ioctl = usbdrv_ioctl;
1103 1114
1104 dev->flags |= IFF_MULTICAST; 1115 dev->flags |= IFF_MULTICAST;
1105 1116
diff --git a/drivers/staging/otus/zdusb.c b/drivers/staging/otus/zdusb.c
index 78f1d2224fa1..2a6d937ba5e8 100644
--- a/drivers/staging/otus/zdusb.c
+++ b/drivers/staging/otus/zdusb.c
@@ -48,7 +48,8 @@ static const char driver_name[] = "Otus";
48static struct usb_device_id zd1221_ids [] = { 48static struct usb_device_id zd1221_ids [] = {
49 { USB_DEVICE(VENDOR_ATHR, PRODUCT_AR9170) }, 49 { USB_DEVICE(VENDOR_ATHR, PRODUCT_AR9170) },
50 { USB_DEVICE(VENDOR_DLINK, PRODUCT_DWA160A) }, 50 { USB_DEVICE(VENDOR_DLINK, PRODUCT_DWA160A) },
51 { USB_DEVICE(0x0846, 0x9010) }, 51 { USB_DEVICE(VENDOR_NETGEAR, PRODUCT_WNDA3100) },
52 { USB_DEVICE(VENDOR_NETGEAR, PRODUCT_WN111v2) },
52 { } /* Terminating entry */ 53 { } /* Terminating entry */
53}; 54};
54 55
diff --git a/drivers/staging/otus/zdusb.h b/drivers/staging/otus/zdusb.h
index 656dc212ade5..9f8ab2e96169 100644
--- a/drivers/staging/otus/zdusb.h
+++ b/drivers/staging/otus/zdusb.h
@@ -40,4 +40,8 @@
40#define VENDOR_DLINK 0x07D1 //Dlink 40#define VENDOR_DLINK 0x07D1 //Dlink
41#define PRODUCT_DWA160A 0x3C10 41#define PRODUCT_DWA160A 0x3C10
42 42
43#define VENDOR_NETGEAR 0x0846 /* NetGear */
44#define PRODUCT_WNDA3100 0x9010
45#define PRODUCT_WN111v2 0x9001
46
43#endif 47#endif
diff --git a/drivers/staging/pohmelfs/config.c b/drivers/staging/pohmelfs/config.c
index 3e67da9ea381..a6eaa42fb669 100644
--- a/drivers/staging/pohmelfs/config.c
+++ b/drivers/staging/pohmelfs/config.c
@@ -81,6 +81,45 @@ static struct pohmelfs_config_group *pohmelfs_find_create_config_group(unsigned
81 return g; 81 return g;
82} 82}
83 83
84static inline void pohmelfs_insert_config_entry(struct pohmelfs_sb *psb, struct pohmelfs_config *dst)
85{
86 struct pohmelfs_config *tmp;
87
88 INIT_LIST_HEAD(&dst->config_entry);
89
90 list_for_each_entry(tmp, &psb->state_list, config_entry) {
91 if (dst->state.ctl.prio > tmp->state.ctl.prio)
92 list_add_tail(&dst->config_entry, &tmp->config_entry);
93 }
94 if (list_empty(&dst->config_entry))
95 list_add_tail(&dst->config_entry, &psb->state_list);
96}
97
98static int pohmelfs_move_config_entry(struct pohmelfs_sb *psb,
99 struct pohmelfs_config *dst, struct pohmelfs_config *new)
100{
101 if ((dst->state.ctl.prio == new->state.ctl.prio) &&
102 (dst->state.ctl.perm == new->state.ctl.perm))
103 return 0;
104
105 dprintk("%s: dst: prio: %d, perm: %x, new: prio: %d, perm: %d.\n",
106 __func__, dst->state.ctl.prio, dst->state.ctl.perm,
107 new->state.ctl.prio, new->state.ctl.perm);
108 dst->state.ctl.prio = new->state.ctl.prio;
109 dst->state.ctl.perm = new->state.ctl.perm;
110
111 list_del_init(&dst->config_entry);
112 pohmelfs_insert_config_entry(psb, dst);
113 return 0;
114}
115
116/*
117 * pohmelfs_copy_config() is used to copy new state configs from the
118 * config group (controlled by the netlink messages) into the superblock.
119 * This happens either at startup time where no transactions can access
120 * the list of the configs (and thus list of the network states), or at
121 * run-time, where it is protected by the psb->state_lock.
122 */
84int pohmelfs_copy_config(struct pohmelfs_sb *psb) 123int pohmelfs_copy_config(struct pohmelfs_sb *psb)
85{ 124{
86 struct pohmelfs_config_group *g; 125 struct pohmelfs_config_group *g;
@@ -103,7 +142,9 @@ int pohmelfs_copy_config(struct pohmelfs_sb *psb)
103 err = 0; 142 err = 0;
104 list_for_each_entry(dst, &psb->state_list, config_entry) { 143 list_for_each_entry(dst, &psb->state_list, config_entry) {
105 if (pohmelfs_config_eql(&dst->state.ctl, &c->state.ctl)) { 144 if (pohmelfs_config_eql(&dst->state.ctl, &c->state.ctl)) {
106 err = -EEXIST; 145 err = pohmelfs_move_config_entry(psb, dst, c);
146 if (!err)
147 err = -EEXIST;
107 break; 148 break;
108 } 149 }
109 } 150 }
@@ -119,7 +160,7 @@ int pohmelfs_copy_config(struct pohmelfs_sb *psb)
119 160
120 memcpy(&dst->state.ctl, &c->state.ctl, sizeof(struct pohmelfs_ctl)); 161 memcpy(&dst->state.ctl, &c->state.ctl, sizeof(struct pohmelfs_ctl));
121 162
122 list_add_tail(&dst->config_entry, &psb->state_list); 163 pohmelfs_insert_config_entry(psb, dst);
123 164
124 err = pohmelfs_state_init_one(psb, dst); 165 err = pohmelfs_state_init_one(psb, dst);
125 if (err) { 166 if (err) {
@@ -248,6 +289,13 @@ out_unlock:
248 return err; 289 return err;
249} 290}
250 291
292static int pohmelfs_modify_config(struct pohmelfs_ctl *old, struct pohmelfs_ctl *new)
293{
294 old->perm = new->perm;
295 old->prio = new->prio;
296 return 0;
297}
298
251static int pohmelfs_cn_ctl(struct cn_msg *msg, int action) 299static int pohmelfs_cn_ctl(struct cn_msg *msg, int action)
252{ 300{
253 struct pohmelfs_config_group *g; 301 struct pohmelfs_config_group *g;
@@ -278,6 +326,9 @@ static int pohmelfs_cn_ctl(struct cn_msg *msg, int action)
278 g->num_entry--; 326 g->num_entry--;
279 kfree(c); 327 kfree(c);
280 goto out_unlock; 328 goto out_unlock;
329 } else if (action == POHMELFS_FLAGS_MODIFY) {
330 err = pohmelfs_modify_config(sc, ctl);
331 goto out_unlock;
281 } else { 332 } else {
282 err = -EEXIST; 333 err = -EEXIST;
283 goto out_unlock; 334 goto out_unlock;
@@ -296,6 +347,7 @@ static int pohmelfs_cn_ctl(struct cn_msg *msg, int action)
296 } 347 }
297 memcpy(&c->state.ctl, ctl, sizeof(struct pohmelfs_ctl)); 348 memcpy(&c->state.ctl, ctl, sizeof(struct pohmelfs_ctl));
298 g->num_entry++; 349 g->num_entry++;
350
299 list_add_tail(&c->config_entry, &g->config_list); 351 list_add_tail(&c->config_entry, &g->config_list);
300 352
301out_unlock: 353out_unlock:
@@ -401,10 +453,9 @@ static void pohmelfs_cn_callback(void *data)
401 453
402 switch (msg->flags) { 454 switch (msg->flags) {
403 case POHMELFS_FLAGS_ADD: 455 case POHMELFS_FLAGS_ADD:
404 err = pohmelfs_cn_ctl(msg, POHMELFS_FLAGS_ADD);
405 break;
406 case POHMELFS_FLAGS_DEL: 456 case POHMELFS_FLAGS_DEL:
407 err = pohmelfs_cn_ctl(msg, POHMELFS_FLAGS_DEL); 457 case POHMELFS_FLAGS_MODIFY:
458 err = pohmelfs_cn_ctl(msg, msg->flags);
408 break; 459 break;
409 case POHMELFS_FLAGS_SHOW: 460 case POHMELFS_FLAGS_SHOW:
410 err = pohmelfs_cn_disp(msg); 461 err = pohmelfs_cn_disp(msg);
diff --git a/drivers/staging/pohmelfs/dir.c b/drivers/staging/pohmelfs/dir.c
index 7a41183a32e1..b5799842fb84 100644
--- a/drivers/staging/pohmelfs/dir.c
+++ b/drivers/staging/pohmelfs/dir.c
@@ -328,7 +328,7 @@ static int pohmelfs_sync_remote_dir(struct pohmelfs_inode *pi)
328{ 328{
329 struct inode *inode = &pi->vfs_inode; 329 struct inode *inode = &pi->vfs_inode;
330 struct pohmelfs_sb *psb = POHMELFS_SB(inode->i_sb); 330 struct pohmelfs_sb *psb = POHMELFS_SB(inode->i_sb);
331 long ret = msecs_to_jiffies(25000); 331 long ret = psb->wait_on_page_timeout;
332 int err; 332 int err;
333 333
334 dprintk("%s: dir: %llu, state: %lx: remote_synced: %d.\n", 334 dprintk("%s: dir: %llu, state: %lx: remote_synced: %d.\n",
@@ -389,11 +389,11 @@ static int pohmelfs_readdir(struct file *file, void *dirent, filldir_t filldir)
389 dprintk("%s: parent: %llu, fpos: %llu, hash: %08lx.\n", 389 dprintk("%s: parent: %llu, fpos: %llu, hash: %08lx.\n",
390 __func__, pi->ino, (u64)file->f_pos, 390 __func__, pi->ino, (u64)file->f_pos,
391 (unsigned long)file->private_data); 391 (unsigned long)file->private_data);
392 392#if 0
393 err = pohmelfs_data_lock(pi, 0, ~0, POHMELFS_READ_LOCK); 393 err = pohmelfs_data_lock(pi, 0, ~0, POHMELFS_READ_LOCK);
394 if (err) 394 if (err)
395 return err; 395 return err;
396 396#endif
397 err = pohmelfs_sync_remote_dir(pi); 397 err = pohmelfs_sync_remote_dir(pi);
398 if (err) 398 if (err)
399 return err; 399 return err;
@@ -513,10 +513,6 @@ struct dentry *pohmelfs_lookup(struct inode *dir, struct dentry *dentry, struct
513 513
514 need_lock = pohmelfs_need_lock(parent, lock_type); 514 need_lock = pohmelfs_need_lock(parent, lock_type);
515 515
516 err = pohmelfs_data_lock(parent, 0, ~0, lock_type);
517 if (err)
518 goto out;
519
520 str.hash = jhash(dentry->d_name.name, dentry->d_name.len, 0); 516 str.hash = jhash(dentry->d_name.name, dentry->d_name.len, 0);
521 517
522 mutex_lock(&parent->offset_lock); 518 mutex_lock(&parent->offset_lock);
@@ -525,8 +521,8 @@ struct dentry *pohmelfs_lookup(struct inode *dir, struct dentry *dentry, struct
525 ino = n->ino; 521 ino = n->ino;
526 mutex_unlock(&parent->offset_lock); 522 mutex_unlock(&parent->offset_lock);
527 523
528 dprintk("%s: 1 ino: %lu, inode: %p, name: '%s', hash: %x, parent_state: %lx.\n", 524 dprintk("%s: start ino: %lu, inode: %p, name: '%s', hash: %x, parent_state: %lx, need_lock: %d.\n",
529 __func__, ino, inode, str.name, str.hash, parent->state); 525 __func__, ino, inode, str.name, str.hash, parent->state, need_lock);
530 526
531 if (ino) { 527 if (ino) {
532 inode = ilookup(dir->i_sb, ino); 528 inode = ilookup(dir->i_sb, ino);
@@ -534,7 +530,7 @@ struct dentry *pohmelfs_lookup(struct inode *dir, struct dentry *dentry, struct
534 goto out; 530 goto out;
535 } 531 }
536 532
537 dprintk("%s: dir: %p, dir_ino: %llu, name: '%s', len: %u, dir_state: %lx, ino: %lu.\n", 533 dprintk("%s: no inode dir: %p, dir_ino: %llu, name: '%s', len: %u, dir_state: %lx, ino: %lu.\n",
538 __func__, dir, parent->ino, 534 __func__, dir, parent->ino,
539 str.name, str.len, parent->state, ino); 535 str.name, str.len, parent->state, ino);
540 536
@@ -543,6 +539,10 @@ struct dentry *pohmelfs_lookup(struct inode *dir, struct dentry *dentry, struct
543 goto out; 539 goto out;
544 } 540 }
545 541
542 err = pohmelfs_data_lock(parent, 0, ~0, lock_type);
543 if (err)
544 goto out;
545
546 err = pohmelfs_lookup_single(parent, &str, ino); 546 err = pohmelfs_lookup_single(parent, &str, ino);
547 if (err) 547 if (err)
548 goto out; 548 goto out;
@@ -557,10 +557,10 @@ struct dentry *pohmelfs_lookup(struct inode *dir, struct dentry *dentry, struct
557 557
558 if (ino) { 558 if (ino) {
559 inode = ilookup(dir->i_sb, ino); 559 inode = ilookup(dir->i_sb, ino);
560 printk("%s: second lookup ino: %lu, inode: %p, name: '%s', hash: %x.\n", 560 dprintk("%s: second lookup ino: %lu, inode: %p, name: '%s', hash: %x.\n",
561 __func__, ino, inode, str.name, str.hash); 561 __func__, ino, inode, str.name, str.hash);
562 if (!inode) { 562 if (!inode) {
563 printk("%s: No inode for ino: %lu, name: '%s', hash: %x.\n", 563 dprintk("%s: No inode for ino: %lu, name: '%s', hash: %x.\n",
564 __func__, ino, str.name, str.hash); 564 __func__, ino, str.name, str.hash);
565 //return NULL; 565 //return NULL;
566 return ERR_PTR(-EACCES); 566 return ERR_PTR(-EACCES);
diff --git a/drivers/staging/pohmelfs/inode.c b/drivers/staging/pohmelfs/inode.c
index 5bf16504cd6f..b2eaf9047266 100644
--- a/drivers/staging/pohmelfs/inode.c
+++ b/drivers/staging/pohmelfs/inode.c
@@ -1169,16 +1169,17 @@ err_out_put:
1169static int pohmelfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat) 1169static int pohmelfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
1170{ 1170{
1171 struct inode *inode = dentry->d_inode; 1171 struct inode *inode = dentry->d_inode;
1172#if 0
1172 struct pohmelfs_inode *pi = POHMELFS_I(inode); 1173 struct pohmelfs_inode *pi = POHMELFS_I(inode);
1173 int err; 1174 int err;
1174 1175
1175 err = pohmelfs_data_lock(pi, 0, ~0, POHMELFS_READ_LOCK); 1176 err = pohmelfs_data_lock(pi, 0, ~0, POHMELFS_READ_LOCK);
1176 if (err) 1177 if (err)
1177 return err; 1178 return err;
1178
1179 dprintk("%s: ino: %llu, mode: %o, uid: %u, gid: %u, size: %llu.\n", 1179 dprintk("%s: ino: %llu, mode: %o, uid: %u, gid: %u, size: %llu.\n",
1180 __func__, pi->ino, inode->i_mode, inode->i_uid, 1180 __func__, pi->ino, inode->i_mode, inode->i_uid,
1181 inode->i_gid, inode->i_size); 1181 inode->i_gid, inode->i_size);
1182#endif
1182 1183
1183 generic_fillattr(inode, stat); 1184 generic_fillattr(inode, stat);
1184 return 0; 1185 return 0;
@@ -1342,14 +1343,6 @@ static void pohmelfs_put_super(struct super_block *sb)
1342 1343
1343 kfree(psb); 1344 kfree(psb);
1344 sb->s_fs_info = NULL; 1345 sb->s_fs_info = NULL;
1345
1346 pohmelfs_ftrans_exit();
1347}
1348
1349static int pohmelfs_remount(struct super_block *sb, int *flags, char *data)
1350{
1351 *flags |= MS_RDONLY;
1352 return 0;
1353} 1346}
1354 1347
1355static int pohmelfs_statfs(struct dentry *dentry, struct kstatfs *buf) 1348static int pohmelfs_statfs(struct dentry *dentry, struct kstatfs *buf)
@@ -1394,42 +1387,33 @@ static int pohmelfs_show_options(struct seq_file *seq, struct vfsmount *vfs)
1394 return 0; 1387 return 0;
1395} 1388}
1396 1389
1397static const struct super_operations pohmelfs_sb_ops = {
1398 .alloc_inode = pohmelfs_alloc_inode,
1399 .destroy_inode = pohmelfs_destroy_inode,
1400 .drop_inode = pohmelfs_drop_inode,
1401 .write_inode = pohmelfs_write_inode,
1402 .put_super = pohmelfs_put_super,
1403 .remount_fs = pohmelfs_remount,
1404 .statfs = pohmelfs_statfs,
1405 .show_options = pohmelfs_show_options,
1406};
1407
1408enum { 1390enum {
1409 pohmelfs_opt_idx, 1391 pohmelfs_opt_idx,
1392 pohmelfs_opt_crypto_thread_num,
1393 pohmelfs_opt_trans_max_pages,
1394 pohmelfs_opt_crypto_fail_unsupported,
1395
1396 /* Remountable options */
1410 pohmelfs_opt_trans_scan_timeout, 1397 pohmelfs_opt_trans_scan_timeout,
1411 pohmelfs_opt_drop_scan_timeout, 1398 pohmelfs_opt_drop_scan_timeout,
1412 pohmelfs_opt_wait_on_page_timeout, 1399 pohmelfs_opt_wait_on_page_timeout,
1413 pohmelfs_opt_trans_retries, 1400 pohmelfs_opt_trans_retries,
1414 pohmelfs_opt_crypto_thread_num,
1415 pohmelfs_opt_trans_max_pages,
1416 pohmelfs_opt_crypto_fail_unsupported,
1417 pohmelfs_opt_mcache_timeout, 1401 pohmelfs_opt_mcache_timeout,
1418}; 1402};
1419 1403
1420static struct match_token pohmelfs_tokens[] = { 1404static struct match_token pohmelfs_tokens[] = {
1421 {pohmelfs_opt_idx, "idx=%u"}, 1405 {pohmelfs_opt_idx, "idx=%u"},
1406 {pohmelfs_opt_crypto_thread_num, "crypto_thread_num=%u"},
1407 {pohmelfs_opt_trans_max_pages, "trans_max_pages=%u"},
1408 {pohmelfs_opt_crypto_fail_unsupported, "crypto_fail_unsupported"},
1422 {pohmelfs_opt_trans_scan_timeout, "trans_scan_timeout=%u"}, 1409 {pohmelfs_opt_trans_scan_timeout, "trans_scan_timeout=%u"},
1423 {pohmelfs_opt_drop_scan_timeout, "drop_scan_timeout=%u"}, 1410 {pohmelfs_opt_drop_scan_timeout, "drop_scan_timeout=%u"},
1424 {pohmelfs_opt_wait_on_page_timeout, "wait_on_page_timeout=%u"}, 1411 {pohmelfs_opt_wait_on_page_timeout, "wait_on_page_timeout=%u"},
1425 {pohmelfs_opt_trans_retries, "trans_retries=%u"}, 1412 {pohmelfs_opt_trans_retries, "trans_retries=%u"},
1426 {pohmelfs_opt_crypto_thread_num, "crypto_thread_num=%u"},
1427 {pohmelfs_opt_trans_max_pages, "trans_max_pages=%u"},
1428 {pohmelfs_opt_crypto_fail_unsupported, "crypto_fail_unsupported"},
1429 {pohmelfs_opt_mcache_timeout, "mcache_timeout=%u"}, 1413 {pohmelfs_opt_mcache_timeout, "mcache_timeout=%u"},
1430}; 1414};
1431 1415
1432static int pohmelfs_parse_options(char *options, struct pohmelfs_sb *psb) 1416static int pohmelfs_parse_options(char *options, struct pohmelfs_sb *psb, int remount)
1433{ 1417{
1434 char *p; 1418 char *p;
1435 substring_t args[MAX_OPT_ARGS]; 1419 substring_t args[MAX_OPT_ARGS];
@@ -1449,6 +1433,9 @@ static int pohmelfs_parse_options(char *options, struct pohmelfs_sb *psb)
1449 if (err) 1433 if (err)
1450 return err; 1434 return err;
1451 1435
1436 if (remount && token <= pohmelfs_opt_crypto_fail_unsupported)
1437 continue;
1438
1452 switch (token) { 1439 switch (token) {
1453 case pohmelfs_opt_idx: 1440 case pohmelfs_opt_idx:
1454 psb->idx = option; 1441 psb->idx = option;
@@ -1485,6 +1472,25 @@ static int pohmelfs_parse_options(char *options, struct pohmelfs_sb *psb)
1485 return 0; 1472 return 0;
1486} 1473}
1487 1474
1475static int pohmelfs_remount(struct super_block *sb, int *flags, char *data)
1476{
1477 int err;
1478 struct pohmelfs_sb *psb = POHMELFS_SB(sb);
1479 unsigned long old_sb_flags = sb->s_flags;
1480
1481 err = pohmelfs_parse_options(data, psb, 1);
1482 if (err)
1483 goto err_out_restore;
1484
1485 if (!(*flags & MS_RDONLY))
1486 sb->s_flags &= ~MS_RDONLY;
1487 return 0;
1488
1489err_out_restore:
1490 sb->s_flags = old_sb_flags;
1491 return err;
1492}
1493
1488static void pohmelfs_flush_inode(struct pohmelfs_inode *pi, unsigned int count) 1494static void pohmelfs_flush_inode(struct pohmelfs_inode *pi, unsigned int count)
1489{ 1495{
1490 struct inode *inode = &pi->vfs_inode; 1496 struct inode *inode = &pi->vfs_inode;
@@ -1753,6 +1759,57 @@ err_out_exit:
1753 return err; 1759 return err;
1754} 1760}
1755 1761
1762static int pohmelfs_show_stats(struct seq_file *m, struct vfsmount *mnt)
1763{
1764 struct netfs_state *st;
1765 struct pohmelfs_ctl *ctl;
1766 struct pohmelfs_sb *psb = POHMELFS_SB(mnt->mnt_sb);
1767 struct pohmelfs_config *c;
1768
1769 mutex_lock(&psb->state_lock);
1770
1771 seq_printf(m, "\nidx addr(:port) socket_type protocol active priority permissions\n");
1772
1773 list_for_each_entry(c, &psb->state_list, config_entry) {
1774 st = &c->state;
1775 ctl = &st->ctl;
1776
1777 seq_printf(m, "%u ", ctl->idx);
1778 if (ctl->addr.sa_family == AF_INET) {
1779 struct sockaddr_in *sin = (struct sockaddr_in *)&st->ctl.addr;
1780 //seq_printf(m, "%pi4:%u", &sin->sin_addr.s_addr, ntohs(sin->sin_port));
1781 seq_printf(m, "%u.%u.%u.%u:%u", NIPQUAD(sin->sin_addr.s_addr), ntohs(sin->sin_port));
1782 } else if (ctl->addr.sa_family == AF_INET6) {
1783 struct sockaddr_in6 *sin = (struct sockaddr_in6 *)&st->ctl.addr;
1784 seq_printf(m, "%pi6:%u", &sin->sin6_addr, ntohs(sin->sin6_port));
1785 } else {
1786 unsigned int i;
1787 for (i=0; i<ctl->addrlen; ++i)
1788 seq_printf(m, "%02x.", ctl->addr.addr[i]);
1789 }
1790
1791 seq_printf(m, " %u %u %d %u %x\n",
1792 ctl->type, ctl->proto,
1793 st->socket != NULL,
1794 ctl->prio, ctl->perm);
1795 }
1796 mutex_unlock(&psb->state_lock);
1797
1798 return 0;
1799}
1800
1801static const struct super_operations pohmelfs_sb_ops = {
1802 .alloc_inode = pohmelfs_alloc_inode,
1803 .destroy_inode = pohmelfs_destroy_inode,
1804 .drop_inode = pohmelfs_drop_inode,
1805 .write_inode = pohmelfs_write_inode,
1806 .put_super = pohmelfs_put_super,
1807 .remount_fs = pohmelfs_remount,
1808 .statfs = pohmelfs_statfs,
1809 .show_options = pohmelfs_show_options,
1810 .show_stats = pohmelfs_show_stats,
1811};
1812
1756/* 1813/*
1757 * Allocate private superblock and create root dir. 1814 * Allocate private superblock and create root dir.
1758 */ 1815 */
@@ -1764,8 +1821,6 @@ static int pohmelfs_fill_super(struct super_block *sb, void *data, int silent)
1764 struct pohmelfs_inode *npi; 1821 struct pohmelfs_inode *npi;
1765 struct qstr str; 1822 struct qstr str;
1766 1823
1767 pohmelfs_ftrans_init();
1768
1769 psb = kzalloc(sizeof(struct pohmelfs_sb), GFP_KERNEL); 1824 psb = kzalloc(sizeof(struct pohmelfs_sb), GFP_KERNEL);
1770 if (!psb) 1825 if (!psb)
1771 goto err_out_exit; 1826 goto err_out_exit;
@@ -1816,7 +1871,7 @@ static int pohmelfs_fill_super(struct super_block *sb, void *data, int silent)
1816 mutex_init(&psb->state_lock); 1871 mutex_init(&psb->state_lock);
1817 INIT_LIST_HEAD(&psb->state_list); 1872 INIT_LIST_HEAD(&psb->state_list);
1818 1873
1819 err = pohmelfs_parse_options((char *) data, psb); 1874 err = pohmelfs_parse_options((char *) data, psb, 0);
1820 if (err) 1875 if (err)
1821 goto err_out_free_sb; 1876 goto err_out_free_sb;
1822 1877
@@ -1845,6 +1900,8 @@ static int pohmelfs_fill_super(struct super_block *sb, void *data, int silent)
1845 err = PTR_ERR(npi); 1900 err = PTR_ERR(npi);
1846 goto err_out_crypto_exit; 1901 goto err_out_crypto_exit;
1847 } 1902 }
1903 set_bit(NETFS_INODE_REMOTE_SYNCED, &npi->state);
1904 clear_bit(NETFS_INODE_OWNED, &npi->state);
1848 1905
1849 root = &npi->vfs_inode; 1906 root = &npi->vfs_inode;
1850 1907
@@ -1887,11 +1944,29 @@ static int pohmelfs_get_sb(struct file_system_type *fs_type,
1887 mnt); 1944 mnt);
1888} 1945}
1889 1946
1947/*
1948 * We need this to sync all inodes earlier, since when writeback
1949 * is invoked from the umount/mntput path dcache is already shrunk,
1950 * see generic_shutdown_super(), and no inodes can access the path.
1951 */
1952static void pohmelfs_kill_super(struct super_block *sb)
1953{
1954 struct writeback_control wbc = {
1955 .sync_mode = WB_SYNC_ALL,
1956 .range_start = 0,
1957 .range_end = LLONG_MAX,
1958 .nr_to_write = LONG_MAX,
1959 };
1960 generic_sync_sb_inodes(sb, &wbc);
1961
1962 kill_anon_super(sb);
1963}
1964
1890static struct file_system_type pohmel_fs_type = { 1965static struct file_system_type pohmel_fs_type = {
1891 .owner = THIS_MODULE, 1966 .owner = THIS_MODULE,
1892 .name = "pohmel", 1967 .name = "pohmel",
1893 .get_sb = pohmelfs_get_sb, 1968 .get_sb = pohmelfs_get_sb,
1894 .kill_sb = kill_anon_super, 1969 .kill_sb = pohmelfs_kill_super,
1895}; 1970};
1896 1971
1897/* 1972/*
diff --git a/drivers/staging/pohmelfs/lock.c b/drivers/staging/pohmelfs/lock.c
index ad4a18559bdd..22fef18cae90 100644
--- a/drivers/staging/pohmelfs/lock.c
+++ b/drivers/staging/pohmelfs/lock.c
@@ -41,7 +41,8 @@ static int pohmelfs_send_lock_trans(struct pohmelfs_inode *pi,
41 path_len = err; 41 path_len = err;
42 42
43 err = -ENOMEM; 43 err = -ENOMEM;
44 t = netfs_trans_alloc(psb, path_len + sizeof(struct netfs_lock) + isize, 0, 0); 44 t = netfs_trans_alloc(psb, path_len + sizeof(struct netfs_lock) + isize,
45 NETFS_TRANS_SINGLE_DST, 0);
45 if (!t) 46 if (!t)
46 goto err_out_exit; 47 goto err_out_exit;
47 48
diff --git a/drivers/staging/pohmelfs/net.c b/drivers/staging/pohmelfs/net.c
index c9b8540c1efe..11ecac026ca7 100644
--- a/drivers/staging/pohmelfs/net.c
+++ b/drivers/staging/pohmelfs/net.c
@@ -26,55 +26,6 @@
26 26
27#include "netfs.h" 27#include "netfs.h"
28 28
29static int pohmelfs_ftrans_size = 10240;
30static u32 *pohmelfs_ftrans;
31
32int pohmelfs_ftrans_init(void)
33{
34 pohmelfs_ftrans = vmalloc(pohmelfs_ftrans_size * 4);
35 if (!pohmelfs_ftrans)
36 return -ENOMEM;
37
38 return 0;
39}
40
41void pohmelfs_ftrans_exit(void)
42{
43 vfree(pohmelfs_ftrans);
44}
45
46void pohmelfs_ftrans_clean(u64 id)
47{
48 if (pohmelfs_ftrans) {
49 u32 i = id & 0xffffffff;
50 int idx = i % pohmelfs_ftrans_size;
51
52 pohmelfs_ftrans[idx] = 0;
53 }
54}
55
56void pohmelfs_ftrans_update(u64 id)
57{
58 if (pohmelfs_ftrans) {
59 u32 i = id & 0xffffffff;
60 int idx = i % pohmelfs_ftrans_size;
61
62 pohmelfs_ftrans[idx] = i;
63 }
64}
65
66int pohmelfs_ftrans_check(u64 id)
67{
68 if (pohmelfs_ftrans) {
69 u32 i = id & 0xffffffff;
70 int idx = i % pohmelfs_ftrans_size;
71
72 return (pohmelfs_ftrans[idx] == i);
73 }
74
75 return -1;
76}
77
78/* 29/*
79 * Async machinery lives here. 30 * Async machinery lives here.
80 * All commands being sent to server do _not_ require sync reply, 31 * All commands being sent to server do _not_ require sync reply,
@@ -450,8 +401,24 @@ static int pohmelfs_readdir_response(struct netfs_state *st)
450 if (err != -EEXIST) 401 if (err != -EEXIST)
451 goto err_out_put; 402 goto err_out_put;
452 } else { 403 } else {
404 struct dentry *dentry, *alias, *pd;
405
453 set_bit(NETFS_INODE_REMOTE_SYNCED, &npi->state); 406 set_bit(NETFS_INODE_REMOTE_SYNCED, &npi->state);
454 clear_bit(NETFS_INODE_OWNED, &npi->state); 407 clear_bit(NETFS_INODE_OWNED, &npi->state);
408
409 pd = d_find_alias(&parent->vfs_inode);
410 if (pd) {
411 str.hash = full_name_hash(str.name, str.len);
412 dentry = d_alloc(pd, &str);
413 if (dentry) {
414 alias = d_materialise_unique(dentry, &npi->vfs_inode);
415 if (alias)
416 dput(dentry);
417 }
418
419 dput(dentry);
420 dput(pd);
421 }
455 } 422 }
456 } 423 }
457out: 424out:
@@ -638,15 +605,12 @@ static int pohmelfs_transaction_response(struct netfs_state *st)
638 if (dst) { 605 if (dst) {
639 netfs_trans_remove_nolock(dst, st); 606 netfs_trans_remove_nolock(dst, st);
640 t = dst->trans; 607 t = dst->trans;
641
642 pohmelfs_ftrans_update(cmd->start);
643 } 608 }
644 mutex_unlock(&st->trans_lock); 609 mutex_unlock(&st->trans_lock);
645 610
646 if (!t) { 611 if (!t) {
647 int check = pohmelfs_ftrans_check(cmd->start); 612 printk("%s: failed to find transaction: start: %llu: id: %llu, size: %u, ext: %u.\n",
648 printk("%s: failed to find transaction: start: %llu: id: %llu, size: %u, ext: %u, double: %d.\n", 613 __func__, cmd->start, cmd->id, cmd->size, cmd->ext);
649 __func__, cmd->start, cmd->id, cmd->size, cmd->ext, check);
650 err = -EINVAL; 614 err = -EINVAL;
651 goto out; 615 goto out;
652 } 616 }
diff --git a/drivers/staging/pohmelfs/netfs.h b/drivers/staging/pohmelfs/netfs.h
index 2ff21ae5bb12..c78cfcb042fb 100644
--- a/drivers/staging/pohmelfs/netfs.h
+++ b/drivers/staging/pohmelfs/netfs.h
@@ -87,6 +87,7 @@ enum {
87 POHMELFS_FLAGS_DEL, /* Network state control message for DEL */ 87 POHMELFS_FLAGS_DEL, /* Network state control message for DEL */
88 POHMELFS_FLAGS_SHOW, /* Network state control message for SHOW */ 88 POHMELFS_FLAGS_SHOW, /* Network state control message for SHOW */
89 POHMELFS_FLAGS_CRYPTO, /* Crypto data control message */ 89 POHMELFS_FLAGS_CRYPTO, /* Crypto data control message */
90 POHMELFS_FLAGS_MODIFY, /* Network state modification message */
90}; 91};
91 92
92/* 93/*
@@ -116,16 +117,20 @@ struct pohmelfs_crypto
116 unsigned char data[0]; /* Algorithm string, key and IV */ 117 unsigned char data[0]; /* Algorithm string, key and IV */
117}; 118};
118 119
120#define POHMELFS_IO_PERM_READ (1<<0)
121#define POHMELFS_IO_PERM_WRITE (1<<1)
122
119/* 123/*
120 * Configuration command used to create table of different remote servers. 124 * Configuration command used to create table of different remote servers.
121 */ 125 */
122struct pohmelfs_ctl 126struct pohmelfs_ctl
123{ 127{
124 unsigned int idx; /* Config index */ 128 __u32 idx; /* Config index */
125 unsigned int type; /* Socket type */ 129 __u32 type; /* Socket type */
126 unsigned int proto; /* Socket protocol */ 130 __u32 proto; /* Socket protocol */
127 unsigned int addrlen; /* Size of the address */ 131 __u16 addrlen; /* Size of the address */
128 unsigned short unused; /* Align structure by 4 bytes */ 132 __u16 perm; /* IO permission */
133 __u16 prio; /* IO priority */
129 struct saddr addr; /* Remote server address */ 134 struct saddr addr; /* Remote server address */
130}; 135};
131 136
@@ -921,12 +926,6 @@ static inline void pohmelfs_mcache_put(struct pohmelfs_sb *psb,
921 pohmelfs_mcache_free(psb, m); 926 pohmelfs_mcache_free(psb, m);
922} 927}
923 928
924int pohmelfs_ftrans_init(void);
925void pohmelfs_ftrans_exit(void);
926void pohmelfs_ftrans_update(u64 id);
927int pohmelfs_ftrans_check(u64 id);
928void pohmelfs_ftrans_clean(u64 id);
929
930#endif /* __KERNEL__*/ 929#endif /* __KERNEL__*/
931 930
932#endif /* __NETFS_H */ 931#endif /* __NETFS_H */
diff --git a/drivers/staging/pohmelfs/trans.c b/drivers/staging/pohmelfs/trans.c
index bcb59425a21c..fef5f9bd6920 100644
--- a/drivers/staging/pohmelfs/trans.c
+++ b/drivers/staging/pohmelfs/trans.c
@@ -456,34 +456,25 @@ int netfs_trans_finish_send(struct netfs_trans *t, struct pohmelfs_sb *psb)
456 __func__, t, t->gen, t->iovec.iov_len, t->page_num, psb->active_state); 456 __func__, t, t->gen, t->iovec.iov_len, t->page_num, psb->active_state);
457#endif 457#endif
458 mutex_lock(&psb->state_lock); 458 mutex_lock(&psb->state_lock);
459 list_for_each_entry(c, &psb->state_list, config_entry) {
460 st = &c->state;
459 461
460 if ((t->flags & NETFS_TRANS_SINGLE_DST) && psb->active_state) { 462 if (t->flags & NETFS_TRANS_SINGLE_DST) {
461 st = &psb->active_state->state; 463 if (!(st->ctl.perm & POHMELFS_IO_PERM_READ))
462 464 continue;
463 err = -EPIPE; 465 } else {
464 if (netfs_state_poll(st) & POLLOUT) { 466 if (!(st->ctl.perm & POHMELFS_IO_PERM_WRITE))
465 err = netfs_trans_push_dst(t, st); 467 continue;
466 if (!err) {
467 err = netfs_trans_send(t, st);
468 if (err) {
469 netfs_trans_drop_last(t, st);
470 } else {
471 pohmelfs_switch_active(psb);
472 goto out;
473 }
474 }
475 } 468 }
476 pohmelfs_switch_active(psb);
477 }
478 469
479 list_for_each_entry(c, &psb->state_list, config_entry) { 470 if (psb->active_state && (psb->active_state->state.ctl.prio >= st->ctl.prio))
480 st = &c->state; 471 st = &psb->active_state->state;
481 472
482 err = netfs_trans_push(t, st); 473 err = netfs_trans_push(t, st);
483 if (!err && (t->flags & NETFS_TRANS_SINGLE_DST)) 474 if (!err && (t->flags & NETFS_TRANS_SINGLE_DST))
484 break; 475 break;
485 } 476 }
486out: 477
487 mutex_unlock(&psb->state_lock); 478 mutex_unlock(&psb->state_lock);
488#if 0 479#if 0
489 dprintk("%s: fully sent t: %p, gen: %u, size: %u, page_num: %u, err: %d.\n", 480 dprintk("%s: fully sent t: %p, gen: %u, size: %u, page_num: %u, err: %d.\n",
@@ -501,8 +492,6 @@ int netfs_trans_finish(struct netfs_trans *t, struct pohmelfs_sb *psb)
501 492
502 t->gen = atomic_inc_return(&psb->trans_gen); 493 t->gen = atomic_inc_return(&psb->trans_gen);
503 494
504 pohmelfs_ftrans_clean(t->gen);
505
506 cmd->size = t->iovec.iov_len - sizeof(struct netfs_cmd) + 495 cmd->size = t->iovec.iov_len - sizeof(struct netfs_cmd) +
507 t->attached_size + t->attached_pages * sizeof(struct netfs_cmd); 496 t->attached_size + t->attached_pages * sizeof(struct netfs_cmd);
508 cmd->cmd = NETFS_TRANS; 497 cmd->cmd = NETFS_TRANS;
diff --git a/drivers/staging/rt2860/rt_main_dev.c b/drivers/staging/rt2860/rt_main_dev.c
index cf17bcdd7333..6c4396f0903b 100644
--- a/drivers/staging/rt2860/rt_main_dev.c
+++ b/drivers/staging/rt2860/rt_main_dev.c
@@ -722,6 +722,20 @@ err:
722 return (-1); 722 return (-1);
723} /* End of rt28xx_open */ 723} /* End of rt28xx_open */
724 724
725static const struct net_device_ops rt2860_netdev_ops = {
726 .ndo_open = MainVirtualIF_open,
727 .ndo_stop = MainVirtualIF_close,
728 .ndo_do_ioctl = rt28xx_ioctl,
729 .ndo_get_stats = RT28xx_get_ether_stats,
730 .ndo_validate_addr = NULL,
731 .ndo_set_mac_address = eth_mac_addr,
732 .ndo_change_mtu = eth_change_mtu,
733#ifdef IKANOS_VX_1X0
734 .ndo_start_xmit = IKANOS_DataFramesTx,
735#else
736 .ndo_start_xmit = rt28xx_send_packets,
737#endif
738};
725 739
726/* Must not be called for mdev and apdev */ 740/* Must not be called for mdev and apdev */
727static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER pAd) 741static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER pAd)
@@ -733,11 +747,6 @@ static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER p
733 747
734 748
735 //ether_setup(dev); 749 //ether_setup(dev);
736 dev->hard_start_xmit = rt28xx_send_packets;
737
738#ifdef IKANOS_VX_1X0
739 dev->hard_start_xmit = IKANOS_DataFramesTx;
740#endif // IKANOS_VX_1X0 //
741 750
742#ifdef CONFIG_STA_SUPPORT 751#ifdef CONFIG_STA_SUPPORT
743#if WIRELESS_EXT >= 12 752#if WIRELESS_EXT >= 12
@@ -760,12 +769,8 @@ static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER p
760#if WIRELESS_EXT < 21 769#if WIRELESS_EXT < 21
761 dev->get_wireless_stats = rt28xx_get_wireless_stats; 770 dev->get_wireless_stats = rt28xx_get_wireless_stats;
762#endif 771#endif
763 dev->get_stats = RT28xx_get_ether_stats;
764 dev->open = MainVirtualIF_open; //rt28xx_open;
765 dev->stop = MainVirtualIF_close; //rt28xx_close;
766 dev->priv_flags = INT_MAIN; 772 dev->priv_flags = INT_MAIN;
767 dev->do_ioctl = rt28xx_ioctl; 773 dev->netdev_ops = &rt2860_netdev_ops;
768 dev->validate_addr = NULL;
769 // find available device name 774 // find available device name
770 for (i = 0; i < 8; i++) 775 for (i = 0; i < 8; i++)
771 { 776 {
diff --git a/drivers/staging/rt2870/rt2870.h b/drivers/staging/rt2870/rt2870.h
index 5dd15aac9ce7..a69cf338e498 100644
--- a/drivers/staging/rt2870/rt2870.h
+++ b/drivers/staging/rt2870/rt2870.h
@@ -96,6 +96,7 @@
96 {USB_DEVICE(0x0DF6,0x002B)}, /* Sitecom */ \ 96 {USB_DEVICE(0x0DF6,0x002B)}, /* Sitecom */ \
97 {USB_DEVICE(0x0DF6,0x002C)}, /* Sitecom */ \ 97 {USB_DEVICE(0x0DF6,0x002C)}, /* Sitecom */ \
98 {USB_DEVICE(0x0DF6,0x002D)}, /* Sitecom */ \ 98 {USB_DEVICE(0x0DF6,0x002D)}, /* Sitecom */ \
99 {USB_DEVICE(0x0DF6,0x0039)}, /* Sitecom */ \
99 {USB_DEVICE(0x14B2,0x3C06)}, /* Conceptronic */ \ 100 {USB_DEVICE(0x14B2,0x3C06)}, /* Conceptronic */ \
100 {USB_DEVICE(0x14B2,0x3C28)}, /* Conceptronic */ \ 101 {USB_DEVICE(0x14B2,0x3C28)}, /* Conceptronic */ \
101 {USB_DEVICE(0x2019,0xED06)}, /* Planex Communications, Inc. */ \ 102 {USB_DEVICE(0x2019,0xED06)}, /* Planex Communications, Inc. */ \
@@ -144,6 +145,7 @@
144 {USB_DEVICE(0x0789,0x0162)}, /* Logitec */ \ 145 {USB_DEVICE(0x0789,0x0162)}, /* Logitec */ \
145 {USB_DEVICE(0x0789,0x0163)}, /* Logitec */ \ 146 {USB_DEVICE(0x0789,0x0163)}, /* Logitec */ \
146 {USB_DEVICE(0x0789,0x0164)}, /* Logitec */ \ 147 {USB_DEVICE(0x0789,0x0164)}, /* Logitec */ \
148 {USB_DEVICE(0x7392,0x7717)}, /* Edimax */ \
147 { }/* Terminating entry */ \ 149 { }/* Terminating entry */ \
148} 150}
149 151
diff --git a/drivers/staging/rt2870/rt_main_dev.c b/drivers/staging/rt2870/rt_main_dev.c
index 313ecea0bfa8..48ad41136d0f 100644
--- a/drivers/staging/rt2870/rt_main_dev.c
+++ b/drivers/staging/rt2870/rt_main_dev.c
@@ -855,6 +855,20 @@ err:
855 return (-1); 855 return (-1);
856} /* End of rt28xx_open */ 856} /* End of rt28xx_open */
857 857
858static const struct net_device_ops rt2870_netdev_ops = {
859 .ndo_open = MainVirtualIF_open,
860 .ndo_stop = MainVirtualIF_close,
861 .ndo_do_ioctl = rt28xx_ioctl,
862 .ndo_get_stats = RT28xx_get_ether_stats,
863 .ndo_validate_addr = NULL,
864 .ndo_set_mac_address = eth_mac_addr,
865 .ndo_change_mtu = eth_change_mtu,
866#ifdef IKANOS_VX_1X0
867 .ndo_start_xmit = IKANOS_DataFramesTx,
868#else
869 .ndo_start_xmit = rt28xx_send_packets,
870#endif
871};
858 872
859/* Must not be called for mdev and apdev */ 873/* Must not be called for mdev and apdev */
860static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER pAd) 874static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER pAd)
@@ -866,12 +880,6 @@ static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER p
866 880
867 881
868 //ether_setup(dev); 882 //ether_setup(dev);
869 dev->hard_start_xmit = rt28xx_send_packets;
870
871#ifdef IKANOS_VX_1X0
872 dev->hard_start_xmit = IKANOS_DataFramesTx;
873#endif // IKANOS_VX_1X0 //
874
875// dev->set_multicast_list = ieee80211_set_multicast_list; 883// dev->set_multicast_list = ieee80211_set_multicast_list;
876// dev->change_mtu = ieee80211_change_mtu; 884// dev->change_mtu = ieee80211_change_mtu;
877#ifdef CONFIG_STA_SUPPORT 885#ifdef CONFIG_STA_SUPPORT
@@ -895,16 +903,10 @@ static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER p
895#if WIRELESS_EXT < 21 903#if WIRELESS_EXT < 21
896 dev->get_wireless_stats = rt28xx_get_wireless_stats; 904 dev->get_wireless_stats = rt28xx_get_wireless_stats;
897#endif 905#endif
898 dev->get_stats = RT28xx_get_ether_stats;
899 dev->open = MainVirtualIF_open; //rt28xx_open;
900 dev->stop = MainVirtualIF_close; //rt28xx_close;
901// dev->uninit = ieee80211_if_reinit; 906// dev->uninit = ieee80211_if_reinit;
902// dev->destructor = ieee80211_if_free; 907// dev->destructor = ieee80211_if_free;
903 dev->priv_flags = INT_MAIN; 908 dev->priv_flags = INT_MAIN;
904 dev->do_ioctl = rt28xx_ioctl; 909 dev->netdev_ops = &rt2870_netdev_ops;
905#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
906 dev->validate_addr = NULL;
907#endif
908 // find available device name 910 // find available device name
909 for (i = 0; i < 8; i++) 911 for (i = 0; i < 8; i++)
910 { 912 {
diff --git a/drivers/staging/rt3070/rt_main_dev.c b/drivers/staging/rt3070/rt_main_dev.c
index c000646286e6..81f769cf1096 100644
--- a/drivers/staging/rt3070/rt_main_dev.c
+++ b/drivers/staging/rt3070/rt_main_dev.c
@@ -436,7 +436,6 @@ static int rt28xx_init(IN struct net_device *net_dev)
436// OID_SET_HT_PHYMODE SetHT; 436// OID_SET_HT_PHYMODE SetHT;
437// WPDMA_GLO_CFG_STRUC GloCfg; 437// WPDMA_GLO_CFG_STRUC GloCfg;
438 UINT32 MacCsr0 = 0; 438 UINT32 MacCsr0 = 0;
439 UINT32 MacValue = 0;
440 439
441#ifdef RT2870 440#ifdef RT2870
442#ifdef INF_AMAZON_SE 441#ifdef INF_AMAZON_SE
@@ -849,6 +848,20 @@ err:
849 return (-1); 848 return (-1);
850} /* End of rt28xx_open */ 849} /* End of rt28xx_open */
851 850
851static const struct net_device_ops rt3070_netdev_ops = {
852 .ndo_open = MainVirtualIF_open,
853 .ndo_stop = MainVirtualIF_close,
854 .ndo_do_ioctl = rt28xx_ioctl,
855 .ndo_get_stats = RT28xx_get_ether_stats,
856 .ndo_validate_addr = NULL,
857 .ndo_set_mac_address = eth_mac_addr,
858 .ndo_change_mtu = eth_change_mtu,
859#ifdef IKANOS_VX_1X0
860 .ndo_start_xmit = IKANOS_DataFramesTx,
861#else
862 .ndo_start_xmit = rt28xx_send_packets,
863#endif
864};
852 865
853/* Must not be called for mdev and apdev */ 866/* Must not be called for mdev and apdev */
854static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER pAd) 867static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER pAd)
@@ -860,12 +873,6 @@ static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER p
860 873
861 874
862 //ether_setup(dev); 875 //ether_setup(dev);
863 dev->hard_start_xmit = rt28xx_send_packets;
864
865#ifdef IKANOS_VX_1X0
866 dev->hard_start_xmit = IKANOS_DataFramesTx;
867#endif // IKANOS_VX_1X0 //
868
869// dev->set_multicast_list = ieee80211_set_multicast_list; 876// dev->set_multicast_list = ieee80211_set_multicast_list;
870// dev->change_mtu = ieee80211_change_mtu; 877// dev->change_mtu = ieee80211_change_mtu;
871#ifdef CONFIG_STA_SUPPORT 878#ifdef CONFIG_STA_SUPPORT
@@ -889,16 +896,10 @@ static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER p
889#if WIRELESS_EXT < 21 896#if WIRELESS_EXT < 21
890 dev->get_wireless_stats = rt28xx_get_wireless_stats; 897 dev->get_wireless_stats = rt28xx_get_wireless_stats;
891#endif 898#endif
892 dev->get_stats = RT28xx_get_ether_stats;
893 dev->open = MainVirtualIF_open; //rt28xx_open;
894 dev->stop = MainVirtualIF_close; //rt28xx_close;
895// dev->uninit = ieee80211_if_reinit; 899// dev->uninit = ieee80211_if_reinit;
896// dev->destructor = ieee80211_if_free; 900// dev->destructor = ieee80211_if_free;
897 dev->priv_flags = INT_MAIN; 901 dev->priv_flags = INT_MAIN;
898 dev->do_ioctl = rt28xx_ioctl; 902 dev->netdev_ops = &rt3070_netdev_ops;
899#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
900 dev->validate_addr = NULL;
901#endif
902 // find available device name 903 // find available device name
903 for (i = 0; i < 8; i++) 904 for (i = 0; i < 8; i++)
904 { 905 {
diff --git a/drivers/staging/rtl8187se/r8180.h b/drivers/staging/rtl8187se/r8180.h
index 12215fc61ddc..db446b7e2e08 100644
--- a/drivers/staging/rtl8187se/r8180.h
+++ b/drivers/staging/rtl8187se/r8180.h
@@ -19,7 +19,7 @@
19#define R8180H 19#define R8180H
20 20
21 21
22#define RTL8180_MODULE_NAME "rtl8180" 22#define RTL8180_MODULE_NAME "r8180"
23#define DMESG(x,a...) printk(KERN_INFO RTL8180_MODULE_NAME ": " x "\n", ## a) 23#define DMESG(x,a...) printk(KERN_INFO RTL8180_MODULE_NAME ": " x "\n", ## a)
24#define DMESGW(x,a...) printk(KERN_WARNING RTL8180_MODULE_NAME ": WW:" x "\n", ## a) 24#define DMESGW(x,a...) printk(KERN_WARNING RTL8180_MODULE_NAME ": WW:" x "\n", ## a)
25#define DMESGE(x,a...) printk(KERN_WARNING RTL8180_MODULE_NAME ": EE:" x "\n", ## a) 25#define DMESGE(x,a...) printk(KERN_WARNING RTL8180_MODULE_NAME ": EE:" x "\n", ## a)
diff --git a/drivers/staging/rtl8187se/r8180_core.c b/drivers/staging/rtl8187se/r8180_core.c
index 6ecd12de4296..e10413cee0df 100644
--- a/drivers/staging/rtl8187se/r8180_core.c
+++ b/drivers/staging/rtl8187se/r8180_core.c
@@ -640,11 +640,9 @@ void rtl8180_proc_init_one(struct net_device *dev)
640{ 640{
641 struct proc_dir_entry *e; 641 struct proc_dir_entry *e;
642 struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 642 struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev);
643 priv->dir_dev = create_proc_entry(dev->name, 643 priv->dir_dev = rtl8180_proc;
644 S_IFDIR | S_IRUGO | S_IXUGO,
645 rtl8180_proc);
646 if (!priv->dir_dev) { 644 if (!priv->dir_dev) {
647 DMESGE("Unable to initialize /proc/net/rtl8180/%s\n", 645 DMESGE("Unable to initialize /proc/net/r8180/%s\n",
648 dev->name); 646 dev->name);
649 return; 647 return;
650 } 648 }
@@ -654,7 +652,7 @@ void rtl8180_proc_init_one(struct net_device *dev)
654 652
655 if (!e) { 653 if (!e) {
656 DMESGE("Unable to initialize " 654 DMESGE("Unable to initialize "
657 "/proc/net/rtl8180/%s/stats-hw\n", 655 "/proc/net/r8180/%s/stats-hw\n",
658 dev->name); 656 dev->name);
659 } 657 }
660 658
@@ -663,7 +661,7 @@ void rtl8180_proc_init_one(struct net_device *dev)
663 661
664 if (!e) { 662 if (!e) {
665 DMESGE("Unable to initialize " 663 DMESGE("Unable to initialize "
666 "/proc/net/rtl8180/%s/stats-rx\n", 664 "/proc/net/r8180/%s/stats-rx\n",
667 dev->name); 665 dev->name);
668 } 666 }
669 667
@@ -673,7 +671,7 @@ void rtl8180_proc_init_one(struct net_device *dev)
673 671
674 if (!e) { 672 if (!e) {
675 DMESGE("Unable to initialize " 673 DMESGE("Unable to initialize "
676 "/proc/net/rtl8180/%s/stats-tx\n", 674 "/proc/net/r8180/%s/stats-tx\n",
677 dev->name); 675 dev->name);
678 } 676 }
679 #if 0 677 #if 0
@@ -702,7 +700,7 @@ void rtl8180_proc_init_one(struct net_device *dev)
702 700
703 if (!e) { 701 if (!e) {
704 DMESGE("Unable to initialize " 702 DMESGE("Unable to initialize "
705 "/proc/net/rtl8180/%s/registers\n", 703 "/proc/net/r8180/%s/registers\n",
706 dev->name); 704 dev->name);
707 } 705 }
708} 706}
@@ -977,13 +975,6 @@ void check_tx_ring(struct net_device *dev, int pri)
977 *tmp & (1<<15)? "ok": "err", *(tmp+4)); 975 *tmp & (1<<15)? "ok": "err", *(tmp+4));
978 } 976 }
979 977
980 DMESG("nic at %d",
981 (nic-nicbegin) / 8 /4);
982 DMESG("tail at %d", ((int)tail - (int)begin) /8 /4);
983 DMESG("head at %d", ((int)head - (int)begin) /8 /4);
984 DMESG("check free desc returns %d", check_nic_enought_desc(dev,pri));
985 DMESG("free desc is %d\n", get_curr_tx_free_desc(dev,pri));
986 //rtl8180_reset(dev);
987 return; 978 return;
988} 979}
989 980
@@ -1736,17 +1727,7 @@ short alloc_tx_desc_ring(struct net_device *dev, int bufsize, int count,
1736 * descriptor's buffer must be 256 byte aligned 1727 * descriptor's buffer must be 256 byte aligned
1737 * we shouldn't be here, since we set DMA mask ! 1728 * we shouldn't be here, since we set DMA mask !
1738 */ 1729 */
1739 DMESGW("Fixing TX alignment"); 1730 WARN(1, "DMA buffer is not aligned\n");
1740 desc = (u32*)((u8*)desc + 256);
1741#if (defined(CONFIG_HIGHMEM64G) || defined(CONFIG_64BIT_PHYS_ADDR))
1742 desc = (u32*)((u64)desc &~ 0xff);
1743 dma_desc = (dma_addr_t)((u8*)dma_desc + 256);
1744 dma_desc = (dma_addr_t)((u64)dma_desc &~ 0xff);
1745#else
1746 desc = (u32*)((u32)desc &~ 0xff);
1747 dma_desc = (dma_addr_t)((u8*)dma_desc + 256);
1748 dma_desc = (dma_addr_t)((u32)dma_desc &~ 0xff);
1749#endif
1750 } 1731 }
1751 tmp=desc; 1732 tmp=desc;
1752 for (i=0;i<count;i++) 1733 for (i=0;i<count;i++)
@@ -1984,18 +1965,7 @@ short alloc_rx_desc_ring(struct net_device *dev, u16 bufsize, int count)
1984 * descriptor's buffer must be 256 byte aligned 1965 * descriptor's buffer must be 256 byte aligned
1985 * should never happen since we specify the DMA mask 1966 * should never happen since we specify the DMA mask
1986 */ 1967 */
1987 1968 WARN(1, "DMA buffer is not aligned\n");
1988 DMESGW("Fixing RX alignment");
1989 desc = (u32*)((u8*)desc + 256);
1990#if (defined(CONFIG_HIGHMEM64G) || defined(CONFIG_64BIT_PHYS_ADDR))
1991 desc = (u32*)((u64)desc &~ 0xff);
1992 dma_desc = (dma_addr_t)((u8*)dma_desc + 256);
1993 dma_desc = (dma_addr_t)((u64)dma_desc &~ 0xff);
1994#else
1995 desc = (u32*)((u32)desc &~ 0xff);
1996 dma_desc = (dma_addr_t)((u8*)dma_desc + 256);
1997 dma_desc = (dma_addr_t)((u32)dma_desc &~ 0xff);
1998#endif
1999 } 1969 }
2000 1970
2001 priv->rxring=desc; 1971 priv->rxring=desc;
diff --git a/drivers/staging/slicoss/README b/drivers/staging/slicoss/README
index 2d5b1127ce51..70f49099c065 100644
--- a/drivers/staging/slicoss/README
+++ b/drivers/staging/slicoss/README
@@ -10,7 +10,36 @@ TODO:
10 - move firmware loading to request_firmware() 10 - move firmware loading to request_firmware()
11 - remove direct memory access of structures 11 - remove direct memory access of structures
12 - any remaining sparse and checkpatch.pl warnings 12 - any remaining sparse and checkpatch.pl warnings
13 - any netdev recommended changes 13
14 - use net_device_ops
15 - use dev->stats rather than adapter->stats
16 - don't cast netdev_priv it is already void
17 - use compare_ether_addr
18 - GET RID OF MACROS
19 - work on all architectures
20 - without CONFIG_X86_64 confusion
21 - do 64 bit correctly
22 - don't depend on order of union
23 - get rid of ASSERT(), use BUG() instead but only where necessary
24 looks like most aren't really useful
25 - no new SIOCDEVPRIVATE ioctl allowed
26 - don't use module_param for configuring interrupt mitigation
27 use ethtool instead
28 - reorder code to elminate use of forward declarations
29 - don't keep private linked list of drivers.
30 - remove all the gratiutous debug infrastructure
31 - use PCI_DEVICE()
32 - do ethtool correctly using ethtool_ops
33 - NAPI?
34 - wasted overhead of extra stats
35 - state variables for things that are
36 easily availble and shouldn't be kept in card structure, cardnum, ...
37 slotnumber, events, ...
38 - get rid of slic_spinlock wrapper
39 - volatile == bad design => bad code
40 - locking too fine grained, not designed just throw more locks
41 at problem
42
14 43
15Please send patches to: 44Please send patches to:
16 Greg Kroah-Hartman <gregkh@suse.de> 45 Greg Kroah-Hartman <gregkh@suse.de>
diff --git a/drivers/staging/slicoss/slicoss.c b/drivers/staging/slicoss/slicoss.c
index 948156348478..6f5d0bff4358 100644
--- a/drivers/staging/slicoss/slicoss.c
+++ b/drivers/staging/slicoss/slicoss.c
@@ -345,6 +345,19 @@ static void slic_init_adapter(struct net_device *netdev,
345 return; 345 return;
346} 346}
347 347
348static const struct net_device_ops slic_netdev_ops = {
349 .ndo_open = slic_entry_open,
350 .ndo_stop = slic_entry_halt,
351 .ndo_start_xmit = slic_xmit_start,
352 .ndo_do_ioctl = slic_ioctl,
353 .ndo_set_mac_address = slic_mac_set_address,
354 .ndo_get_stats = slic_get_stats,
355 .ndo_set_multicast_list = slic_mcast_set_list,
356 .ndo_validate_addr = eth_validate_addr,
357 .ndo_set_mac_address = eth_mac_addr,
358 .ndo_change_mtu = eth_change_mtu,
359};
360
348static int __devinit slic_entry_probe(struct pci_dev *pcidev, 361static int __devinit slic_entry_probe(struct pci_dev *pcidev,
349 const struct pci_device_id *pci_tbl_entry) 362 const struct pci_device_id *pci_tbl_entry)
350{ 363{
@@ -442,13 +455,7 @@ static int __devinit slic_entry_probe(struct pci_dev *pcidev,
442 455
443 netdev->base_addr = (unsigned long)adapter->memorybase; 456 netdev->base_addr = (unsigned long)adapter->memorybase;
444 netdev->irq = adapter->irq; 457 netdev->irq = adapter->irq;
445 netdev->open = slic_entry_open; 458 netdev->netdev_ops = &slic_netdev_ops;
446 netdev->stop = slic_entry_halt;
447 netdev->hard_start_xmit = slic_xmit_start;
448 netdev->do_ioctl = slic_ioctl;
449 netdev->set_mac_address = slic_mac_set_address;
450 netdev->get_stats = slic_get_stats;
451 netdev->set_multicast_list = slic_mcast_set_list;
452 459
453 slic_debug_adapter_create(adapter); 460 slic_debug_adapter_create(adapter);
454 461
@@ -1260,7 +1267,7 @@ static int slic_mcast_add_list(struct adapter *adapter, char *address)
1260 } 1267 }
1261 1268
1262 /* Doesn't already exist. Allocate a structure to hold it */ 1269 /* Doesn't already exist. Allocate a structure to hold it */
1263 mcaddr = kmalloc(sizeof(struct mcast_address), GFP_KERNEL); 1270 mcaddr = kmalloc(sizeof(struct mcast_address), GFP_ATOMIC);
1264 if (mcaddr == NULL) 1271 if (mcaddr == NULL)
1265 return 1; 1272 return 1;
1266 1273
@@ -2284,7 +2291,7 @@ static u32 slic_card_locate(struct adapter *adapter)
2284 } 2291 }
2285 if (!physcard) { 2292 if (!physcard) {
2286 /* no structure allocated for this physical card yet */ 2293 /* no structure allocated for this physical card yet */
2287 physcard = kzalloc(sizeof(struct physcard), GFP_KERNEL); 2294 physcard = kzalloc(sizeof(struct physcard), GFP_ATOMIC);
2288 ASSERT(physcard); 2295 ASSERT(physcard);
2289 2296
2290 physcard->next = slic_global.phys_card; 2297 physcard->next = slic_global.phys_card;
diff --git a/drivers/staging/stlc45xx/Kconfig b/drivers/staging/stlc45xx/Kconfig
index 8d3f46f190e8..947fb75a9c68 100644
--- a/drivers/staging/stlc45xx/Kconfig
+++ b/drivers/staging/stlc45xx/Kconfig
@@ -1,6 +1,6 @@
1config STLC45XX 1config STLC45XX
2 tristate "stlc4550/4560 support" 2 tristate "stlc4550/4560 support"
3 depends on MAC80211 && WLAN_80211 && SPI_MASTER 3 depends on MAC80211 && WLAN_80211 && SPI_MASTER && GENERIC_HARDIRQS
4 ---help--- 4 ---help---
5 This is a driver for stlc4550 and stlc4560 chipsets. 5 This is a driver for stlc4550 and stlc4560 chipsets.
6 6
diff --git a/drivers/staging/sxg/sxg.c b/drivers/staging/sxg/sxg.c
index 891f6e334672..076b3f7d39eb 100644
--- a/drivers/staging/sxg/sxg.c
+++ b/drivers/staging/sxg/sxg.c
@@ -322,6 +322,8 @@ int sxg_add_msi_isr(struct adapter_t *adapter)
322 int ret,i; 322 int ret,i;
323 323
324 if (!adapter->intrregistered) { 324 if (!adapter->intrregistered) {
325 spin_unlock_irqrestore(&sxg_global.driver_lock,
326 sxg_global.flags);
325 for (i=0; i<adapter->nr_msix_entries; i++) { 327 for (i=0; i<adapter->nr_msix_entries; i++) {
326 ret = request_irq (adapter->msi_entries[i].vector, 328 ret = request_irq (adapter->msi_entries[i].vector,
327 sxg_isr, 329 sxg_isr,
@@ -329,6 +331,8 @@ int sxg_add_msi_isr(struct adapter_t *adapter)
329 adapter->netdev->name, 331 adapter->netdev->name,
330 adapter->netdev); 332 adapter->netdev);
331 if (ret) { 333 if (ret) {
334 spin_lock_irqsave(&sxg_global.driver_lock,
335 sxg_global.flags);
332 DBG_ERROR("sxg: MSI-X request_irq (%s) " 336 DBG_ERROR("sxg: MSI-X request_irq (%s) "
333 "FAILED [%x]\n", adapter->netdev->name, 337 "FAILED [%x]\n", adapter->netdev->name,
334 ret); 338 ret);
@@ -336,6 +340,7 @@ int sxg_add_msi_isr(struct adapter_t *adapter)
336 } 340 }
337 } 341 }
338 } 342 }
343 spin_lock_irqsave(&sxg_global.driver_lock, sxg_global.flags);
339 adapter->msi_enabled = TRUE; 344 adapter->msi_enabled = TRUE;
340 adapter->intrregistered = 1; 345 adapter->intrregistered = 1;
341 adapter->IntRegistered = TRUE; 346 adapter->IntRegistered = TRUE;
@@ -896,6 +901,22 @@ static inline int sxg_read_config(struct adapter_t *adapter)
896 return status; 901 return status;
897} 902}
898 903
904static const struct net_device_ops sxg_netdev_ops = {
905 .ndo_open = sxg_entry_open,
906 .ndo_stop = sxg_entry_halt,
907 .ndo_start_xmit = sxg_send_packets,
908 .ndo_do_ioctl = sxg_ioctl,
909 .ndo_change_mtu = sxg_change_mtu,
910 .ndo_get_stats = sxg_get_stats,
911 .ndo_set_multicast_list = sxg_mcast_set_list,
912 .ndo_validate_addr = eth_validate_addr,
913#if XXXTODO
914 .ndo_set_mac_address = sxg_mac_set_address,
915#else
916 .ndo_set_mac_address = eth_mac_addr,
917#endif
918};
919
899static int sxg_entry_probe(struct pci_dev *pcidev, 920static int sxg_entry_probe(struct pci_dev *pcidev,
900 const struct pci_device_id *pci_tbl_entry) 921 const struct pci_device_id *pci_tbl_entry)
901{ 922{
@@ -1095,16 +1116,7 @@ static int sxg_entry_probe(struct pci_dev *pcidev,
1095 1116
1096 netdev->base_addr = (unsigned long)adapter->base_addr; 1117 netdev->base_addr = (unsigned long)adapter->base_addr;
1097 netdev->irq = adapter->irq; 1118 netdev->irq = adapter->irq;
1098 netdev->open = sxg_entry_open; 1119 netdev->netdev_ops = &sxg_netdev_ops;
1099 netdev->stop = sxg_entry_halt;
1100 netdev->hard_start_xmit = sxg_send_packets;
1101 netdev->do_ioctl = sxg_ioctl;
1102 netdev->change_mtu = sxg_change_mtu;
1103#if XXXTODO
1104 netdev->set_mac_address = sxg_mac_set_address;
1105#endif
1106 netdev->get_stats = sxg_get_stats;
1107 netdev->set_multicast_list = sxg_mcast_set_list;
1108 SET_ETHTOOL_OPS(netdev, &sxg_nic_ethtool_ops); 1120 SET_ETHTOOL_OPS(netdev, &sxg_nic_ethtool_ops);
1109 netdev->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; 1121 netdev->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
1110 err = sxg_set_interrupt_capability(adapter); 1122 err = sxg_set_interrupt_capability(adapter);
@@ -2247,6 +2259,8 @@ static int sxg_entry_open(struct net_device *dev)
2247 DBG_ERROR("sxg: %s EXIT\n", __func__); 2259 DBG_ERROR("sxg: %s EXIT\n", __func__);
2248 2260
2249 spin_unlock_irqrestore(&sxg_global.driver_lock, sxg_global.flags); 2261 spin_unlock_irqrestore(&sxg_global.driver_lock, sxg_global.flags);
2262 mod_timer(&adapter->watchdog_timer, jiffies);
2263
2250 return STATUS_SUCCESS; 2264 return STATUS_SUCCESS;
2251} 2265}
2252 2266
@@ -2568,6 +2582,7 @@ static int sxg_dumb_sgl(struct sxg_x64_sgl *pSgl,
2568 u64 phys_addr; 2582 u64 phys_addr;
2569 unsigned long flags; 2583 unsigned long flags;
2570 unsigned long queue_id=0; 2584 unsigned long queue_id=0;
2585 int offload_cksum = 0;
2571 2586
2572 SXG_TRACE(TRACE_SXG, SxgTraceBuffer, TRACE_NOISY, "DumbSgl", 2587 SXG_TRACE(TRACE_SXG, SxgTraceBuffer, TRACE_NOISY, "DumbSgl",
2573 pSgl, SxgSgl, 0, 0); 2588 pSgl, SxgSgl, 0, 0);
@@ -2606,7 +2621,11 @@ static int sxg_dumb_sgl(struct sxg_x64_sgl *pSgl,
2606 struct iphdr *ip; 2621 struct iphdr *ip;
2607 2622
2608 ip = ip_hdr(skb); 2623 ip = ip_hdr(skb);
2609 if ((ip->protocol == IPPROTO_TCP)&&(DataLength >= sizeof( 2624 if (ip->protocol == IPPROTO_TCP)
2625 offload_cksum = 1;
2626 if (!offload_cksum || !tcp_hdr(skb))
2627 queue_id = 0;
2628 else if (offload_cksum && (DataLength >= sizeof(
2610 struct tcphdr))){ 2629 struct tcphdr))){
2611 queue_id = ((ntohs(tcp_hdr(skb)->dest) == ISCSI_PORT) ? 2630 queue_id = ((ntohs(tcp_hdr(skb)->dest) == ISCSI_PORT) ?
2612 (ntohs (tcp_hdr(skb)->source) & 2631 (ntohs (tcp_hdr(skb)->source) &
@@ -2615,8 +2634,11 @@ static int sxg_dumb_sgl(struct sxg_x64_sgl *pSgl,
2615 SXG_LARGE_SEND_QUEUE_MASK)); 2634 SXG_LARGE_SEND_QUEUE_MASK));
2616 } 2635 }
2617 } else if (skb->protocol == htons(ETH_P_IPV6)) { 2636 } else if (skb->protocol == htons(ETH_P_IPV6)) {
2618 if ((ipv6_hdr(skb)->nexthdr == IPPROTO_TCP) && (DataLength >= 2637 if (ipv6_hdr(skb)->nexthdr == IPPROTO_TCP)
2619 sizeof(struct tcphdr)) ) { 2638 offload_cksum = 1;
2639 if (!offload_cksum || !tcp_hdr(skb))
2640 queue_id = 0;
2641 else if (offload_cksum && (DataLength>=sizeof(struct tcphdr))){
2620 queue_id = ((ntohs(tcp_hdr(skb)->dest) == ISCSI_PORT) ? 2642 queue_id = ((ntohs(tcp_hdr(skb)->dest) == ISCSI_PORT) ?
2621 (ntohs (tcp_hdr(skb)->source) & 2643 (ntohs (tcp_hdr(skb)->source) &
2622 SXG_LARGE_SEND_QUEUE_MASK): 2644 SXG_LARGE_SEND_QUEUE_MASK):
@@ -2645,23 +2667,38 @@ static int sxg_dumb_sgl(struct sxg_x64_sgl *pSgl,
2645 } 2667 }
2646 SXG_TRACE(TRACE_SXG, SxgTraceBuffer, TRACE_NOISY, "DumbCmd", 2668 SXG_TRACE(TRACE_SXG, SxgTraceBuffer, TRACE_NOISY, "DumbCmd",
2647 XmtCmd, XmtRingInfo->Head, XmtRingInfo->Tail, 0); 2669 XmtCmd, XmtRingInfo->Head, XmtRingInfo->Tail, 0);
2648 /* Update stats */ 2670 memset(XmtCmd, '\0', sizeof(*XmtCmd));
2649 adapter->stats.tx_packets++; 2671 XmtCmd->SgEntries = 1;
2650 adapter->stats.tx_bytes += DataLength; 2672 XmtCmd->Flags = 0;
2651#if XXXTODO /* Stats stuff */ 2673 if (skb->ip_summed == CHECKSUM_PARTIAL) {
2652 if (SXG_MULTICAST_PACKET(EtherHdr)) { 2674 /*
2653 if (SXG_BROADCAST_PACKET(EtherHdr)) { 2675 * We need to set the Checkum in IP header to 0. This is
2654 adapter->Stats.DumbXmtBcastPkts++; 2676 * required by hardware.
2655 adapter->Stats.DumbXmtBcastBytes += DataLength; 2677 */
2678 if (offload_cksum) {
2679 ip_hdr(skb)->check = 0x0;
2680 XmtCmd->CsumFlags.Flags |= SXG_SLOWCMD_CSUM_IP;
2681 XmtCmd->CsumFlags.Flags |= SXG_SLOWCMD_CSUM_TCP;
2682 /*
2683 * Dont know if length will require a change in
2684 * case of VLAN
2685 */
2686 XmtCmd->CsumFlags.MacLen = ETH_HLEN;
2687 XmtCmd->CsumFlags.IpHl = skb_network_header_len(skb) >>
2688 SXG_NW_HDR_LEN_SHIFT;
2656 } else { 2689 } else {
2657 adapter->Stats.DumbXmtMcastPkts++; 2690 if (skb_checksum_help(skb)){
2658 adapter->Stats.DumbXmtMcastBytes += DataLength; 2691 printk(KERN_EMERG "Dropped UDP packet for"
2692 " incorrect checksum calculation\n");
2693 if (XmtCmd)
2694 SXG_ABORT_CMD(XmtRingInfo);
2695 spin_unlock_irqrestore(&adapter->XmtZeroLock,
2696 flags);
2697 return STATUS_SUCCESS;
2698 }
2659 } 2699 }
2660 } else {
2661 adapter->Stats.DumbXmtUcastPkts++;
2662 adapter->Stats.DumbXmtUcastBytes += DataLength;
2663 } 2700 }
2664#endif 2701
2665 /* 2702 /*
2666 * Fill in the command 2703 * Fill in the command
2667 * Copy out the first SGE to the command and adjust for offset 2704 * Copy out the first SGE to the command and adjust for offset
@@ -2679,31 +2716,17 @@ static int sxg_dumb_sgl(struct sxg_x64_sgl *pSgl,
2679 (SXG_INVALID_SGL(phys_addr,skb->data_len))) 2716 (SXG_INVALID_SGL(phys_addr,skb->data_len)))
2680 { 2717 {
2681 spin_unlock_irqrestore(&adapter->XmtZeroLock, flags); 2718 spin_unlock_irqrestore(&adapter->XmtZeroLock, flags);
2719 if (XmtCmd)
2720 SXG_ABORT_CMD(XmtRingInfo);
2682 /* Silently drop this packet */ 2721 /* Silently drop this packet */
2683 printk(KERN_EMERG"Dropped a packet for 64k boundary problem\n"); 2722 printk(KERN_EMERG"Dropped a packet for 64k boundary problem\n");
2684 return STATUS_SUCCESS; 2723 return STATUS_SUCCESS;
2685 } 2724 }
2686 memset(XmtCmd, '\0', sizeof(*XmtCmd));
2687 XmtCmd->Buffer.FirstSgeAddress = phys_addr; 2725 XmtCmd->Buffer.FirstSgeAddress = phys_addr;
2688 XmtCmd->Buffer.FirstSgeLength = DataLength; 2726 XmtCmd->Buffer.FirstSgeLength = DataLength;
2689 XmtCmd->Buffer.SgeOffset = 0; 2727 XmtCmd->Buffer.SgeOffset = 0;
2690 XmtCmd->Buffer.TotalLength = DataLength; 2728 XmtCmd->Buffer.TotalLength = DataLength;
2691 XmtCmd->SgEntries = 1;
2692 XmtCmd->Flags = 0;
2693 2729
2694 if (skb->ip_summed == CHECKSUM_PARTIAL) {
2695 /*
2696 * We need to set the Checkum in IP header to 0. This is
2697 * required by hardware.
2698 */
2699 ip_hdr(skb)->check = 0x0;
2700 XmtCmd->CsumFlags.Flags |= SXG_SLOWCMD_CSUM_IP;
2701 XmtCmd->CsumFlags.Flags |= SXG_SLOWCMD_CSUM_TCP;
2702 /* Dont know if length will require a change in case of VLAN */
2703 XmtCmd->CsumFlags.MacLen = ETH_HLEN;
2704 XmtCmd->CsumFlags.IpHl = skb_network_header_len(skb) >>
2705 SXG_NW_HDR_LEN_SHIFT;
2706 }
2707 /* 2730 /*
2708 * Advance transmit cmd descripter by 1. 2731 * Advance transmit cmd descripter by 1.
2709 * NOTE - See comments in SxgTcpOutput where we write 2732 * NOTE - See comments in SxgTcpOutput where we write
@@ -2715,6 +2738,24 @@ static int sxg_dumb_sgl(struct sxg_x64_sgl *pSgl,
2715 ASSERT((queue_id & ~SXG_LARGE_SEND_QUEUE_MASK) == 0); 2738 ASSERT((queue_id & ~SXG_LARGE_SEND_QUEUE_MASK) == 0);
2716 WRITE_REG(adapter->UcodeRegs[0].XmtCmd, ((queue_id << 16) | 1), TRUE); 2739 WRITE_REG(adapter->UcodeRegs[0].XmtCmd, ((queue_id << 16) | 1), TRUE);
2717 adapter->Stats.XmtQLen++; /* Stats within lock */ 2740 adapter->Stats.XmtQLen++; /* Stats within lock */
2741 /* Update stats */
2742 adapter->stats.tx_packets++;
2743 adapter->stats.tx_bytes += DataLength;
2744#if XXXTODO /* Stats stuff */
2745 if (SXG_MULTICAST_PACKET(EtherHdr)) {
2746 if (SXG_BROADCAST_PACKET(EtherHdr)) {
2747 adapter->Stats.DumbXmtBcastPkts++;
2748 adapter->Stats.DumbXmtBcastBytes += DataLength;
2749 } else {
2750 adapter->Stats.DumbXmtMcastPkts++;
2751 adapter->Stats.DumbXmtMcastBytes += DataLength;
2752 }
2753 } else {
2754 adapter->Stats.DumbXmtUcastPkts++;
2755 adapter->Stats.DumbXmtUcastBytes += DataLength;
2756 }
2757#endif
2758
2718 spin_unlock_irqrestore(&adapter->XmtZeroLock, flags); 2759 spin_unlock_irqrestore(&adapter->XmtZeroLock, flags);
2719 SXG_TRACE(TRACE_SXG, SxgTraceBuffer, TRACE_NOISY, "XDumSgl2", 2760 SXG_TRACE(TRACE_SXG, SxgTraceBuffer, TRACE_NOISY, "XDumSgl2",
2720 XmtCmd, pSgl, SxgSgl, 0); 2761 XmtCmd, pSgl, SxgSgl, 0);
diff --git a/drivers/staging/uc2322/aten2011.c b/drivers/staging/uc2322/aten2011.c
index 85b705453066..9c62f787cc9c 100644
--- a/drivers/staging/uc2322/aten2011.c
+++ b/drivers/staging/uc2322/aten2011.c
@@ -603,10 +603,9 @@ static void ATEN2011_bulk_out_data_callback(struct urb *urb)
603 603
604 tty = tty_port_tty_get(&ATEN2011_port->port->port); 604 tty = tty_port_tty_get(&ATEN2011_port->port->port);
605 605
606 if (tty && ATEN2011_port->open) { 606 if (tty && ATEN2011_port->open)
607 /* tell the tty driver that something has changed */ 607 /* tell the tty driver that something has changed */
608 wake_up_interruptible(&tty->write_wait); 608 tty_wakeup(tty);
609 }
610 609
611 /* schedule_work(&ATEN2011_port->port->work); */ 610 /* schedule_work(&ATEN2011_port->port->work); */
612 tty_kref_put(tty); 611 tty_kref_put(tty);
@@ -825,12 +824,6 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port,
825 status = 0; 824 status = 0;
826 status = set_reg_sync(port, ATEN2011_port->ControlRegOffset, Data); 825 status = set_reg_sync(port, ATEN2011_port->ControlRegOffset, Data);
827 826
828 /* force low_latency on so that our tty_push actually forces *
829 * the data through,otherwise it is scheduled, and with *
830 * high data rates (like with OHCI) data can get lost. */
831
832 if (tty)
833 tty->low_latency = 1;
834 /* 827 /*
835 * Check to see if we've set up our endpoint info yet 828 * Check to see if we've set up our endpoint info yet
836 * (can't set it up in ATEN2011_startup as the structures 829 * (can't set it up in ATEN2011_startup as the structures
@@ -1473,22 +1466,7 @@ static void ATEN2011_set_termios(struct tty_struct *tty,
1473 1466
1474 cflag = tty->termios->c_cflag; 1467 cflag = tty->termios->c_cflag;
1475 1468
1476 if (!cflag) { 1469 dbg("%s - cflag %08x iflag %08x", __func__,
1477 dbg("%s %s", __func__, "cflag is NULL");
1478 return;
1479 }
1480
1481 /* check that they really want us to change something */
1482 if (old_termios) {
1483 if ((cflag == old_termios->c_cflag) &&
1484 (RELEVANT_IFLAG(tty->termios->c_iflag) ==
1485 RELEVANT_IFLAG(old_termios->c_iflag))) {
1486 dbg("%s", "Nothing to change");
1487 return;
1488 }
1489 }
1490
1491 dbg("%s - clfag %08x iflag %08x", __func__,
1492 tty->termios->c_cflag, RELEVANT_IFLAG(tty->termios->c_iflag)); 1470 tty->termios->c_cflag, RELEVANT_IFLAG(tty->termios->c_iflag));
1493 1471
1494 if (old_termios) { 1472 if (old_termios) {
diff --git a/drivers/staging/winbond/wbusb.c b/drivers/staging/winbond/wbusb.c
index 9c3f9439f35e..3b2d52819b4c 100644
--- a/drivers/staging/winbond/wbusb.c
+++ b/drivers/staging/winbond/wbusb.c
@@ -386,7 +386,7 @@ static int wb35_probe(struct usb_interface *intf, const struct usb_device_id *id
386 if (err) 386 if (err)
387 goto error_free_hw; 387 goto error_free_hw;
388 388
389 usb_set_intfdata(intf, priv); 389 usb_set_intfdata(intf, dev);
390 390
391 return 0; 391 return 0;
392 392
@@ -415,10 +415,15 @@ static void wb35_hw_halt(struct wbsoft_priv *adapter)
415 415
416static void wb35_disconnect(struct usb_interface *intf) 416static void wb35_disconnect(struct usb_interface *intf)
417{ 417{
418 struct wbsoft_priv *priv = usb_get_intfdata(intf); 418 struct ieee80211_hw *hw = usb_get_intfdata(intf);
419 struct wbsoft_priv *priv = hw->priv;
419 420
420 wb35_hw_halt(priv); 421 wb35_hw_halt(priv);
421 422
423 ieee80211_stop_queues(hw);
424 ieee80211_unregister_hw(hw);
425 ieee80211_free_hw(hw);
426
422 usb_set_intfdata(intf, NULL); 427 usb_set_intfdata(intf, NULL);
423 usb_put_dev(interface_to_usbdev(intf)); 428 usb_put_dev(interface_to_usbdev(intf));
424} 429}
diff --git a/drivers/staging/wlan-ng/p80211netdev.c b/drivers/staging/wlan-ng/p80211netdev.c
index b2a606a36936..393e4df70dfd 100644
--- a/drivers/staging/wlan-ng/p80211netdev.c
+++ b/drivers/staging/wlan-ng/p80211netdev.c
@@ -711,6 +711,20 @@ static int wlan_change_mtu(netdevice_t *dev, int new_mtu)
711 return 0; 711 return 0;
712} 712}
713 713
714static const struct net_device_ops p80211_netdev_ops = {
715 .ndo_init = p80211knetdev_init,
716 .ndo_open = p80211knetdev_open,
717 .ndo_stop = p80211knetdev_stop,
718 .ndo_get_stats = p80211knetdev_get_stats,
719 .ndo_start_xmit = p80211knetdev_hard_start_xmit,
720 .ndo_set_multicast_list = p80211knetdev_set_multicast_list,
721 .ndo_do_ioctl = p80211knetdev_do_ioctl,
722 .ndo_set_mac_address = p80211knetdev_set_mac_address,
723 .ndo_tx_timeout = p80211knetdev_tx_timeout,
724 .ndo_change_mtu = wlan_change_mtu,
725 .ndo_validate_addr = eth_validate_addr,
726};
727
714/*---------------------------------------------------------------- 728/*----------------------------------------------------------------
715* wlan_setup 729* wlan_setup
716* 730*
@@ -756,11 +770,7 @@ int wlan_setup(wlandevice_t *wlandev)
756 } else { 770 } else {
757 wlandev->netdev = dev; 771 wlandev->netdev = dev;
758 dev->ml_priv = wlandev; 772 dev->ml_priv = wlandev;
759 dev->hard_start_xmit = p80211knetdev_hard_start_xmit; 773 dev->netdev_ops = &p80211_netdev_ops;
760 dev->get_stats = p80211knetdev_get_stats;
761 dev->init = p80211knetdev_init;
762 dev->open = p80211knetdev_open;
763 dev->stop = p80211knetdev_stop;
764 774
765 mutex_init(&wlandev->ioctl_lock); 775 mutex_init(&wlandev->ioctl_lock);
766 /* block ioctls until fully initialised. Don't forget to call 776 /* block ioctls until fully initialised. Don't forget to call
diff --git a/drivers/thermal/thermal_sys.c b/drivers/thermal/thermal_sys.c
index d0b093b66adc..5e38ba10a3a9 100644
--- a/drivers/thermal/thermal_sys.c
+++ b/drivers/thermal/thermal_sys.c
@@ -961,7 +961,7 @@ void thermal_zone_device_update(struct thermal_zone_device *tz)
961 961
962 switch (trip_type) { 962 switch (trip_type) {
963 case THERMAL_TRIP_CRITICAL: 963 case THERMAL_TRIP_CRITICAL:
964 if (temp > trip_temp) { 964 if (temp >= trip_temp) {
965 if (tz->ops->notify) 965 if (tz->ops->notify)
966 ret = tz->ops->notify(tz, count, 966 ret = tz->ops->notify(tz, count,
967 trip_type); 967 trip_type);
@@ -974,7 +974,7 @@ void thermal_zone_device_update(struct thermal_zone_device *tz)
974 } 974 }
975 break; 975 break;
976 case THERMAL_TRIP_HOT: 976 case THERMAL_TRIP_HOT:
977 if (temp > trip_temp) 977 if (temp >= trip_temp)
978 if (tz->ops->notify) 978 if (tz->ops->notify)
979 tz->ops->notify(tz, count, trip_type); 979 tz->ops->notify(tz, count, trip_type);
980 break; 980 break;
@@ -986,14 +986,14 @@ void thermal_zone_device_update(struct thermal_zone_device *tz)
986 986
987 cdev = instance->cdev; 987 cdev = instance->cdev;
988 988
989 if (temp > trip_temp) 989 if (temp >= trip_temp)
990 cdev->ops->set_cur_state(cdev, 1); 990 cdev->ops->set_cur_state(cdev, 1);
991 else 991 else
992 cdev->ops->set_cur_state(cdev, 0); 992 cdev->ops->set_cur_state(cdev, 0);
993 } 993 }
994 break; 994 break;
995 case THERMAL_TRIP_PASSIVE: 995 case THERMAL_TRIP_PASSIVE:
996 if (temp > trip_temp || tz->passive) 996 if (temp >= trip_temp || tz->passive)
997 thermal_zone_device_passive(tz, temp, 997 thermal_zone_device_passive(tz, temp,
998 trip_temp, count); 998 trip_temp, count);
999 break; 999 break;
diff --git a/drivers/uio/uio_cif.c b/drivers/uio/uio_cif.c
index c60b8fcf0e3e..28034c812914 100644
--- a/drivers/uio/uio_cif.c
+++ b/drivers/uio/uio_cif.c
@@ -147,5 +147,6 @@ static void __exit hilscher_exit_module(void)
147module_init(hilscher_init_module); 147module_init(hilscher_init_module);
148module_exit(hilscher_exit_module); 148module_exit(hilscher_exit_module);
149 149
150MODULE_DEVICE_TABLE(pci, hilscher_pci_ids);
150MODULE_LICENSE("GPL v2"); 151MODULE_LICENSE("GPL v2");
151MODULE_AUTHOR("Hans J. Koch, Benedikt Spranger"); 152MODULE_AUTHOR("Hans J. Koch, Benedikt Spranger");
diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile
index 89299a5ce168..0716cdb44cd8 100644
--- a/drivers/usb/Makefile
+++ b/drivers/usb/Makefile
@@ -27,6 +27,8 @@ obj-$(CONFIG_USB_WUSB) += wusbcore/
27 27
28obj-$(CONFIG_USB_ACM) += class/ 28obj-$(CONFIG_USB_ACM) += class/
29obj-$(CONFIG_USB_PRINTER) += class/ 29obj-$(CONFIG_USB_PRINTER) += class/
30obj-$(CONFIG_USB_WDM) += class/
31obj-$(CONFIG_USB_TMC) += class/
30 32
31obj-$(CONFIG_USB_STORAGE) += storage/ 33obj-$(CONFIG_USB_STORAGE) += storage/
32obj-$(CONFIG_USB) += storage/ 34obj-$(CONFIG_USB) += storage/
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
index 869d47cb6db3..0a69c0977e3f 100644
--- a/drivers/usb/class/cdc-acm.c
+++ b/drivers/usb/class/cdc-acm.c
@@ -546,10 +546,6 @@ static int acm_tty_open(struct tty_struct *tty, struct file *filp)
546 tty->driver_data = acm; 546 tty->driver_data = acm;
547 acm->tty = tty; 547 acm->tty = tty;
548 548
549 /* force low_latency on so that our tty_push actually forces the data through,
550 otherwise it is scheduled, and with high data rates data can get lost. */
551 tty->low_latency = 1;
552
553 if (usb_autopm_get_interface(acm->control) < 0) 549 if (usb_autopm_get_interface(acm->control) < 0)
554 goto early_bail; 550 goto early_bail;
555 else 551 else
diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
index 3771d6e6d0cc..0fe434505ac4 100644
--- a/drivers/usb/class/cdc-wdm.c
+++ b/drivers/usb/class/cdc-wdm.c
@@ -3,7 +3,7 @@
3 * 3 *
4 * This driver supports USB CDC WCM Device Management. 4 * This driver supports USB CDC WCM Device Management.
5 * 5 *
6 * Copyright (c) 2007-2008 Oliver Neukum 6 * Copyright (c) 2007-2009 Oliver Neukum
7 * 7 *
8 * Some code taken from cdc-acm.c 8 * Some code taken from cdc-acm.c
9 * 9 *
@@ -610,7 +610,7 @@ static int wdm_probe(struct usb_interface *intf, const struct usb_device_id *id)
610 if (!buffer) 610 if (!buffer)
611 goto out; 611 goto out;
612 612
613 while (buflen > 0) { 613 while (buflen > 2) {
614 if (buffer [1] != USB_DT_CS_INTERFACE) { 614 if (buffer [1] != USB_DT_CS_INTERFACE) {
615 dev_err(&intf->dev, "skipping garbage\n"); 615 dev_err(&intf->dev, "skipping garbage\n");
616 goto next_desc; 616 goto next_desc;
@@ -646,16 +646,18 @@ next_desc:
646 spin_lock_init(&desc->iuspin); 646 spin_lock_init(&desc->iuspin);
647 init_waitqueue_head(&desc->wait); 647 init_waitqueue_head(&desc->wait);
648 desc->wMaxCommand = maxcom; 648 desc->wMaxCommand = maxcom;
649 /* this will be expanded and needed in hardware endianness */
649 desc->inum = cpu_to_le16((u16)intf->cur_altsetting->desc.bInterfaceNumber); 650 desc->inum = cpu_to_le16((u16)intf->cur_altsetting->desc.bInterfaceNumber);
650 desc->intf = intf; 651 desc->intf = intf;
651 INIT_WORK(&desc->rxwork, wdm_rxwork); 652 INIT_WORK(&desc->rxwork, wdm_rxwork);
652 653
653 iface = &intf->altsetting[0]; 654 rv = -EINVAL;
655 iface = intf->cur_altsetting;
656 if (iface->desc.bNumEndpoints != 1)
657 goto err;
654 ep = &iface->endpoint[0].desc; 658 ep = &iface->endpoint[0].desc;
655 if (!usb_endpoint_is_int_in(ep)) { 659 if (!ep || !usb_endpoint_is_int_in(ep))
656 rv = -EINVAL;
657 goto err; 660 goto err;
658 }
659 661
660 desc->wMaxPacketSize = le16_to_cpu(ep->wMaxPacketSize); 662 desc->wMaxPacketSize = le16_to_cpu(ep->wMaxPacketSize);
661 desc->bMaxPacketSize0 = udev->descriptor.bMaxPacketSize0; 663 desc->bMaxPacketSize0 = udev->descriptor.bMaxPacketSize0;
@@ -711,12 +713,19 @@ next_desc:
711 713
712 usb_set_intfdata(intf, desc); 714 usb_set_intfdata(intf, desc);
713 rv = usb_register_dev(intf, &wdm_class); 715 rv = usb_register_dev(intf, &wdm_class);
714 dev_info(&intf->dev, "cdc-wdm%d: USB WDM device\n",
715 intf->minor - WDM_MINOR_BASE);
716 if (rv < 0) 716 if (rv < 0)
717 goto err; 717 goto err3;
718 else
719 dev_info(&intf->dev, "cdc-wdm%d: USB WDM device\n",
720 intf->minor - WDM_MINOR_BASE);
718out: 721out:
719 return rv; 722 return rv;
723err3:
724 usb_set_intfdata(intf, NULL);
725 usb_buffer_free(interface_to_usbdev(desc->intf),
726 desc->bMaxPacketSize0,
727 desc->inbuf,
728 desc->response->transfer_dma);
720err2: 729err2:
721 usb_buffer_free(interface_to_usbdev(desc->intf), 730 usb_buffer_free(interface_to_usbdev(desc->intf),
722 desc->wMaxPacketSize, 731 desc->wMaxPacketSize,
diff --git a/drivers/usb/core/buffer.c b/drivers/usb/core/buffer.c
index cadb2dc1d28a..3ba2fff71490 100644
--- a/drivers/usb/core/buffer.c
+++ b/drivers/usb/core/buffer.c
@@ -119,7 +119,7 @@ void *hcd_buffer_alloc(
119 if (size <= pool_max [i]) 119 if (size <= pool_max [i])
120 return dma_pool_alloc(hcd->pool [i], mem_flags, dma); 120 return dma_pool_alloc(hcd->pool [i], mem_flags, dma);
121 } 121 }
122 return dma_alloc_coherent(hcd->self.controller, size, dma, 0); 122 return dma_alloc_coherent(hcd->self.controller, size, dma, mem_flags);
123} 123}
124 124
125void hcd_buffer_free( 125void hcd_buffer_free(
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
index df3c539f652a..308609039c73 100644
--- a/drivers/usb/core/devio.c
+++ b/drivers/usb/core/devio.c
@@ -841,7 +841,7 @@ static int proc_resetep(struct dev_state *ps, void __user *arg)
841 ret = checkintf(ps, ret); 841 ret = checkintf(ps, ret);
842 if (ret) 842 if (ret)
843 return ret; 843 return ret;
844 usb_settoggle(ps->dev, ep & 0xf, !(ep & USB_DIR_IN), 0); 844 usb_reset_endpoint(ps->dev, ep);
845 return 0; 845 return 0;
846} 846}
847 847
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
index 81fa8506825d..42b93da1085d 100644
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
@@ -1539,6 +1539,32 @@ void usb_hcd_disable_endpoint(struct usb_device *udev,
1539 hcd->driver->endpoint_disable(hcd, ep); 1539 hcd->driver->endpoint_disable(hcd, ep);
1540} 1540}
1541 1541
1542/**
1543 * usb_hcd_reset_endpoint - reset host endpoint state
1544 * @udev: USB device.
1545 * @ep: the endpoint to reset.
1546 *
1547 * Resets any host endpoint state such as the toggle bit, sequence
1548 * number and current window.
1549 */
1550void usb_hcd_reset_endpoint(struct usb_device *udev,
1551 struct usb_host_endpoint *ep)
1552{
1553 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
1554
1555 if (hcd->driver->endpoint_reset)
1556 hcd->driver->endpoint_reset(hcd, ep);
1557 else {
1558 int epnum = usb_endpoint_num(&ep->desc);
1559 int is_out = usb_endpoint_dir_out(&ep->desc);
1560 int is_control = usb_endpoint_xfer_control(&ep->desc);
1561
1562 usb_settoggle(udev, epnum, is_out, 0);
1563 if (is_control)
1564 usb_settoggle(udev, epnum, !is_out, 0);
1565 }
1566}
1567
1542/* Protect against drivers that try to unlink URBs after the device 1568/* Protect against drivers that try to unlink URBs after the device
1543 * is gone, by waiting until all unlinks for @udev are finished. 1569 * is gone, by waiting until all unlinks for @udev are finished.
1544 * Since we don't currently track URBs by device, simply wait until 1570 * Since we don't currently track URBs by device, simply wait until
diff --git a/drivers/usb/core/hcd.h b/drivers/usb/core/hcd.h
index f750eb1ab595..e7d4479de41c 100644
--- a/drivers/usb/core/hcd.h
+++ b/drivers/usb/core/hcd.h
@@ -206,6 +206,11 @@ struct hc_driver {
206 void (*endpoint_disable)(struct usb_hcd *hcd, 206 void (*endpoint_disable)(struct usb_hcd *hcd,
207 struct usb_host_endpoint *ep); 207 struct usb_host_endpoint *ep);
208 208
209 /* (optional) reset any endpoint state such as sequence number
210 and current window */
211 void (*endpoint_reset)(struct usb_hcd *hcd,
212 struct usb_host_endpoint *ep);
213
209 /* root hub support */ 214 /* root hub support */
210 int (*hub_status_data) (struct usb_hcd *hcd, char *buf); 215 int (*hub_status_data) (struct usb_hcd *hcd, char *buf);
211 int (*hub_control) (struct usb_hcd *hcd, 216 int (*hub_control) (struct usb_hcd *hcd,
@@ -234,6 +239,8 @@ extern void usb_hcd_flush_endpoint(struct usb_device *udev,
234 struct usb_host_endpoint *ep); 239 struct usb_host_endpoint *ep);
235extern void usb_hcd_disable_endpoint(struct usb_device *udev, 240extern void usb_hcd_disable_endpoint(struct usb_device *udev,
236 struct usb_host_endpoint *ep); 241 struct usb_host_endpoint *ep);
242extern void usb_hcd_reset_endpoint(struct usb_device *udev,
243 struct usb_host_endpoint *ep);
237extern void usb_hcd_synchronize_unlinks(struct usb_device *udev); 244extern void usb_hcd_synchronize_unlinks(struct usb_device *udev);
238extern int usb_hcd_get_frame_number(struct usb_device *udev); 245extern int usb_hcd_get_frame_number(struct usb_device *udev);
239 246
@@ -279,6 +286,13 @@ extern irqreturn_t usb_hcd_irq(int irq, void *__hcd);
279extern void usb_hc_died(struct usb_hcd *hcd); 286extern void usb_hc_died(struct usb_hcd *hcd);
280extern void usb_hcd_poll_rh_status(struct usb_hcd *hcd); 287extern void usb_hcd_poll_rh_status(struct usb_hcd *hcd);
281 288
289/* The D0/D1 toggle bits ... USE WITH CAUTION (they're almost hcd-internal) */
290#define usb_gettoggle(dev, ep, out) (((dev)->toggle[out] >> (ep)) & 1)
291#define usb_dotoggle(dev, ep, out) ((dev)->toggle[out] ^= (1 << (ep)))
292#define usb_settoggle(dev, ep, out, bit) \
293 ((dev)->toggle[out] = ((dev)->toggle[out] & ~(1 << (ep))) | \
294 ((bit) << (ep)))
295
282/* -------------------------------------------------------------------------- */ 296/* -------------------------------------------------------------------------- */
283 297
284/* Enumeration is only for the hub driver, or HCD virtual root hubs */ 298/* Enumeration is only for the hub driver, or HCD virtual root hubs */
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
index 30a0690f3683..b62628377654 100644
--- a/drivers/usb/core/message.c
+++ b/drivers/usb/core/message.c
@@ -1002,8 +1002,7 @@ int usb_clear_halt(struct usb_device *dev, int pipe)
1002 * the copy in usb-storage, for as long as we need two copies. 1002 * the copy in usb-storage, for as long as we need two copies.
1003 */ 1003 */
1004 1004
1005 /* toggle was reset by the clear */ 1005 usb_reset_endpoint(dev, endp);
1006 usb_settoggle(dev, usb_pipeendpoint(pipe), usb_pipeout(pipe), 0);
1007 1006
1008 return 0; 1007 return 0;
1009} 1008}
@@ -1076,6 +1075,30 @@ void usb_disable_endpoint(struct usb_device *dev, unsigned int epaddr,
1076} 1075}
1077 1076
1078/** 1077/**
1078 * usb_reset_endpoint - Reset an endpoint's state.
1079 * @dev: the device whose endpoint is to be reset
1080 * @epaddr: the endpoint's address. Endpoint number for output,
1081 * endpoint number + USB_DIR_IN for input
1082 *
1083 * Resets any host-side endpoint state such as the toggle bit,
1084 * sequence number or current window.
1085 */
1086void usb_reset_endpoint(struct usb_device *dev, unsigned int epaddr)
1087{
1088 unsigned int epnum = epaddr & USB_ENDPOINT_NUMBER_MASK;
1089 struct usb_host_endpoint *ep;
1090
1091 if (usb_endpoint_out(epaddr))
1092 ep = dev->ep_out[epnum];
1093 else
1094 ep = dev->ep_in[epnum];
1095 if (ep)
1096 usb_hcd_reset_endpoint(dev, ep);
1097}
1098EXPORT_SYMBOL_GPL(usb_reset_endpoint);
1099
1100
1101/**
1079 * usb_disable_interface -- Disable all endpoints for an interface 1102 * usb_disable_interface -- Disable all endpoints for an interface
1080 * @dev: the device whose interface is being disabled 1103 * @dev: the device whose interface is being disabled
1081 * @intf: pointer to the interface descriptor 1104 * @intf: pointer to the interface descriptor
@@ -1117,7 +1140,6 @@ void usb_disable_device(struct usb_device *dev, int skip_ep0)
1117 usb_disable_endpoint(dev, i, true); 1140 usb_disable_endpoint(dev, i, true);
1118 usb_disable_endpoint(dev, i + USB_DIR_IN, true); 1141 usb_disable_endpoint(dev, i + USB_DIR_IN, true);
1119 } 1142 }
1120 dev->toggle[0] = dev->toggle[1] = 0;
1121 1143
1122 /* getting rid of interfaces will disconnect 1144 /* getting rid of interfaces will disconnect
1123 * any drivers bound to them (a key side effect) 1145 * any drivers bound to them (a key side effect)
@@ -1154,28 +1176,24 @@ void usb_disable_device(struct usb_device *dev, int skip_ep0)
1154 * usb_enable_endpoint - Enable an endpoint for USB communications 1176 * usb_enable_endpoint - Enable an endpoint for USB communications
1155 * @dev: the device whose interface is being enabled 1177 * @dev: the device whose interface is being enabled
1156 * @ep: the endpoint 1178 * @ep: the endpoint
1157 * @reset_toggle: flag to set the endpoint's toggle back to 0 1179 * @reset_ep: flag to reset the endpoint state
1158 * 1180 *
1159 * Resets the endpoint toggle if asked, and sets dev->ep_{in,out} pointers. 1181 * Resets the endpoint state if asked, and sets dev->ep_{in,out} pointers.
1160 * For control endpoints, both the input and output sides are handled. 1182 * For control endpoints, both the input and output sides are handled.
1161 */ 1183 */
1162void usb_enable_endpoint(struct usb_device *dev, struct usb_host_endpoint *ep, 1184void usb_enable_endpoint(struct usb_device *dev, struct usb_host_endpoint *ep,
1163 bool reset_toggle) 1185 bool reset_ep)
1164{ 1186{
1165 int epnum = usb_endpoint_num(&ep->desc); 1187 int epnum = usb_endpoint_num(&ep->desc);
1166 int is_out = usb_endpoint_dir_out(&ep->desc); 1188 int is_out = usb_endpoint_dir_out(&ep->desc);
1167 int is_control = usb_endpoint_xfer_control(&ep->desc); 1189 int is_control = usb_endpoint_xfer_control(&ep->desc);
1168 1190
1169 if (is_out || is_control) { 1191 if (reset_ep)
1170 if (reset_toggle) 1192 usb_hcd_reset_endpoint(dev, ep);
1171 usb_settoggle(dev, epnum, 1, 0); 1193 if (is_out || is_control)
1172 dev->ep_out[epnum] = ep; 1194 dev->ep_out[epnum] = ep;
1173 } 1195 if (!is_out || is_control)
1174 if (!is_out || is_control) {
1175 if (reset_toggle)
1176 usb_settoggle(dev, epnum, 0, 0);
1177 dev->ep_in[epnum] = ep; 1196 dev->ep_in[epnum] = ep;
1178 }
1179 ep->enabled = 1; 1197 ep->enabled = 1;
1180} 1198}
1181 1199
@@ -1183,18 +1201,18 @@ void usb_enable_endpoint(struct usb_device *dev, struct usb_host_endpoint *ep,
1183 * usb_enable_interface - Enable all the endpoints for an interface 1201 * usb_enable_interface - Enable all the endpoints for an interface
1184 * @dev: the device whose interface is being enabled 1202 * @dev: the device whose interface is being enabled
1185 * @intf: pointer to the interface descriptor 1203 * @intf: pointer to the interface descriptor
1186 * @reset_toggles: flag to set the endpoints' toggles back to 0 1204 * @reset_eps: flag to reset the endpoints' state
1187 * 1205 *
1188 * Enables all the endpoints for the interface's current altsetting. 1206 * Enables all the endpoints for the interface's current altsetting.
1189 */ 1207 */
1190void usb_enable_interface(struct usb_device *dev, 1208void usb_enable_interface(struct usb_device *dev,
1191 struct usb_interface *intf, bool reset_toggles) 1209 struct usb_interface *intf, bool reset_eps)
1192{ 1210{
1193 struct usb_host_interface *alt = intf->cur_altsetting; 1211 struct usb_host_interface *alt = intf->cur_altsetting;
1194 int i; 1212 int i;
1195 1213
1196 for (i = 0; i < alt->desc.bNumEndpoints; ++i) 1214 for (i = 0; i < alt->desc.bNumEndpoints; ++i)
1197 usb_enable_endpoint(dev, &alt->endpoint[i], reset_toggles); 1215 usb_enable_endpoint(dev, &alt->endpoint[i], reset_eps);
1198} 1216}
1199 1217
1200/** 1218/**
@@ -1335,7 +1353,7 @@ EXPORT_SYMBOL_GPL(usb_set_interface);
1335 * This issues a standard SET_CONFIGURATION request to the device using 1353 * This issues a standard SET_CONFIGURATION request to the device using
1336 * the current configuration. The effect is to reset most USB-related 1354 * the current configuration. The effect is to reset most USB-related
1337 * state in the device, including interface altsettings (reset to zero), 1355 * state in the device, including interface altsettings (reset to zero),
1338 * endpoint halts (cleared), and data toggle (only for bulk and interrupt 1356 * endpoint halts (cleared), and endpoint state (only for bulk and interrupt
1339 * endpoints). Other usbcore state is unchanged, including bindings of 1357 * endpoints). Other usbcore state is unchanged, including bindings of
1340 * usb device drivers to interfaces. 1358 * usb device drivers to interfaces.
1341 * 1359 *
@@ -1343,7 +1361,7 @@ EXPORT_SYMBOL_GPL(usb_set_interface);
1343 * (multi-interface) devices. Instead, the driver for each interface may 1361 * (multi-interface) devices. Instead, the driver for each interface may
1344 * use usb_set_interface() on the interfaces it claims. Be careful though; 1362 * use usb_set_interface() on the interfaces it claims. Be careful though;
1345 * some devices don't support the SET_INTERFACE request, and others won't 1363 * some devices don't support the SET_INTERFACE request, and others won't
1346 * reset all the interface state (notably data toggles). Resetting the whole 1364 * reset all the interface state (notably endpoint state). Resetting the whole
1347 * configuration would affect other drivers' interfaces. 1365 * configuration would affect other drivers' interfaces.
1348 * 1366 *
1349 * The caller must own the device lock. 1367 * The caller must own the device lock.
@@ -1376,8 +1394,6 @@ int usb_reset_configuration(struct usb_device *dev)
1376 if (retval < 0) 1394 if (retval < 0)
1377 return retval; 1395 return retval;
1378 1396
1379 dev->toggle[0] = dev->toggle[1] = 0;
1380
1381 /* re-init hc/hcd interface/endpoint state */ 1397 /* re-init hc/hcd interface/endpoint state */
1382 for (i = 0; i < config->desc.bNumInterfaces; i++) { 1398 for (i = 0; i < config->desc.bNumInterfaces; i++) {
1383 struct usb_interface *intf = config->interface[i]; 1399 struct usb_interface *intf = config->interface[i];
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
index dcfc072630c1..7eee400d3e32 100644
--- a/drivers/usb/core/usb.c
+++ b/drivers/usb/core/usb.c
@@ -362,7 +362,7 @@ struct usb_device *usb_alloc_dev(struct usb_device *parent,
362 dev->ep0.desc.bLength = USB_DT_ENDPOINT_SIZE; 362 dev->ep0.desc.bLength = USB_DT_ENDPOINT_SIZE;
363 dev->ep0.desc.bDescriptorType = USB_DT_ENDPOINT; 363 dev->ep0.desc.bDescriptorType = USB_DT_ENDPOINT;
364 /* ep0 maxpacket comes later, from device descriptor */ 364 /* ep0 maxpacket comes later, from device descriptor */
365 usb_enable_endpoint(dev, &dev->ep0, true); 365 usb_enable_endpoint(dev, &dev->ep0, false);
366 dev->can_submit = 1; 366 dev->can_submit = 1;
367 367
368 /* Save readable and stable topology id, distinguishing devices 368 /* Save readable and stable topology id, distinguishing devices
diff --git a/drivers/usb/gadget/ci13xxx_udc.c b/drivers/usb/gadget/ci13xxx_udc.c
index 22c65960c429..38e531ecae4d 100644
--- a/drivers/usb/gadget/ci13xxx_udc.c
+++ b/drivers/usb/gadget/ci13xxx_udc.c
@@ -51,6 +51,7 @@
51 * - Gadget API (majority of optional features) 51 * - Gadget API (majority of optional features)
52 * - Suspend & Remote Wakeup 52 * - Suspend & Remote Wakeup
53 */ 53 */
54#include <linux/delay.h>
54#include <linux/device.h> 55#include <linux/device.h>
55#include <linux/dmapool.h> 56#include <linux/dmapool.h>
56#include <linux/dma-mapping.h> 57#include <linux/dma-mapping.h>
@@ -142,7 +143,7 @@ static struct {
142#define CAP_DEVICEADDR (0x014UL) 143#define CAP_DEVICEADDR (0x014UL)
143#define CAP_ENDPTLISTADDR (0x018UL) 144#define CAP_ENDPTLISTADDR (0x018UL)
144#define CAP_PORTSC (0x044UL) 145#define CAP_PORTSC (0x044UL)
145#define CAP_DEVLC (0x0B4UL) 146#define CAP_DEVLC (0x084UL)
146#define CAP_USBMODE (hw_bank.lpm ? 0x0C8UL : 0x068UL) 147#define CAP_USBMODE (hw_bank.lpm ? 0x0C8UL : 0x068UL)
147#define CAP_ENDPTSETUPSTAT (hw_bank.lpm ? 0x0D8UL : 0x06CUL) 148#define CAP_ENDPTSETUPSTAT (hw_bank.lpm ? 0x0D8UL : 0x06CUL)
148#define CAP_ENDPTPRIME (hw_bank.lpm ? 0x0DCUL : 0x070UL) 149#define CAP_ENDPTPRIME (hw_bank.lpm ? 0x0DCUL : 0x070UL)
@@ -1986,6 +1987,8 @@ static int ep_enable(struct usb_ep *ep,
1986 do { 1987 do {
1987 dbg_event(_usb_addr(mEp), "ENABLE", 0); 1988 dbg_event(_usb_addr(mEp), "ENABLE", 0);
1988 1989
1990 mEp->qh[mEp->dir].ptr->cap = 0;
1991
1989 if (mEp->type == USB_ENDPOINT_XFER_CONTROL) 1992 if (mEp->type == USB_ENDPOINT_XFER_CONTROL)
1990 mEp->qh[mEp->dir].ptr->cap |= QH_IOS; 1993 mEp->qh[mEp->dir].ptr->cap |= QH_IOS;
1991 else if (mEp->type == USB_ENDPOINT_XFER_ISOC) 1994 else if (mEp->type == USB_ENDPOINT_XFER_ISOC)
diff --git a/drivers/usb/gadget/file_storage.c b/drivers/usb/gadget/file_storage.c
index 5c030b080d4c..381a53b3e11c 100644
--- a/drivers/usb/gadget/file_storage.c
+++ b/drivers/usb/gadget/file_storage.c
@@ -738,7 +738,6 @@ static struct fsg_dev *the_fsg;
738static struct usb_gadget_driver fsg_driver; 738static struct usb_gadget_driver fsg_driver;
739 739
740static void close_backing_file(struct lun *curlun); 740static void close_backing_file(struct lun *curlun);
741static void close_all_backing_files(struct fsg_dev *fsg);
742 741
743 742
744/*-------------------------------------------------------------------------*/ 743/*-------------------------------------------------------------------------*/
@@ -3593,12 +3592,10 @@ static int fsg_main_thread(void *fsg_)
3593 fsg->thread_task = NULL; 3592 fsg->thread_task = NULL;
3594 spin_unlock_irq(&fsg->lock); 3593 spin_unlock_irq(&fsg->lock);
3595 3594
3596 /* In case we are exiting because of a signal, unregister the 3595 /* If we are exiting because of a signal, unregister the
3597 * gadget driver and close the backing file. */ 3596 * gadget driver. */
3598 if (test_and_clear_bit(REGISTERED, &fsg->atomic_bitflags)) { 3597 if (test_and_clear_bit(REGISTERED, &fsg->atomic_bitflags))
3599 usb_gadget_unregister_driver(&fsg_driver); 3598 usb_gadget_unregister_driver(&fsg_driver);
3600 close_all_backing_files(fsg);
3601 }
3602 3599
3603 /* Let the unbind and cleanup routines know the thread has exited */ 3600 /* Let the unbind and cleanup routines know the thread has exited */
3604 complete_and_exit(&fsg->thread_notifier, 0); 3601 complete_and_exit(&fsg->thread_notifier, 0);
@@ -3703,14 +3700,6 @@ static void close_backing_file(struct lun *curlun)
3703 } 3700 }
3704} 3701}
3705 3702
3706static void close_all_backing_files(struct fsg_dev *fsg)
3707{
3708 int i;
3709
3710 for (i = 0; i < fsg->nluns; ++i)
3711 close_backing_file(&fsg->luns[i]);
3712}
3713
3714 3703
3715static ssize_t show_ro(struct device *dev, struct device_attribute *attr, char *buf) 3704static ssize_t show_ro(struct device *dev, struct device_attribute *attr, char *buf)
3716{ 3705{
@@ -3845,6 +3834,7 @@ static void /* __init_or_exit */ fsg_unbind(struct usb_gadget *gadget)
3845 if (curlun->registered) { 3834 if (curlun->registered) {
3846 device_remove_file(&curlun->dev, &dev_attr_ro); 3835 device_remove_file(&curlun->dev, &dev_attr_ro);
3847 device_remove_file(&curlun->dev, &dev_attr_file); 3836 device_remove_file(&curlun->dev, &dev_attr_file);
3837 close_backing_file(curlun);
3848 device_unregister(&curlun->dev); 3838 device_unregister(&curlun->dev);
3849 curlun->registered = 0; 3839 curlun->registered = 0;
3850 } 3840 }
@@ -4190,7 +4180,6 @@ autoconf_fail:
4190out: 4180out:
4191 fsg->state = FSG_STATE_TERMINATED; // The thread is dead 4181 fsg->state = FSG_STATE_TERMINATED; // The thread is dead
4192 fsg_unbind(gadget); 4182 fsg_unbind(gadget);
4193 close_all_backing_files(fsg);
4194 complete(&fsg->thread_notifier); 4183 complete(&fsg->thread_notifier);
4195 return rc; 4184 return rc;
4196} 4185}
@@ -4284,7 +4273,6 @@ static void __exit fsg_cleanup(void)
4284 /* Wait for the thread to finish up */ 4273 /* Wait for the thread to finish up */
4285 wait_for_completion(&fsg->thread_notifier); 4274 wait_for_completion(&fsg->thread_notifier);
4286 4275
4287 close_all_backing_files(fsg);
4288 kref_put(&fsg->ref, fsg_release); 4276 kref_put(&fsg->ref, fsg_release);
4289} 4277}
4290module_exit(fsg_cleanup); 4278module_exit(fsg_cleanup);
diff --git a/drivers/usb/gadget/omap_udc.c b/drivers/usb/gadget/omap_udc.c
index 57d9641c6bf8..a2db0e174f2c 100644
--- a/drivers/usb/gadget/omap_udc.c
+++ b/drivers/usb/gadget/omap_udc.c
@@ -3104,7 +3104,6 @@ static int omap_udc_resume(struct platform_device *dev)
3104/*-------------------------------------------------------------------------*/ 3104/*-------------------------------------------------------------------------*/
3105 3105
3106static struct platform_driver udc_driver = { 3106static struct platform_driver udc_driver = {
3107 .probe = omap_udc_probe,
3108 .remove = __exit_p(omap_udc_remove), 3107 .remove = __exit_p(omap_udc_remove),
3109 .suspend = omap_udc_suspend, 3108 .suspend = omap_udc_suspend,
3110 .resume = omap_udc_resume, 3109 .resume = omap_udc_resume,
@@ -3122,7 +3121,7 @@ static int __init udc_init(void)
3122#endif 3121#endif
3123 "%s\n", driver_desc, 3122 "%s\n", driver_desc,
3124 use_dma ? " (dma)" : ""); 3123 use_dma ? " (dma)" : "");
3125 return platform_driver_register(&udc_driver); 3124 return platform_driver_probe(&udc_driver, omap_udc_probe);
3126} 3125}
3127module_init(udc_init); 3126module_init(udc_init);
3128 3127
diff --git a/drivers/usb/gadget/u_ether.c b/drivers/usb/gadget/u_ether.c
index 96d65ca06ecd..4007770f7ed2 100644
--- a/drivers/usb/gadget/u_ether.c
+++ b/drivers/usb/gadget/u_ether.c
@@ -175,12 +175,6 @@ static void eth_get_drvinfo(struct net_device *net, struct ethtool_drvinfo *p)
175 strlcpy(p->bus_info, dev_name(&dev->gadget->dev), sizeof p->bus_info); 175 strlcpy(p->bus_info, dev_name(&dev->gadget->dev), sizeof p->bus_info);
176} 176}
177 177
178static u32 eth_get_link(struct net_device *net)
179{
180 struct eth_dev *dev = netdev_priv(net);
181 return dev->gadget->speed != USB_SPEED_UNKNOWN;
182}
183
184/* REVISIT can also support: 178/* REVISIT can also support:
185 * - WOL (by tracking suspends and issuing remote wakeup) 179 * - WOL (by tracking suspends and issuing remote wakeup)
186 * - msglevel (implies updated messaging) 180 * - msglevel (implies updated messaging)
@@ -189,7 +183,7 @@ static u32 eth_get_link(struct net_device *net)
189 183
190static struct ethtool_ops ops = { 184static struct ethtool_ops ops = {
191 .get_drvinfo = eth_get_drvinfo, 185 .get_drvinfo = eth_get_drvinfo,
192 .get_link = eth_get_link 186 .get_link = ethtool_op_get_link,
193}; 187};
194 188
195static void defer_kevent(struct eth_dev *dev, int flag) 189static void defer_kevent(struct eth_dev *dev, int flag)
diff --git a/drivers/usb/gadget/usbstring.c b/drivers/usb/gadget/usbstring.c
index 4154be375c7a..58c4d37d312a 100644
--- a/drivers/usb/gadget/usbstring.c
+++ b/drivers/usb/gadget/usbstring.c
@@ -38,7 +38,7 @@ static int utf8_to_utf16le(const char *s, __le16 *cp, unsigned len)
38 uchar = (c & 0x1f) << 6; 38 uchar = (c & 0x1f) << 6;
39 39
40 c = (u8) *s++; 40 c = (u8) *s++;
41 if ((c & 0xc0) != 0xc0) 41 if ((c & 0xc0) != 0x80)
42 goto fail; 42 goto fail;
43 c &= 0x3f; 43 c &= 0x3f;
44 uchar |= c; 44 uchar |= c;
@@ -49,13 +49,13 @@ static int utf8_to_utf16le(const char *s, __le16 *cp, unsigned len)
49 uchar = (c & 0x0f) << 12; 49 uchar = (c & 0x0f) << 12;
50 50
51 c = (u8) *s++; 51 c = (u8) *s++;
52 if ((c & 0xc0) != 0xc0) 52 if ((c & 0xc0) != 0x80)
53 goto fail; 53 goto fail;
54 c &= 0x3f; 54 c &= 0x3f;
55 uchar |= c << 6; 55 uchar |= c << 6;
56 56
57 c = (u8) *s++; 57 c = (u8) *s++;
58 if ((c & 0xc0) != 0xc0) 58 if ((c & 0xc0) != 0x80)
59 goto fail; 59 goto fail;
60 c &= 0x3f; 60 c &= 0x3f;
61 uchar |= c; 61 uchar |= c;
diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c
index ada5d2ba297b..556d0ec0c1f8 100644
--- a/drivers/usb/host/ehci-sched.c
+++ b/drivers/usb/host/ehci-sched.c
@@ -323,7 +323,7 @@ static int tt_available (
323 * already scheduled transactions 323 * already scheduled transactions
324 */ 324 */
325 if (125 < usecs) { 325 if (125 < usecs) {
326 int ufs = (usecs / 125) - 1; 326 int ufs = (usecs / 125);
327 int i; 327 int i;
328 for (i = uframe; i < (uframe + ufs) && i < 8; i++) 328 for (i = uframe; i < (uframe + ufs) && i < 8; i++)
329 if (0 < tt_usecs[i]) { 329 if (0 < tt_usecs[i]) {
diff --git a/drivers/usb/host/whci/asl.c b/drivers/usb/host/whci/asl.c
index 958751ccea43..c2050785a819 100644
--- a/drivers/usb/host/whci/asl.c
+++ b/drivers/usb/host/whci/asl.c
@@ -122,7 +122,8 @@ static uint32_t process_qset(struct whc *whc, struct whc_qset *qset)
122 process_inactive_qtd(whc, qset, td); 122 process_inactive_qtd(whc, qset, td);
123 } 123 }
124 124
125 update |= qset_add_qtds(whc, qset); 125 if (!qset->remove)
126 update |= qset_add_qtds(whc, qset);
126 127
127done: 128done:
128 /* 129 /*
@@ -254,23 +255,29 @@ int asl_urb_enqueue(struct whc *whc, struct urb *urb, gfp_t mem_flags)
254 255
255 spin_lock_irqsave(&whc->lock, flags); 256 spin_lock_irqsave(&whc->lock, flags);
256 257
258 err = usb_hcd_link_urb_to_ep(&whc->wusbhc.usb_hcd, urb);
259 if (err < 0) {
260 spin_unlock_irqrestore(&whc->lock, flags);
261 return err;
262 }
263
257 qset = get_qset(whc, urb, GFP_ATOMIC); 264 qset = get_qset(whc, urb, GFP_ATOMIC);
258 if (qset == NULL) 265 if (qset == NULL)
259 err = -ENOMEM; 266 err = -ENOMEM;
260 else 267 else
261 err = qset_add_urb(whc, qset, urb, GFP_ATOMIC); 268 err = qset_add_urb(whc, qset, urb, GFP_ATOMIC);
262 if (!err) { 269 if (!err) {
263 usb_hcd_link_urb_to_ep(&whc->wusbhc.usb_hcd, urb);
264 if (!qset->in_sw_list) 270 if (!qset->in_sw_list)
265 asl_qset_insert_begin(whc, qset); 271 asl_qset_insert_begin(whc, qset);
266 } 272 } else
273 usb_hcd_unlink_urb_from_ep(&whc->wusbhc.usb_hcd, urb);
267 274
268 spin_unlock_irqrestore(&whc->lock, flags); 275 spin_unlock_irqrestore(&whc->lock, flags);
269 276
270 if (!err) 277 if (!err)
271 queue_work(whc->workqueue, &whc->async_work); 278 queue_work(whc->workqueue, &whc->async_work);
272 279
273 return 0; 280 return err;
274} 281}
275 282
276/** 283/**
diff --git a/drivers/usb/host/whci/hcd.c b/drivers/usb/host/whci/hcd.c
index 1569afd6245b..e019a5058ab8 100644
--- a/drivers/usb/host/whci/hcd.c
+++ b/drivers/usb/host/whci/hcd.c
@@ -186,6 +186,28 @@ static void whc_endpoint_disable(struct usb_hcd *usb_hcd,
186 } 186 }
187} 187}
188 188
189static void whc_endpoint_reset(struct usb_hcd *usb_hcd,
190 struct usb_host_endpoint *ep)
191{
192 struct wusbhc *wusbhc = usb_hcd_to_wusbhc(usb_hcd);
193 struct whc *whc = wusbhc_to_whc(wusbhc);
194 struct whc_qset *qset;
195
196 qset = ep->hcpriv;
197 if (qset) {
198 qset->remove = 1;
199
200 if (usb_endpoint_xfer_bulk(&ep->desc)
201 || usb_endpoint_xfer_control(&ep->desc))
202 queue_work(whc->workqueue, &whc->async_work);
203 else
204 queue_work(whc->workqueue, &whc->periodic_work);
205
206 qset_reset(whc, qset);
207 }
208}
209
210
189static struct hc_driver whc_hc_driver = { 211static struct hc_driver whc_hc_driver = {
190 .description = "whci-hcd", 212 .description = "whci-hcd",
191 .product_desc = "Wireless host controller", 213 .product_desc = "Wireless host controller",
@@ -200,6 +222,7 @@ static struct hc_driver whc_hc_driver = {
200 .urb_enqueue = whc_urb_enqueue, 222 .urb_enqueue = whc_urb_enqueue,
201 .urb_dequeue = whc_urb_dequeue, 223 .urb_dequeue = whc_urb_dequeue,
202 .endpoint_disable = whc_endpoint_disable, 224 .endpoint_disable = whc_endpoint_disable,
225 .endpoint_reset = whc_endpoint_reset,
203 226
204 .hub_status_data = wusbhc_rh_status_data, 227 .hub_status_data = wusbhc_rh_status_data,
205 .hub_control = wusbhc_rh_control, 228 .hub_control = wusbhc_rh_control,
diff --git a/drivers/usb/host/whci/pzl.c b/drivers/usb/host/whci/pzl.c
index df8b85f07092..ff4ef9e910d9 100644
--- a/drivers/usb/host/whci/pzl.c
+++ b/drivers/usb/host/whci/pzl.c
@@ -128,7 +128,8 @@ static enum whc_update pzl_process_qset(struct whc *whc, struct whc_qset *qset)
128 process_inactive_qtd(whc, qset, td); 128 process_inactive_qtd(whc, qset, td);
129 } 129 }
130 130
131 update |= qset_add_qtds(whc, qset); 131 if (!qset->remove)
132 update |= qset_add_qtds(whc, qset);
132 133
133done: 134done:
134 /* 135 /*
@@ -282,23 +283,29 @@ int pzl_urb_enqueue(struct whc *whc, struct urb *urb, gfp_t mem_flags)
282 283
283 spin_lock_irqsave(&whc->lock, flags); 284 spin_lock_irqsave(&whc->lock, flags);
284 285
286 err = usb_hcd_link_urb_to_ep(&whc->wusbhc.usb_hcd, urb);
287 if (err < 0) {
288 spin_unlock_irqrestore(&whc->lock, flags);
289 return err;
290 }
291
285 qset = get_qset(whc, urb, GFP_ATOMIC); 292 qset = get_qset(whc, urb, GFP_ATOMIC);
286 if (qset == NULL) 293 if (qset == NULL)
287 err = -ENOMEM; 294 err = -ENOMEM;
288 else 295 else
289 err = qset_add_urb(whc, qset, urb, GFP_ATOMIC); 296 err = qset_add_urb(whc, qset, urb, GFP_ATOMIC);
290 if (!err) { 297 if (!err) {
291 usb_hcd_link_urb_to_ep(&whc->wusbhc.usb_hcd, urb);
292 if (!qset->in_sw_list) 298 if (!qset->in_sw_list)
293 qset_insert_in_sw_list(whc, qset); 299 qset_insert_in_sw_list(whc, qset);
294 } 300 } else
301 usb_hcd_unlink_urb_from_ep(&whc->wusbhc.usb_hcd, urb);
295 302
296 spin_unlock_irqrestore(&whc->lock, flags); 303 spin_unlock_irqrestore(&whc->lock, flags);
297 304
298 if (!err) 305 if (!err)
299 queue_work(whc->workqueue, &whc->periodic_work); 306 queue_work(whc->workqueue, &whc->periodic_work);
300 307
301 return 0; 308 return err;
302} 309}
303 310
304/** 311/**
@@ -353,7 +360,6 @@ void pzl_qset_delete(struct whc *whc, struct whc_qset *qset)
353 qset_delete(whc, qset); 360 qset_delete(whc, qset);
354} 361}
355 362
356
357/** 363/**
358 * pzl_init - initialize the periodic zone list 364 * pzl_init - initialize the periodic zone list
359 * @whc: the WHCI host controller 365 * @whc: the WHCI host controller
diff --git a/drivers/usb/host/whci/qset.c b/drivers/usb/host/whci/qset.c
index 7be74314ee12..640b38fbd051 100644
--- a/drivers/usb/host/whci/qset.c
+++ b/drivers/usb/host/whci/qset.c
@@ -89,11 +89,16 @@ static void qset_fill_qh(struct whc_qset *qset, struct urb *urb)
89 QH_INFO3_TX_RATE_53_3 89 QH_INFO3_TX_RATE_53_3
90 | QH_INFO3_TX_PWR(0) /* 0 == max power */ 90 | QH_INFO3_TX_PWR(0) /* 0 == max power */
91 ); 91 );
92
93 qset->qh.cur_window = cpu_to_le32((1 << qset->max_burst) - 1);
92} 94}
93 95
94/** 96/**
95 * qset_clear - clear fields in a qset so it may be reinserted into a 97 * qset_clear - clear fields in a qset so it may be reinserted into a
96 * schedule 98 * schedule.
99 *
100 * The sequence number and current window are not cleared (see
101 * qset_reset()).
97 */ 102 */
98void qset_clear(struct whc *whc, struct whc_qset *qset) 103void qset_clear(struct whc *whc, struct whc_qset *qset)
99{ 104{
@@ -101,9 +106,8 @@ void qset_clear(struct whc *whc, struct whc_qset *qset)
101 qset->remove = 0; 106 qset->remove = 0;
102 107
103 qset->qh.link = cpu_to_le32(QH_LINK_NTDS(8) | QH_LINK_T); 108 qset->qh.link = cpu_to_le32(QH_LINK_NTDS(8) | QH_LINK_T);
104 qset->qh.status = cpu_to_le16(QH_STATUS_ICUR(qset->td_start)); 109 qset->qh.status = qset->qh.status & QH_STATUS_SEQ_MASK;
105 qset->qh.err_count = 0; 110 qset->qh.err_count = 0;
106 qset->qh.cur_window = cpu_to_le32((1 << qset->max_burst) - 1);
107 qset->qh.scratch[0] = 0; 111 qset->qh.scratch[0] = 0;
108 qset->qh.scratch[1] = 0; 112 qset->qh.scratch[1] = 0;
109 qset->qh.scratch[2] = 0; 113 qset->qh.scratch[2] = 0;
@@ -114,6 +118,20 @@ void qset_clear(struct whc *whc, struct whc_qset *qset)
114} 118}
115 119
116/** 120/**
121 * qset_reset - reset endpoint state in a qset.
122 *
123 * Clears the sequence number and current window. This qset must not
124 * be in the ASL or PZL.
125 */
126void qset_reset(struct whc *whc, struct whc_qset *qset)
127{
128 wait_for_completion(&qset->remove_complete);
129
130 qset->qh.status &= ~QH_STATUS_SEQ_MASK;
131 qset->qh.cur_window = cpu_to_le32((1 << qset->max_burst) - 1);
132}
133
134/**
117 * get_qset - get the qset for an async endpoint 135 * get_qset - get the qset for an async endpoint
118 * 136 *
119 * A new qset is created if one does not already exist. 137 * A new qset is created if one does not already exist.
diff --git a/drivers/usb/host/whci/whcd.h b/drivers/usb/host/whci/whcd.h
index d3543a181dc9..24e94d983c5e 100644
--- a/drivers/usb/host/whci/whcd.h
+++ b/drivers/usb/host/whci/whcd.h
@@ -184,6 +184,7 @@ void qset_free(struct whc *whc, struct whc_qset *qset);
184struct whc_qset *get_qset(struct whc *whc, struct urb *urb, gfp_t mem_flags); 184struct whc_qset *get_qset(struct whc *whc, struct urb *urb, gfp_t mem_flags);
185void qset_delete(struct whc *whc, struct whc_qset *qset); 185void qset_delete(struct whc *whc, struct whc_qset *qset);
186void qset_clear(struct whc *whc, struct whc_qset *qset); 186void qset_clear(struct whc *whc, struct whc_qset *qset);
187void qset_reset(struct whc *whc, struct whc_qset *qset);
187int qset_add_urb(struct whc *whc, struct whc_qset *qset, struct urb *urb, 188int qset_add_urb(struct whc *whc, struct whc_qset *qset, struct urb *urb,
188 gfp_t mem_flags); 189 gfp_t mem_flags);
189void qset_free_std(struct whc *whc, struct whc_std *std); 190void qset_free_std(struct whc *whc, struct whc_std *std);
diff --git a/drivers/usb/host/whci/whci-hc.h b/drivers/usb/host/whci/whci-hc.h
index 51df7e313b38..794dba0d0f0a 100644
--- a/drivers/usb/host/whci/whci-hc.h
+++ b/drivers/usb/host/whci/whci-hc.h
@@ -185,6 +185,7 @@ struct whc_qhead {
185#define QH_STATUS_FLOW_CTRL (1 << 15) 185#define QH_STATUS_FLOW_CTRL (1 << 15)
186#define QH_STATUS_ICUR(i) ((i) << 5) 186#define QH_STATUS_ICUR(i) ((i) << 5)
187#define QH_STATUS_TO_ICUR(s) (((s) >> 5) & 0x7) 187#define QH_STATUS_TO_ICUR(s) (((s) >> 5) & 0x7)
188#define QH_STATUS_SEQ_MASK 0x1f
188 189
189/** 190/**
190 * usb_pipe_to_qh_type - USB core pipe type to QH transfer type 191 * usb_pipe_to_qh_type - USB core pipe type to QH transfer type
diff --git a/drivers/usb/musb/cppi_dma.c b/drivers/usb/musb/cppi_dma.c
index 569ef0fed0f6..1976e9b41800 100644
--- a/drivers/usb/musb/cppi_dma.c
+++ b/drivers/usb/musb/cppi_dma.c
@@ -579,6 +579,7 @@ cppi_next_tx_segment(struct musb *musb, struct cppi_channel *tx)
579 * trigger the "send a ZLP?" confusion. 579 * trigger the "send a ZLP?" confusion.
580 */ 580 */
581 rndis = (maxpacket & 0x3f) == 0 581 rndis = (maxpacket & 0x3f) == 0
582 && length > maxpacket
582 && length < 0xffff 583 && length < 0xffff
583 && (length % maxpacket) != 0; 584 && (length % maxpacket) != 0;
584 585
@@ -1228,27 +1229,7 @@ void cppi_completion(struct musb *musb, u32 rx, u32 tx)
1228 1229
1229 hw_ep = tx_ch->hw_ep; 1230 hw_ep = tx_ch->hw_ep;
1230 1231
1231 /* Peripheral role never repurposes the 1232 musb_dma_completion(musb, index + 1, 1);
1232 * endpoint, so immediate completion is
1233 * safe. Host role waits for the fifo
1234 * to empty (TXPKTRDY irq) before going
1235 * to the next queued bulk transfer.
1236 */
1237 if (is_host_active(cppi->musb)) {
1238#if 0
1239 /* WORKAROUND because we may
1240 * not always get TXKPTRDY ...
1241 */
1242 int csr;
1243
1244 csr = musb_readw(hw_ep->regs,
1245 MUSB_TXCSR);
1246 if (csr & MUSB_TXCSR_TXPKTRDY)
1247#endif
1248 completed = false;
1249 }
1250 if (completed)
1251 musb_dma_completion(musb, index + 1, 1);
1252 1233
1253 } else { 1234 } else {
1254 /* Bigger transfer than we could fit in 1235 /* Bigger transfer than we could fit in
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index 338cd1611ab3..4000cf6d1e81 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -2170,32 +2170,28 @@ static int musb_suspend(struct platform_device *pdev, pm_message_t message)
2170 return 0; 2170 return 0;
2171} 2171}
2172 2172
2173static int musb_resume(struct platform_device *pdev) 2173static int musb_resume_early(struct platform_device *pdev)
2174{ 2174{
2175 unsigned long flags;
2176 struct musb *musb = dev_to_musb(&pdev->dev); 2175 struct musb *musb = dev_to_musb(&pdev->dev);
2177 2176
2178 if (!musb->clock) 2177 if (!musb->clock)
2179 return 0; 2178 return 0;
2180 2179
2181 spin_lock_irqsave(&musb->lock, flags);
2182
2183 if (musb->set_clock) 2180 if (musb->set_clock)
2184 musb->set_clock(musb->clock, 1); 2181 musb->set_clock(musb->clock, 1);
2185 else 2182 else
2186 clk_enable(musb->clock); 2183 clk_enable(musb->clock);
2187 2184
2188 /* for static cmos like DaVinci, register values were preserved 2185 /* for static cmos like DaVinci, register values were preserved
2189 * unless for some reason the whole soc powered down and we're 2186 * unless for some reason the whole soc powered down or the USB
2190 * not treating that as a whole-system restart (e.g. swsusp) 2187 * module got reset through the PSC (vs just being disabled).
2191 */ 2188 */
2192 spin_unlock_irqrestore(&musb->lock, flags);
2193 return 0; 2189 return 0;
2194} 2190}
2195 2191
2196#else 2192#else
2197#define musb_suspend NULL 2193#define musb_suspend NULL
2198#define musb_resume NULL 2194#define musb_resume_early NULL
2199#endif 2195#endif
2200 2196
2201static struct platform_driver musb_driver = { 2197static struct platform_driver musb_driver = {
@@ -2207,7 +2203,7 @@ static struct platform_driver musb_driver = {
2207 .remove = __devexit_p(musb_remove), 2203 .remove = __devexit_p(musb_remove),
2208 .shutdown = musb_shutdown, 2204 .shutdown = musb_shutdown,
2209 .suspend = musb_suspend, 2205 .suspend = musb_suspend,
2210 .resume = musb_resume, 2206 .resume_early = musb_resume_early,
2211}; 2207};
2212 2208
2213/*-------------------------------------------------------------------------*/ 2209/*-------------------------------------------------------------------------*/
diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
index c7ebd0867fcc..f79440cdfe7e 100644
--- a/drivers/usb/musb/musb_gadget.c
+++ b/drivers/usb/musb/musb_gadget.c
@@ -165,9 +165,15 @@ static void nuke(struct musb_ep *ep, const int status)
165 if (is_dma_capable() && ep->dma) { 165 if (is_dma_capable() && ep->dma) {
166 struct dma_controller *c = ep->musb->dma_controller; 166 struct dma_controller *c = ep->musb->dma_controller;
167 int value; 167 int value;
168
168 if (ep->is_in) { 169 if (ep->is_in) {
170 /*
171 * The programming guide says that we must not clear
172 * the DMAMODE bit before DMAENAB, so we only
173 * clear it in the second write...
174 */
169 musb_writew(epio, MUSB_TXCSR, 175 musb_writew(epio, MUSB_TXCSR,
170 0 | MUSB_TXCSR_FLUSHFIFO); 176 MUSB_TXCSR_DMAMODE | MUSB_TXCSR_FLUSHFIFO);
171 musb_writew(epio, MUSB_TXCSR, 177 musb_writew(epio, MUSB_TXCSR,
172 0 | MUSB_TXCSR_FLUSHFIFO); 178 0 | MUSB_TXCSR_FLUSHFIFO);
173 } else { 179 } else {
@@ -230,7 +236,7 @@ static inline int max_ep_writesize(struct musb *musb, struct musb_ep *ep)
230 | IN token(s) are recd from Host. 236 | IN token(s) are recd from Host.
231 | -> DMA interrupt on completion 237 | -> DMA interrupt on completion
232 | calls TxAvail. 238 | calls TxAvail.
233 | -> stop DMA, ~DmaEenab, 239 | -> stop DMA, ~DMAENAB,
234 | -> set TxPktRdy for last short pkt or zlp 240 | -> set TxPktRdy for last short pkt or zlp
235 | -> Complete Request 241 | -> Complete Request
236 | -> Continue next request (call txstate) 242 | -> Continue next request (call txstate)
@@ -315,9 +321,17 @@ static void txstate(struct musb *musb, struct musb_request *req)
315 request->dma, request_size); 321 request->dma, request_size);
316 if (use_dma) { 322 if (use_dma) {
317 if (musb_ep->dma->desired_mode == 0) { 323 if (musb_ep->dma->desired_mode == 0) {
318 /* ASSERT: DMAENAB is clear */ 324 /*
319 csr &= ~(MUSB_TXCSR_AUTOSET | 325 * We must not clear the DMAMODE bit
320 MUSB_TXCSR_DMAMODE); 326 * before the DMAENAB bit -- and the
327 * latter doesn't always get cleared
328 * before we get here...
329 */
330 csr &= ~(MUSB_TXCSR_AUTOSET
331 | MUSB_TXCSR_DMAENAB);
332 musb_writew(epio, MUSB_TXCSR, csr
333 | MUSB_TXCSR_P_WZC_BITS);
334 csr &= ~MUSB_TXCSR_DMAMODE;
321 csr |= (MUSB_TXCSR_DMAENAB | 335 csr |= (MUSB_TXCSR_DMAENAB |
322 MUSB_TXCSR_MODE); 336 MUSB_TXCSR_MODE);
323 /* against programming guide */ 337 /* against programming guide */
@@ -334,10 +348,7 @@ static void txstate(struct musb *musb, struct musb_request *req)
334 348
335#elif defined(CONFIG_USB_TI_CPPI_DMA) 349#elif defined(CONFIG_USB_TI_CPPI_DMA)
336 /* program endpoint CSR first, then setup DMA */ 350 /* program endpoint CSR first, then setup DMA */
337 csr &= ~(MUSB_TXCSR_AUTOSET 351 csr &= ~(MUSB_TXCSR_P_UNDERRUN | MUSB_TXCSR_TXPKTRDY);
338 | MUSB_TXCSR_DMAMODE
339 | MUSB_TXCSR_P_UNDERRUN
340 | MUSB_TXCSR_TXPKTRDY);
341 csr |= MUSB_TXCSR_MODE | MUSB_TXCSR_DMAENAB; 352 csr |= MUSB_TXCSR_MODE | MUSB_TXCSR_DMAENAB;
342 musb_writew(epio, MUSB_TXCSR, 353 musb_writew(epio, MUSB_TXCSR,
343 (MUSB_TXCSR_P_WZC_BITS & ~MUSB_TXCSR_P_UNDERRUN) 354 (MUSB_TXCSR_P_WZC_BITS & ~MUSB_TXCSR_P_UNDERRUN)
@@ -364,8 +375,8 @@ static void txstate(struct musb *musb, struct musb_request *req)
364 if (!use_dma) { 375 if (!use_dma) {
365 c->channel_release(musb_ep->dma); 376 c->channel_release(musb_ep->dma);
366 musb_ep->dma = NULL; 377 musb_ep->dma = NULL;
367 /* ASSERT: DMAENAB clear */ 378 csr &= ~MUSB_TXCSR_DMAENAB;
368 csr &= ~(MUSB_TXCSR_DMAMODE | MUSB_TXCSR_MODE); 379 musb_writew(epio, MUSB_TXCSR, csr);
369 /* invariant: prequest->buf is non-null */ 380 /* invariant: prequest->buf is non-null */
370 } 381 }
371#elif defined(CONFIG_USB_TUSB_OMAP_DMA) 382#elif defined(CONFIG_USB_TUSB_OMAP_DMA)
diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
index 499c431a6d62..db1b57415ec7 100644
--- a/drivers/usb/musb/musb_host.c
+++ b/drivers/usb/musb/musb_host.c
@@ -4,6 +4,7 @@
4 * Copyright 2005 Mentor Graphics Corporation 4 * Copyright 2005 Mentor Graphics Corporation
5 * Copyright (C) 2005-2006 by Texas Instruments 5 * Copyright (C) 2005-2006 by Texas Instruments
6 * Copyright (C) 2006-2007 Nokia Corporation 6 * Copyright (C) 2006-2007 Nokia Corporation
7 * Copyright (C) 2008-2009 MontaVista Software, Inc. <source@mvista.com>
7 * 8 *
8 * This program is free software; you can redistribute it and/or 9 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License 10 * modify it under the terms of the GNU General Public License
@@ -96,8 +97,8 @@
96 97
97 98
98static void musb_ep_program(struct musb *musb, u8 epnum, 99static void musb_ep_program(struct musb *musb, u8 epnum,
99 struct urb *urb, unsigned int nOut, 100 struct urb *urb, int is_out,
100 u8 *buf, u32 len); 101 u8 *buf, u32 offset, u32 len);
101 102
102/* 103/*
103 * Clear TX fifo. Needed to avoid BABBLE errors. 104 * Clear TX fifo. Needed to avoid BABBLE errors.
@@ -125,6 +126,29 @@ static void musb_h_tx_flush_fifo(struct musb_hw_ep *ep)
125 } 126 }
126} 127}
127 128
129static void musb_h_ep0_flush_fifo(struct musb_hw_ep *ep)
130{
131 void __iomem *epio = ep->regs;
132 u16 csr;
133 int retries = 5;
134
135 /* scrub any data left in the fifo */
136 do {
137 csr = musb_readw(epio, MUSB_TXCSR);
138 if (!(csr & (MUSB_CSR0_TXPKTRDY | MUSB_CSR0_RXPKTRDY)))
139 break;
140 musb_writew(epio, MUSB_TXCSR, MUSB_CSR0_FLUSHFIFO);
141 csr = musb_readw(epio, MUSB_TXCSR);
142 udelay(10);
143 } while (--retries);
144
145 WARN(!retries, "Could not flush host TX%d fifo: csr: %04x\n",
146 ep->epnum, csr);
147
148 /* and reset for the next transfer */
149 musb_writew(epio, MUSB_TXCSR, 0);
150}
151
128/* 152/*
129 * Start transmit. Caller is responsible for locking shared resources. 153 * Start transmit. Caller is responsible for locking shared resources.
130 * musb must be locked. 154 * musb must be locked.
@@ -145,13 +169,15 @@ static inline void musb_h_tx_start(struct musb_hw_ep *ep)
145 169
146} 170}
147 171
148static inline void cppi_host_txdma_start(struct musb_hw_ep *ep) 172static inline void musb_h_tx_dma_start(struct musb_hw_ep *ep)
149{ 173{
150 u16 txcsr; 174 u16 txcsr;
151 175
152 /* NOTE: no locks here; caller should lock and select EP */ 176 /* NOTE: no locks here; caller should lock and select EP */
153 txcsr = musb_readw(ep->regs, MUSB_TXCSR); 177 txcsr = musb_readw(ep->regs, MUSB_TXCSR);
154 txcsr |= MUSB_TXCSR_DMAENAB | MUSB_TXCSR_H_WZC_BITS; 178 txcsr |= MUSB_TXCSR_DMAENAB | MUSB_TXCSR_H_WZC_BITS;
179 if (is_cppi_enabled())
180 txcsr |= MUSB_TXCSR_DMAMODE;
155 musb_writew(ep->regs, MUSB_TXCSR, txcsr); 181 musb_writew(ep->regs, MUSB_TXCSR, txcsr);
156} 182}
157 183
@@ -166,9 +192,10 @@ musb_start_urb(struct musb *musb, int is_in, struct musb_qh *qh)
166{ 192{
167 u16 frame; 193 u16 frame;
168 u32 len; 194 u32 len;
169 void *buf;
170 void __iomem *mbase = musb->mregs; 195 void __iomem *mbase = musb->mregs;
171 struct urb *urb = next_urb(qh); 196 struct urb *urb = next_urb(qh);
197 void *buf = urb->transfer_buffer;
198 u32 offset = 0;
172 struct musb_hw_ep *hw_ep = qh->hw_ep; 199 struct musb_hw_ep *hw_ep = qh->hw_ep;
173 unsigned pipe = urb->pipe; 200 unsigned pipe = urb->pipe;
174 u8 address = usb_pipedevice(pipe); 201 u8 address = usb_pipedevice(pipe);
@@ -191,7 +218,7 @@ musb_start_urb(struct musb *musb, int is_in, struct musb_qh *qh)
191 case USB_ENDPOINT_XFER_ISOC: 218 case USB_ENDPOINT_XFER_ISOC:
192 qh->iso_idx = 0; 219 qh->iso_idx = 0;
193 qh->frame = 0; 220 qh->frame = 0;
194 buf = urb->transfer_buffer + urb->iso_frame_desc[0].offset; 221 offset = urb->iso_frame_desc[0].offset;
195 len = urb->iso_frame_desc[0].length; 222 len = urb->iso_frame_desc[0].length;
196 break; 223 break;
197 default: /* bulk, interrupt */ 224 default: /* bulk, interrupt */
@@ -209,14 +236,14 @@ musb_start_urb(struct musb *musb, int is_in, struct musb_qh *qh)
209 case USB_ENDPOINT_XFER_ISOC: s = "-iso"; break; 236 case USB_ENDPOINT_XFER_ISOC: s = "-iso"; break;
210 default: s = "-intr"; break; 237 default: s = "-intr"; break;
211 }; s; }), 238 }; s; }),
212 epnum, buf, len); 239 epnum, buf + offset, len);
213 240
214 /* Configure endpoint */ 241 /* Configure endpoint */
215 if (is_in || hw_ep->is_shared_fifo) 242 if (is_in || hw_ep->is_shared_fifo)
216 hw_ep->in_qh = qh; 243 hw_ep->in_qh = qh;
217 else 244 else
218 hw_ep->out_qh = qh; 245 hw_ep->out_qh = qh;
219 musb_ep_program(musb, epnum, urb, !is_in, buf, len); 246 musb_ep_program(musb, epnum, urb, !is_in, buf, offset, len);
220 247
221 /* transmit may have more work: start it when it is time */ 248 /* transmit may have more work: start it when it is time */
222 if (is_in) 249 if (is_in)
@@ -227,7 +254,6 @@ musb_start_urb(struct musb *musb, int is_in, struct musb_qh *qh)
227 case USB_ENDPOINT_XFER_ISOC: 254 case USB_ENDPOINT_XFER_ISOC:
228 case USB_ENDPOINT_XFER_INT: 255 case USB_ENDPOINT_XFER_INT:
229 DBG(3, "check whether there's still time for periodic Tx\n"); 256 DBG(3, "check whether there's still time for periodic Tx\n");
230 qh->iso_idx = 0;
231 frame = musb_readw(mbase, MUSB_FRAME); 257 frame = musb_readw(mbase, MUSB_FRAME);
232 /* FIXME this doesn't implement that scheduling policy ... 258 /* FIXME this doesn't implement that scheduling policy ...
233 * or handle framecounter wrapping 259 * or handle framecounter wrapping
@@ -256,7 +282,7 @@ start:
256 if (!hw_ep->tx_channel) 282 if (!hw_ep->tx_channel)
257 musb_h_tx_start(hw_ep); 283 musb_h_tx_start(hw_ep);
258 else if (is_cppi_enabled() || tusb_dma_omap()) 284 else if (is_cppi_enabled() || tusb_dma_omap())
259 cppi_host_txdma_start(hw_ep); 285 musb_h_tx_dma_start(hw_ep);
260 } 286 }
261} 287}
262 288
@@ -567,10 +593,17 @@ musb_rx_reinit(struct musb *musb, struct musb_qh *qh, struct musb_hw_ep *ep)
567 csr = musb_readw(ep->regs, MUSB_TXCSR); 593 csr = musb_readw(ep->regs, MUSB_TXCSR);
568 if (csr & MUSB_TXCSR_MODE) { 594 if (csr & MUSB_TXCSR_MODE) {
569 musb_h_tx_flush_fifo(ep); 595 musb_h_tx_flush_fifo(ep);
596 csr = musb_readw(ep->regs, MUSB_TXCSR);
570 musb_writew(ep->regs, MUSB_TXCSR, 597 musb_writew(ep->regs, MUSB_TXCSR,
571 MUSB_TXCSR_FRCDATATOG); 598 csr | MUSB_TXCSR_FRCDATATOG);
572 } 599 }
573 /* clear mode (and everything else) to enable Rx */ 600
601 /*
602 * Clear the MODE bit (and everything else) to enable Rx.
603 * NOTE: we mustn't clear the DMAMODE bit before DMAENAB.
604 */
605 if (csr & MUSB_TXCSR_DMAMODE)
606 musb_writew(ep->regs, MUSB_TXCSR, MUSB_TXCSR_DMAMODE);
574 musb_writew(ep->regs, MUSB_TXCSR, 0); 607 musb_writew(ep->regs, MUSB_TXCSR, 0);
575 608
576 /* scrub all previous state, clearing toggle */ 609 /* scrub all previous state, clearing toggle */
@@ -601,14 +634,68 @@ musb_rx_reinit(struct musb *musb, struct musb_qh *qh, struct musb_hw_ep *ep)
601 ep->rx_reinit = 0; 634 ep->rx_reinit = 0;
602} 635}
603 636
637static bool musb_tx_dma_program(struct dma_controller *dma,
638 struct musb_hw_ep *hw_ep, struct musb_qh *qh,
639 struct urb *urb, u32 offset, u32 length)
640{
641 struct dma_channel *channel = hw_ep->tx_channel;
642 void __iomem *epio = hw_ep->regs;
643 u16 pkt_size = qh->maxpacket;
644 u16 csr;
645 u8 mode;
646
647#ifdef CONFIG_USB_INVENTRA_DMA
648 if (length > channel->max_len)
649 length = channel->max_len;
650
651 csr = musb_readw(epio, MUSB_TXCSR);
652 if (length > pkt_size) {
653 mode = 1;
654 csr |= MUSB_TXCSR_AUTOSET
655 | MUSB_TXCSR_DMAMODE
656 | MUSB_TXCSR_DMAENAB;
657 } else {
658 mode = 0;
659 csr &= ~(MUSB_TXCSR_AUTOSET | MUSB_TXCSR_DMAMODE);
660 csr |= MUSB_TXCSR_DMAENAB; /* against programmer's guide */
661 }
662 channel->desired_mode = mode;
663 musb_writew(epio, MUSB_TXCSR, csr);
664#else
665 if (!is_cppi_enabled() && !tusb_dma_omap())
666 return false;
667
668 channel->actual_len = 0;
669
670 /*
671 * TX uses "RNDIS" mode automatically but needs help
672 * to identify the zero-length-final-packet case.
673 */
674 mode = (urb->transfer_flags & URB_ZERO_PACKET) ? 1 : 0;
675#endif
676
677 qh->segsize = length;
678
679 if (!dma->channel_program(channel, pkt_size, mode,
680 urb->transfer_dma + offset, length)) {
681 dma->channel_release(channel);
682 hw_ep->tx_channel = NULL;
683
684 csr = musb_readw(epio, MUSB_TXCSR);
685 csr &= ~(MUSB_TXCSR_AUTOSET | MUSB_TXCSR_DMAENAB);
686 musb_writew(epio, MUSB_TXCSR, csr | MUSB_TXCSR_H_WZC_BITS);
687 return false;
688 }
689 return true;
690}
604 691
605/* 692/*
606 * Program an HDRC endpoint as per the given URB 693 * Program an HDRC endpoint as per the given URB
607 * Context: irqs blocked, controller lock held 694 * Context: irqs blocked, controller lock held
608 */ 695 */
609static void musb_ep_program(struct musb *musb, u8 epnum, 696static void musb_ep_program(struct musb *musb, u8 epnum,
610 struct urb *urb, unsigned int is_out, 697 struct urb *urb, int is_out,
611 u8 *buf, u32 len) 698 u8 *buf, u32 offset, u32 len)
612{ 699{
613 struct dma_controller *dma_controller; 700 struct dma_controller *dma_controller;
614 struct dma_channel *dma_channel; 701 struct dma_channel *dma_channel;
@@ -667,12 +754,17 @@ static void musb_ep_program(struct musb *musb, u8 epnum,
667 754
668 /* general endpoint setup */ 755 /* general endpoint setup */
669 if (epnum) { 756 if (epnum) {
670 /* ASSERT: TXCSR_DMAENAB was already cleared */
671
672 /* flush all old state, set default */ 757 /* flush all old state, set default */
673 musb_h_tx_flush_fifo(hw_ep); 758 musb_h_tx_flush_fifo(hw_ep);
759
760 /*
761 * We must not clear the DMAMODE bit before or in
762 * the same cycle with the DMAENAB bit, so we clear
763 * the latter first...
764 */
674 csr &= ~(MUSB_TXCSR_H_NAKTIMEOUT 765 csr &= ~(MUSB_TXCSR_H_NAKTIMEOUT
675 | MUSB_TXCSR_DMAMODE 766 | MUSB_TXCSR_AUTOSET
767 | MUSB_TXCSR_DMAENAB
676 | MUSB_TXCSR_FRCDATATOG 768 | MUSB_TXCSR_FRCDATATOG
677 | MUSB_TXCSR_H_RXSTALL 769 | MUSB_TXCSR_H_RXSTALL
678 | MUSB_TXCSR_H_ERROR 770 | MUSB_TXCSR_H_ERROR
@@ -680,24 +772,20 @@ static void musb_ep_program(struct musb *musb, u8 epnum,
680 ); 772 );
681 csr |= MUSB_TXCSR_MODE; 773 csr |= MUSB_TXCSR_MODE;
682 774
683 if (usb_gettoggle(urb->dev, 775 if (usb_gettoggle(urb->dev, qh->epnum, 1))
684 qh->epnum, 1))
685 csr |= MUSB_TXCSR_H_WR_DATATOGGLE 776 csr |= MUSB_TXCSR_H_WR_DATATOGGLE
686 | MUSB_TXCSR_H_DATATOGGLE; 777 | MUSB_TXCSR_H_DATATOGGLE;
687 else 778 else
688 csr |= MUSB_TXCSR_CLRDATATOG; 779 csr |= MUSB_TXCSR_CLRDATATOG;
689 780
690 /* twice in case of double packet buffering */
691 musb_writew(epio, MUSB_TXCSR, csr); 781 musb_writew(epio, MUSB_TXCSR, csr);
692 /* REVISIT may need to clear FLUSHFIFO ... */ 782 /* REVISIT may need to clear FLUSHFIFO ... */
783 csr &= ~MUSB_TXCSR_DMAMODE;
693 musb_writew(epio, MUSB_TXCSR, csr); 784 musb_writew(epio, MUSB_TXCSR, csr);
694 csr = musb_readw(epio, MUSB_TXCSR); 785 csr = musb_readw(epio, MUSB_TXCSR);
695 } else { 786 } else {
696 /* endpoint 0: just flush */ 787 /* endpoint 0: just flush */
697 musb_writew(epio, MUSB_CSR0, 788 musb_h_ep0_flush_fifo(hw_ep);
698 csr | MUSB_CSR0_FLUSHFIFO);
699 musb_writew(epio, MUSB_CSR0,
700 csr | MUSB_CSR0_FLUSHFIFO);
701 } 789 }
702 790
703 /* target addr and (for multipoint) hub addr/port */ 791 /* target addr and (for multipoint) hub addr/port */
@@ -734,113 +822,14 @@ static void musb_ep_program(struct musb *musb, u8 epnum,
734 else 822 else
735 load_count = min((u32) packet_sz, len); 823 load_count = min((u32) packet_sz, len);
736 824
737#ifdef CONFIG_USB_INVENTRA_DMA 825 if (dma_channel && musb_tx_dma_program(dma_controller,
738 if (dma_channel) { 826 hw_ep, qh, urb, offset, len))
739 827 load_count = 0;
740 /* clear previous state */
741 csr = musb_readw(epio, MUSB_TXCSR);
742 csr &= ~(MUSB_TXCSR_AUTOSET
743 | MUSB_TXCSR_DMAMODE
744 | MUSB_TXCSR_DMAENAB);
745 csr |= MUSB_TXCSR_MODE;
746 musb_writew(epio, MUSB_TXCSR,
747 csr | MUSB_TXCSR_MODE);
748
749 qh->segsize = min(len, dma_channel->max_len);
750
751 if (qh->segsize <= packet_sz)
752 dma_channel->desired_mode = 0;
753 else
754 dma_channel->desired_mode = 1;
755
756
757 if (dma_channel->desired_mode == 0) {
758 csr &= ~(MUSB_TXCSR_AUTOSET
759 | MUSB_TXCSR_DMAMODE);
760 csr |= (MUSB_TXCSR_DMAENAB);
761 /* against programming guide */
762 } else
763 csr |= (MUSB_TXCSR_AUTOSET
764 | MUSB_TXCSR_DMAENAB
765 | MUSB_TXCSR_DMAMODE);
766
767 musb_writew(epio, MUSB_TXCSR, csr);
768
769 dma_ok = dma_controller->channel_program(
770 dma_channel, packet_sz,
771 dma_channel->desired_mode,
772 urb->transfer_dma,
773 qh->segsize);
774 if (dma_ok) {
775 load_count = 0;
776 } else {
777 dma_controller->channel_release(dma_channel);
778 if (is_out)
779 hw_ep->tx_channel = NULL;
780 else
781 hw_ep->rx_channel = NULL;
782 dma_channel = NULL;
783 }
784 }
785#endif
786
787 /* candidate for DMA */
788 if ((is_cppi_enabled() || tusb_dma_omap()) && dma_channel) {
789
790 /* program endpoint CSRs first, then setup DMA.
791 * assume CPPI setup succeeds.
792 * defer enabling dma.
793 */
794 csr = musb_readw(epio, MUSB_TXCSR);
795 csr &= ~(MUSB_TXCSR_AUTOSET
796 | MUSB_TXCSR_DMAMODE
797 | MUSB_TXCSR_DMAENAB);
798 csr |= MUSB_TXCSR_MODE;
799 musb_writew(epio, MUSB_TXCSR,
800 csr | MUSB_TXCSR_MODE);
801
802 dma_channel->actual_len = 0L;
803 qh->segsize = len;
804
805 /* TX uses "rndis" mode automatically, but needs help
806 * to identify the zero-length-final-packet case.
807 */
808 dma_ok = dma_controller->channel_program(
809 dma_channel, packet_sz,
810 (urb->transfer_flags
811 & URB_ZERO_PACKET)
812 == URB_ZERO_PACKET,
813 urb->transfer_dma,
814 qh->segsize);
815 if (dma_ok) {
816 load_count = 0;
817 } else {
818 dma_controller->channel_release(dma_channel);
819 hw_ep->tx_channel = NULL;
820 dma_channel = NULL;
821
822 /* REVISIT there's an error path here that
823 * needs handling: can't do dma, but
824 * there's no pio buffer address...
825 */
826 }
827 }
828 828
829 if (load_count) { 829 if (load_count) {
830 /* ASSERT: TXCSR_DMAENAB was already cleared */
831
832 /* PIO to load FIFO */ 830 /* PIO to load FIFO */
833 qh->segsize = load_count; 831 qh->segsize = load_count;
834 musb_write_fifo(hw_ep, load_count, buf); 832 musb_write_fifo(hw_ep, load_count, buf);
835 csr = musb_readw(epio, MUSB_TXCSR);
836 csr &= ~(MUSB_TXCSR_DMAENAB
837 | MUSB_TXCSR_DMAMODE
838 | MUSB_TXCSR_AUTOSET);
839 /* write CSR */
840 csr |= MUSB_TXCSR_MODE;
841
842 if (epnum)
843 musb_writew(epio, MUSB_TXCSR, csr);
844 } 833 }
845 834
846 /* re-enable interrupt */ 835 /* re-enable interrupt */
@@ -895,7 +884,7 @@ static void musb_ep_program(struct musb *musb, u8 epnum,
895 dma_channel, packet_sz, 884 dma_channel, packet_sz,
896 !(urb->transfer_flags 885 !(urb->transfer_flags
897 & URB_SHORT_NOT_OK), 886 & URB_SHORT_NOT_OK),
898 urb->transfer_dma, 887 urb->transfer_dma + offset,
899 qh->segsize); 888 qh->segsize);
900 if (!dma_ok) { 889 if (!dma_ok) {
901 dma_controller->channel_release( 890 dma_controller->channel_release(
@@ -1063,11 +1052,7 @@ irqreturn_t musb_h_ep0_irq(struct musb *musb)
1063 csr &= ~MUSB_CSR0_H_NAKTIMEOUT; 1052 csr &= ~MUSB_CSR0_H_NAKTIMEOUT;
1064 musb_writew(epio, MUSB_CSR0, csr); 1053 musb_writew(epio, MUSB_CSR0, csr);
1065 } else { 1054 } else {
1066 csr |= MUSB_CSR0_FLUSHFIFO; 1055 musb_h_ep0_flush_fifo(hw_ep);
1067 musb_writew(epio, MUSB_CSR0, csr);
1068 musb_writew(epio, MUSB_CSR0, csr);
1069 csr &= ~MUSB_CSR0_H_NAKTIMEOUT;
1070 musb_writew(epio, MUSB_CSR0, csr);
1071 } 1056 }
1072 1057
1073 musb_writeb(epio, MUSB_NAKLIMIT0, 0); 1058 musb_writeb(epio, MUSB_NAKLIMIT0, 0);
@@ -1081,10 +1066,7 @@ irqreturn_t musb_h_ep0_irq(struct musb *musb)
1081 * SHOULD NEVER HAPPEN! */ 1066 * SHOULD NEVER HAPPEN! */
1082 ERR("no URB for end 0\n"); 1067 ERR("no URB for end 0\n");
1083 1068
1084 musb_writew(epio, MUSB_CSR0, MUSB_CSR0_FLUSHFIFO); 1069 musb_h_ep0_flush_fifo(hw_ep);
1085 musb_writew(epio, MUSB_CSR0, MUSB_CSR0_FLUSHFIFO);
1086 musb_writew(epio, MUSB_CSR0, 0);
1087
1088 goto done; 1070 goto done;
1089 } 1071 }
1090 1072
@@ -1145,8 +1127,8 @@ void musb_host_tx(struct musb *musb, u8 epnum)
1145 int pipe; 1127 int pipe;
1146 bool done = false; 1128 bool done = false;
1147 u16 tx_csr; 1129 u16 tx_csr;
1148 size_t wLength = 0; 1130 size_t length = 0;
1149 u8 *buf = NULL; 1131 size_t offset = 0;
1150 struct urb *urb; 1132 struct urb *urb;
1151 struct musb_hw_ep *hw_ep = musb->endpoints + epnum; 1133 struct musb_hw_ep *hw_ep = musb->endpoints + epnum;
1152 void __iomem *epio = hw_ep->regs; 1134 void __iomem *epio = hw_ep->regs;
@@ -1164,7 +1146,7 @@ void musb_host_tx(struct musb *musb, u8 epnum)
1164 /* with CPPI, DMA sometimes triggers "extra" irqs */ 1146 /* with CPPI, DMA sometimes triggers "extra" irqs */
1165 if (!urb) { 1147 if (!urb) {
1166 DBG(4, "extra TX%d ready, csr %04x\n", epnum, tx_csr); 1148 DBG(4, "extra TX%d ready, csr %04x\n", epnum, tx_csr);
1167 goto finish; 1149 return;
1168 } 1150 }
1169 1151
1170 pipe = urb->pipe; 1152 pipe = urb->pipe;
@@ -1201,7 +1183,7 @@ void musb_host_tx(struct musb *musb, u8 epnum)
1201 musb_writew(epio, MUSB_TXCSR, 1183 musb_writew(epio, MUSB_TXCSR,
1202 MUSB_TXCSR_H_WZC_BITS 1184 MUSB_TXCSR_H_WZC_BITS
1203 | MUSB_TXCSR_TXPKTRDY); 1185 | MUSB_TXCSR_TXPKTRDY);
1204 goto finish; 1186 return;
1205 } 1187 }
1206 1188
1207 if (status) { 1189 if (status) {
@@ -1233,29 +1215,89 @@ void musb_host_tx(struct musb *musb, u8 epnum)
1233 /* second cppi case */ 1215 /* second cppi case */
1234 if (dma_channel_status(dma) == MUSB_DMA_STATUS_BUSY) { 1216 if (dma_channel_status(dma) == MUSB_DMA_STATUS_BUSY) {
1235 DBG(4, "extra TX%d ready, csr %04x\n", epnum, tx_csr); 1217 DBG(4, "extra TX%d ready, csr %04x\n", epnum, tx_csr);
1236 goto finish; 1218 return;
1219 }
1220
1221 if (is_dma_capable() && dma && !status) {
1222 /*
1223 * DMA has completed. But if we're using DMA mode 1 (multi
1224 * packet DMA), we need a terminal TXPKTRDY interrupt before
1225 * we can consider this transfer completed, lest we trash
1226 * its last packet when writing the next URB's data. So we
1227 * switch back to mode 0 to get that interrupt; we'll come
1228 * back here once it happens.
1229 */
1230 if (tx_csr & MUSB_TXCSR_DMAMODE) {
1231 /*
1232 * We shouldn't clear DMAMODE with DMAENAB set; so
1233 * clear them in a safe order. That should be OK
1234 * once TXPKTRDY has been set (and I've never seen
1235 * it being 0 at this moment -- DMA interrupt latency
1236 * is significant) but if it hasn't been then we have
1237 * no choice but to stop being polite and ignore the
1238 * programmer's guide... :-)
1239 *
1240 * Note that we must write TXCSR with TXPKTRDY cleared
1241 * in order not to re-trigger the packet send (this bit
1242 * can't be cleared by CPU), and there's another caveat:
1243 * TXPKTRDY may be set shortly and then cleared in the
1244 * double-buffered FIFO mode, so we do an extra TXCSR
1245 * read for debouncing...
1246 */
1247 tx_csr &= musb_readw(epio, MUSB_TXCSR);
1248 if (tx_csr & MUSB_TXCSR_TXPKTRDY) {
1249 tx_csr &= ~(MUSB_TXCSR_DMAENAB |
1250 MUSB_TXCSR_TXPKTRDY);
1251 musb_writew(epio, MUSB_TXCSR,
1252 tx_csr | MUSB_TXCSR_H_WZC_BITS);
1253 }
1254 tx_csr &= ~(MUSB_TXCSR_DMAMODE |
1255 MUSB_TXCSR_TXPKTRDY);
1256 musb_writew(epio, MUSB_TXCSR,
1257 tx_csr | MUSB_TXCSR_H_WZC_BITS);
1258
1259 /*
1260 * There is no guarantee that we'll get an interrupt
1261 * after clearing DMAMODE as we might have done this
1262 * too late (after TXPKTRDY was cleared by controller).
1263 * Re-read TXCSR as we have spoiled its previous value.
1264 */
1265 tx_csr = musb_readw(epio, MUSB_TXCSR);
1266 }
1237 1267
1268 /*
1269 * We may get here from a DMA completion or TXPKTRDY interrupt.
1270 * In any case, we must check the FIFO status here and bail out
1271 * only if the FIFO still has data -- that should prevent the
1272 * "missed" TXPKTRDY interrupts and deal with double-buffered
1273 * FIFO mode too...
1274 */
1275 if (tx_csr & (MUSB_TXCSR_FIFONOTEMPTY | MUSB_TXCSR_TXPKTRDY)) {
1276 DBG(2, "DMA complete but packet still in FIFO, "
1277 "CSR %04x\n", tx_csr);
1278 return;
1279 }
1238 } 1280 }
1239 1281
1240 /* REVISIT this looks wrong... */
1241 if (!status || dma || usb_pipeisoc(pipe)) { 1282 if (!status || dma || usb_pipeisoc(pipe)) {
1242 if (dma) 1283 if (dma)
1243 wLength = dma->actual_len; 1284 length = dma->actual_len;
1244 else 1285 else
1245 wLength = qh->segsize; 1286 length = qh->segsize;
1246 qh->offset += wLength; 1287 qh->offset += length;
1247 1288
1248 if (usb_pipeisoc(pipe)) { 1289 if (usb_pipeisoc(pipe)) {
1249 struct usb_iso_packet_descriptor *d; 1290 struct usb_iso_packet_descriptor *d;
1250 1291
1251 d = urb->iso_frame_desc + qh->iso_idx; 1292 d = urb->iso_frame_desc + qh->iso_idx;
1252 d->actual_length = qh->segsize; 1293 d->actual_length = length;
1294 d->status = status;
1253 if (++qh->iso_idx >= urb->number_of_packets) { 1295 if (++qh->iso_idx >= urb->number_of_packets) {
1254 done = true; 1296 done = true;
1255 } else { 1297 } else {
1256 d++; 1298 d++;
1257 buf = urb->transfer_buffer + d->offset; 1299 offset = d->offset;
1258 wLength = d->length; 1300 length = d->length;
1259 } 1301 }
1260 } else if (dma) { 1302 } else if (dma) {
1261 done = true; 1303 done = true;
@@ -1268,10 +1310,8 @@ void musb_host_tx(struct musb *musb, u8 epnum)
1268 & URB_ZERO_PACKET)) 1310 & URB_ZERO_PACKET))
1269 done = true; 1311 done = true;
1270 if (!done) { 1312 if (!done) {
1271 buf = urb->transfer_buffer 1313 offset = qh->offset;
1272 + qh->offset; 1314 length = urb->transfer_buffer_length - offset;
1273 wLength = urb->transfer_buffer_length
1274 - qh->offset;
1275 } 1315 }
1276 } 1316 }
1277 } 1317 }
@@ -1290,28 +1330,31 @@ void musb_host_tx(struct musb *musb, u8 epnum)
1290 urb->status = status; 1330 urb->status = status;
1291 urb->actual_length = qh->offset; 1331 urb->actual_length = qh->offset;
1292 musb_advance_schedule(musb, urb, hw_ep, USB_DIR_OUT); 1332 musb_advance_schedule(musb, urb, hw_ep, USB_DIR_OUT);
1333 return;
1334 } else if (usb_pipeisoc(pipe) && dma) {
1335 if (musb_tx_dma_program(musb->dma_controller, hw_ep, qh, urb,
1336 offset, length))
1337 return;
1338 } else if (tx_csr & MUSB_TXCSR_DMAENAB) {
1339 DBG(1, "not complete, but DMA enabled?\n");
1340 return;
1341 }
1293 1342
1294 } else if (!(tx_csr & MUSB_TXCSR_DMAENAB)) { 1343 /*
1295 /* WARN_ON(!buf); */ 1344 * PIO: start next packet in this URB.
1296 1345 *
1297 /* REVISIT: some docs say that when hw_ep->tx_double_buffered, 1346 * REVISIT: some docs say that when hw_ep->tx_double_buffered,
1298 * (and presumably, fifo is not half-full) we should write TWO 1347 * (and presumably, FIFO is not half-full) we should write *two*
1299 * packets before updating TXCSR ... other docs disagree ... 1348 * packets before updating TXCSR; other docs disagree...
1300 */ 1349 */
1301 /* PIO: start next packet in this URB */ 1350 if (length > qh->maxpacket)
1302 if (wLength > qh->maxpacket) 1351 length = qh->maxpacket;
1303 wLength = qh->maxpacket; 1352 musb_write_fifo(hw_ep, length, urb->transfer_buffer + offset);
1304 musb_write_fifo(hw_ep, wLength, buf); 1353 qh->segsize = length;
1305 qh->segsize = wLength;
1306
1307 musb_ep_select(mbase, epnum);
1308 musb_writew(epio, MUSB_TXCSR,
1309 MUSB_TXCSR_H_WZC_BITS | MUSB_TXCSR_TXPKTRDY);
1310 } else
1311 DBG(1, "not complete, but dma enabled?\n");
1312 1354
1313finish: 1355 musb_ep_select(mbase, epnum);
1314 return; 1356 musb_writew(epio, MUSB_TXCSR,
1357 MUSB_TXCSR_H_WZC_BITS | MUSB_TXCSR_TXPKTRDY);
1315} 1358}
1316 1359
1317 1360
@@ -1841,7 +1884,7 @@ static int musb_urb_enqueue(
1841 unsigned long flags; 1884 unsigned long flags;
1842 struct musb *musb = hcd_to_musb(hcd); 1885 struct musb *musb = hcd_to_musb(hcd);
1843 struct usb_host_endpoint *hep = urb->ep; 1886 struct usb_host_endpoint *hep = urb->ep;
1844 struct musb_qh *qh = hep->hcpriv; 1887 struct musb_qh *qh;
1845 struct usb_endpoint_descriptor *epd = &hep->desc; 1888 struct usb_endpoint_descriptor *epd = &hep->desc;
1846 int ret; 1889 int ret;
1847 unsigned type_reg; 1890 unsigned type_reg;
@@ -1853,22 +1896,21 @@ static int musb_urb_enqueue(
1853 1896
1854 spin_lock_irqsave(&musb->lock, flags); 1897 spin_lock_irqsave(&musb->lock, flags);
1855 ret = usb_hcd_link_urb_to_ep(hcd, urb); 1898 ret = usb_hcd_link_urb_to_ep(hcd, urb);
1899 qh = ret ? NULL : hep->hcpriv;
1900 if (qh)
1901 urb->hcpriv = qh;
1856 spin_unlock_irqrestore(&musb->lock, flags); 1902 spin_unlock_irqrestore(&musb->lock, flags);
1857 if (ret)
1858 return ret;
1859 1903
1860 /* DMA mapping was already done, if needed, and this urb is on 1904 /* DMA mapping was already done, if needed, and this urb is on
1861 * hep->urb_list ... so there's little to do unless hep wasn't 1905 * hep->urb_list now ... so we're done, unless hep wasn't yet
1862 * yet scheduled onto a live qh. 1906 * scheduled onto a live qh.
1863 * 1907 *
1864 * REVISIT best to keep hep->hcpriv valid until the endpoint gets 1908 * REVISIT best to keep hep->hcpriv valid until the endpoint gets
1865 * disabled, testing for empty qh->ring and avoiding qh setup costs 1909 * disabled, testing for empty qh->ring and avoiding qh setup costs
1866 * except for the first urb queued after a config change. 1910 * except for the first urb queued after a config change.
1867 */ 1911 */
1868 if (qh) { 1912 if (qh || ret)
1869 urb->hcpriv = qh; 1913 return ret;
1870 return 0;
1871 }
1872 1914
1873 /* Allocate and initialize qh, minimizing the work done each time 1915 /* Allocate and initialize qh, minimizing the work done each time
1874 * hw_ep gets reprogrammed, or with irqs blocked. Then schedule it. 1916 * hw_ep gets reprogrammed, or with irqs blocked. Then schedule it.
@@ -2044,7 +2086,7 @@ static int musb_cleanup_urb(struct urb *urb, struct musb_qh *qh, int is_in)
2044 * endpoint's irq status here to avoid bogus irqs. 2086 * endpoint's irq status here to avoid bogus irqs.
2045 * clearing that status is platform-specific... 2087 * clearing that status is platform-specific...
2046 */ 2088 */
2047 } else { 2089 } else if (ep->epnum) {
2048 musb_h_tx_flush_fifo(ep); 2090 musb_h_tx_flush_fifo(ep);
2049 csr = musb_readw(epio, MUSB_TXCSR); 2091 csr = musb_readw(epio, MUSB_TXCSR);
2050 csr &= ~(MUSB_TXCSR_AUTOSET 2092 csr &= ~(MUSB_TXCSR_AUTOSET
@@ -2058,6 +2100,8 @@ static int musb_cleanup_urb(struct urb *urb, struct musb_qh *qh, int is_in)
2058 musb_writew(epio, MUSB_TXCSR, csr); 2100 musb_writew(epio, MUSB_TXCSR, csr);
2059 /* flush cpu writebuffer */ 2101 /* flush cpu writebuffer */
2060 csr = musb_readw(epio, MUSB_TXCSR); 2102 csr = musb_readw(epio, MUSB_TXCSR);
2103 } else {
2104 musb_h_ep0_flush_fifo(ep);
2061 } 2105 }
2062 if (status == 0) 2106 if (status == 0)
2063 musb_advance_schedule(ep->musb, urb, ep, is_in); 2107 musb_advance_schedule(ep->musb, urb, ep, is_in);
diff --git a/drivers/usb/musb/musbhsdma.c b/drivers/usb/musb/musbhsdma.c
index 8662e9e159c3..5e83f96d6b77 100644
--- a/drivers/usb/musb/musbhsdma.c
+++ b/drivers/usb/musb/musbhsdma.c
@@ -195,30 +195,32 @@ static int dma_channel_abort(struct dma_channel *channel)
195 void __iomem *mbase = musb_channel->controller->base; 195 void __iomem *mbase = musb_channel->controller->base;
196 196
197 u8 bchannel = musb_channel->idx; 197 u8 bchannel = musb_channel->idx;
198 int offset;
198 u16 csr; 199 u16 csr;
199 200
200 if (channel->status == MUSB_DMA_STATUS_BUSY) { 201 if (channel->status == MUSB_DMA_STATUS_BUSY) {
201 if (musb_channel->transmit) { 202 if (musb_channel->transmit) {
202 203 offset = MUSB_EP_OFFSET(musb_channel->epnum,
203 csr = musb_readw(mbase, 204 MUSB_TXCSR);
204 MUSB_EP_OFFSET(musb_channel->epnum, 205
205 MUSB_TXCSR)); 206 /*
206 csr &= ~(MUSB_TXCSR_AUTOSET | 207 * The programming guide says that we must clear
207 MUSB_TXCSR_DMAENAB | 208 * the DMAENAB bit before the DMAMODE bit...
208 MUSB_TXCSR_DMAMODE); 209 */
209 musb_writew(mbase, 210 csr = musb_readw(mbase, offset);
210 MUSB_EP_OFFSET(musb_channel->epnum, MUSB_TXCSR), 211 csr &= ~(MUSB_TXCSR_AUTOSET | MUSB_TXCSR_DMAENAB);
211 csr); 212 musb_writew(mbase, offset, csr);
213 csr &= ~MUSB_TXCSR_DMAMODE;
214 musb_writew(mbase, offset, csr);
212 } else { 215 } else {
213 csr = musb_readw(mbase, 216 offset = MUSB_EP_OFFSET(musb_channel->epnum,
214 MUSB_EP_OFFSET(musb_channel->epnum, 217 MUSB_RXCSR);
215 MUSB_RXCSR)); 218
219 csr = musb_readw(mbase, offset);
216 csr &= ~(MUSB_RXCSR_AUTOCLEAR | 220 csr &= ~(MUSB_RXCSR_AUTOCLEAR |
217 MUSB_RXCSR_DMAENAB | 221 MUSB_RXCSR_DMAENAB |
218 MUSB_RXCSR_DMAMODE); 222 MUSB_RXCSR_DMAMODE);
219 musb_writew(mbase, 223 musb_writew(mbase, offset, csr);
220 MUSB_EP_OFFSET(musb_channel->epnum, MUSB_RXCSR),
221 csr);
222 } 224 }
223 225
224 musb_writew(mbase, 226 musb_writew(mbase,
@@ -296,20 +298,28 @@ static irqreturn_t dma_controller_irq(int irq, void *private_data)
296 && ((channel->desired_mode == 0) 298 && ((channel->desired_mode == 0)
297 || (channel->actual_len & 299 || (channel->actual_len &
298 (musb_channel->max_packet_sz - 1))) 300 (musb_channel->max_packet_sz - 1)))
299 ) { 301 ) {
302 u8 epnum = musb_channel->epnum;
303 int offset = MUSB_EP_OFFSET(epnum,
304 MUSB_TXCSR);
305 u16 txcsr;
306
307 /*
308 * The programming guide says that we
309 * must clear DMAENAB before DMAMODE.
310 */
311 musb_ep_select(mbase, epnum);
312 txcsr = musb_readw(mbase, offset);
313 txcsr &= ~(MUSB_TXCSR_DMAENAB
314 | MUSB_TXCSR_AUTOSET);
315 musb_writew(mbase, offset, txcsr);
300 /* Send out the packet */ 316 /* Send out the packet */
301 musb_ep_select(mbase, 317 txcsr &= ~MUSB_TXCSR_DMAMODE;
302 musb_channel->epnum); 318 txcsr |= MUSB_TXCSR_TXPKTRDY;
303 musb_writew(mbase, MUSB_EP_OFFSET( 319 musb_writew(mbase, offset, txcsr);
304 musb_channel->epnum,
305 MUSB_TXCSR),
306 MUSB_TXCSR_TXPKTRDY);
307 } else {
308 musb_dma_completion(
309 musb,
310 musb_channel->epnum,
311 musb_channel->transmit);
312 } 320 }
321 musb_dma_completion(musb, musb_channel->epnum,
322 musb_channel->transmit);
313 } 323 }
314 } 324 }
315 } 325 }
diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c
index 901dffdf23b1..60924ce08493 100644
--- a/drivers/usb/musb/omap2430.c
+++ b/drivers/usb/musb/omap2430.c
@@ -3,7 +3,6 @@
3 * Some code has been taken from tusb6010.c 3 * Some code has been taken from tusb6010.c
4 * Copyrights for that are attributable to: 4 * Copyrights for that are attributable to:
5 * Copyright (C) 2006 Nokia Corporation 5 * Copyright (C) 2006 Nokia Corporation
6 * Jarkko Nikula <jarkko.nikula@nokia.com>
7 * Tony Lindgren <tony@atomide.com> 6 * Tony Lindgren <tony@atomide.com>
8 * 7 *
9 * This file is part of the Inventra Controller Driver for Linux. 8 * This file is part of the Inventra Controller Driver for Linux.
diff --git a/drivers/usb/musb/tusb6010.c b/drivers/usb/musb/tusb6010.c
index 9e20fd070d71..4ac1477d3569 100644
--- a/drivers/usb/musb/tusb6010.c
+++ b/drivers/usb/musb/tusb6010.c
@@ -2,7 +2,6 @@
2 * TUSB6010 USB 2.0 OTG Dual Role controller 2 * TUSB6010 USB 2.0 OTG Dual Role controller
3 * 3 *
4 * Copyright (C) 2006 Nokia Corporation 4 * Copyright (C) 2006 Nokia Corporation
5 * Jarkko Nikula <jarkko.nikula@nokia.com>
6 * Tony Lindgren <tony@atomide.com> 5 * Tony Lindgren <tony@atomide.com>
7 * 6 *
8 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
diff --git a/drivers/usb/musb/tusb6010.h b/drivers/usb/musb/tusb6010.h
index ab8c96286ce6..35c933a5d991 100644
--- a/drivers/usb/musb/tusb6010.h
+++ b/drivers/usb/musb/tusb6010.h
@@ -2,7 +2,6 @@
2 * Definitions for TUSB6010 USB 2.0 OTG Dual Role controller 2 * Definitions for TUSB6010 USB 2.0 OTG Dual Role controller
3 * 3 *
4 * Copyright (C) 2006 Nokia Corporation 4 * Copyright (C) 2006 Nokia Corporation
5 * Jarkko Nikula <jarkko.nikula@nokia.com>
6 * Tony Lindgren <tony@atomide.com> 5 * Tony Lindgren <tony@atomide.com>
7 * 6 *
8 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
diff --git a/drivers/usb/otg/nop-usb-xceiv.c b/drivers/usb/otg/nop-usb-xceiv.c
index 4b933f646f2e..c567168f89af 100644
--- a/drivers/usb/otg/nop-usb-xceiv.c
+++ b/drivers/usb/otg/nop-usb-xceiv.c
@@ -36,14 +36,14 @@ struct nop_usb_xceiv {
36 struct device *dev; 36 struct device *dev;
37}; 37};
38 38
39static u64 nop_xceiv_dmamask = DMA_32BIT_MASK; 39static u64 nop_xceiv_dmamask = DMA_BIT_MASK(32);
40 40
41static struct platform_device nop_xceiv_device = { 41static struct platform_device nop_xceiv_device = {
42 .name = "nop_usb_xceiv", 42 .name = "nop_usb_xceiv",
43 .id = -1, 43 .id = -1,
44 .dev = { 44 .dev = {
45 .dma_mask = &nop_xceiv_dmamask, 45 .dma_mask = &nop_xceiv_dmamask,
46 .coherent_dma_mask = DMA_32BIT_MASK, 46 .coherent_dma_mask = DMA_BIT_MASK(32),
47 .platform_data = NULL, 47 .platform_data = NULL,
48 }, 48 },
49}; 49};
diff --git a/drivers/usb/otg/otg.c b/drivers/usb/otg/otg.c
index ff318fae7d4d..0a43a7db750f 100644
--- a/drivers/usb/otg/otg.c
+++ b/drivers/usb/otg/otg.c
@@ -43,7 +43,8 @@ EXPORT_SYMBOL(otg_get_transceiver);
43 */ 43 */
44void otg_put_transceiver(struct otg_transceiver *x) 44void otg_put_transceiver(struct otg_transceiver *x)
45{ 45{
46 put_device(x->dev); 46 if (x)
47 put_device(x->dev);
47} 48}
48EXPORT_SYMBOL(otg_put_transceiver); 49EXPORT_SYMBOL(otg_put_transceiver);
49 50
diff --git a/drivers/usb/serial/cyberjack.c b/drivers/usb/serial/cyberjack.c
index 858bdd038fbc..dd501bb63ed6 100644
--- a/drivers/usb/serial/cyberjack.c
+++ b/drivers/usb/serial/cyberjack.c
@@ -175,13 +175,6 @@ static int cyberjack_open(struct tty_struct *tty,
175 dbg("%s - usb_clear_halt", __func__); 175 dbg("%s - usb_clear_halt", __func__);
176 usb_clear_halt(port->serial->dev, port->write_urb->pipe); 176 usb_clear_halt(port->serial->dev, port->write_urb->pipe);
177 177
178 /* force low_latency on so that our tty_push actually forces
179 * the data through, otherwise it is scheduled, and with high
180 * data rates (like with OHCI) data can get lost.
181 */
182 if (tty)
183 tty->low_latency = 1;
184
185 priv = usb_get_serial_port_data(port); 178 priv = usb_get_serial_port_data(port);
186 spin_lock_irqsave(&priv->lock, flags); 179 spin_lock_irqsave(&priv->lock, flags);
187 priv->rdtodo = 0; 180 priv->rdtodo = 0;
diff --git a/drivers/usb/serial/cypress_m8.c b/drivers/usb/serial/cypress_m8.c
index eae4740d448c..e568710b263f 100644
--- a/drivers/usb/serial/cypress_m8.c
+++ b/drivers/usb/serial/cypress_m8.c
@@ -656,10 +656,6 @@ static int cypress_open(struct tty_struct *tty,
656 priv->rx_flags = 0; 656 priv->rx_flags = 0;
657 spin_unlock_irqrestore(&priv->lock, flags); 657 spin_unlock_irqrestore(&priv->lock, flags);
658 658
659 /* setting to zero could cause data loss */
660 if (tty)
661 tty->low_latency = 1;
662
663 /* raise both lines and set termios */ 659 /* raise both lines and set termios */
664 spin_lock_irqsave(&priv->lock, flags); 660 spin_lock_irqsave(&priv->lock, flags);
665 priv->line_control = CONTROL_DTR | CONTROL_RTS; 661 priv->line_control = CONTROL_DTR | CONTROL_RTS;
diff --git a/drivers/usb/serial/empeg.c b/drivers/usb/serial/empeg.c
index 8a69cce40b6d..c709ec474a80 100644
--- a/drivers/usb/serial/empeg.c
+++ b/drivers/usb/serial/empeg.c
@@ -478,12 +478,6 @@ static void empeg_set_termios(struct tty_struct *tty,
478 termios->c_cflag 478 termios->c_cflag
479 |= CS8; /* character size 8 bits */ 479 |= CS8; /* character size 8 bits */
480 480
481 /*
482 * Force low_latency on; otherwise the pushes are scheduled;
483 * this is bad as it opens up the possibility of dropping bytes
484 * on the floor. We don't want to drop bytes on the floor. :)
485 */
486 tty->low_latency = 1;
487 tty_encode_baud_rate(tty, 115200, 115200); 481 tty_encode_baud_rate(tty, 115200, 115200);
488} 482}
489 483
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
index dcc87aaa8628..0ab8474b00cb 100644
--- a/drivers/usb/serial/ftdi_sio.c
+++ b/drivers/usb/serial/ftdi_sio.c
@@ -56,6 +56,7 @@ static __u16 vendor = FTDI_VID;
56static __u16 product; 56static __u16 product;
57 57
58struct ftdi_private { 58struct ftdi_private {
59 struct kref kref;
59 ftdi_chip_type_t chip_type; 60 ftdi_chip_type_t chip_type;
60 /* type of device, either SIO or FT8U232AM */ 61 /* type of device, either SIO or FT8U232AM */
61 int baud_base; /* baud base clock for divisor setting */ 62 int baud_base; /* baud base clock for divisor setting */
@@ -668,6 +669,9 @@ static struct usb_device_id id_table_combined [] = {
668 { USB_DEVICE(DE_VID, WHT_PID) }, 669 { USB_DEVICE(DE_VID, WHT_PID) },
669 { USB_DEVICE(ADI_VID, ADI_GNICE_PID), 670 { USB_DEVICE(ADI_VID, ADI_GNICE_PID),
670 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, 671 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
672 { USB_DEVICE(JETI_VID, JETI_SPC1201_PID) },
673 { USB_DEVICE(MARVELL_VID, MARVELL_SHEEVAPLUG_PID),
674 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
671 { }, /* Optional parameter entry */ 675 { }, /* Optional parameter entry */
672 { } /* Terminating entry */ 676 { } /* Terminating entry */
673}; 677};
@@ -1351,6 +1355,7 @@ static int ftdi_sio_port_probe(struct usb_serial_port *port)
1351 return -ENOMEM; 1355 return -ENOMEM;
1352 } 1356 }
1353 1357
1358 kref_init(&priv->kref);
1354 spin_lock_init(&priv->rx_lock); 1359 spin_lock_init(&priv->rx_lock);
1355 spin_lock_init(&priv->tx_lock); 1360 spin_lock_init(&priv->tx_lock);
1356 init_waitqueue_head(&priv->delta_msr_wait); 1361 init_waitqueue_head(&priv->delta_msr_wait);
@@ -1467,6 +1472,13 @@ static void ftdi_shutdown(struct usb_serial *serial)
1467 dbg("%s", __func__); 1472 dbg("%s", __func__);
1468} 1473}
1469 1474
1475static void ftdi_sio_priv_release(struct kref *k)
1476{
1477 struct ftdi_private *priv = container_of(k, struct ftdi_private, kref);
1478
1479 kfree(priv);
1480}
1481
1470static int ftdi_sio_port_remove(struct usb_serial_port *port) 1482static int ftdi_sio_port_remove(struct usb_serial_port *port)
1471{ 1483{
1472 struct ftdi_private *priv = usb_get_serial_port_data(port); 1484 struct ftdi_private *priv = usb_get_serial_port_data(port);
@@ -1481,7 +1493,7 @@ static int ftdi_sio_port_remove(struct usb_serial_port *port)
1481 1493
1482 if (priv) { 1494 if (priv) {
1483 usb_set_serial_port_data(port, NULL); 1495 usb_set_serial_port_data(port, NULL);
1484 kfree(priv); 1496 kref_put(&priv->kref, ftdi_sio_priv_release);
1485 } 1497 }
1486 1498
1487 return 0; 1499 return 0;
@@ -1546,7 +1558,8 @@ static int ftdi_open(struct tty_struct *tty,
1546 dev_err(&port->dev, 1558 dev_err(&port->dev,
1547 "%s - failed submitting read urb, error %d\n", 1559 "%s - failed submitting read urb, error %d\n",
1548 __func__, result); 1560 __func__, result);
1549 1561 else
1562 kref_get(&priv->kref);
1550 1563
1551 return result; 1564 return result;
1552} /* ftdi_open */ 1565} /* ftdi_open */
@@ -1588,11 +1601,11 @@ static void ftdi_close(struct tty_struct *tty,
1588 mutex_unlock(&port->serial->disc_mutex); 1601 mutex_unlock(&port->serial->disc_mutex);
1589 1602
1590 /* cancel any scheduled reading */ 1603 /* cancel any scheduled reading */
1591 cancel_delayed_work(&priv->rx_work); 1604 cancel_delayed_work_sync(&priv->rx_work);
1592 flush_scheduled_work();
1593 1605
1594 /* shutdown our bulk read */ 1606 /* shutdown our bulk read */
1595 usb_kill_urb(port->read_urb); 1607 usb_kill_urb(port->read_urb);
1608 kref_put(&priv->kref, ftdi_sio_priv_release);
1596} /* ftdi_close */ 1609} /* ftdi_close */
1597 1610
1598 1611
diff --git a/drivers/usb/serial/ftdi_sio.h b/drivers/usb/serial/ftdi_sio.h
index daaf63db0b50..12330fa1c095 100644
--- a/drivers/usb/serial/ftdi_sio.h
+++ b/drivers/usb/serial/ftdi_sio.h
@@ -913,6 +913,19 @@
913#define ADI_GNICE_PID 0xF000 913#define ADI_GNICE_PID 0xF000
914 914
915/* 915/*
916 * JETI SPECTROMETER SPECBOS 1201
917 * http://www.jeti.com/products/sys/scb/scb1201.php
918 */
919#define JETI_VID 0x0c6c
920#define JETI_SPC1201_PID 0x04b2
921
922/*
923 * Marvell SheevaPlug
924 */
925#define MARVELL_VID 0x9e88
926#define MARVELL_SHEEVAPLUG_PID 0x9e8f
927
928/*
916 * BmRequestType: 1100 0000b 929 * BmRequestType: 1100 0000b
917 * bRequest: FTDI_E2_READ 930 * bRequest: FTDI_E2_READ
918 * wValue: 0 931 * wValue: 0
diff --git a/drivers/usb/serial/garmin_gps.c b/drivers/usb/serial/garmin_gps.c
index a26a0e2cdb4a..586d30ff450b 100644
--- a/drivers/usb/serial/garmin_gps.c
+++ b/drivers/usb/serial/garmin_gps.c
@@ -973,14 +973,6 @@ static int garmin_open(struct tty_struct *tty,
973 973
974 dbg("%s - port %d", __func__, port->number); 974 dbg("%s - port %d", __func__, port->number);
975 975
976 /*
977 * Force low_latency on so that our tty_push actually forces the data
978 * through, otherwise it is scheduled, and with high data rates (like
979 * with OHCI) data can get lost.
980 */
981 if (tty)
982 tty->low_latency = 1;
983
984 spin_lock_irqsave(&garmin_data_p->lock, flags); 976 spin_lock_irqsave(&garmin_data_p->lock, flags);
985 garmin_data_p->mode = initial_mode; 977 garmin_data_p->mode = initial_mode;
986 garmin_data_p->count = 0; 978 garmin_data_p->count = 0;
diff --git a/drivers/usb/serial/generic.c b/drivers/usb/serial/generic.c
index 9d57cace3731..4cec9906ccf3 100644
--- a/drivers/usb/serial/generic.c
+++ b/drivers/usb/serial/generic.c
@@ -122,12 +122,6 @@ int usb_serial_generic_open(struct tty_struct *tty,
122 122
123 dbg("%s - port %d", __func__, port->number); 123 dbg("%s - port %d", __func__, port->number);
124 124
125 /* force low_latency on so that our tty_push actually forces the data
126 through, otherwise it is scheduled, and with high data rates (like
127 with OHCI) data can get lost. */
128 if (tty)
129 tty->low_latency = 1;
130
131 /* clear the throttle flags */ 125 /* clear the throttle flags */
132 spin_lock_irqsave(&port->lock, flags); 126 spin_lock_irqsave(&port->lock, flags);
133 port->throttled = 0; 127 port->throttled = 0;
diff --git a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c
index e85c8c0d1ad9..fb4a73d090f6 100644
--- a/drivers/usb/serial/io_edgeport.c
+++ b/drivers/usb/serial/io_edgeport.c
@@ -193,8 +193,6 @@ static const struct divisor_table_entry divisor_table[] = {
193/* local variables */ 193/* local variables */
194static int debug; 194static int debug;
195 195
196static int low_latency = 1; /* tty low latency flag, on by default */
197
198static atomic_t CmdUrbs; /* Number of outstanding Command Write Urbs */ 196static atomic_t CmdUrbs; /* Number of outstanding Command Write Urbs */
199 197
200 198
@@ -867,9 +865,6 @@ static int edge_open(struct tty_struct *tty,
867 if (edge_port == NULL) 865 if (edge_port == NULL)
868 return -ENODEV; 866 return -ENODEV;
869 867
870 if (tty)
871 tty->low_latency = low_latency;
872
873 /* see if we've set up our endpoint info yet (can't set it up 868 /* see if we've set up our endpoint info yet (can't set it up
874 in edge_startup as the structures were not set up at that time.) */ 869 in edge_startup as the structures were not set up at that time.) */
875 serial = port->serial; 870 serial = port->serial;
@@ -3299,6 +3294,3 @@ MODULE_FIRMWARE("edgeport/down2.fw");
3299 3294
3300module_param(debug, bool, S_IRUGO | S_IWUSR); 3295module_param(debug, bool, S_IRUGO | S_IWUSR);
3301MODULE_PARM_DESC(debug, "Debug enabled or not"); 3296MODULE_PARM_DESC(debug, "Debug enabled or not");
3302
3303module_param(low_latency, bool, S_IRUGO | S_IWUSR);
3304MODULE_PARM_DESC(low_latency, "Low latency enabled or not");
diff --git a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c
index c3cdd00ddc41..513b25e044c1 100644
--- a/drivers/usb/serial/io_ti.c
+++ b/drivers/usb/serial/io_ti.c
@@ -76,7 +76,6 @@ struct edgeport_uart_buf_desc {
76#define EDGE_READ_URB_STOPPING 1 76#define EDGE_READ_URB_STOPPING 1
77#define EDGE_READ_URB_STOPPED 2 77#define EDGE_READ_URB_STOPPED 2
78 78
79#define EDGE_LOW_LATENCY 1
80#define EDGE_CLOSING_WAIT 4000 /* in .01 sec */ 79#define EDGE_CLOSING_WAIT 4000 /* in .01 sec */
81 80
82#define EDGE_OUT_BUF_SIZE 1024 81#define EDGE_OUT_BUF_SIZE 1024
@@ -232,7 +231,6 @@ static unsigned short OperationalBuildNumber;
232 231
233static int debug; 232static int debug;
234 233
235static int low_latency = EDGE_LOW_LATENCY;
236static int closing_wait = EDGE_CLOSING_WAIT; 234static int closing_wait = EDGE_CLOSING_WAIT;
237static int ignore_cpu_rev; 235static int ignore_cpu_rev;
238static int default_uart_mode; /* RS232 */ 236static int default_uart_mode; /* RS232 */
@@ -1850,9 +1848,6 @@ static int edge_open(struct tty_struct *tty,
1850 if (edge_port == NULL) 1848 if (edge_port == NULL)
1851 return -ENODEV; 1849 return -ENODEV;
1852 1850
1853 if (tty)
1854 tty->low_latency = low_latency;
1855
1856 port_number = port->number - port->serial->minor; 1851 port_number = port->number - port->serial->minor;
1857 switch (port_number) { 1852 switch (port_number) {
1858 case 0: 1853 case 0:
@@ -3008,9 +3003,6 @@ MODULE_FIRMWARE("edgeport/down3.bin");
3008module_param(debug, bool, S_IRUGO | S_IWUSR); 3003module_param(debug, bool, S_IRUGO | S_IWUSR);
3009MODULE_PARM_DESC(debug, "Debug enabled or not"); 3004MODULE_PARM_DESC(debug, "Debug enabled or not");
3010 3005
3011module_param(low_latency, bool, S_IRUGO | S_IWUSR);
3012MODULE_PARM_DESC(low_latency, "Low latency enabled or not");
3013
3014module_param(closing_wait, int, S_IRUGO | S_IWUSR); 3006module_param(closing_wait, int, S_IRUGO | S_IWUSR);
3015MODULE_PARM_DESC(closing_wait, "Maximum wait for data to drain, in .01 secs"); 3007MODULE_PARM_DESC(closing_wait, "Maximum wait for data to drain, in .01 secs");
3016 3008
diff --git a/drivers/usb/serial/ipaq.c b/drivers/usb/serial/ipaq.c
index ef92095b0732..cd62825a9ac3 100644
--- a/drivers/usb/serial/ipaq.c
+++ b/drivers/usb/serial/ipaq.c
@@ -631,13 +631,7 @@ static int ipaq_open(struct tty_struct *tty,
631 priv->free_len += PACKET_SIZE; 631 priv->free_len += PACKET_SIZE;
632 } 632 }
633 633
634 /*
635 * Force low latency on. This will immediately push data to the line
636 * discipline instead of queueing.
637 */
638
639 if (tty) { 634 if (tty) {
640 tty->low_latency = 1;
641 /* FIXME: These two are bogus */ 635 /* FIXME: These two are bogus */
642 tty->raw = 1; 636 tty->raw = 1;
643 tty->real_raw = 1; 637 tty->real_raw = 1;
diff --git a/drivers/usb/serial/ipw.c b/drivers/usb/serial/ipw.c
index f530032ed93d..da2a2b46644a 100644
--- a/drivers/usb/serial/ipw.c
+++ b/drivers/usb/serial/ipw.c
@@ -207,9 +207,6 @@ static int ipw_open(struct tty_struct *tty,
207 if (!buf_flow_init) 207 if (!buf_flow_init)
208 return -ENOMEM; 208 return -ENOMEM;
209 209
210 if (tty)
211 tty->low_latency = 1;
212
213 /* --1: Tell the modem to initialize (we think) From sniffs this is 210 /* --1: Tell the modem to initialize (we think) From sniffs this is
214 * always the first thing that gets sent to the modem during 211 * always the first thing that gets sent to the modem during
215 * opening of the device */ 212 * opening of the device */
diff --git a/drivers/usb/serial/iuu_phoenix.c b/drivers/usb/serial/iuu_phoenix.c
index 2314c6ae4fc2..4473d442b2aa 100644
--- a/drivers/usb/serial/iuu_phoenix.c
+++ b/drivers/usb/serial/iuu_phoenix.c
@@ -1051,7 +1051,6 @@ static int iuu_open(struct tty_struct *tty,
1051 tty->termios->c_oflag = 0; 1051 tty->termios->c_oflag = 0;
1052 tty->termios->c_iflag = 0; 1052 tty->termios->c_iflag = 0;
1053 priv->termios_initialized = 1; 1053 priv->termios_initialized = 1;
1054 tty->low_latency = 1;
1055 priv->poll = 0; 1054 priv->poll = 0;
1056 } 1055 }
1057 spin_unlock_irqrestore(&priv->lock, flags); 1056 spin_unlock_irqrestore(&priv->lock, flags);
diff --git a/drivers/usb/serial/kobil_sct.c b/drivers/usb/serial/kobil_sct.c
index 6286baad9392..c148544953b3 100644
--- a/drivers/usb/serial/kobil_sct.c
+++ b/drivers/usb/serial/kobil_sct.c
@@ -231,13 +231,7 @@ static int kobil_open(struct tty_struct *tty,
231 /* someone sets the dev to 0 if the close method has been called */ 231 /* someone sets the dev to 0 if the close method has been called */
232 port->interrupt_in_urb->dev = port->serial->dev; 232 port->interrupt_in_urb->dev = port->serial->dev;
233 233
234
235 /* force low_latency on so that our tty_push actually forces
236 * the data through, otherwise it is scheduled, and with high
237 * data rates (like with OHCI) data can get lost.
238 */
239 if (tty) { 234 if (tty) {
240 tty->low_latency = 1;
241 235
242 /* Default to echo off and other sane device settings */ 236 /* Default to echo off and other sane device settings */
243 tty->termios->c_lflag = 0; 237 tty->termios->c_lflag = 0;
diff --git a/drivers/usb/serial/mos7720.c b/drivers/usb/serial/mos7720.c
index e772cc0a97fd..24e3b5d4b4d4 100644
--- a/drivers/usb/serial/mos7720.c
+++ b/drivers/usb/serial/mos7720.c
@@ -446,13 +446,6 @@ static int mos7720_open(struct tty_struct *tty,
446 data = 0x0c; 446 data = 0x0c;
447 send_mos_cmd(serial, MOS_WRITE, port_number, 0x01, &data); 447 send_mos_cmd(serial, MOS_WRITE, port_number, 0x01, &data);
448 448
449 /* force low_latency on so that our tty_push actually forces *
450 * the data through,otherwise it is scheduled, and with *
451 * high data rates (like with OHCI) data can get lost. */
452
453 if (tty)
454 tty->low_latency = 1;
455
456 /* see if we've set up our endpoint info yet * 449 /* see if we've set up our endpoint info yet *
457 * (can't set it up in mos7720_startup as the * 450 * (can't set it up in mos7720_startup as the *
458 * structures were not set up at that time.) */ 451 * structures were not set up at that time.) */
diff --git a/drivers/usb/serial/mos7840.c b/drivers/usb/serial/mos7840.c
index 2c20e88a91b3..84fb1dcd30dc 100644
--- a/drivers/usb/serial/mos7840.c
+++ b/drivers/usb/serial/mos7840.c
@@ -38,7 +38,7 @@
38/* 38/*
39 * Version Information 39 * Version Information
40 */ 40 */
41#define DRIVER_VERSION "1.3.1" 41#define DRIVER_VERSION "1.3.2"
42#define DRIVER_DESC "Moschip 7840/7820 USB Serial Driver" 42#define DRIVER_DESC "Moschip 7840/7820 USB Serial Driver"
43 43
44/* 44/*
@@ -123,6 +123,11 @@
123#define BANDB_DEVICE_ID_USOPTL4_4 0xAC44 123#define BANDB_DEVICE_ID_USOPTL4_4 0xAC44
124#define BANDB_DEVICE_ID_USOPTL4_2 0xAC42 124#define BANDB_DEVICE_ID_USOPTL4_2 0xAC42
125 125
126/* This driver also supports the ATEN UC2324 device since it is mos7840 based
127 * - if I knew the device id it would also support the ATEN UC2322 */
128#define USB_VENDOR_ID_ATENINTL 0x0557
129#define ATENINTL_DEVICE_ID_UC2324 0x2011
130
126/* Interrupt Routine Defines */ 131/* Interrupt Routine Defines */
127 132
128#define SERIAL_IIR_RLS 0x06 133#define SERIAL_IIR_RLS 0x06
@@ -170,6 +175,7 @@ static struct usb_device_id moschip_port_id_table[] = {
170 {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7820)}, 175 {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7820)},
171 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4)}, 176 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4)},
172 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2)}, 177 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2)},
178 {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2324)},
173 {} /* terminating entry */ 179 {} /* terminating entry */
174}; 180};
175 181
@@ -178,6 +184,7 @@ static __devinitdata struct usb_device_id moschip_id_table_combined[] = {
178 {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7820)}, 184 {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7820)},
179 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4)}, 185 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4)},
180 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2)}, 186 {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2)},
187 {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2324)},
181 {} /* terminating entry */ 188 {} /* terminating entry */
182}; 189};
183 190
@@ -1000,12 +1007,6 @@ static int mos7840_open(struct tty_struct *tty,
1000 status = mos7840_set_reg_sync(port, mos7840_port->ControlRegOffset, 1007 status = mos7840_set_reg_sync(port, mos7840_port->ControlRegOffset,
1001 Data); 1008 Data);
1002 1009
1003 /* force low_latency on so that our tty_push actually forces *
1004 * the data through,otherwise it is scheduled, and with *
1005 * high data rates (like with OHCI) data can get lost. */
1006 if (tty)
1007 tty->low_latency = 1;
1008
1009 /* Check to see if we've set up our endpoint info yet * 1010 /* Check to see if we've set up our endpoint info yet *
1010 * (can't set it up in mos7840_startup as the structures * 1011 * (can't set it up in mos7840_startup as the structures *
1011 * were not set up at that time.) */ 1012 * were not set up at that time.) */
@@ -2477,9 +2478,14 @@ static int mos7840_startup(struct usb_serial *serial)
2477 mos7840_set_port_private(serial->port[i], mos7840_port); 2478 mos7840_set_port_private(serial->port[i], mos7840_port);
2478 spin_lock_init(&mos7840_port->pool_lock); 2479 spin_lock_init(&mos7840_port->pool_lock);
2479 2480
2480 mos7840_port->port_num = ((serial->port[i]->number - 2481 /* minor is not initialised until later by
2481 (serial->port[i]->serial->minor)) + 2482 * usb-serial.c:get_free_serial() and cannot therefore be used
2482 1); 2483 * to index device instances */
2484 mos7840_port->port_num = i + 1;
2485 dbg ("serial->port[i]->number = %d", serial->port[i]->number);
2486 dbg ("serial->port[i]->serial->minor = %d", serial->port[i]->serial->minor);
2487 dbg ("mos7840_port->port_num = %d", mos7840_port->port_num);
2488 dbg ("serial->minor = %d", serial->minor);
2483 2489
2484 if (mos7840_port->port_num == 1) { 2490 if (mos7840_port->port_num == 1) {
2485 mos7840_port->SpRegOffset = 0x0; 2491 mos7840_port->SpRegOffset = 0x0;
@@ -2690,13 +2696,16 @@ static void mos7840_shutdown(struct usb_serial *serial)
2690 2696
2691 for (i = 0; i < serial->num_ports; ++i) { 2697 for (i = 0; i < serial->num_ports; ++i) {
2692 mos7840_port = mos7840_get_port_private(serial->port[i]); 2698 mos7840_port = mos7840_get_port_private(serial->port[i]);
2693 spin_lock_irqsave(&mos7840_port->pool_lock, flags); 2699 dbg ("mos7840_port %d = %p", i, mos7840_port);
2694 mos7840_port->zombie = 1; 2700 if (mos7840_port) {
2695 spin_unlock_irqrestore(&mos7840_port->pool_lock, flags); 2701 spin_lock_irqsave(&mos7840_port->pool_lock, flags);
2696 usb_kill_urb(mos7840_port->control_urb); 2702 mos7840_port->zombie = 1;
2697 kfree(mos7840_port->ctrl_buf); 2703 spin_unlock_irqrestore(&mos7840_port->pool_lock, flags);
2698 kfree(mos7840_port->dr); 2704 usb_kill_urb(mos7840_port->control_urb);
2699 kfree(mos7840_port); 2705 kfree(mos7840_port->ctrl_buf);
2706 kfree(mos7840_port->dr);
2707 kfree(mos7840_port);
2708 }
2700 mos7840_set_port_private(serial->port[i], NULL); 2709 mos7840_set_port_private(serial->port[i], NULL);
2701 } 2710 }
2702 2711
diff --git a/drivers/usb/serial/moto_modem.c b/drivers/usb/serial/moto_modem.c
index 2e8e05462ef7..b66b71ccd12b 100644
--- a/drivers/usb/serial/moto_modem.c
+++ b/drivers/usb/serial/moto_modem.c
@@ -25,6 +25,7 @@ static struct usb_device_id id_table [] = {
25 { USB_DEVICE(0x05c6, 0x3197) }, /* unknown Motorola phone */ 25 { USB_DEVICE(0x05c6, 0x3197) }, /* unknown Motorola phone */
26 { USB_DEVICE(0x0c44, 0x0022) }, /* unknown Mororola phone */ 26 { USB_DEVICE(0x0c44, 0x0022) }, /* unknown Mororola phone */
27 { USB_DEVICE(0x22b8, 0x2a64) }, /* Motorola KRZR K1m */ 27 { USB_DEVICE(0x22b8, 0x2a64) }, /* Motorola KRZR K1m */
28 { USB_DEVICE(0x22b8, 0x2c64) }, /* Motorola V950 phone */
28 { }, 29 { },
29}; 30};
30MODULE_DEVICE_TABLE(usb, id_table); 31MODULE_DEVICE_TABLE(usb, id_table);
diff --git a/drivers/usb/serial/opticon.c b/drivers/usb/serial/opticon.c
index 839583dc8b6a..b500ad10b758 100644
--- a/drivers/usb/serial/opticon.c
+++ b/drivers/usb/serial/opticon.c
@@ -159,14 +159,6 @@ static int opticon_open(struct tty_struct *tty, struct usb_serial_port *port,
159 priv->port = port; 159 priv->port = port;
160 spin_unlock_irqrestore(&priv->lock, flags); 160 spin_unlock_irqrestore(&priv->lock, flags);
161 161
162 /*
163 * Force low_latency on so that our tty_push actually forces the data
164 * through, otherwise it is scheduled, and with high data rates (like
165 * with OHCI) data can get lost.
166 */
167 if (tty)
168 tty->low_latency = 1;
169
170 /* Start reading from the device */ 162 /* Start reading from the device */
171 usb_fill_bulk_urb(priv->bulk_read_urb, priv->udev, 163 usb_fill_bulk_urb(priv->bulk_read_urb, priv->udev,
172 usb_rcvbulkpipe(priv->udev, 164 usb_rcvbulkpipe(priv->udev,
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index d560c0b54e6e..7817b82889ca 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -300,6 +300,10 @@ static int option_resume(struct usb_serial *serial);
300#define BENQ_VENDOR_ID 0x04a5 300#define BENQ_VENDOR_ID 0x04a5
301#define BENQ_PRODUCT_H10 0x4068 301#define BENQ_PRODUCT_H10 0x4068
302 302
303#define DLINK_VENDOR_ID 0x1186
304#define DLINK_PRODUCT_DWM_652 0x3e04
305
306
303static struct usb_device_id option_ids[] = { 307static struct usb_device_id option_ids[] = {
304 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) }, 308 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
305 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) }, 309 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
@@ -516,6 +520,7 @@ static struct usb_device_id option_ids[] = {
516 { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) }, 520 { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) },
517 { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) }, 521 { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) },
518 { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) }, 522 { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) },
523 { USB_DEVICE(DLINK_VENDOR_ID, DLINK_PRODUCT_DWM_652) },
519 { USB_DEVICE(0x1da5, 0x4515) }, /* BenQ H20 */ 524 { USB_DEVICE(0x1da5, 0x4515) }, /* BenQ H20 */
520 { } /* Terminating entry */ 525 { } /* Terminating entry */
521}; 526};
@@ -931,9 +936,6 @@ static int option_open(struct tty_struct *tty,
931 usb_pipeout(urb->pipe), 0); */ 936 usb_pipeout(urb->pipe), 0); */
932 } 937 }
933 938
934 if (tty)
935 tty->low_latency = 1;
936
937 option_send_setup(tty, port); 939 option_send_setup(tty, port);
938 940
939 return 0; 941 return 0;
diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
index e6d6b0c17fd9..7528b8d57f1c 100644
--- a/drivers/usb/serial/qcserial.c
+++ b/drivers/usb/serial/qcserial.c
@@ -26,6 +26,27 @@ static struct usb_device_id id_table[] = {
26 {USB_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */ 26 {USB_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */
27 {USB_DEVICE(0x03f0, 0x1f1d)}, /* HP un2400 Gobi Modem Device */ 27 {USB_DEVICE(0x03f0, 0x1f1d)}, /* HP un2400 Gobi Modem Device */
28 {USB_DEVICE(0x03f0, 0x201d)}, /* HP un2400 Gobi QDL Device */ 28 {USB_DEVICE(0x03f0, 0x201d)}, /* HP un2400 Gobi QDL Device */
29 {USB_DEVICE(0x04da, 0x250d)}, /* Panasonic Gobi Modem device */
30 {USB_DEVICE(0x04da, 0x250c)}, /* Panasonic Gobi QDL device */
31 {USB_DEVICE(0x413c, 0x8172)}, /* Dell Gobi Modem device */
32 {USB_DEVICE(0x413c, 0x8171)}, /* Dell Gobi QDL device */
33 {USB_DEVICE(0x1410, 0xa001)}, /* Novatel Gobi Modem device */
34 {USB_DEVICE(0x1410, 0xa008)}, /* Novatel Gobi QDL device */
35 {USB_DEVICE(0x0b05, 0x1776)}, /* Asus Gobi Modem device */
36 {USB_DEVICE(0x0b05, 0x1774)}, /* Asus Gobi QDL device */
37 {USB_DEVICE(0x19d2, 0xfff3)}, /* ONDA Gobi Modem device */
38 {USB_DEVICE(0x19d2, 0xfff2)}, /* ONDA Gobi QDL device */
39 {USB_DEVICE(0x1557, 0x0a80)}, /* OQO Gobi QDL device */
40 {USB_DEVICE(0x05c6, 0x9001)}, /* Generic Gobi Modem device */
41 {USB_DEVICE(0x05c6, 0x9002)}, /* Generic Gobi Modem device */
42 {USB_DEVICE(0x05c6, 0x9202)}, /* Generic Gobi Modem device */
43 {USB_DEVICE(0x05c6, 0x9203)}, /* Generic Gobi Modem device */
44 {USB_DEVICE(0x05c6, 0x9222)}, /* Generic Gobi Modem device */
45 {USB_DEVICE(0x05c6, 0x9008)}, /* Generic Gobi QDL device */
46 {USB_DEVICE(0x05c6, 0x9201)}, /* Generic Gobi QDL device */
47 {USB_DEVICE(0x05c6, 0x9221)}, /* Generic Gobi QDL device */
48 {USB_DEVICE(0x05c6, 0x9231)}, /* Generic Gobi QDL device */
49 {USB_DEVICE(0x1f45, 0x0001)}, /* Unknown Gobi QDL device */
29 { } /* Terminating entry */ 50 { } /* Terminating entry */
30}; 51};
31MODULE_DEVICE_TABLE(usb, id_table); 52MODULE_DEVICE_TABLE(usb, id_table);
diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c
index d9bf9a5c20ec..913225c61610 100644
--- a/drivers/usb/serial/sierra.c
+++ b/drivers/usb/serial/sierra.c
@@ -14,7 +14,7 @@
14 Whom based his on the Keyspan driver by Hugh Blemings <hugh@blemings.org> 14 Whom based his on the Keyspan driver by Hugh Blemings <hugh@blemings.org>
15*/ 15*/
16 16
17#define DRIVER_VERSION "v.1.3.2" 17#define DRIVER_VERSION "v.1.3.3"
18#define DRIVER_AUTHOR "Kevin Lloyd <klloyd@sierrawireless.com>" 18#define DRIVER_AUTHOR "Kevin Lloyd <klloyd@sierrawireless.com>"
19#define DRIVER_DESC "USB Driver for Sierra Wireless USB modems" 19#define DRIVER_DESC "USB Driver for Sierra Wireless USB modems"
20 20
@@ -259,9 +259,21 @@ static int sierra_send_setup(struct tty_struct *tty,
259 val |= 0x02; 259 val |= 0x02;
260 260
261 /* If composite device then properly report interface */ 261 /* If composite device then properly report interface */
262 if (serial->num_ports == 1) 262 if (serial->num_ports == 1) {
263 interface = sierra_calc_interface(serial); 263 interface = sierra_calc_interface(serial);
264 264
265 /* Control message is sent only to interfaces with
266 * interrupt_in endpoints
267 */
268 if (port->interrupt_in_urb) {
269 /* send control message */
270 return usb_control_msg(serial->dev,
271 usb_rcvctrlpipe(serial->dev, 0),
272 0x22, 0x21, val, interface,
273 NULL, 0, USB_CTRL_SET_TIMEOUT);
274 }
275 }
276
265 /* Otherwise the need to do non-composite mapping */ 277 /* Otherwise the need to do non-composite mapping */
266 else { 278 else {
267 if (port->bulk_out_endpointAddress == 2) 279 if (port->bulk_out_endpointAddress == 2)
@@ -270,12 +282,13 @@ static int sierra_send_setup(struct tty_struct *tty,
270 interface = 1; 282 interface = 1;
271 else if (port->bulk_out_endpointAddress == 5) 283 else if (port->bulk_out_endpointAddress == 5)
272 interface = 2; 284 interface = 2;
273 }
274 285
275 return usb_control_msg(serial->dev, 286 return usb_control_msg(serial->dev,
276 usb_rcvctrlpipe(serial->dev, 0), 287 usb_rcvctrlpipe(serial->dev, 0),
277 0x22, 0x21, val, interface, 288 0x22, 0x21, val, interface,
278 NULL, 0, USB_CTRL_SET_TIMEOUT); 289 NULL, 0, USB_CTRL_SET_TIMEOUT);
290
291 }
279 } 292 }
280 293
281 return 0; 294 return 0;
@@ -585,9 +598,6 @@ static int sierra_open(struct tty_struct *tty,
585 } 598 }
586 } 599 }
587 600
588 if (tty)
589 tty->low_latency = 1;
590
591 sierra_send_setup(tty, port); 601 sierra_send_setup(tty, port);
592 602
593 /* start up the interrupt endpoint if we have one */ 603 /* start up the interrupt endpoint if we have one */
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index 2620bf6fe5e1..0a64bac306ee 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -50,11 +50,10 @@
50 50
51#define TI_TRANSFER_TIMEOUT 2 51#define TI_TRANSFER_TIMEOUT 2
52 52
53#define TI_DEFAULT_LOW_LATENCY 0
54#define TI_DEFAULT_CLOSING_WAIT 4000 /* in .01 secs */ 53#define TI_DEFAULT_CLOSING_WAIT 4000 /* in .01 secs */
55 54
56/* supported setserial flags */ 55/* supported setserial flags */
57#define TI_SET_SERIAL_FLAGS (ASYNC_LOW_LATENCY) 56#define TI_SET_SERIAL_FLAGS 0
58 57
59/* read urb states */ 58/* read urb states */
60#define TI_READ_URB_RUNNING 0 59#define TI_READ_URB_RUNNING 0
@@ -161,7 +160,6 @@ static int ti_buf_get(struct circ_buf *cb, char *buf, int count);
161 160
162/* module parameters */ 161/* module parameters */
163static int debug; 162static int debug;
164static int low_latency = TI_DEFAULT_LOW_LATENCY;
165static int closing_wait = TI_DEFAULT_CLOSING_WAIT; 163static int closing_wait = TI_DEFAULT_CLOSING_WAIT;
166static ushort vendor_3410[TI_EXTRA_VID_PID_COUNT]; 164static ushort vendor_3410[TI_EXTRA_VID_PID_COUNT];
167static unsigned int vendor_3410_count; 165static unsigned int vendor_3410_count;
@@ -296,10 +294,6 @@ MODULE_FIRMWARE("mts_edge.fw");
296module_param(debug, bool, S_IRUGO | S_IWUSR); 294module_param(debug, bool, S_IRUGO | S_IWUSR);
297MODULE_PARM_DESC(debug, "Enable debugging, 0=no, 1=yes"); 295MODULE_PARM_DESC(debug, "Enable debugging, 0=no, 1=yes");
298 296
299module_param(low_latency, bool, S_IRUGO | S_IWUSR);
300MODULE_PARM_DESC(low_latency,
301 "TTY low_latency flag, 0=off, 1=on, default is off");
302
303module_param(closing_wait, int, S_IRUGO | S_IWUSR); 297module_param(closing_wait, int, S_IRUGO | S_IWUSR);
304MODULE_PARM_DESC(closing_wait, 298MODULE_PARM_DESC(closing_wait,
305 "Maximum wait for data to drain in close, in .01 secs, default is 4000"); 299 "Maximum wait for data to drain in close, in .01 secs, default is 4000");
@@ -448,7 +442,6 @@ static int ti_startup(struct usb_serial *serial)
448 spin_lock_init(&tport->tp_lock); 442 spin_lock_init(&tport->tp_lock);
449 tport->tp_uart_base_addr = (i == 0 ? 443 tport->tp_uart_base_addr = (i == 0 ?
450 TI_UART1_BASE_ADDR : TI_UART2_BASE_ADDR); 444 TI_UART1_BASE_ADDR : TI_UART2_BASE_ADDR);
451 tport->tp_flags = low_latency ? ASYNC_LOW_LATENCY : 0;
452 tport->tp_closing_wait = closing_wait; 445 tport->tp_closing_wait = closing_wait;
453 init_waitqueue_head(&tport->tp_msr_wait); 446 init_waitqueue_head(&tport->tp_msr_wait);
454 init_waitqueue_head(&tport->tp_write_wait); 447 init_waitqueue_head(&tport->tp_write_wait);
@@ -528,10 +521,6 @@ static int ti_open(struct tty_struct *tty,
528 if (mutex_lock_interruptible(&tdev->td_open_close_lock)) 521 if (mutex_lock_interruptible(&tdev->td_open_close_lock))
529 return -ERESTARTSYS; 522 return -ERESTARTSYS;
530 523
531 if (tty)
532 tty->low_latency =
533 (tport->tp_flags & ASYNC_LOW_LATENCY) ? 1 : 0;
534
535 port_number = port->number - port->serial->minor; 524 port_number = port->number - port->serial->minor;
536 525
537 memset(&(tport->tp_icount), 0x00, sizeof(tport->tp_icount)); 526 memset(&(tport->tp_icount), 0x00, sizeof(tport->tp_icount));
@@ -1215,20 +1204,22 @@ static void ti_bulk_in_callback(struct urb *urb)
1215 } 1204 }
1216 1205
1217 tty = tty_port_tty_get(&port->port); 1206 tty = tty_port_tty_get(&port->port);
1218 if (tty && urb->actual_length) { 1207 if (tty) {
1219 usb_serial_debug_data(debug, dev, __func__, 1208 if (urb->actual_length) {
1220 urb->actual_length, urb->transfer_buffer); 1209 usb_serial_debug_data(debug, dev, __func__,
1221 1210 urb->actual_length, urb->transfer_buffer);
1222 if (!tport->tp_is_open) 1211
1223 dbg("%s - port closed, dropping data", __func__); 1212 if (!tport->tp_is_open)
1224 else 1213 dbg("%s - port closed, dropping data",
1225 ti_recv(&urb->dev->dev, tty, 1214 __func__);
1215 else
1216 ti_recv(&urb->dev->dev, tty,
1226 urb->transfer_buffer, 1217 urb->transfer_buffer,
1227 urb->actual_length); 1218 urb->actual_length);
1228 1219 spin_lock(&tport->tp_lock);
1229 spin_lock(&tport->tp_lock); 1220 tport->tp_icount.rx += urb->actual_length;
1230 tport->tp_icount.rx += urb->actual_length; 1221 spin_unlock(&tport->tp_lock);
1231 spin_unlock(&tport->tp_lock); 1222 }
1232 tty_kref_put(tty); 1223 tty_kref_put(tty);
1233 } 1224 }
1234 1225
@@ -1452,7 +1443,6 @@ static int ti_set_serial_info(struct tty_struct *tty, struct ti_port *tport,
1452 return -EFAULT; 1443 return -EFAULT;
1453 1444
1454 tport->tp_flags = new_serial.flags & TI_SET_SERIAL_FLAGS; 1445 tport->tp_flags = new_serial.flags & TI_SET_SERIAL_FLAGS;
1455 tty->low_latency = (tport->tp_flags & ASYNC_LOW_LATENCY) ? 1 : 0;
1456 tport->tp_closing_wait = new_serial.closing_wait; 1446 tport->tp_closing_wait = new_serial.closing_wait;
1457 1447
1458 return 0; 1448 return 0;
diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
index 2a70563bbee1..0a566eea49c0 100644
--- a/drivers/usb/serial/usb-serial.c
+++ b/drivers/usb/serial/usb-serial.c
@@ -137,22 +137,10 @@ static void destroy_serial(struct kref *kref)
137 137
138 dbg("%s - %s", __func__, serial->type->description); 138 dbg("%s - %s", __func__, serial->type->description);
139 139
140 serial->type->shutdown(serial);
141
142 /* return the minor range that this device had */ 140 /* return the minor range that this device had */
143 if (serial->minor != SERIAL_TTY_NO_MINOR) 141 if (serial->minor != SERIAL_TTY_NO_MINOR)
144 return_serial(serial); 142 return_serial(serial);
145 143
146 for (i = 0; i < serial->num_ports; ++i)
147 serial->port[i]->port.count = 0;
148
149 /* the ports are cleaned up and released in port_release() */
150 for (i = 0; i < serial->num_ports; ++i)
151 if (serial->port[i]->dev.parent != NULL) {
152 device_unregister(&serial->port[i]->dev);
153 serial->port[i] = NULL;
154 }
155
156 /* If this is a "fake" port, we have to clean it up here, as it will 144 /* If this is a "fake" port, we have to clean it up here, as it will
157 * not get cleaned up in port_release() as it was never registered with 145 * not get cleaned up in port_release() as it was never registered with
158 * the driver core */ 146 * the driver core */
@@ -187,7 +175,7 @@ static int serial_open (struct tty_struct *tty, struct file *filp)
187 struct usb_serial *serial; 175 struct usb_serial *serial;
188 struct usb_serial_port *port; 176 struct usb_serial_port *port;
189 unsigned int portNumber; 177 unsigned int portNumber;
190 int retval; 178 int retval = 0;
191 179
192 dbg("%s", __func__); 180 dbg("%s", __func__);
193 181
@@ -198,21 +186,24 @@ static int serial_open (struct tty_struct *tty, struct file *filp)
198 return -ENODEV; 186 return -ENODEV;
199 } 187 }
200 188
189 mutex_lock(&serial->disc_mutex);
201 portNumber = tty->index - serial->minor; 190 portNumber = tty->index - serial->minor;
202 port = serial->port[portNumber]; 191 port = serial->port[portNumber];
203 if (!port) { 192 if (!port || serial->disconnected)
204 retval = -ENODEV;
205 goto bailout_kref_put;
206 }
207
208 if (port->serial->disconnected) {
209 retval = -ENODEV; 193 retval = -ENODEV;
210 goto bailout_kref_put; 194 else
211 } 195 get_device(&port->dev);
196 /*
197 * Note: Our locking order requirement does not allow port->mutex
198 * to be acquired while serial->disc_mutex is held.
199 */
200 mutex_unlock(&serial->disc_mutex);
201 if (retval)
202 goto bailout_serial_put;
212 203
213 if (mutex_lock_interruptible(&port->mutex)) { 204 if (mutex_lock_interruptible(&port->mutex)) {
214 retval = -ERESTARTSYS; 205 retval = -ERESTARTSYS;
215 goto bailout_kref_put; 206 goto bailout_port_put;
216 } 207 }
217 208
218 ++port->port.count; 209 ++port->port.count;
@@ -232,14 +223,20 @@ static int serial_open (struct tty_struct *tty, struct file *filp)
232 goto bailout_mutex_unlock; 223 goto bailout_mutex_unlock;
233 } 224 }
234 225
235 retval = usb_autopm_get_interface(serial->interface); 226 mutex_lock(&serial->disc_mutex);
227 if (serial->disconnected)
228 retval = -ENODEV;
229 else
230 retval = usb_autopm_get_interface(serial->interface);
236 if (retval) 231 if (retval)
237 goto bailout_module_put; 232 goto bailout_module_put;
233
238 /* only call the device specific open if this 234 /* only call the device specific open if this
239 * is the first time the port is opened */ 235 * is the first time the port is opened */
240 retval = serial->type->open(tty, port, filp); 236 retval = serial->type->open(tty, port, filp);
241 if (retval) 237 if (retval)
242 goto bailout_interface_put; 238 goto bailout_interface_put;
239 mutex_unlock(&serial->disc_mutex);
243 } 240 }
244 241
245 mutex_unlock(&port->mutex); 242 mutex_unlock(&port->mutex);
@@ -248,13 +245,16 @@ static int serial_open (struct tty_struct *tty, struct file *filp)
248bailout_interface_put: 245bailout_interface_put:
249 usb_autopm_put_interface(serial->interface); 246 usb_autopm_put_interface(serial->interface);
250bailout_module_put: 247bailout_module_put:
248 mutex_unlock(&serial->disc_mutex);
251 module_put(serial->type->driver.owner); 249 module_put(serial->type->driver.owner);
252bailout_mutex_unlock: 250bailout_mutex_unlock:
253 port->port.count = 0; 251 port->port.count = 0;
254 tty->driver_data = NULL; 252 tty->driver_data = NULL;
255 tty_port_tty_set(&port->port, NULL); 253 tty_port_tty_set(&port->port, NULL);
256 mutex_unlock(&port->mutex); 254 mutex_unlock(&port->mutex);
257bailout_kref_put: 255bailout_port_put:
256 put_device(&port->dev);
257bailout_serial_put:
258 usb_serial_put(serial); 258 usb_serial_put(serial);
259 return retval; 259 return retval;
260} 260}
@@ -262,6 +262,9 @@ bailout_kref_put:
262static void serial_close(struct tty_struct *tty, struct file *filp) 262static void serial_close(struct tty_struct *tty, struct file *filp)
263{ 263{
264 struct usb_serial_port *port = tty->driver_data; 264 struct usb_serial_port *port = tty->driver_data;
265 struct usb_serial *serial;
266 struct module *owner;
267 int count;
265 268
266 if (!port) 269 if (!port)
267 return; 270 return;
@@ -269,6 +272,8 @@ static void serial_close(struct tty_struct *tty, struct file *filp)
269 dbg("%s - port %d", __func__, port->number); 272 dbg("%s - port %d", __func__, port->number);
270 273
271 mutex_lock(&port->mutex); 274 mutex_lock(&port->mutex);
275 serial = port->serial;
276 owner = serial->type->driver.owner;
272 277
273 if (port->port.count == 0) { 278 if (port->port.count == 0) {
274 mutex_unlock(&port->mutex); 279 mutex_unlock(&port->mutex);
@@ -281,7 +286,7 @@ static void serial_close(struct tty_struct *tty, struct file *filp)
281 * this before we drop the port count. The call is protected 286 * this before we drop the port count. The call is protected
282 * by the port mutex 287 * by the port mutex
283 */ 288 */
284 port->serial->type->close(tty, port, filp); 289 serial->type->close(tty, port, filp);
285 290
286 if (port->port.count == (port->console ? 2 : 1)) { 291 if (port->port.count == (port->console ? 2 : 1)) {
287 struct tty_struct *tty = tty_port_tty_get(&port->port); 292 struct tty_struct *tty = tty_port_tty_get(&port->port);
@@ -295,17 +300,23 @@ static void serial_close(struct tty_struct *tty, struct file *filp)
295 } 300 }
296 } 301 }
297 302
298 if (port->port.count == 1) {
299 mutex_lock(&port->serial->disc_mutex);
300 if (!port->serial->disconnected)
301 usb_autopm_put_interface(port->serial->interface);
302 mutex_unlock(&port->serial->disc_mutex);
303 module_put(port->serial->type->driver.owner);
304 }
305 --port->port.count; 303 --port->port.count;
306 304 count = port->port.count;
307 mutex_unlock(&port->mutex); 305 mutex_unlock(&port->mutex);
308 usb_serial_put(port->serial); 306 put_device(&port->dev);
307
308 /* Mustn't dereference port any more */
309 if (count == 0) {
310 mutex_lock(&serial->disc_mutex);
311 if (!serial->disconnected)
312 usb_autopm_put_interface(serial->interface);
313 mutex_unlock(&serial->disc_mutex);
314 }
315 usb_serial_put(serial);
316
317 /* Mustn't dereference serial any more */
318 if (count == 0)
319 module_put(owner);
309} 320}
310 321
311static int serial_write(struct tty_struct *tty, const unsigned char *buf, 322static int serial_write(struct tty_struct *tty, const unsigned char *buf,
@@ -549,7 +560,13 @@ static void kill_traffic(struct usb_serial_port *port)
549 560
550static void port_free(struct usb_serial_port *port) 561static void port_free(struct usb_serial_port *port)
551{ 562{
563 /*
564 * Stop all the traffic before cancelling the work, so that
565 * nobody will restart it by calling usb_serial_port_softint.
566 */
552 kill_traffic(port); 567 kill_traffic(port);
568 cancel_work_sync(&port->work);
569
553 usb_free_urb(port->read_urb); 570 usb_free_urb(port->read_urb);
554 usb_free_urb(port->write_urb); 571 usb_free_urb(port->write_urb);
555 usb_free_urb(port->interrupt_in_urb); 572 usb_free_urb(port->interrupt_in_urb);
@@ -558,7 +575,6 @@ static void port_free(struct usb_serial_port *port)
558 kfree(port->bulk_out_buffer); 575 kfree(port->bulk_out_buffer);
559 kfree(port->interrupt_in_buffer); 576 kfree(port->interrupt_in_buffer);
560 kfree(port->interrupt_out_buffer); 577 kfree(port->interrupt_out_buffer);
561 flush_scheduled_work(); /* port->work */
562 kfree(port); 578 kfree(port);
563} 579}
564 580
@@ -1043,6 +1059,12 @@ void usb_serial_disconnect(struct usb_interface *interface)
1043 usb_set_intfdata(interface, NULL); 1059 usb_set_intfdata(interface, NULL);
1044 /* must set a flag, to signal subdrivers */ 1060 /* must set a flag, to signal subdrivers */
1045 serial->disconnected = 1; 1061 serial->disconnected = 1;
1062 mutex_unlock(&serial->disc_mutex);
1063
1064 /* Unfortunately, many of the sub-drivers expect the port structures
1065 * to exist when their shutdown method is called, so we have to go
1066 * through this awkward two-step unregistration procedure.
1067 */
1046 for (i = 0; i < serial->num_ports; ++i) { 1068 for (i = 0; i < serial->num_ports; ++i) {
1047 port = serial->port[i]; 1069 port = serial->port[i];
1048 if (port) { 1070 if (port) {
@@ -1052,11 +1074,21 @@ void usb_serial_disconnect(struct usb_interface *interface)
1052 tty_kref_put(tty); 1074 tty_kref_put(tty);
1053 } 1075 }
1054 kill_traffic(port); 1076 kill_traffic(port);
1077 cancel_work_sync(&port->work);
1078 device_del(&port->dev);
1079 }
1080 }
1081 serial->type->shutdown(serial);
1082 for (i = 0; i < serial->num_ports; ++i) {
1083 port = serial->port[i];
1084 if (port) {
1085 put_device(&port->dev);
1086 serial->port[i] = NULL;
1055 } 1087 }
1056 } 1088 }
1089
1057 /* let the last holder of this object 1090 /* let the last holder of this object
1058 * cause it to be cleaned up */ 1091 * cause it to be cleaned up */
1059 mutex_unlock(&serial->disc_mutex);
1060 usb_serial_put(serial); 1092 usb_serial_put(serial);
1061 dev_info(dev, "device disconnected\n"); 1093 dev_info(dev, "device disconnected\n");
1062} 1094}
diff --git a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c
index 4facce3d9364..5ac414bda718 100644
--- a/drivers/usb/serial/visor.c
+++ b/drivers/usb/serial/visor.c
@@ -296,14 +296,6 @@ static int visor_open(struct tty_struct *tty, struct usb_serial_port *port,
296 priv->throttled = 0; 296 priv->throttled = 0;
297 spin_unlock_irqrestore(&priv->lock, flags); 297 spin_unlock_irqrestore(&priv->lock, flags);
298 298
299 /*
300 * Force low_latency on so that our tty_push actually forces the data
301 * through, otherwise it is scheduled, and with high data rates (like
302 * with OHCI) data can get lost.
303 */
304 if (tty)
305 tty->low_latency = 1;
306
307 /* Start reading from the device */ 299 /* Start reading from the device */
308 usb_fill_bulk_urb(port->read_urb, serial->dev, 300 usb_fill_bulk_urb(port->read_urb, serial->dev,
309 usb_rcvbulkpipe(serial->dev, 301 usb_rcvbulkpipe(serial->dev,
diff --git a/drivers/usb/storage/Makefile b/drivers/usb/storage/Makefile
index 5be54c019662..ef7e5a8ceab5 100644
--- a/drivers/usb/storage/Makefile
+++ b/drivers/usb/storage/Makefile
@@ -17,7 +17,8 @@ usb-storage-objs := scsiglue.o protocol.o transport.o usb.o \
17ifeq ($(CONFIG_USB_LIBUSUAL),) 17ifeq ($(CONFIG_USB_LIBUSUAL),)
18 usb-storage-objs += usual-tables.o 18 usb-storage-objs += usual-tables.o
19else 19else
20 obj-$(CONFIG_USB) += libusual.o usual-tables.o 20 obj-$(CONFIG_USB) += usb-libusual.o
21 usb-libusual-objs := libusual.o usual-tables.o
21endif 22endif
22 23
23obj-$(CONFIG_USB_STORAGE_ALAUDA) += ums-alauda.o 24obj-$(CONFIG_USB_STORAGE_ALAUDA) += ums-alauda.o
diff --git a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c
index 49aedb36dc19..fcb320217218 100644
--- a/drivers/usb/storage/transport.c
+++ b/drivers/usb/storage/transport.c
@@ -247,10 +247,8 @@ int usb_stor_clear_halt(struct us_data *us, unsigned int pipe)
247 USB_ENDPOINT_HALT, endp, 247 USB_ENDPOINT_HALT, endp,
248 NULL, 0, 3*HZ); 248 NULL, 0, 3*HZ);
249 249
250 /* reset the endpoint toggle */
251 if (result >= 0) 250 if (result >= 0)
252 usb_settoggle(us->pusb_dev, usb_pipeendpoint(pipe), 251 usb_reset_endpoint(us->pusb_dev, endp);
253 usb_pipeout(pipe), 0);
254 252
255 US_DEBUGP("%s: result = %d\n", __func__, result); 253 US_DEBUGP("%s: result = %d\n", __func__, result);
256 return result; 254 return result;
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
index 1c1f643e8a78..4b8b69045fe6 100644
--- a/drivers/usb/storage/unusual_devs.h
+++ b/drivers/usb/storage/unusual_devs.h
@@ -160,8 +160,9 @@ UNUSUAL_DEV( 0x0420, 0x0001, 0x0100, 0x0100,
160 US_SC_DEVICE, US_PR_DEVICE, NULL, 160 US_SC_DEVICE, US_PR_DEVICE, NULL,
161 US_FL_IGNORE_RESIDUE ), 161 US_FL_IGNORE_RESIDUE ),
162 162
163/* Reported by Andrew Nayenko <relan@bk.ru> */ 163/* Reported by Andrew Nayenko <relan@bk.ru>
164UNUSUAL_DEV( 0x0421, 0x0019, 0x0592, 0x0592, 164 * Updated for new firmware by Phillip Potter <phillipinda@hotmail.com> */
165UNUSUAL_DEV( 0x0421, 0x0019, 0x0592, 0x0610,
165 "Nokia", 166 "Nokia",
166 "Nokia 6288", 167 "Nokia 6288",
167 US_SC_DEVICE, US_PR_DEVICE, NULL, 168 US_SC_DEVICE, US_PR_DEVICE, NULL,
@@ -975,12 +976,14 @@ UNUSUAL_DEV( 0x07c4, 0xa400, 0x0000, 0xffff,
975 US_SC_DEVICE, US_PR_DEVICE, NULL, 976 US_SC_DEVICE, US_PR_DEVICE, NULL,
976 US_FL_FIX_INQUIRY | US_FL_FIX_CAPACITY ), 977 US_FL_FIX_INQUIRY | US_FL_FIX_CAPACITY ),
977 978
978/* Reported by Rauch Wolke <rauchwolke@gmx.net> */ 979/* Reported by Rauch Wolke <rauchwolke@gmx.net>
980 * and augmented by binbin <binbinsh@gmail.com> (Bugzilla #12882)
981 */
979UNUSUAL_DEV( 0x07c4, 0xa4a5, 0x0000, 0xffff, 982UNUSUAL_DEV( 0x07c4, 0xa4a5, 0x0000, 0xffff,
980 "Simple Tech/Datafab", 983 "Simple Tech/Datafab",
981 "CF+SM Reader", 984 "CF+SM Reader",
982 US_SC_DEVICE, US_PR_DEVICE, NULL, 985 US_SC_DEVICE, US_PR_DEVICE, NULL,
983 US_FL_IGNORE_RESIDUE ), 986 US_FL_IGNORE_RESIDUE | US_FL_MAX_SECTORS_64 ),
984 987
985/* Casio QV 2x00/3x00/4000/8000 digital still cameras are not conformant 988/* Casio QV 2x00/3x00/4000/8000 digital still cameras are not conformant
986 * to the USB storage specification in two ways: 989 * to the USB storage specification in two ways:
@@ -1376,6 +1379,14 @@ UNUSUAL_DEV( 0x10d6, 0x2200, 0x0100, 0x0100,
1376 US_SC_DEVICE, US_PR_DEVICE, NULL, 1379 US_SC_DEVICE, US_PR_DEVICE, NULL,
1377 0), 1380 0),
1378 1381
1382/* Reported by Pascal Terjan <pterjan@mandriva.com>
1383 * Ignore driver CD mode and force into modem mode by default.
1384 */
1385UNUSUAL_DEV( 0x1186, 0x3e04, 0x0000, 0x0000,
1386 "D-Link",
1387 "USB Mass Storage",
1388 US_SC_DEVICE, US_PR_DEVICE, option_ms_init, 0),
1389
1379/* Reported by Kevin Lloyd <linux@sierrawireless.com> 1390/* Reported by Kevin Lloyd <linux@sierrawireless.com>
1380 * Entry is needed for the initializer function override, 1391 * Entry is needed for the initializer function override,
1381 * which instructs the device to load as a modem 1392 * which instructs the device to load as a modem
@@ -1841,6 +1852,12 @@ UNUSUAL_DEV( 0xed06, 0x4500, 0x0001, 0x0001,
1841 US_SC_DEVICE, US_PR_DEVICE, NULL, 1852 US_SC_DEVICE, US_PR_DEVICE, NULL,
1842 US_FL_CAPACITY_HEURISTICS), 1853 US_FL_CAPACITY_HEURISTICS),
1843 1854
1855/* Reported by Alessio Treglia <quadrispro@ubuntu.com> */
1856UNUSUAL_DEV( 0xed10, 0x7636, 0x0001, 0x0001,
1857 "TGE",
1858 "Digital MP3 Audio Player",
1859 US_SC_DEVICE, US_PR_DEVICE, NULL, US_FL_NOT_LOCKABLE ),
1860
1844/* Control/Bulk transport for all SubClass values */ 1861/* Control/Bulk transport for all SubClass values */
1845USUAL_DEV(US_SC_RBC, US_PR_CB, USB_US_TYPE_STOR), 1862USUAL_DEV(US_SC_RBC, US_PR_CB, USB_US_TYPE_STOR),
1846USUAL_DEV(US_SC_8020, US_PR_CB, USB_US_TYPE_STOR), 1863USUAL_DEV(US_SC_8020, US_PR_CB, USB_US_TYPE_STOR),
diff --git a/drivers/usb/wusbcore/devconnect.c b/drivers/usb/wusbcore/devconnect.c
index 386eaa22d215..4ac4300a3f9a 100644
--- a/drivers/usb/wusbcore/devconnect.c
+++ b/drivers/usb/wusbcore/devconnect.c
@@ -267,6 +267,8 @@ static void wusbhc_devconnect_acked_work(struct work_struct *work)
267 mutex_lock(&wusbhc->mutex); 267 mutex_lock(&wusbhc->mutex);
268 wusbhc_devconnect_acked(wusbhc, wusb_dev); 268 wusbhc_devconnect_acked(wusbhc, wusb_dev);
269 mutex_unlock(&wusbhc->mutex); 269 mutex_unlock(&wusbhc->mutex);
270
271 wusb_dev_put(wusb_dev);
270} 272}
271 273
272/* 274/*
@@ -396,7 +398,8 @@ static void __wusbhc_dev_disconnect(struct wusbhc *wusbhc,
396 398
397 /* After a device disconnects, change the GTK (see [WUSB] 399 /* After a device disconnects, change the GTK (see [WUSB]
398 * section 6.2.11.2). */ 400 * section 6.2.11.2). */
399 wusbhc_gtk_rekey(wusbhc); 401 if (wusbhc->active)
402 wusbhc_gtk_rekey(wusbhc);
400 403
401 /* The Wireless USB part has forgotten about the device already; now 404 /* The Wireless USB part has forgotten about the device already; now
402 * khubd's timer will pick up the disconnection and remove the USB 405 * khubd's timer will pick up the disconnection and remove the USB
@@ -1084,15 +1087,21 @@ error_mmcie_set:
1084 * wusbhc_devconnect_stop - stop managing connected devices 1087 * wusbhc_devconnect_stop - stop managing connected devices
1085 * @wusbhc: the WUSB HC 1088 * @wusbhc: the WUSB HC
1086 * 1089 *
1087 * Removes the Host Info IE and stops the keep alives. 1090 * Disconnects any devices still connected, stops the keep alives and
1088 * 1091 * removes the Host Info IE.
1089 * FIXME: should this disconnect all devices?
1090 */ 1092 */
1091void wusbhc_devconnect_stop(struct wusbhc *wusbhc) 1093void wusbhc_devconnect_stop(struct wusbhc *wusbhc)
1092{ 1094{
1093 cancel_delayed_work_sync(&wusbhc->keep_alive_timer); 1095 int i;
1094 WARN_ON(!list_empty(&wusbhc->cack_list));
1095 1096
1097 mutex_lock(&wusbhc->mutex);
1098 for (i = 0; i < wusbhc->ports_max; i++) {
1099 if (wusbhc->port[i].wusb_dev)
1100 __wusbhc_dev_disconnect(wusbhc, &wusbhc->port[i]);
1101 }
1102 mutex_unlock(&wusbhc->mutex);
1103
1104 cancel_delayed_work_sync(&wusbhc->keep_alive_timer);
1096 wusbhc_mmcie_rm(wusbhc, &wusbhc->wuie_host_info->hdr); 1105 wusbhc_mmcie_rm(wusbhc, &wusbhc->wuie_host_info->hdr);
1097 kfree(wusbhc->wuie_host_info); 1106 kfree(wusbhc->wuie_host_info);
1098 wusbhc->wuie_host_info = NULL; 1107 wusbhc->wuie_host_info = NULL;
diff --git a/drivers/usb/wusbcore/wusbhc.c b/drivers/usb/wusbcore/wusbhc.c
index 07c63a31c799..ee6256f23636 100644
--- a/drivers/usb/wusbcore/wusbhc.c
+++ b/drivers/usb/wusbcore/wusbhc.c
@@ -88,33 +88,31 @@ static DEVICE_ATTR(wusb_trust_timeout, 0644, wusb_trust_timeout_show,
88 wusb_trust_timeout_store); 88 wusb_trust_timeout_store);
89 89
90/* 90/*
91 * Show & store the current WUSB CHID 91 * Show the current WUSB CHID.
92 */ 92 */
93static ssize_t wusb_chid_show(struct device *dev, 93static ssize_t wusb_chid_show(struct device *dev,
94 struct device_attribute *attr, char *buf) 94 struct device_attribute *attr, char *buf)
95{ 95{
96 struct wusbhc *wusbhc = usbhc_dev_to_wusbhc(dev); 96 struct wusbhc *wusbhc = usbhc_dev_to_wusbhc(dev);
97 const struct wusb_ckhdid *chid;
97 ssize_t result = 0; 98 ssize_t result = 0;
98 99
99 if (wusbhc->wuie_host_info != NULL) 100 if (wusbhc->wuie_host_info != NULL)
100 result += ckhdid_printf(buf, PAGE_SIZE, 101 chid = &wusbhc->wuie_host_info->CHID;
101 &wusbhc->wuie_host_info->CHID); 102 else
103 chid = &wusb_ckhdid_zero;
104
105 result += ckhdid_printf(buf, PAGE_SIZE, chid);
106 result += sprintf(buf + result, "\n");
107
102 return result; 108 return result;
103} 109}
104 110
105/* 111/*
106 * Store a new CHID 112 * Store a new CHID.
107 *
108 * This will (FIXME) trigger many changes.
109 *
110 * - Send an all zeros CHID and it will stop the controller
111 * - Send a non-zero CHID and it will start it
112 * (unless it was started, it will just change the CHID,
113 * diconnecting all devices first).
114 * 113 *
115 * So first we scan the MMC we are sent and then we act on it. We 114 * - Write an all zeros CHID and it will stop the controller
116 * read it in the same format as we print it, an ASCII string of 16 115 * - Write a non-zero CHID and it will start it.
117 * hex bytes.
118 * 116 *
119 * See wusbhc_chid_set() for more info. 117 * See wusbhc_chid_set() for more info.
120 */ 118 */
@@ -339,13 +337,15 @@ void wusbhc_giveback_urb(struct wusbhc *wusbhc, struct urb *urb, int status)
339{ 337{
340 struct wusb_dev *wusb_dev = __wusb_dev_get_by_usb_dev(wusbhc, urb->dev); 338 struct wusb_dev *wusb_dev = __wusb_dev_get_by_usb_dev(wusbhc, urb->dev);
341 339
342 if (status == 0) { 340 if (status == 0 && wusb_dev) {
343 wusb_dev->entry_ts = jiffies; 341 wusb_dev->entry_ts = jiffies;
344 342
345 /* wusbhc_devconnect_acked() can't be called from from 343 /* wusbhc_devconnect_acked() can't be called from
346 atomic context so defer it to a work queue. */ 344 atomic context so defer it to a work queue. */
347 if (!list_empty(&wusb_dev->cack_node)) 345 if (!list_empty(&wusb_dev->cack_node))
348 queue_work(wusbd, &wusb_dev->devconnect_acked_work); 346 queue_work(wusbd, &wusb_dev->devconnect_acked_work);
347 else
348 wusb_dev_put(wusb_dev);
349 } 349 }
350 350
351 usb_hcd_giveback_urb(&wusbhc->usb_hcd, urb, status); 351 usb_hcd_giveback_urb(&wusbhc->usb_hcd, urb, status);
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
index 7826bdce4bbe..0048f1185a60 100644
--- a/drivers/video/Kconfig
+++ b/drivers/video/Kconfig
@@ -1128,13 +1128,6 @@ config FB_INTEL
1128 830M/845G/852GM/855GM/865G/915G/915GM/945G/945GM/965G/965GM chipsets. 1128 830M/845G/852GM/855GM/865G/915G/915GM/945G/945GM/965G/965GM chipsets.
1129 Say Y if you have and plan to use such a board. 1129 Say Y if you have and plan to use such a board.
1130 1130
1131 If you say Y here and want DDC/I2C support you must first say Y to
1132 "I2C support" and "I2C bit-banging support" in the character devices
1133 section.
1134
1135 If you say M here then "I2C support" and "I2C bit-banging support"
1136 can be build either as modules or built-in.
1137
1138 To compile this driver as a module, choose M here: the 1131 To compile this driver as a module, choose M here: the
1139 module will be called intelfb. 1132 module will be called intelfb.
1140 1133
@@ -1207,11 +1200,10 @@ config FB_MATROX_G
1207 pixel and 32 bpp packed pixel. You can also use font widths 1200 pixel and 32 bpp packed pixel. You can also use font widths
1208 different from 8. 1201 different from 8.
1209 1202
1210 If you need support for G400 secondary head, you must first say Y to 1203 If you need support for G400 secondary head, you must say Y to
1211 "I2C support" in the character devices section, and then to 1204 "Matrox I2C support" and "G400 second head support" right below.
1212 "Matrox I2C support" and "G400 second head support" here in the 1205 G450/G550 secondary head and digital output are supported without
1213 framebuffer section. G450/G550 secondary head and digital output 1206 additional modules.
1214 are supported without additional modules.
1215 1207
1216 The driver starts in monitor mode. You must use the matroxset tool 1208 The driver starts in monitor mode. You must use the matroxset tool
1217 (available at <ftp://platan.vc.cvut.cz/pub/linux/matrox-latest/>) to 1209 (available at <ftp://platan.vc.cvut.cz/pub/linux/matrox-latest/>) to
@@ -1310,13 +1302,6 @@ config FB_RADEON
1310 a framebuffer device. There are both PCI and AGP versions. You 1302 a framebuffer device. There are both PCI and AGP versions. You
1311 don't need to choose this to run the Radeon in plain VGA mode. 1303 don't need to choose this to run the Radeon in plain VGA mode.
1312 1304
1313 If you say Y here and want DDC/I2C support you must first say Y to
1314 "I2C support" and "I2C bit-banging support" in the character devices
1315 section.
1316
1317 If you say M here then "I2C support" and "I2C bit-banging support"
1318 can be build either as modules or built-in.
1319
1320 There is a product page at 1305 There is a product page at
1321 http://apps.ati.com/ATIcompare/ 1306 http://apps.ati.com/ATIcompare/
1322 1307
diff --git a/drivers/video/Makefile b/drivers/video/Makefile
index 0dbd6c68d76b..d8d0be5151e3 100644
--- a/drivers/video/Makefile
+++ b/drivers/video/Makefile
@@ -56,7 +56,6 @@ obj-$(CONFIG_FB_CT65550) += chipsfb.o
56obj-$(CONFIG_FB_IMSTT) += imsttfb.o 56obj-$(CONFIG_FB_IMSTT) += imsttfb.o
57obj-$(CONFIG_FB_FM2) += fm2fb.o 57obj-$(CONFIG_FB_FM2) += fm2fb.o
58obj-$(CONFIG_FB_VT8623) += vt8623fb.o 58obj-$(CONFIG_FB_VT8623) += vt8623fb.o
59obj-$(CONFIG_FB_CYBLA) += cyblafb.o
60obj-$(CONFIG_FB_TRIDENT) += tridentfb.o 59obj-$(CONFIG_FB_TRIDENT) += tridentfb.o
61obj-$(CONFIG_FB_LE80578) += vermilion/ 60obj-$(CONFIG_FB_LE80578) += vermilion/
62obj-$(CONFIG_FB_S3) += s3fb.o 61obj-$(CONFIG_FB_S3) += s3fb.o
diff --git a/drivers/video/asiliantfb.c b/drivers/video/asiliantfb.c
index 1a1f946d8fef..9fe90ce928fb 100644
--- a/drivers/video/asiliantfb.c
+++ b/drivers/video/asiliantfb.c
@@ -533,6 +533,7 @@ static int __devinit init_asiliant(struct fb_info *p, unsigned long addr)
533 533
534 writeb(0xff, mmio_base + 0x78c); 534 writeb(0xff, mmio_base + 0x78c);
535 chips_hw_init(p); 535 chips_hw_init(p);
536 return 0;
536} 537}
537 538
538static int __devinit 539static int __devinit
diff --git a/drivers/video/aty/radeon_base.c b/drivers/video/aty/radeon_base.c
index 16bb7e3c0310..6c37e8ee5efe 100644
--- a/drivers/video/aty/radeon_base.c
+++ b/drivers/video/aty/radeon_base.c
@@ -698,8 +698,8 @@ static void __devinit radeon_get_pllinfo(struct radeonfb_info *rinfo)
698found: 698found:
699 /* 699 /*
700 * Some methods fail to retrieve SCLK and MCLK values, we apply default 700 * Some methods fail to retrieve SCLK and MCLK values, we apply default
701 * settings in this case (200Mhz). If that really happne often, we could 701 * settings in this case (200Mhz). If that really happens often, we
702 * fetch from registers instead... 702 * could fetch from registers instead...
703 */ 703 */
704 if (rinfo->pll.mclk == 0) 704 if (rinfo->pll.mclk == 0)
705 rinfo->pll.mclk = 20000; 705 rinfo->pll.mclk = 20000;
diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c
index dd37cbcaf8ce..157057c79ca3 100644
--- a/drivers/video/backlight/backlight.c
+++ b/drivers/video/backlight/backlight.c
@@ -35,8 +35,6 @@ static int fb_notifier_callback(struct notifier_block *self,
35 return 0; 35 return 0;
36 36
37 bd = container_of(self, struct backlight_device, fb_notif); 37 bd = container_of(self, struct backlight_device, fb_notif);
38 if (!lock_fb_info(evdata->info))
39 return -ENODEV;
40 mutex_lock(&bd->ops_lock); 38 mutex_lock(&bd->ops_lock);
41 if (bd->ops) 39 if (bd->ops)
42 if (!bd->ops->check_fb || 40 if (!bd->ops->check_fb ||
@@ -49,7 +47,6 @@ static int fb_notifier_callback(struct notifier_block *self,
49 backlight_update_status(bd); 47 backlight_update_status(bd);
50 } 48 }
51 mutex_unlock(&bd->ops_lock); 49 mutex_unlock(&bd->ops_lock);
52 unlock_fb_info(evdata->info);
53 return 0; 50 return 0;
54} 51}
55 52
diff --git a/drivers/video/backlight/lcd.c b/drivers/video/backlight/lcd.c
index 0bb13df0fa89..b6449470106c 100644
--- a/drivers/video/backlight/lcd.c
+++ b/drivers/video/backlight/lcd.c
@@ -40,8 +40,6 @@ static int fb_notifier_callback(struct notifier_block *self,
40 if (!ld->ops) 40 if (!ld->ops)
41 return 0; 41 return 0;
42 42
43 if (!lock_fb_info(evdata->info))
44 return -ENODEV;
45 mutex_lock(&ld->ops_lock); 43 mutex_lock(&ld->ops_lock);
46 if (!ld->ops->check_fb || ld->ops->check_fb(ld, evdata->info)) { 44 if (!ld->ops->check_fb || ld->ops->check_fb(ld, evdata->info)) {
47 if (event == FB_EVENT_BLANK) { 45 if (event == FB_EVENT_BLANK) {
@@ -53,7 +51,6 @@ static int fb_notifier_callback(struct notifier_block *self,
53 } 51 }
54 } 52 }
55 mutex_unlock(&ld->ops_lock); 53 mutex_unlock(&ld->ops_lock);
56 unlock_fb_info(evdata->info);
57 return 0; 54 return 0;
58} 55}
59 56
diff --git a/drivers/video/cfbfillrect.c b/drivers/video/cfbfillrect.c
index 64b35766b2a2..ba9f58b2a5e8 100644
--- a/drivers/video/cfbfillrect.c
+++ b/drivers/video/cfbfillrect.c
@@ -9,10 +9,6 @@
9 * 9 *
10 * NOTES: 10 * NOTES:
11 * 11 *
12 * The code for depths like 24 that don't have integer number of pixels per
13 * long is broken and needs to be fixed. For now I turned these types of
14 * mode off.
15 *
16 * Also need to add code to deal with cards endians that are different than 12 * Also need to add code to deal with cards endians that are different than
17 * the native cpu endians. I also need to deal with MSB position in the word. 13 * the native cpu endians. I also need to deal with MSB position in the word.
18 * 14 *
@@ -139,7 +135,7 @@ bitfill_unaligned(struct fb_info *p, unsigned long __iomem *dst, int dst_idx,
139 135
140 // Trailing bits 136 // Trailing bits
141 if (last) 137 if (last)
142 FB_WRITEL(comp(pat, FB_READL(dst), first), dst); 138 FB_WRITEL(comp(pat, FB_READL(dst), last), dst);
143 } 139 }
144} 140}
145 141
@@ -281,7 +277,7 @@ bitfill_unaligned_rev(struct fb_info *p, unsigned long __iomem *dst,
281 277
282void cfb_fillrect(struct fb_info *p, const struct fb_fillrect *rect) 278void cfb_fillrect(struct fb_info *p, const struct fb_fillrect *rect)
283{ 279{
284 unsigned long pat, fg; 280 unsigned long pat, pat2, fg;
285 unsigned long width = rect->width, height = rect->height; 281 unsigned long width = rect->width, height = rect->height;
286 int bits = BITS_PER_LONG, bytes = bits >> 3; 282 int bits = BITS_PER_LONG, bytes = bits >> 3;
287 u32 bpp = p->var.bits_per_pixel; 283 u32 bpp = p->var.bits_per_pixel;
@@ -297,7 +293,7 @@ void cfb_fillrect(struct fb_info *p, const struct fb_fillrect *rect)
297 else 293 else
298 fg = rect->color; 294 fg = rect->color;
299 295
300 pat = pixel_to_pat( bpp, fg); 296 pat = pixel_to_pat(bpp, fg);
301 297
302 dst = (unsigned long __iomem *)((unsigned long)p->screen_base & ~(bytes-1)); 298 dst = (unsigned long __iomem *)((unsigned long)p->screen_base & ~(bytes-1));
303 dst_idx = ((unsigned long)p->screen_base & (bytes - 1))*8; 299 dst_idx = ((unsigned long)p->screen_base & (bytes - 1))*8;
@@ -333,17 +329,16 @@ void cfb_fillrect(struct fb_info *p, const struct fb_fillrect *rect)
333 dst_idx += p->fix.line_length*8; 329 dst_idx += p->fix.line_length*8;
334 } 330 }
335 } else { 331 } else {
336 int right; 332 int right, r;
337 int r;
338 int rot = (left-dst_idx) % bpp;
339 void (*fill_op)(struct fb_info *p, unsigned long __iomem *dst, 333 void (*fill_op)(struct fb_info *p, unsigned long __iomem *dst,
340 int dst_idx, unsigned long pat, int left, 334 int dst_idx, unsigned long pat, int left,
341 int right, unsigned n, int bits) = NULL; 335 int right, unsigned n, int bits) = NULL;
342 336#ifdef __LITTLE_ENDIAN
343 /* rotate pattern to correct start position */ 337 right = left;
344 pat = pat << rot | pat >> (bpp-rot); 338 left = bpp - right;
345 339#else
346 right = bpp-left; 340 right = bpp - left;
341#endif
347 switch (rect->rop) { 342 switch (rect->rop) {
348 case ROP_XOR: 343 case ROP_XOR:
349 fill_op = bitfill_unaligned_rev; 344 fill_op = bitfill_unaligned_rev;
@@ -352,17 +347,18 @@ void cfb_fillrect(struct fb_info *p, const struct fb_fillrect *rect)
352 fill_op = bitfill_unaligned; 347 fill_op = bitfill_unaligned;
353 break; 348 break;
354 default: 349 default:
355 printk( KERN_ERR "cfb_fillrect(): unknown rop, defaulting to ROP_COPY\n"); 350 printk(KERN_ERR "cfb_fillrect(): unknown rop, defaulting to ROP_COPY\n");
356 fill_op = bitfill_unaligned; 351 fill_op = bitfill_unaligned;
357 break; 352 break;
358 } 353 }
359 while (height--) { 354 while (height--) {
360 dst += dst_idx >> (ffs(bits) - 1); 355 dst += dst_idx / bits;
361 dst_idx &= (bits - 1); 356 dst_idx &= (bits - 1);
362 fill_op(p, dst, dst_idx, pat, left, right, 357 r = dst_idx % bpp;
358 /* rotate pattern to the correct start position */
359 pat2 = le_long_to_cpu(rolx(cpu_to_le_long(pat), r, bpp));
360 fill_op(p, dst, dst_idx, pat2, left, right,
363 width*bpp, bits); 361 width*bpp, bits);
364 r = (p->fix.line_length*8) % bpp;
365 pat = pat << (bpp-r) | pat >> r;
366 dst_idx += p->fix.line_length*8; 362 dst_idx += p->fix.line_length*8;
367 } 363 }
368 } 364 }
diff --git a/drivers/video/cirrusfb.c b/drivers/video/cirrusfb.c
index d42e385f091c..4c2bf923418c 100644
--- a/drivers/video/cirrusfb.c
+++ b/drivers/video/cirrusfb.c
@@ -567,9 +567,7 @@ static int cirrusfb_check_var(struct fb_var_screeninfo *var,
567 default: 567 default:
568 dev_dbg(info->device, 568 dev_dbg(info->device,
569 "Unsupported bpp size: %d\n", var->bits_per_pixel); 569 "Unsupported bpp size: %d\n", var->bits_per_pixel);
570 assert(false); 570 return -EINVAL;
571 /* should never occur */
572 break;
573 } 571 }
574 572
575 if (var->xres_virtual < var->xres) 573 if (var->xres_virtual < var->xres)
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
index 2cd500a304f2..471a9a60376a 100644
--- a/drivers/video/console/fbcon.c
+++ b/drivers/video/console/fbcon.c
@@ -2263,9 +2263,12 @@ static void fbcon_generic_blank(struct vc_data *vc, struct fb_info *info,
2263 } 2263 }
2264 2264
2265 2265
2266 if (!lock_fb_info(info))
2267 return;
2266 event.info = info; 2268 event.info = info;
2267 event.data = &blank; 2269 event.data = &blank;
2268 fb_notifier_call_chain(FB_EVENT_CONBLANK, &event); 2270 fb_notifier_call_chain(FB_EVENT_CONBLANK, &event);
2271 unlock_fb_info(info);
2269} 2272}
2270 2273
2271static int fbcon_blank(struct vc_data *vc, int blank, int mode_switch) 2274static int fbcon_blank(struct vc_data *vc, int blank, int mode_switch)
@@ -2956,8 +2959,6 @@ static int fbcon_fb_unregistered(struct fb_info *info)
2956{ 2959{
2957 int i, idx; 2960 int i, idx;
2958 2961
2959 if (!lock_fb_info(info))
2960 return -ENODEV;
2961 idx = info->node; 2962 idx = info->node;
2962 for (i = first_fb_vc; i <= last_fb_vc; i++) { 2963 for (i = first_fb_vc; i <= last_fb_vc; i++) {
2963 if (con2fb_map[i] == idx) 2964 if (con2fb_map[i] == idx)
@@ -2985,8 +2986,6 @@ static int fbcon_fb_unregistered(struct fb_info *info)
2985 if (primary_device == idx) 2986 if (primary_device == idx)
2986 primary_device = -1; 2987 primary_device = -1;
2987 2988
2988 unlock_fb_info(info);
2989
2990 if (!num_registered_fb) 2989 if (!num_registered_fb)
2991 unregister_con_driver(&fb_con); 2990 unregister_con_driver(&fb_con);
2992 2991
@@ -3027,11 +3026,8 @@ static int fbcon_fb_registered(struct fb_info *info)
3027{ 3026{
3028 int ret = 0, i, idx; 3027 int ret = 0, i, idx;
3029 3028
3030 if (!lock_fb_info(info))
3031 return -ENODEV;
3032 idx = info->node; 3029 idx = info->node;
3033 fbcon_select_primary(info); 3030 fbcon_select_primary(info);
3034 unlock_fb_info(info);
3035 3031
3036 if (info_idx == -1) { 3032 if (info_idx == -1) {
3037 for (i = first_fb_vc; i <= last_fb_vc; i++) { 3033 for (i = first_fb_vc; i <= last_fb_vc; i++) {
@@ -3152,53 +3148,23 @@ static int fbcon_event_notify(struct notifier_block *self,
3152 3148
3153 switch(action) { 3149 switch(action) {
3154 case FB_EVENT_SUSPEND: 3150 case FB_EVENT_SUSPEND:
3155 if (!lock_fb_info(info)) {
3156 ret = -ENODEV;
3157 goto done;
3158 }
3159 fbcon_suspended(info); 3151 fbcon_suspended(info);
3160 unlock_fb_info(info);
3161 break; 3152 break;
3162 case FB_EVENT_RESUME: 3153 case FB_EVENT_RESUME:
3163 if (!lock_fb_info(info)) {
3164 ret = -ENODEV;
3165 goto done;
3166 }
3167 fbcon_resumed(info); 3154 fbcon_resumed(info);
3168 unlock_fb_info(info);
3169 break; 3155 break;
3170 case FB_EVENT_MODE_CHANGE: 3156 case FB_EVENT_MODE_CHANGE:
3171 if (!lock_fb_info(info)) {
3172 ret = -ENODEV;
3173 goto done;
3174 }
3175 fbcon_modechanged(info); 3157 fbcon_modechanged(info);
3176 unlock_fb_info(info);
3177 break; 3158 break;
3178 case FB_EVENT_MODE_CHANGE_ALL: 3159 case FB_EVENT_MODE_CHANGE_ALL:
3179 if (!lock_fb_info(info)) {
3180 ret = -ENODEV;
3181 goto done;
3182 }
3183 fbcon_set_all_vcs(info); 3160 fbcon_set_all_vcs(info);
3184 unlock_fb_info(info);
3185 break; 3161 break;
3186 case FB_EVENT_MODE_DELETE: 3162 case FB_EVENT_MODE_DELETE:
3187 mode = event->data; 3163 mode = event->data;
3188 if (!lock_fb_info(info)) {
3189 ret = -ENODEV;
3190 goto done;
3191 }
3192 ret = fbcon_mode_deleted(info, mode); 3164 ret = fbcon_mode_deleted(info, mode);
3193 unlock_fb_info(info);
3194 break; 3165 break;
3195 case FB_EVENT_FB_UNBIND: 3166 case FB_EVENT_FB_UNBIND:
3196 if (!lock_fb_info(info)) {
3197 ret = -ENODEV;
3198 goto done;
3199 }
3200 idx = info->node; 3167 idx = info->node;
3201 unlock_fb_info(info);
3202 ret = fbcon_fb_unbind(idx); 3168 ret = fbcon_fb_unbind(idx);
3203 break; 3169 break;
3204 case FB_EVENT_FB_REGISTERED: 3170 case FB_EVENT_FB_REGISTERED:
@@ -3217,29 +3183,14 @@ static int fbcon_event_notify(struct notifier_block *self,
3217 con2fb->framebuffer = con2fb_map[con2fb->console - 1]; 3183 con2fb->framebuffer = con2fb_map[con2fb->console - 1];
3218 break; 3184 break;
3219 case FB_EVENT_BLANK: 3185 case FB_EVENT_BLANK:
3220 if (!lock_fb_info(info)) {
3221 ret = -ENODEV;
3222 goto done;
3223 }
3224 fbcon_fb_blanked(info, *(int *)event->data); 3186 fbcon_fb_blanked(info, *(int *)event->data);
3225 unlock_fb_info(info);
3226 break; 3187 break;
3227 case FB_EVENT_NEW_MODELIST: 3188 case FB_EVENT_NEW_MODELIST:
3228 if (!lock_fb_info(info)) {
3229 ret = -ENODEV;
3230 goto done;
3231 }
3232 fbcon_new_modelist(info); 3189 fbcon_new_modelist(info);
3233 unlock_fb_info(info);
3234 break; 3190 break;
3235 case FB_EVENT_GET_REQ: 3191 case FB_EVENT_GET_REQ:
3236 caps = event->data; 3192 caps = event->data;
3237 if (!lock_fb_info(info)) {
3238 ret = -ENODEV;
3239 goto done;
3240 }
3241 fbcon_get_requirement(info, caps); 3193 fbcon_get_requirement(info, caps);
3242 unlock_fb_info(info);
3243 break; 3194 break;
3244 } 3195 }
3245done: 3196done:
diff --git a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c
index d012edda6d11..38e86b84dce0 100644
--- a/drivers/video/console/vgacon.c
+++ b/drivers/video/console/vgacon.c
@@ -1282,7 +1282,7 @@ static int vgacon_font_get(struct vc_data *c, struct console_font *font)
1282 font->charcount = vga_512_chars ? 512 : 256; 1282 font->charcount = vga_512_chars ? 512 : 256;
1283 if (!font->data) 1283 if (!font->data)
1284 return 0; 1284 return 0;
1285 return vgacon_do_font_op(&state, font->data, 0, 0); 1285 return vgacon_do_font_op(&state, font->data, 0, vga_512_chars);
1286} 1286}
1287 1287
1288#else 1288#else
diff --git a/drivers/video/efifb.c b/drivers/video/efifb.c
index 0c5b9a9fd56f..8dea2bc92705 100644
--- a/drivers/video/efifb.c
+++ b/drivers/video/efifb.c
@@ -210,12 +210,15 @@ static int __init efifb_probe(struct platform_device *dev)
210 unsigned int size_total; 210 unsigned int size_total;
211 int request_succeeded = 0; 211 int request_succeeded = 0;
212 212
213 printk(KERN_INFO "efifb: probing for efifb\n");
214
215 if (!screen_info.lfb_depth) 213 if (!screen_info.lfb_depth)
216 screen_info.lfb_depth = 32; 214 screen_info.lfb_depth = 32;
217 if (!screen_info.pages) 215 if (!screen_info.pages)
218 screen_info.pages = 1; 216 screen_info.pages = 1;
217 if (!screen_info.lfb_base) {
218 printk(KERN_DEBUG "efifb: invalid framebuffer address\n");
219 return -ENODEV;
220 }
221 printk(KERN_INFO "efifb: probing for efifb\n");
219 222
220 /* just assume they're all unset if any are */ 223 /* just assume they're all unset if any are */
221 if (!screen_info.blue_size) { 224 if (!screen_info.blue_size) {
diff --git a/drivers/video/fb_draw.h b/drivers/video/fb_draw.h
index 1db622192bde..04c01faaf772 100644
--- a/drivers/video/fb_draw.h
+++ b/drivers/video/fb_draw.h
@@ -33,11 +33,11 @@ pixel_to_pat( u32 bpp, u32 pixel)
33 case 8: 33 case 8:
34 return 0x0101010101010101ul*pixel; 34 return 0x0101010101010101ul*pixel;
35 case 12: 35 case 12:
36 return 0x0001001001001001ul*pixel; 36 return 0x1001001001001001ul*pixel;
37 case 16: 37 case 16:
38 return 0x0001000100010001ul*pixel; 38 return 0x0001000100010001ul*pixel;
39 case 24: 39 case 24:
40 return 0x0000000001000001ul*pixel; 40 return 0x0001000001000001ul*pixel;
41 case 32: 41 case 32:
42 return 0x0000000100000001ul*pixel; 42 return 0x0000000100000001ul*pixel;
43 default: 43 default:
@@ -58,11 +58,11 @@ pixel_to_pat( u32 bpp, u32 pixel)
58 case 8: 58 case 8:
59 return 0x01010101ul*pixel; 59 return 0x01010101ul*pixel;
60 case 12: 60 case 12:
61 return 0x00001001ul*pixel; 61 return 0x01001001ul*pixel;
62 case 16: 62 case 16:
63 return 0x00010001ul*pixel; 63 return 0x00010001ul*pixel;
64 case 24: 64 case 24:
65 return 0x00000001ul*pixel; 65 return 0x01000001ul*pixel;
66 case 32: 66 case 32:
67 return 0x00000001ul*pixel; 67 return 0x00000001ul*pixel;
68 default: 68 default:
@@ -167,4 +167,17 @@ static inline unsigned long fb_rev_pixels_in_long(unsigned long val,
167 167
168#endif /* CONFIG_FB_CFB_REV_PIXELS_IN_BYTE */ 168#endif /* CONFIG_FB_CFB_REV_PIXELS_IN_BYTE */
169 169
170#define cpu_to_le_long _cpu_to_le_long(BITS_PER_LONG)
171#define _cpu_to_le_long(x) __cpu_to_le_long(x)
172#define __cpu_to_le_long(x) cpu_to_le##x
173
174#define le_long_to_cpu _le_long_to_cpu(BITS_PER_LONG)
175#define _le_long_to_cpu(x) __le_long_to_cpu(x)
176#define __le_long_to_cpu(x) le##x##_to_cpu
177
178static inline unsigned long rolx(unsigned long word, unsigned int shift, unsigned int x)
179{
180 return (word << shift) | (word >> (x - shift));
181}
182
170#endif /* FB_DRAW_H */ 183#endif /* FB_DRAW_H */
diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
index 2ac32e6b5953..d412a1ddc12f 100644
--- a/drivers/video/fbmem.c
+++ b/drivers/video/fbmem.c
@@ -1097,8 +1097,11 @@ static long do_fb_ioctl(struct fb_info *info, unsigned int cmd,
1097 return -EINVAL; 1097 return -EINVAL;
1098 con2fb.framebuffer = -1; 1098 con2fb.framebuffer = -1;
1099 event.data = &con2fb; 1099 event.data = &con2fb;
1100 if (!lock_fb_info(info))
1101 return -ENODEV;
1100 event.info = info; 1102 event.info = info;
1101 fb_notifier_call_chain(FB_EVENT_GET_CONSOLE_MAP, &event); 1103 fb_notifier_call_chain(FB_EVENT_GET_CONSOLE_MAP, &event);
1104 unlock_fb_info(info);
1102 ret = copy_to_user(argp, &con2fb, sizeof(con2fb)) ? -EFAULT : 0; 1105 ret = copy_to_user(argp, &con2fb, sizeof(con2fb)) ? -EFAULT : 0;
1103 break; 1106 break;
1104 case FBIOPUT_CON2FBMAP: 1107 case FBIOPUT_CON2FBMAP:
@@ -1115,8 +1118,11 @@ static long do_fb_ioctl(struct fb_info *info, unsigned int cmd,
1115 break; 1118 break;
1116 } 1119 }
1117 event.data = &con2fb; 1120 event.data = &con2fb;
1121 if (!lock_fb_info(info))
1122 return -ENODEV;
1118 event.info = info; 1123 event.info = info;
1119 ret = fb_notifier_call_chain(FB_EVENT_SET_CONSOLE_MAP, &event); 1124 ret = fb_notifier_call_chain(FB_EVENT_SET_CONSOLE_MAP, &event);
1125 unlock_fb_info(info);
1120 break; 1126 break;
1121 case FBIOBLANK: 1127 case FBIOBLANK:
1122 if (!lock_fb_info(info)) 1128 if (!lock_fb_info(info))
@@ -1521,7 +1527,10 @@ register_framebuffer(struct fb_info *fb_info)
1521 registered_fb[i] = fb_info; 1527 registered_fb[i] = fb_info;
1522 1528
1523 event.info = fb_info; 1529 event.info = fb_info;
1530 if (!lock_fb_info(fb_info))
1531 return -ENODEV;
1524 fb_notifier_call_chain(FB_EVENT_FB_REGISTERED, &event); 1532 fb_notifier_call_chain(FB_EVENT_FB_REGISTERED, &event);
1533 unlock_fb_info(fb_info);
1525 return 0; 1534 return 0;
1526} 1535}
1527 1536
@@ -1555,8 +1564,12 @@ unregister_framebuffer(struct fb_info *fb_info)
1555 goto done; 1564 goto done;
1556 } 1565 }
1557 1566
1567
1568 if (!lock_fb_info(fb_info))
1569 return -ENODEV;
1558 event.info = fb_info; 1570 event.info = fb_info;
1559 ret = fb_notifier_call_chain(FB_EVENT_FB_UNBIND, &event); 1571 ret = fb_notifier_call_chain(FB_EVENT_FB_UNBIND, &event);
1572 unlock_fb_info(fb_info);
1560 1573
1561 if (ret) { 1574 if (ret) {
1562 ret = -EINVAL; 1575 ret = -EINVAL;
@@ -1590,6 +1603,8 @@ void fb_set_suspend(struct fb_info *info, int state)
1590{ 1603{
1591 struct fb_event event; 1604 struct fb_event event;
1592 1605
1606 if (!lock_fb_info(info))
1607 return;
1593 event.info = info; 1608 event.info = info;
1594 if (state) { 1609 if (state) {
1595 fb_notifier_call_chain(FB_EVENT_SUSPEND, &event); 1610 fb_notifier_call_chain(FB_EVENT_SUSPEND, &event);
@@ -1598,6 +1613,7 @@ void fb_set_suspend(struct fb_info *info, int state)
1598 info->state = FBINFO_STATE_RUNNING; 1613 info->state = FBINFO_STATE_RUNNING;
1599 fb_notifier_call_chain(FB_EVENT_RESUME, &event); 1614 fb_notifier_call_chain(FB_EVENT_RESUME, &event);
1600 } 1615 }
1616 unlock_fb_info(info);
1601} 1617}
1602 1618
1603/** 1619/**
@@ -1667,8 +1683,11 @@ int fb_new_modelist(struct fb_info *info)
1667 err = 1; 1683 err = 1;
1668 1684
1669 if (!list_empty(&info->modelist)) { 1685 if (!list_empty(&info->modelist)) {
1686 if (!lock_fb_info(info))
1687 return -ENODEV;
1670 event.info = info; 1688 event.info = info;
1671 err = fb_notifier_call_chain(FB_EVENT_NEW_MODELIST, &event); 1689 err = fb_notifier_call_chain(FB_EVENT_NEW_MODELIST, &event);
1690 unlock_fb_info(info);
1672 } 1691 }
1673 1692
1674 return err; 1693 return err;
diff --git a/drivers/video/gbefb.c b/drivers/video/gbefb.c
index fe5b519860b1..1a83709f9611 100644
--- a/drivers/video/gbefb.c
+++ b/drivers/video/gbefb.c
@@ -75,7 +75,7 @@ struct gbefb_par {
75static unsigned int gbe_mem_size = CONFIG_FB_GBE_MEM * 1024*1024; 75static unsigned int gbe_mem_size = CONFIG_FB_GBE_MEM * 1024*1024;
76static void *gbe_mem; 76static void *gbe_mem;
77static dma_addr_t gbe_dma_addr; 77static dma_addr_t gbe_dma_addr;
78unsigned long gbe_mem_phys; 78static unsigned long gbe_mem_phys;
79 79
80static struct { 80static struct {
81 uint16_t *cpu; 81 uint16_t *cpu;
@@ -185,8 +185,8 @@ static struct fb_videomode default_mode_LCD __initdata = {
185 .vmode = FB_VMODE_NONINTERLACED, 185 .vmode = FB_VMODE_NONINTERLACED,
186}; 186};
187 187
188struct fb_videomode *default_mode __initdata = &default_mode_CRT; 188static struct fb_videomode *default_mode __initdata = &default_mode_CRT;
189struct fb_var_screeninfo *default_var __initdata = &default_var_CRT; 189static struct fb_var_screeninfo *default_var __initdata = &default_var_CRT;
190 190
191static int flat_panel_enabled = 0; 191static int flat_panel_enabled = 0;
192 192
@@ -205,7 +205,7 @@ static void gbe_reset(void)
205 * console. 205 * console.
206 */ 206 */
207 207
208void gbe_turn_off(void) 208static void gbe_turn_off(void)
209{ 209{
210 int i; 210 int i;
211 unsigned int val, x, y, vpixen_off; 211 unsigned int val, x, y, vpixen_off;
@@ -1097,7 +1097,7 @@ static void gbefb_create_sysfs(struct device *dev)
1097 * Initialization 1097 * Initialization
1098 */ 1098 */
1099 1099
1100int __init gbefb_setup(char *options) 1100static int __init gbefb_setup(char *options)
1101{ 1101{
1102 char *this_opt; 1102 char *this_opt;
1103 1103
@@ -1283,7 +1283,7 @@ static struct platform_driver gbefb_driver = {
1283 1283
1284static struct platform_device *gbefb_device; 1284static struct platform_device *gbefb_device;
1285 1285
1286int __init gbefb_init(void) 1286static int __init gbefb_init(void)
1287{ 1287{
1288 int ret = platform_driver_register(&gbefb_driver); 1288 int ret = platform_driver_register(&gbefb_driver);
1289 if (!ret) { 1289 if (!ret) {
@@ -1301,7 +1301,7 @@ int __init gbefb_init(void)
1301 return ret; 1301 return ret;
1302} 1302}
1303 1303
1304void __exit gbefb_exit(void) 1304static void __exit gbefb_exit(void)
1305{ 1305{
1306 platform_device_unregister(gbefb_device); 1306 platform_device_unregister(gbefb_device);
1307 platform_driver_unregister(&gbefb_driver); 1307 platform_driver_unregister(&gbefb_driver);
diff --git a/drivers/video/intelfb/intelfb.h b/drivers/video/intelfb/intelfb.h
index a50bea614804..40984551c927 100644
--- a/drivers/video/intelfb/intelfb.h
+++ b/drivers/video/intelfb/intelfb.h
@@ -53,6 +53,7 @@
53#define PCI_DEVICE_ID_INTEL_830M 0x3577 53#define PCI_DEVICE_ID_INTEL_830M 0x3577
54#define PCI_DEVICE_ID_INTEL_845G 0x2562 54#define PCI_DEVICE_ID_INTEL_845G 0x2562
55#define PCI_DEVICE_ID_INTEL_85XGM 0x3582 55#define PCI_DEVICE_ID_INTEL_85XGM 0x3582
56#define PCI_DEVICE_ID_INTEL_854 0x358E
56#define PCI_DEVICE_ID_INTEL_865G 0x2572 57#define PCI_DEVICE_ID_INTEL_865G 0x2572
57#define PCI_DEVICE_ID_INTEL_915G 0x2582 58#define PCI_DEVICE_ID_INTEL_915G 0x2582
58#define PCI_DEVICE_ID_INTEL_915GM 0x2592 59#define PCI_DEVICE_ID_INTEL_915GM 0x2592
@@ -154,6 +155,7 @@ enum intel_chips {
154 INTEL_85XGM, 155 INTEL_85XGM,
155 INTEL_852GM, 156 INTEL_852GM,
156 INTEL_852GME, 157 INTEL_852GME,
158 INTEL_854,
157 INTEL_855GM, 159 INTEL_855GM,
158 INTEL_855GME, 160 INTEL_855GME,
159 INTEL_865G, 161 INTEL_865G,
diff --git a/drivers/video/intelfb/intelfb_i2c.c b/drivers/video/intelfb/intelfb_i2c.c
index b3065492bb20..487f2be47460 100644
--- a/drivers/video/intelfb/intelfb_i2c.c
+++ b/drivers/video/intelfb/intelfb_i2c.c
@@ -156,6 +156,7 @@ void intelfb_create_i2c_busses(struct intelfb_info *dinfo)
156 switch(dinfo->chipset) { 156 switch(dinfo->chipset) {
157 case INTEL_830M: 157 case INTEL_830M:
158 case INTEL_845G: 158 case INTEL_845G:
159 case INTEL_854:
159 case INTEL_855GM: 160 case INTEL_855GM:
160 case INTEL_865G: 161 case INTEL_865G:
161 dinfo->output[i].type = INTELFB_OUTPUT_DVO; 162 dinfo->output[i].type = INTELFB_OUTPUT_DVO;
diff --git a/drivers/video/intelfb/intelfbdrv.c b/drivers/video/intelfb/intelfbdrv.c
index 6d8e5415c809..ace14fe02fc4 100644
--- a/drivers/video/intelfb/intelfbdrv.c
+++ b/drivers/video/intelfb/intelfbdrv.c
@@ -182,6 +182,7 @@ static struct pci_device_id intelfb_pci_table[] __devinitdata = {
182 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_845G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_845G }, 182 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_845G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_845G },
183 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_85XGM, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_85XGM }, 183 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_85XGM, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_85XGM },
184 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_865G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_865G }, 184 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_865G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_865G },
185 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_854, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_854 },
185 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_915G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_915G }, 186 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_915G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_915G },
186 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_915GM, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_915GM }, 187 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_915GM, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_915GM },
187 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_945G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_945G }, 188 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_945G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_945G },
diff --git a/drivers/video/intelfb/intelfbhw.c b/drivers/video/intelfb/intelfbhw.c
index 8b26b27c2db6..0689f97c5238 100644
--- a/drivers/video/intelfb/intelfbhw.c
+++ b/drivers/video/intelfb/intelfbhw.c
@@ -84,6 +84,11 @@ int intelfbhw_get_chipset(struct pci_dev *pdev, struct intelfb_info *dinfo)
84 dinfo->mobile = 0; 84 dinfo->mobile = 0;
85 dinfo->pll_index = PLLS_I8xx; 85 dinfo->pll_index = PLLS_I8xx;
86 return 0; 86 return 0;
87 case PCI_DEVICE_ID_INTEL_854:
88 dinfo->mobile = 1;
89 dinfo->name = "Intel(R) 854";
90 dinfo->chipset = INTEL_854;
91 return 0;
87 case PCI_DEVICE_ID_INTEL_85XGM: 92 case PCI_DEVICE_ID_INTEL_85XGM:
88 tmp = 0; 93 tmp = 0;
89 dinfo->mobile = 1; 94 dinfo->mobile = 1;
diff --git a/drivers/video/logo/logo_linux_clut224.ppm b/drivers/video/logo/logo_linux_clut224.ppm
index de93ff3fc1ad..3c14e43b82fe 100644
--- a/drivers/video/logo/logo_linux_clut224.ppm
+++ b/drivers/video/logo/logo_linux_clut224.ppm
@@ -1,2828 +1,1604 @@
1P3 1P3
2145 113 2# Standard 224-color Linux logo
380 80
3255 4255
40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0
50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0
60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0
70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0
80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0
90 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0
100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0
110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0
120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 0 0 0 0 0 0 0 0 0 0 0 0
130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 6 6 6 6 6 6 10 10 10 10 10 10
140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 10 10 10 6 6 6 6 6 6 6 6 6
150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 0
160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0
170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 0 0 0 0 0 0 0 0 0 0 0 0
180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0 0 0 0 0 0 0 0
190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 0 0 0 0 0 0 0 0 0 0 0 0
200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 0 0 0 0 0 0 0 0 0 0 0 0
210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 0 0 0 0 0 0 0 0 0 0 0 0
220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 0 0 0 0 0 0 0 0 0 0 0 0
230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 0 0 0 0 0 0 0 0 0 0 0 0
240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0
250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 0 0 0 0 0 0 0 0 0 0 0 0
260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 0 0 0 0 0 0 0 0 0 0 0 0
270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 0 0 0 0 0 0 0 0 0 0 0 0
280 0 0 29 0 0 0 0 0 0 0 0 0 0 0 0
290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 0 0 0 0 0 0 0 0 0 0 0 0
300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 0 0 0 0 0 0 0 0 0 0 0 0
310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0
320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 0 0 0 6 6 6 10 10 10 14 14 14
330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 22 22 22 26 26 26 30 30 30 34 34 34
340 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 30 30 30 30 30 30 26 26 26 18 18 18
350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36 14 14 14 10 10 10 6 6 6 0 0 0
360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 37 0 0 0 0 0 0 0 0 0 0 0 0
370 0 0 0 0 0 0 0 0 0 0 0 3 4 4 6 7 7 38 0 0 0 0 0 0 0 0 0 0 0 0
388 10 10 8 10 10 6 8 8 6 7 7 3 4 4 2 2 2 39 0 0 0 0 0 0 0 0 0 0 0 0
390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40 0 0 0 0 0 0 0 0 0 0 0 0
400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 0 0 0 0 0 0 0 0 0 0 0 0
410 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 42 0 0 0 0 0 0 0 0 0 0 0 0
420 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 0 0 0 0 0 0 0 0 0 0 0 0
430 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 44 0 0 0 0 0 0 0 0 0 0 0 0
440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 0 0 0 0 0 0 0 0 0 0 0 0
450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 46 0 0 0 0 0 1 0 0 1 0 0 0
460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 47 0 0 0 0 0 0 0 0 0 0 0 0
470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 0 0 0 0 0 0 0 0 0 0 0 0
480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 49 0 0 0 0 0 0 0 0 0 0 0 0
490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50 0 0 0 0 0 0 0 0 0 0 0 0
500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 51 0 0 0 0 0 0 0 0 0 0 0 0
510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 0 0 0 0 0 0 0 0 0 0 0 0
520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 53 6 6 6 14 14 14 26 26 26 42 42 42
530 0 0 54 54 54 54 66 66 66 78 78 78 78 78 78
540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 55 78 78 78 74 74 74 66 66 66 54 54 54
550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 56 42 42 42 26 26 26 18 18 18 10 10 10
560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 57 6 6 6 0 0 0 0 0 0 0 0 0
570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 58 0 0 0 0 0 0 0 0 0 0 0 0
580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 59 0 0 0 0 0 0 0 0 0 0 0 0
590 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 0 0 0 0 0 0 0 0 0 0 0 0
600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 0 0 0 0 0 0 0 0 0 0 0 0
610 0 0 0 0 0 0 0 0 0 0 0 4 5 5 17 18 17 62 0 0 0 0 0 0 0 0 0 0 0 0
6227 29 28 35 37 36 40 43 41 43 45 43 40 43 41 37 39 37 63 0 0 0 0 0 0 0 0 0 0 0 0
6332 34 33 27 30 29 23 25 24 17 21 21 15 18 18 12 15 15 64 0 0 0 0 0 0 0 0 0 0 0 0
6411 13 13 8 10 10 6 7 7 3 4 4 1 1 1 0 0 0 65 0 0 0 0 0 0 0 0 0 0 0 0
650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 66 0 0 1 0 0 0 0 0 0 0 0 0
660 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 67 0 0 0 0 0 0 0 0 0 0 0 0
670 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 68 0 0 0 0 0 0 0 0 0 0 0 0
680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 69 0 0 0 0 0 0 0 0 0 0 0 0
690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 70 0 0 0 0 0 0 0 0 0 0 0 0
700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 71 0 0 0 0 0 0 0 0 0 0 0 0
710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 72 0 0 0 0 0 0 0 0 0 10 10 10
720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 73 22 22 22 42 42 42 66 66 66 86 86 86
730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 74 66 66 66 38 38 38 38 38 38 22 22 22
740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 75 26 26 26 34 34 34 54 54 54 66 66 66
750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 76 86 86 86 70 70 70 46 46 46 26 26 26
760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 14 14 14 6 6 6 0 0 0 0 0 0
770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 78 0 0 0 0 0 0 0 0 0 0 0 0
780 0 0 79 0 0 0 0 0 0 0 0 0 0 0 0
790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 80 0 0 0 0 0 0 0 0 0 0 0 0
800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 81 0 0 0 0 0 0 0 0 0 0 0 0
810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 82 0 0 0 0 0 0 0 0 0 0 0 0
820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 83 0 0 0 0 0 0 0 0 0 0 0 0
830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 84 0 0 0 0 0 0 0 0 0 0 0 0
840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 0 0 0 0 0 0 0 0 0 0 0 0
850 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 86 0 0 1 0 0 1 0 0 1 0 0 0
860 0 0 13 13 13 32 34 33 49 51 48 60 60 56 58 59 55 87 0 0 0 0 0 0 0 0 0 0 0 0
8755 57 54 55 56 53 49 51 48 43 45 43 39 40 39 33 37 35 88 0 0 0 0 0 0 0 0 0 0 0 0
8828 31 30 23 27 26 20 23 23 17 20 20 14 17 17 13 16 16 89 0 0 0 0 0 0 0 0 0 0 0 0
8911 14 14 10 13 13 10 12 12 9 11 11 8 10 10 6 7 7 90 0 0 0 0 0 0 0 0 0 0 0 0
902 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 91 0 0 0 0 0 0 0 0 0 0 0 0
910 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 92 0 0 0 0 0 0 10 10 10 26 26 26
920 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 93 50 50 50 82 82 82 58 58 58 6 6 6
930 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 94 2 2 6 2 2 6 2 2 6 2 2 6
940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 95 2 2 6 2 2 6 2 2 6 2 2 6
950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 96 6 6 6 54 54 54 86 86 86 66 66 66
960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97 38 38 38 18 18 18 6 6 6 0 0 0
970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 98 0 0 0 0 0 0 0 0 0 0 0 0
980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 99 0 0 0 0 0 0 0 0 0 0 0 0
990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 0 0 0 0 0 0 0 0 0 0 0
1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 101 0 0 0 0 0 0 0 0 0 0 0 0
1010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 102 0 0 0 0 0 0 0 0 0 0 0 0
1020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 103 0 0 0 0 0 0 0 0 0 0 0 0
1030 0 0 104 0 0 0 0 0 0 0 0 0 0 0 0
1040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 105 0 0 0 0 0 0 0 0 0 0 0 0
1050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 106 0 0 0 0 0 0 0 0 0 0 0 0
1060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 107 0 0 0 0 0 0 0 0 0 0 0 0
1070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 108 0 0 0 0 0 0 0 0 0 0 0 0
1080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 109 0 0 0 0 0 0 0 0 0 0 0 0
1090 0 0 0 0 0 0 0 0 0 0 0 6 7 7 12 15 15 110 0 0 0 0 0 0 0 0 0 0 0 0
11012 15 15 8 9 9 2 3 3 0 0 0 1 1 1 25 27 26 111 0 0 0 0 0 0 0 0 0 0 0 0
11155 56 53 68 70 65 65 66 61 65 66 61 63 64 60 63 64 60 112 0 0 0 6 6 6 22 22 22 50 50 50
11258 59 55 51 52 50 47 48 46 41 42 42 35 37 36 30 32 31 113 78 78 78 34 34 34 2 2 6 2 2 6
11326 28 27 20 24 24 18 22 22 16 19 19 14 17 17 13 16 16 114 2 2 6 2 2 6 2 2 6 2 2 6
11412 15 15 11 14 14 10 13 13 10 12 12 9 11 11 8 10 10 115 2 2 6 2 2 6 2 2 6 2 2 6
1158 9 9 6 8 8 3 3 3 0 0 0 0 0 0 0 0 0 116 2 2 6 2 2 6 6 6 6 70 70 70
1160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 117 78 78 78 46 46 46 22 22 22 6 6 6
1170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 118 0 0 0 0 0 0 0 0 0 0 0 0
1180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 119 0 0 0 0 0 0 0 0 0 0 0 0
1190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 120 0 0 0 0 0 0 0 0 0 0 0 0
1200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 121 0 0 0 0 0 0 0 0 0 0 0 0
1210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 122 0 0 0 0 0 0 0 0 0 0 0 0
1220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 123 0 0 0 0 0 0 0 0 0 0 0 0
1230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 124 0 0 0 0 0 0 0 0 0 0 0 0
1240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 125 0 0 0 0 0 0 0 0 0 0 0 0
1250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 126 0 0 1 0 0 1 0 0 1 0 0 0
1260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0 0 0 0 0 0 0 0 0 0 0 0
1270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 0 0 0 0 0 0 0 0 0 0 0 0
1280 0 0 129 0 0 0 0 0 0 0 0 0 0 0 0
1290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 130 0 0 0 0 0 0 0 0 0 0 0 0
1300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 131 0 0 0 0 0 0 0 0 0 0 0 0
1310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 132 6 6 6 18 18 18 42 42 42 82 82 82
1320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 133 26 26 26 2 2 6 2 2 6 2 2 6
1330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 134 2 2 6 2 2 6 2 2 6 2 2 6
1340 0 0 0 0 0 0 0 0 6 7 7 20 24 24 23 27 26 135 2 2 6 2 2 6 2 2 6 14 14 14
13523 27 26 18 22 22 11 13 13 23 24 24 61 63 57 72 73 67 136 46 46 46 34 34 34 6 6 6 2 2 6
13672 73 67 68 70 65 68 70 65 68 70 65 63 64 60 58 59 55 137 42 42 42 78 78 78 42 42 42 18 18 18
13755 56 53 47 48 46 41 42 42 35 37 36 30 32 31 26 28 27 138 6 6 6 0 0 0 0 0 0 0 0 0
13820 24 24 18 22 22 16 20 20 15 19 19 14 17 17 13 16 16 139 0 0 0 0 0 0 0 0 0 0 0 0
13912 15 15 12 15 15 11 14 14 10 13 13 10 12 12 9 11 11 140 0 0 0 0 0 0 0 0 0 0 0 0
1408 10 10 8 9 9 7 9 9 6 7 7 1 2 2 0 0 0 141 0 0 0 0 0 0 0 0 0 0 0 0
1410 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 142 0 0 0 0 0 0 0 0 0 0 0 0
1420 0 0 0 0 0 1 1 1 4 5 5 5 6 5 4 5 5 143 0 0 0 0 0 0 0 0 0 0 0 0
1430 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 144 0 0 0 0 0 0 0 0 0 0 0 0
1440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 145 0 0 0 0 0 0 0 0 0 0 0 0
1450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 146 0 0 1 0 0 0 0 0 1 0 0 0
1460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 147 0 0 0 0 0 0 0 0 0 0 0 0
1470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 148 0 0 0 0 0 0 0 0 0 0 0 0
1480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 149 0 0 0 0 0 0 0 0 0 0 0 0
1490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 150 0 0 0 0 0 0 0 0 0 0 0 0
1500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 151 0 0 0 0 0 0 0 0 0 0 0 0
1510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 152 10 10 10 30 30 30 66 66 66 58 58 58
1520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 153 2 2 6 2 2 6 2 2 6 2 2 6
1530 0 0 154 2 2 6 2 2 6 2 2 6 2 2 6
1540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 155 2 2 6 2 2 6 2 2 6 26 26 26
1550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 156 86 86 86 101 101 101 46 46 46 10 10 10
1560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 157 2 2 6 58 58 58 70 70 70 34 34 34
1570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 158 10 10 10 0 0 0 0 0 0 0 0 0
1580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 159 0 0 0 0 0 0 0 0 0 0 0 0
1590 0 0 0 0 0 0 0 0 15 19 19 40 41 39 53 55 47 160 0 0 0 0 0 0 0 0 0 0 0 0
16033 36 34 27 30 29 51 52 50 72 73 67 72 73 67 72 73 67 161 0 0 0 0 0 0 0 0 0 0 0 0
16172 73 67 68 70 65 68 70 65 63 64 60 58 59 55 51 52 50 162 0 0 0 0 0 0 0 0 0 0 0 0
16247 48 46 40 43 41 33 37 35 30 32 31 26 28 27 20 24 24 163 0 0 0 0 0 0 0 0 0 0 0 0
16318 22 22 17 21 21 16 19 19 14 18 18 14 17 17 13 17 17 164 0 0 0 0 0 0 0 0 0 0 0 0
16413 16 16 12 15 15 12 15 15 11 14 14 10 13 13 10 12 12 165 0 0 0 0 0 0 0 0 0 0 0 0
1659 11 11 8 10 10 8 9 9 7 9 9 6 8 8 3 4 4 166 0 0 1 0 0 1 0 0 1 0 0 0
1660 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 167 0 0 0 0 0 0 0 0 0 0 0 0
1672 2 2 6 8 8 10 12 12 10 12 12 10 12 12 10 12 12 168 0 0 0 0 0 0 0 0 0 0 0 0
1686 8 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 169 0 0 0 0 0 0 0 0 0 0 0 0
1690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 0 0 0 0 0 0 0 0 0 0 0 0
1700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 171 0 0 0 0 0 0 0 0 0 0 0 0
1710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 172 14 14 14 42 42 42 86 86 86 10 10 10
1720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 173 2 2 6 2 2 6 2 2 6 2 2 6
1730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 174 2 2 6 2 2 6 2 2 6 2 2 6
1740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 175 2 2 6 2 2 6 2 2 6 30 30 30
1750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 176 94 94 94 94 94 94 58 58 58 26 26 26
1760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 177 2 2 6 6 6 6 78 78 78 54 54 54
1770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 178 22 22 22 6 6 6 0 0 0 0 0 0
1780 0 0 179 0 0 0 0 0 0 0 0 0 0 0 0
1790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 180 0 0 0 0 0 0 0 0 0 0 0 0
1800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 181 0 0 0 0 0 0 0 0 0 0 0 0
1810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 182 0 0 0 0 0 0 0 0 0 0 0 0
1820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 183 0 0 0 0 0 0 0 0 0 0 0 0
1830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 184 0 0 0 0 0 0 0 0 0 0 0 0
1840 0 0 0 0 0 0 0 0 20 23 23 71 71 57 131 127 93 185 0 0 0 0 0 0 0 0 0 0 0 0
185115 113 82 63 64 60 72 73 67 72 73 67 72 73 67 72 73 67 186 0 0 0 0 0 0 0 0 0 0 0 0
18668 70 65 65 66 61 61 63 57 55 57 54 49 51 48 43 45 43 187 0 0 0 0 0 0 0 0 0 0 0 0
18739 40 39 33 36 34 28 31 30 23 27 26 20 24 24 20 23 23 188 0 0 0 0 0 0 0 0 0 0 0 0
18817 21 21 16 20 20 15 19 19 15 18 18 14 18 18 14 17 17 189 0 0 0 0 0 0 0 0 0 0 0 0
18913 17 17 13 16 16 12 15 15 12 15 15 11 14 14 10 13 13 190 0 0 0 0 0 0 0 0 0 0 0 0
19010 12 12 9 11 11 8 10 10 7 9 9 7 9 9 6 8 8 191 0 0 0 0 0 0 0 0 0 6 6 6
1914 5 5 0 0 0 0 0 0 0 0 0 1 1 1 6 7 7 192 22 22 22 62 62 62 62 62 62 2 2 6
19210 12 12 10 12 12 10 12 12 10 12 12 10 12 12 10 12 12 193 2 2 6 2 2 6 2 2 6 2 2 6
19310 12 12 3 4 4 0 0 0 0 0 0 0 0 0 0 0 0 194 2 2 6 2 2 6 2 2 6 2 2 6
1940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 195 2 2 6 2 2 6 2 2 6 26 26 26
1950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 196 54 54 54 38 38 38 18 18 18 10 10 10
1960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 197 2 2 6 2 2 6 34 34 34 82 82 82
1970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 198 38 38 38 14 14 14 0 0 0 0 0 0
1980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 199 0 0 0 0 0 0 0 0 0 0 0 0
1990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 0 0 0 0 0
2000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 201 0 0 0 0 0 0 0 0 0 0 0 0
2010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 202 0 0 0 0 0 0 0 0 0 0 0 0
2020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 203 0 0 0 0 0 0 0 0 0 0 0 0
2030 0 0 204 0 0 0 0 0 0 0 0 0 0 0 0
2040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 205 0 0 0 0 0 0 0 0 0 0 0 0
2050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 206 0 0 0 0 0 1 0 0 1 0 0 0
2060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 207 0 0 0 0 0 0 0 0 0 0 0 0
2070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 208 0 0 0 0 0 0 0 0 0 0 0 0
2080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 209 0 0 0 0 0 0 0 0 0 0 0 0
2090 0 0 0 0 0 0 0 0 18 22 22 71 71 57 144 139 99 210 0 0 0 0 0 0 0 0 0 0 0 0
21084 83 72 68 70 65 72 73 67 72 73 67 68 70 65 65 66 61 211 0 0 0 0 0 0 0 0 0 6 6 6
21163 64 60 55 57 54 51 52 50 47 48 46 40 43 41 35 37 36 212 30 30 30 78 78 78 30 30 30 2 2 6
21230 32 31 27 29 28 23 27 26 20 24 24 18 22 22 17 21 21 213 2 2 6 2 2 6 2 2 6 2 2 6
21316 20 20 15 19 19 15 19 19 15 19 19 15 18 18 14 18 18 214 2 2 6 2 2 6 2 2 6 2 2 6
21414 17 17 13 17 17 13 16 16 12 15 15 12 15 15 11 14 14 215 2 2 6 2 2 6 2 2 6 10 10 10
21510 13 13 9 12 12 9 11 11 8 10 10 7 9 9 6 8 8 216 10 10 10 2 2 6 2 2 6 2 2 6
2166 8 8 3 4 4 0 0 0 2 2 2 8 10 10 10 12 12 217 2 2 6 2 2 6 2 2 6 78 78 78
21710 12 12 10 12 12 11 13 13 36 38 35 61 61 53 48 49 45 218 50 50 50 18 18 18 6 6 6 0 0 0
21810 12 12 7 9 9 0 0 0 0 0 0 0 0 0 0 0 0 219 0 0 0 0 0 0 0 0 0 0 0 0
2190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 220 0 0 0 0 0 0 0 0 0 0 0 0
2200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 221 0 0 0 0 0 0 0 0 0 0 0 0
2210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 222 0 0 0 0 0 0 0 0 0 0 0 0
2220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 223 0 0 0 0 0 0 0 0 0 0 0 0
2230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 224 0 0 0 0 0 0 0 0 0 0 0 0
2240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 225 0 0 0 0 0 0 0 0 0 0 0 0
2250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 226 0 0 1 0 0 0 0 0 0 0 0 0
2260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 227 0 0 0 0 0 0 0 0 0 0 0 0
2270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 228 0 0 0 0 0 0 0 0 0 0 0 0
2280 0 0 229 0 0 0 0 0 0 0 0 0 0 0 0
2290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 230 0 0 0 0 0 0 0 0 0 0 0 0
2300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 231 0 0 0 0 0 0 0 0 0 10 10 10
2310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 232 38 38 38 86 86 86 14 14 14 2 2 6
2320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 233 2 2 6 2 2 6 2 2 6 2 2 6
2330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 234 2 2 6 2 2 6 2 2 6 2 2 6
2340 0 0 0 0 0 0 0 0 15 19 19 61 61 53 84 83 72 235 2 2 6 2 2 6 2 2 6 2 2 6
23568 70 65 72 73 67 68 70 65 68 70 65 63 64 60 58 59 55 236 2 2 6 2 2 6 2 2 6 2 2 6
23651 52 50 47 48 46 41 42 42 37 39 37 32 35 33 28 31 30 237 2 2 6 2 2 6 2 2 6 54 54 54
23723 27 26 20 24 24 20 23 23 18 22 22 17 21 21 17 21 21 238 66 66 66 26 26 26 6 6 6 0 0 0
23817 21 21 17 21 21 17 20 20 16 20 20 16 20 20 16 19 19 239 0 0 0 0 0 0 0 0 0 0 0 0
23915 18 18 14 18 18 13 17 17 13 16 16 12 15 15 12 15 15 240 0 0 0 0 0 0 0 0 0 0 0 0
24011 14 14 10 13 13 9 12 12 9 11 11 8 10 10 7 9 9 241 0 0 0 0 0 0 0 0 0 0 0 0
2416 8 8 6 8 8 5 6 5 9 11 11 10 12 12 10 12 12 242 0 0 0 0 0 0 0 0 0 0 0 0
24219 20 18 82 81 62 149 145 103 160 154 106 142 137 94 96 95 69 243 0 0 0 0 0 0 0 0 0 0 0 0
24310 12 12 10 12 12 1 1 1 0 0 0 0 0 0 0 0 0 244 0 0 0 0 0 0 0 0 0 0 0 0
2440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 245 0 0 0 0 0 0 0 0 0 0 0 0
2450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 246 0 0 0 0 0 1 0 0 1 0 0 0
2460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 247 0 0 0 0 0 0 0 0 0 0 0 0
2470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 248 0 0 0 0 0 0 0 0 0 0 0 0
2480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 249 0 0 0 0 0 0 0 0 0 0 0 0
2490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 250 0 0 0 0 0 0 0 0 0 0 0 0
2500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 251 0 0 0 0 0 0 0 0 0 14 14 14
2510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 252 42 42 42 82 82 82 2 2 6 2 2 6
2520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 253 2 2 6 6 6 6 10 10 10 2 2 6
2530 0 0 254 2 2 6 2 2 6 2 2 6 2 2 6
2540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 2 2 6 2 2 6 2 2 6 6 6 6
2550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 256 14 14 14 10 10 10 2 2 6 2 2 6
2560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 257 2 2 6 2 2 6 2 2 6 18 18 18
2570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 258 82 82 82 34 34 34 10 10 10 0 0 0
2580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 259 0 0 0 0 0 0 0 0 0 0 0 0
2590 0 0 0 0 0 0 0 0 10 12 12 44 46 43 68 70 65 260 0 0 0 0 0 0 0 0 0 0 0 0
26072 73 67 68 70 65 68 70 65 63 64 60 55 57 54 49 51 48 261 0 0 0 0 0 0 0 0 0 0 0 0
26143 45 43 39 40 39 33 37 35 30 32 31 26 28 27 23 27 26 262 0 0 0 0 0 0 0 0 0 0 0 0
26220 24 24 18 22 22 18 22 22 18 22 22 18 22 22 20 23 23 263 0 0 0 0 0 0 0 0 0 0 0 0
26320 24 24 23 25 24 23 25 24 22 24 23 20 23 23 18 22 22 264 0 0 0 0 0 0 0 0 0 0 0 0
26417 20 20 15 19 19 15 18 18 14 17 17 13 16 16 12 15 15 265 0 0 0 0 0 0 0 0 0 0 0 0
26511 14 14 11 13 13 10 12 12 9 11 11 8 10 10 8 9 9 266 0 0 1 0 0 0 0 0 0 0 0 0
2667 9 9 7 9 9 10 12 12 10 12 12 10 12 12 71 71 57 267 0 0 0 0 0 0 0 0 0 0 0 0
267164 159 111 186 182 128 186 182 128 171 165 117 151 147 98 96 95 69 268 0 0 0 0 0 0 0 0 0 0 0 0
26810 12 12 10 12 12 3 3 3 0 0 0 0 0 0 0 0 0 269 0 0 0 0 0 0 0 0 0 0 0 0
2690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 270 0 0 0 0 0 0 0 0 0 0 0 0
2700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 271 0 0 0 0 0 0 0 0 0 14 14 14
2710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 272 46 46 46 86 86 86 2 2 6 2 2 6
2720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 273 6 6 6 6 6 6 22 22 22 34 34 34
2730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 274 6 6 6 2 2 6 2 2 6 2 2 6
2740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 275 2 2 6 2 2 6 18 18 18 34 34 34
2750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 276 10 10 10 50 50 50 22 22 22 2 2 6
2760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 277 2 2 6 2 2 6 2 2 6 10 10 10
2770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 86 86 86 42 42 42 14 14 14 0 0 0
2780 0 0 279 0 0 0 0 0 0 0 0 0 0 0 0
2790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 280 0 0 0 0 0 0 0 0 0 0 0 0
2800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 281 0 0 0 0 0 0 0 0 0 0 0 0
2810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 282 0 0 0 0 0 0 0 0 0 0 0 0
2820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 283 0 0 0 0 0 0 0 0 0 0 0 0
2830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 284 0 0 0 0 0 0 0 0 0 0 0 0
2840 0 0 0 0 0 0 0 0 8 10 10 63 64 60 68 70 65 285 0 0 0 0 0 0 0 0 0 0 0 0
28572 73 67 68 70 65 63 64 60 55 57 54 47 48 46 40 43 41 286 0 0 1 0 0 1 0 0 1 0 0 0
28633 37 35 30 32 31 27 29 28 23 27 26 20 24 24 20 23 23 287 0 0 0 0 0 0 0 0 0 0 0 0
28718 22 22 18 22 22 20 23 22 21 25 23 23 27 26 27 29 28 288 0 0 0 0 0 0 0 0 0 0 0 0
28828 31 30 31 33 31 31 33 31 31 33 31 28 31 30 26 28 27 289 0 0 0 0 0 0 0 0 0 0 0 0
28923 25 24 20 23 22 16 20 20 15 18 18 14 17 17 13 16 16 290 0 0 0 0 0 0 0 0 0 0 0 0
29012 15 15 11 14 14 10 13 13 10 12 12 9 11 11 8 10 10 291 0 0 0 0 0 0 0 0 0 14 14 14
29110 12 12 10 13 13 10 12 12 12 14 14 96 95 69 165 161 109 292 46 46 46 86 86 86 2 2 6 2 2 6
292186 182 128 192 187 134 192 187 134 176 171 126 160 154 106 103 101 77 293 38 38 38 116 116 116 94 94 94 22 22 22
29310 12 12 10 12 12 5 6 5 0 0 0 0 0 0 0 0 0 294 22 22 22 2 2 6 2 2 6 2 2 6
2940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 295 14 14 14 86 86 86 138 138 138 162 162 162
2950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 296154 154 154 38 38 38 26 26 26 6 6 6
2960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 297 2 2 6 2 2 6 2 2 6 2 2 6
2970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 298 86 86 86 46 46 46 14 14 14 0 0 0
2980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 299 0 0 0 0 0 0 0 0 0 0 0 0
2990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 300 0 0 0 0 0 0 0 0 0 0 0 0
3000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 301 0 0 0 0 0 0 0 0 0 0 0 0
3010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 302 0 0 0 0 0 0 0 0 0 0 0 0
3020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 303 0 0 0 0 0 0 0 0 0 0 0 0
3030 0 0 304 0 0 0 0 0 0 0 0 0 0 0 0
3040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 305 0 0 0 0 0 0 0 0 0 0 0 0
3050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 306 0 0 0 0 0 0 0 0 0 0 0 0
3060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 307 0 0 0 0 0 0 0 0 0 0 0 0
3070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 308 0 0 0 0 0 0 0 0 0 0 0 0
3080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 309 0 0 0 0 0 0 0 0 0 0 0 0
3090 0 0 0 0 0 0 0 0 35 37 36 68 70 65 72 73 67 310 0 0 0 0 0 0 0 0 0 0 0 0
31068 70 65 65 66 61 58 59 55 49 51 48 40 43 41 33 37 35 311 0 0 0 0 0 0 0 0 0 14 14 14
31128 31 30 23 27 26 20 24 24 20 23 23 18 22 22 18 22 22 312 46 46 46 86 86 86 2 2 6 14 14 14
31218 22 22 20 23 23 23 27 26 27 30 29 32 35 33 37 39 37 313134 134 134 198 198 198 195 195 195 116 116 116
31340 43 41 44 46 43 46 47 43 44 46 43 40 43 41 36 38 35 314 10 10 10 2 2 6 2 2 6 6 6 6
31431 33 31 27 29 28 22 24 23 17 21 21 15 18 18 14 17 17 315101 98 89 187 187 187 210 210 210 218 218 218
31513 16 16 12 15 15 11 14 14 11 14 14 11 13 13 13 16 16 316214 214 214 134 134 134 14 14 14 6 6 6
31613 16 16 11 14 14 10 12 12 79 78 62 142 137 94 164 159 111 317 2 2 6 2 2 6 2 2 6 2 2 6
317178 174 128 192 187 134 192 187 134 176 171 126 160 154 106 96 95 69 318 86 86 86 50 50 50 18 18 18 6 6 6
31810 12 12 10 12 12 6 7 7 0 0 0 0 0 0 0 0 0 319 0 0 0 0 0 0 0 0 0 0 0 0
3190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 320 0 0 0 0 0 0 0 0 0 0 0 0
3200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 321 0 0 0 0 0 0 0 0 0 0 0 0
3210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 322 0 0 0 0 0 0 0 0 0 0 0 0
3220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 323 0 0 0 0 0 0 0 0 0 0 0 0
3230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 324 0 0 0 0 0 0 0 0 0 0 0 0
3240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 325 0 0 0 0 0 0 0 0 1 0 0 0
3250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 326 0 0 1 0 0 1 0 0 1 0 0 0
3260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 327 0 0 0 0 0 0 0 0 0 0 0 0
3270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 328 0 0 0 0 0 0 0 0 0 0 0 0
3280 0 0 329 0 0 0 0 0 0 0 0 0 0 0 0
3290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 330 0 0 0 0 0 0 0 0 0 0 0 0
3300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 331 0 0 0 0 0 0 0 0 0 14 14 14
3310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 332 46 46 46 86 86 86 2 2 6 54 54 54
3320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333218 218 218 195 195 195 226 226 226 246 246 246
3330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 334 58 58 58 2 2 6 2 2 6 30 30 30
3340 0 0 0 0 0 0 0 0 55 57 54 68 70 65 72 73 67 335210 210 210 253 253 253 174 174 174 123 123 123
33568 70 65 63 64 60 55 56 53 43 45 43 35 37 36 28 31 30 336221 221 221 234 234 234 74 74 74 2 2 6
33623 27 26 20 24 24 18 22 22 17 21 21 17 21 21 17 21 21 337 2 2 6 2 2 6 2 2 6 2 2 6
33720 24 24 25 27 26 31 33 31 38 39 37 46 47 43 53 55 47 338 70 70 70 58 58 58 22 22 22 6 6 6
33861 61 53 66 65 55 66 65 55 66 65 55 61 61 53 53 55 47 339 0 0 0 0 0 0 0 0 0 0 0 0
33946 47 43 37 39 37 30 33 30 24 26 24 17 21 21 15 18 18 340 0 0 0 0 0 0 0 0 0 0 0 0
34013 17 17 12 15 15 12 15 15 13 16 16 14 18 18 14 18 18 341 0 0 0 0 0 0 0 0 0 0 0 0
34114 17 17 12 15 15 30 31 28 118 116 76 134 131 96 160 154 106 342 0 0 0 0 0 0 0 0 0 0 0 0
342174 170 121 178 174 128 178 174 128 171 165 117 151 147 98 96 95 69 343 0 0 0 0 0 0 0 0 0 0 0 0
34310 12 12 10 12 12 6 8 8 0 0 0 0 0 0 0 0 0 344 0 0 0 0 0 0 0 0 0 0 0 0
3440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 345 0 0 0 0 0 0 0 0 0 0 0 0
3450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 346 0 0 0 0 0 0 0 0 0 0 0 0
3460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 347 0 0 0 0 0 0 0 0 0 0 0 0
3470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 348 0 0 0 0 0 0 0 0 0 0 0 0
3480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 349 0 0 0 0 0 0 0 0 0 0 0 0
3490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 350 0 0 0 0 0 0 0 0 0 0 0 0
3500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 351 0 0 0 0 0 0 0 0 0 14 14 14
3510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 352 46 46 46 82 82 82 2 2 6 106 106 106
3520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 353170 170 170 26 26 26 86 86 86 226 226 226
3530 0 0 354123 123 123 10 10 10 14 14 14 46 46 46
3540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 355231 231 231 190 190 190 6 6 6 70 70 70
3550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 356 90 90 90 238 238 238 158 158 158 2 2 6
3560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 357 2 2 6 2 2 6 2 2 6 2 2 6
3570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 358 70 70 70 58 58 58 22 22 22 6 6 6
3580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 359 0 0 0 0 0 0 0 0 0 0 0 0
3590 0 0 0 0 0 0 0 0 63 64 60 68 70 65 68 70 65 360 0 0 0 0 0 0 0 0 0 0 0 0
36065 66 61 58 59 55 49 51 48 39 40 39 30 32 31 23 27 26 361 0 0 0 0 0 0 0 0 0 0 0 0
36120 24 24 18 22 22 17 21 21 16 20 20 17 21 21 20 23 23 362 0 0 0 0 0 0 0 0 0 0 0 0
36225 27 26 32 35 33 43 44 41 53 55 47 66 65 55 75 75 61 363 0 0 0 0 0 0 0 0 0 0 0 0
36382 81 62 84 83 72 87 86 72 87 86 72 82 81 62 75 75 61 364 0 0 0 0 0 0 0 0 0 0 0 0
36466 65 55 53 55 47 40 41 39 31 33 31 23 25 24 17 20 20 365 0 0 0 0 0 0 0 0 1 0 0 0
36514 18 18 13 16 16 12 15 15 12 15 15 13 17 17 14 18 18 366 0 0 1 0 0 1 0 0 1 0 0 0
36614 18 18 13 16 16 46 47 43 96 95 69 125 122 87 142 137 94 367 0 0 0 0 0 0 0 0 0 0 0 0
367160 154 106 165 161 109 164 159 111 155 149 109 142 137 94 75 75 61 368 0 0 0 0 0 0 0 0 0 0 0 0
36810 12 12 10 12 12 6 8 8 0 0 0 0 0 0 0 0 0 369 0 0 0 0 0 0 0 0 0 0 0 0
3690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 370 0 0 0 0 0 0 0 0 0 0 0 0
3700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 371 0 0 0 0 0 0 0 0 0 14 14 14
3710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 372 42 42 42 86 86 86 6 6 6 116 116 116
3720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 373106 106 106 6 6 6 70 70 70 149 149 149
3730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 374128 128 128 18 18 18 38 38 38 54 54 54
3740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 375221 221 221 106 106 106 2 2 6 14 14 14
3750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 376 46 46 46 190 190 190 198 198 198 2 2 6
3760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 377 2 2 6 2 2 6 2 2 6 2 2 6
3770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 378 74 74 74 62 62 62 22 22 22 6 6 6
3780 0 0 379 0 0 0 0 0 0 0 0 0 0 0 0
3790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 380 0 0 0 0 0 0 0 0 0 0 0 0
3800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 381 0 0 0 0 0 0 0 0 0 0 0 0
3810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 382 0 0 0 0 0 0 0 0 0 0 0 0
3820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 383 0 0 0 0 0 0 0 0 0 0 0 0
3830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 384 0 0 0 0 0 0 0 0 0 0 0 0
3840 0 0 0 0 0 0 0 0 60 60 56 68 70 65 68 70 65 385 0 0 0 0 0 0 0 0 1 0 0 0
38563 64 60 55 57 54 46 47 45 35 37 36 27 30 29 23 25 24 386 0 0 1 0 0 0 0 0 1 0 0 0
38618 22 22 17 21 21 16 20 20 17 21 21 18 22 22 23 27 26 387 0 0 0 0 0 0 0 0 0 0 0 0
38731 33 31 43 44 41 55 56 53 71 71 57 84 83 72 92 91 72 388 0 0 0 0 0 0 0 0 0 0 0 0
388103 101 77 92 91 72 82 81 62 82 81 62 87 86 72 92 91 72 389 0 0 0 0 0 0 0 0 0 0 0 0
38984 83 72 71 71 57 55 56 53 43 44 41 30 33 30 22 24 23 390 0 0 0 0 0 0 0 0 0 0 0 0
39016 19 19 14 17 17 12 15 15 12 15 15 13 16 16 14 18 18 391 0 0 0 0 0 0 0 0 0 14 14 14
39114 18 18 14 17 17 43 44 41 82 81 62 118 116 76 125 122 87 392 42 42 42 94 94 94 14 14 14 101 101 101
392142 137 94 144 139 99 144 139 99 134 131 96 118 116 76 53 55 47 393128 128 128 2 2 6 18 18 18 116 116 116
39310 12 12 10 12 12 6 8 8 0 0 0 0 0 0 0 0 0 394118 98 46 121 92 8 121 92 8 98 78 10
3940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 395162 162 162 106 106 106 2 2 6 2 2 6
3950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 396 2 2 6 195 195 195 195 195 195 6 6 6
3960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 397 2 2 6 2 2 6 2 2 6 2 2 6
3970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 398 74 74 74 62 62 62 22 22 22 6 6 6
3980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 399 0 0 0 0 0 0 0 0 0 0 0 0
3990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 400 0 0 0 0 0 0 0 0 0 0 0 0
4000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 401 0 0 0 0 0 0 0 0 0 0 0 0
4010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 402 0 0 0 0 0 0 0 0 0 0 0 0
4020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 403 0 0 0 0 0 0 0 0 0 0 0 0
4030 0 0 404 0 0 0 0 0 0 0 0 0 0 0 0
4040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 405 0 0 0 0 0 0 0 0 1 0 0 1
4050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 406 0 0 1 0 0 0 0 0 1 0 0 0
4060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 407 0 0 0 0 0 0 0 0 0 0 0 0
4070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 408 0 0 0 0 0 0 0 0 0 0 0 0
4080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 409 0 0 0 0 0 0 0 0 0 0 0 0
4090 0 0 0 0 0 0 0 0 47 48 46 63 64 60 63 64 60 410 0 0 0 0 0 0 0 0 0 0 0 0
41055 57 54 49 51 48 40 43 41 32 34 33 26 28 27 20 24 24 411 0 0 0 0 0 0 0 0 0 10 10 10
41118 22 22 16 20 20 16 20 20 17 21 21 20 24 24 28 31 30 412 38 38 38 90 90 90 14 14 14 58 58 58
41240 41 39 53 55 47 75 75 61 90 89 73 87 86 72 48 49 45 413210 210 210 26 26 26 54 38 6 154 114 10
41314 14 13 2 2 2 1 2 2 1 1 1 1 1 1 2 2 2 414226 170 11 236 186 11 225 175 15 184 144 12
41419 20 18 43 44 41 66 65 55 53 55 47 38 39 37 26 28 27 415215 174 15 175 146 61 37 26 9 2 2 6
41518 22 22 14 18 18 13 16 16 12 15 15 12 15 15 13 17 17 416 70 70 70 246 246 246 138 138 138 2 2 6
41614 18 18 14 18 18 30 31 28 66 65 55 96 95 69 103 101 77 417 2 2 6 2 2 6 2 2 6 2 2 6
417118 116 76 118 116 76 118 116 76 118 116 76 103 101 77 36 38 35 418 70 70 70 66 66 66 26 26 26 6 6 6
41810 12 12 10 12 12 6 7 7 0 0 0 0 0 0 0 0 0 419 0 0 0 0 0 0 0 0 0 0 0 0
4190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 420 0 0 0 0 0 0 0 0 0 0 0 0
4200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 421 0 0 0 0 0 0 0 0 0 0 0 0
4210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 422 0 0 0 0 0 0 0 0 0 0 0 0
4220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 423 0 0 0 0 0 0 0 0 0 0 0 0
4230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 424 0 0 0 0 0 0 0 0 0 0 0 0
4240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 425 0 0 0 0 0 0 0 0 0 0 0 0
4250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 426 0 0 0 0 0 0 0 0 0 0 0 0
4260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 427 0 0 0 0 0 0 0 0 0 0 0 0
4270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 428 0 0 0 0 0 0 0 0 0 0 0 0
4280 0 0 429 0 0 0 0 0 0 0 0 0 0 0 0
4290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 430 0 0 0 0 0 0 0 0 0 0 0 0
4300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 431 0 0 0 0 0 0 0 0 0 10 10 10
4310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 432 38 38 38 86 86 86 14 14 14 10 10 10
4320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 433195 195 195 188 164 115 192 133 9 225 175 15
4330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 434239 182 13 234 190 10 232 195 16 232 200 30
4340 0 0 0 0 0 0 0 0 28 31 30 55 57 54 51 52 50 435245 207 45 241 208 19 232 195 16 184 144 12
43549 51 48 41 42 42 35 37 36 28 31 30 23 27 26 20 23 23 436218 194 134 211 206 186 42 42 42 2 2 6
43617 21 21 16 20 20 16 20 20 18 22 22 23 27 26 33 36 34 437 2 2 6 2 2 6 2 2 6 2 2 6
43748 49 45 71 71 57 82 81 62 43 44 41 8 9 9 6 7 7 438 50 50 50 74 74 74 30 30 30 6 6 6
4386 7 7 6 7 7 6 7 7 5 6 5 4 5 5 3 4 4 439 0 0 0 0 0 0 0 0 0 0 0 0
4392 3 3 1 2 2 4 5 4 36 38 35 48 49 45 32 35 33 440 0 0 0 0 0 0 0 0 0 0 0 0
44021 25 23 16 19 19 13 17 17 12 15 15 12 15 15 13 16 16 441 0 0 0 0 0 0 0 0 0 0 0 0
44114 18 18 14 18 18 16 18 16 36 38 35 61 61 53 82 81 62 442 0 0 0 0 0 0 0 0 0 0 0 0
44296 95 69 96 95 69 96 95 69 96 95 69 79 78 62 19 20 18 443 0 0 0 0 0 0 0 0 0 0 0 0
44310 12 12 10 12 12 4 5 5 0 0 0 0 0 0 0 0 0 444 0 0 0 0 0 0 0 0 0 0 0 0
4440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 445 0 0 0 0 0 0 0 0 0 0 0 0
4450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 446 0 0 0 0 0 0 0 0 0 0 0 0
4460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 447 0 0 0 0 0 0 0 0 0 0 0 0
4470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 448 0 0 0 0 0 0 0 0 0 0 0 0
4480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 449 0 0 0 0 0 0 0 0 0 0 0 0
4490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 450 0 0 0 0 0 0 0 0 0 0 0 0
4500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 451 0 0 0 0 0 0 0 0 0 10 10 10
4510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 452 34 34 34 86 86 86 14 14 14 2 2 6
4520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 453121 87 25 192 133 9 219 162 10 239 182 13
4530 0 0 454236 186 11 232 195 16 241 208 19 244 214 54
4540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 455246 218 60 246 218 38 246 215 20 241 208 19
4550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 456241 208 19 226 184 13 121 87 25 2 2 6
4560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 457 2 2 6 2 2 6 2 2 6 2 2 6
4570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 458 50 50 50 82 82 82 34 34 34 10 10 10
4580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 459 0 0 0 0 0 0 0 0 0 0 0 0
4590 0 0 0 0 0 0 0 0 13 13 13 46 47 45 43 45 43 460 0 0 0 0 0 0 0 0 0 0 0 0
46040 43 41 35 37 36 30 32 31 23 27 26 20 24 24 18 22 22 461 0 0 0 0 0 0 0 0 0 0 0 0
46117 21 21 16 20 20 17 21 21 20 23 23 27 30 29 40 41 39 462 0 0 0 0 0 0 0 0 0 0 0 0
46261 61 53 53 55 47 16 17 16 9 11 11 10 12 12 10 12 12 463 0 0 0 0 0 0 0 0 0 0 0 0
46310 12 12 10 12 12 10 12 12 9 11 11 8 10 10 8 9 9 464 0 0 0 0 0 0 0 0 0 0 0 0
4646 8 8 5 6 5 4 5 5 2 3 3 19 20 18 38 39 37 465 0 0 0 0 0 0 0 0 0 0 0 0
46526 28 27 17 21 21 14 17 17 13 16 16 12 15 15 12 15 15 466 0 0 0 0 0 0 0 0 0 0 0 0
46613 17 17 14 18 18 12 15 15 13 12 7 30 31 28 46 47 43 467 0 0 0 0 0 0 0 0 0 0 0 0
46753 55 47 66 65 55 66 65 55 53 55 47 36 38 35 10 12 12 468 0 0 0 0 0 0 0 0 0 0 0 0
46810 12 12 10 12 12 2 3 3 0 0 0 0 0 0 0 0 0 469 0 0 0 0 0 0 0 0 0 0 0 0
4690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 470 0 0 0 0 0 0 0 0 0 0 0 0
4700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 471 0 0 0 0 0 0 0 0 0 10 10 10
4710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 472 34 34 34 82 82 82 30 30 30 61 42 6
4720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 473180 123 7 206 145 10 230 174 11 239 182 13
4730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 474234 190 10 238 202 15 241 208 19 246 218 74
4740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 475246 218 38 246 215 20 246 215 20 246 215 20
4750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 476226 184 13 215 174 15 184 144 12 6 6 6
4760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 477 2 2 6 2 2 6 2 2 6 2 2 6
4770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 478 26 26 26 94 94 94 42 42 42 14 14 14
4780 0 0 479 0 0 0 0 0 0 0 0 0 0 0 0
4790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 480 0 0 0 0 0 0 0 0 0 0 0 0
4800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 481 0 0 0 0 0 0 0 0 0 0 0 0
4810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 482 0 0 0 0 0 0 0 0 0 0 0 0
4820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 483 0 0 0 0 0 0 0 0 0 0 0 0
4830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 484 0 0 0 0 0 0 0 0 0 0 0 0
4840 0 0 0 0 0 0 0 0 1 1 1 33 37 35 35 37 36 485 0 0 0 0 0 0 0 0 0 0 0 0
48532 35 33 28 31 30 23 27 26 20 24 24 18 22 22 17 21 21 486 0 0 0 0 0 0 0 0 0 0 0 0
48616 20 20 16 20 20 17 21 21 21 25 23 31 33 31 44 46 43 487 0 0 0 0 0 0 0 0 0 0 0 0
48731 33 31 11 13 13 12 14 14 12 15 15 13 16 16 14 17 17 488 0 0 0 0 0 0 0 0 0 0 0 0
48814 17 17 14 17 17 14 17 17 13 16 16 12 15 15 12 14 14 489 0 0 0 0 0 0 0 0 0 0 0 0
48911 13 13 9 11 11 8 10 10 6 8 8 4 5 5 17 18 17 490 0 0 0 0 0 0 0 0 0 0 0 0
49030 33 30 20 23 22 15 18 18 13 16 16 12 15 15 12 14 14 491 0 0 0 0 0 0 0 0 0 10 10 10
49113 16 16 14 17 17 14 18 18 11 12 11 7 7 5 16 17 12 492 30 30 30 78 78 78 50 50 50 104 69 6
49221 22 20 30 31 28 25 27 25 21 22 20 14 14 13 10 12 12 493192 133 9 216 158 10 236 178 12 236 186 11
49310 12 12 9 11 11 0 0 0 0 0 0 0 0 0 0 0 0 494232 195 16 241 208 19 244 214 54 245 215 43
4940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 495246 215 20 246 215 20 241 208 19 198 155 10
4950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 496200 144 11 216 158 10 156 118 10 2 2 6
4960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 497 2 2 6 2 2 6 2 2 6 2 2 6
4970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 498 6 6 6 90 90 90 54 54 54 18 18 18
4980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 499 6 6 6 0 0 0 0 0 0 0 0 0
4990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 0 0 0 0 0 0 0 0 0 0 0
5000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 501 0 0 0 0 0 0 0 0 0 0 0 0
5010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 502 0 0 0 0 0 0 0 0 0 0 0 0
5020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 503 0 0 0 0 0 0 0 0 0 0 0 0
5030 0 0 504 0 0 0 0 0 0 0 0 0 0 0 0
5040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 505 0 0 0 0 0 0 0 0 0 0 0 0
5050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 506 0 0 0 0 0 0 0 0 0 0 0 0
5060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 507 0 0 0 0 0 0 0 0 0 0 0 0
5070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 508 0 0 0 0 0 0 0 0 0 0 0 0
5080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 509 0 0 0 0 0 0 0 0 0 0 0 0
5090 0 0 0 0 0 0 0 0 0 0 0 18 22 22 27 30 29 510 0 0 0 0 0 0 0 0 0 0 0 0
51027 29 28 40 41 39 53 55 47 53 55 47 53 55 47 46 47 43 511 0 0 0 0 0 0 0 0 0 10 10 10
51125 27 25 16 20 20 17 21 21 23 25 24 31 33 31 20 20 20 512 30 30 30 78 78 78 46 46 46 22 22 22
51212 15 15 14 17 17 15 19 19 16 20 20 17 21 21 18 22 22 513137 92 6 210 162 10 239 182 13 238 190 10
51318 22 22 18 22 22 18 22 22 17 21 21 17 21 21 16 19 19 514238 202 15 241 208 19 246 215 20 246 215 20
51415 18 18 13 16 16 12 15 15 10 12 12 8 10 10 6 8 8 515241 208 19 203 166 17 185 133 11 210 150 10
51521 22 21 22 24 23 15 19 19 13 17 17 13 16 16 12 15 15 516216 158 10 210 150 10 102 78 10 2 2 6
51612 15 15 13 17 17 14 18 18 14 18 18 13 15 14 10 9 6 517 6 6 6 54 54 54 14 14 14 2 2 6
5177 7 5 7 7 5 7 7 5 9 11 11 10 12 12 10 12 12 518 2 2 6 62 62 62 74 74 74 30 30 30
51810 12 12 6 7 7 0 0 0 0 0 0 0 0 0 0 0 0 519 10 10 10 0 0 0 0 0 0 0 0 0
5190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 520 0 0 0 0 0 0 0 0 0 0 0 0
5200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 521 0 0 0 0 0 0 0 0 0 0 0 0
5210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 522 0 0 0 0 0 0 0 0 0 0 0 0
5220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 523 0 0 0 0 0 0 0 0 0 0 0 0
5230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 524 0 0 0 0 0 0 0 0 0 0 0 0
5240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 525 0 0 0 0 0 0 0 0 0 0 0 0
5250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 526 0 0 0 0 0 0 0 0 0 0 0 0
5260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 527 0 0 0 0 0 0 0 0 0 0 0 0
5270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 528 0 0 0 0 0 0 0 0 0 0 0 0
5280 0 0 529 0 0 0 0 0 0 0 0 0 0 0 0
5290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 530 0 0 0 0 0 0 0 0 0 0 0 0
5300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 531 0 0 0 0 0 0 0 0 0 10 10 10
5310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 532 34 34 34 78 78 78 50 50 50 6 6 6
5320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 533 94 70 30 139 102 15 190 146 13 226 184 13
5330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 534232 200 30 232 195 16 215 174 15 190 146 13
5340 0 0 0 0 0 0 0 0 0 0 0 16 17 12 82 81 62 535168 122 10 192 133 9 210 150 10 213 154 11
535118 116 76 118 116 76 161 156 96 161 156 96 161 156 96 118 116 76 536202 150 34 182 157 106 101 98 89 2 2 6
536118 116 76 96 95 69 53 55 47 22 24 23 14 17 17 13 16 16 537 2 2 6 78 78 78 116 116 116 58 58 58
53715 19 19 17 21 21 18 22 22 20 24 24 20 24 24 23 27 26 538 2 2 6 22 22 22 90 90 90 46 46 46
53823 27 26 23 27 26 23 27 26 23 27 26 23 27 26 20 24 24 539 18 18 18 6 6 6 0 0 0 0 0 0
53920 23 23 17 21 21 16 19 19 14 17 17 12 15 15 10 12 12 540 0 0 0 0 0 0 0 0 0 0 0 0
5409 11 11 20 23 22 16 19 19 14 17 17 13 16 16 12 15 15 541 0 0 0 0 0 0 0 0 0 0 0 0
54111 14 14 13 16 16 14 17 17 14 18 18 14 17 17 12 15 15 542 0 0 0 0 0 0 0 0 0 0 0 0
54210 12 12 10 12 12 10 12 12 10 12 12 10 12 12 10 12 12 543 0 0 0 0 0 0 0 0 0 0 0 0
5439 11 11 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 544 0 0 0 0 0 0 0 0 0 0 0 0
5440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 545 0 0 0 0 0 0 0 0 0 0 0 0
5450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 546 0 0 0 0 0 0 0 0 0 0 0 0
5460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 547 0 0 0 0 0 0 0 0 0 0 0 0
5470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 548 0 0 0 0 0 0 0 0 0 0 0 0
5480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 549 0 0 0 0 0 0 0 0 0 0 0 0
5490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 550 0 0 0 0 0 0 0 0 0 0 0 0
5500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 551 0 0 0 0 0 0 0 0 0 10 10 10
5510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 552 38 38 38 86 86 86 50 50 50 6 6 6
5520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 553128 128 128 174 154 114 156 107 11 168 122 10
5530 0 0 554198 155 10 184 144 12 197 138 11 200 144 11
5540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 555206 145 10 206 145 10 197 138 11 188 164 115
5550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556195 195 195 198 198 198 174 174 174 14 14 14
5560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 557 2 2 6 22 22 22 116 116 116 116 116 116
5570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 558 22 22 22 2 2 6 74 74 74 70 70 70
5580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 559 30 30 30 10 10 10 0 0 0 0 0 0
5590 0 0 0 0 0 0 0 0 0 0 0 53 55 47 161 156 96 560 0 0 0 0 0 0 0 0 0 0 0 0
560161 156 96 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 561 0 0 0 0 0 0 0 0 0 0 0 0
561230 229 82 161 156 96 118 116 76 96 95 69 21 22 20 16 19 19 562 0 0 0 0 0 0 0 0 0 0 0 0
56218 22 22 20 24 24 23 27 26 23 27 26 26 28 27 27 30 29 563 0 0 0 0 0 0 0 0 0 0 0 0
56327 30 29 18 22 22 12 14 14 8 10 10 9 11 11 17 21 21 564 0 0 0 0 0 0 0 0 0 0 0 0
56423 27 26 23 27 26 20 24 24 18 22 22 16 20 20 14 17 17 565 0 0 0 0 0 0 0 0 0 0 0 0
56512 14 14 14 17 17 16 20 20 14 17 17 13 17 17 13 16 16 566 0 0 0 0 0 0 0 0 0 0 0 0
56612 15 15 12 15 15 13 17 17 14 18 18 14 17 17 13 16 16 567 0 0 0 0 0 0 0 0 0 0 0 0
56711 13 13 10 12 12 10 12 12 10 12 12 10 12 12 10 12 12 568 0 0 0 0 0 0 0 0 0 0 0 0
5684 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 569 0 0 0 0 0 0 0 0 0 0 0 0
5690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 570 0 0 0 0 0 0 0 0 0 0 0 0
5700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 571 0 0 0 0 0 0 6 6 6 18 18 18
5710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 572 50 50 50 101 101 101 26 26 26 10 10 10
5720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 573138 138 138 190 190 190 174 154 114 156 107 11
5730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 574197 138 11 200 144 11 197 138 11 192 133 9
5740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 575180 123 7 190 142 34 190 178 144 187 187 187
5750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 576202 202 202 221 221 221 214 214 214 66 66 66
5760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 577 2 2 6 2 2 6 50 50 50 62 62 62
5770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 578 6 6 6 2 2 6 10 10 10 90 90 90
5780 0 0 579 50 50 50 18 18 18 6 6 6 0 0 0
5790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 580 0 0 0 0 0 0 0 0 0 0 0 0
5800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 581 0 0 0 0 0 0 0 0 0 0 0 0
5810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 582 0 0 0 0 0 0 0 0 0 0 0 0
5820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 583 0 0 0 0 0 0 0 0 0 0 0 0
5830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 584 0 0 0 0 0 0 0 0 0 0 0 0
5840 0 0 0 0 0 0 0 0 13 12 7 118 116 76 230 229 82 585 0 0 0 0 0 0 0 0 0 0 0 0
585230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 586 0 0 0 0 0 0 0 0 0 0 0 0
586230 229 82 230 229 82 230 229 82 161 156 96 118 116 76 30 31 28 587 0 0 0 0 0 0 0 0 0 0 0 0
58720 24 24 23 27 26 27 30 29 28 31 30 30 32 31 23 27 26 588 0 0 0 0 0 0 0 0 0 0 0 0
58816 19 19 17 21 21 12 15 15 9 11 11 10 12 12 9 11 11 589 0 0 0 0 0 0 0 0 0 0 0 0
58920 24 24 28 31 30 26 28 27 23 27 26 20 24 24 17 21 21 590 0 0 0 0 0 0 0 0 0 0 0 0
59015 19 19 13 16 16 16 19 19 14 18 18 14 17 17 13 16 16 591 0 0 0 0 0 0 10 10 10 34 34 34
59112 15 15 11 14 14 13 16 16 14 17 17 14 18 18 14 17 17 592 74 74 74 74 74 74 2 2 6 6 6 6
59212 15 15 10 12 12 10 12 12 10 12 12 10 12 12 8 9 9 593144 144 144 198 198 198 190 190 190 178 166 146
5930 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 594154 121 60 156 107 11 156 107 11 168 124 44
5940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 595174 154 114 187 187 187 190 190 190 210 210 210
5950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 596246 246 246 253 253 253 253 253 253 182 182 182
5960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 597 6 6 6 2 2 6 2 2 6 2 2 6
5970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 598 2 2 6 2 2 6 2 2 6 62 62 62
5980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 599 74 74 74 34 34 34 14 14 14 0 0 0
5990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 0 0 0 0 0
6000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 601 0 0 0 0 0 0 0 0 0 0 0 0
6010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 602 0 0 0 0 0 0 0 0 0 0 0 0
6020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 603 0 0 0 0 0 0 0 0 0 0 0 0
6030 0 0 604 0 0 0 0 0 0 0 0 0 0 0 0
6040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 605 0 0 0 0 0 0 0 0 0 0 0 0
6050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 606 0 0 0 0 0 0 0 0 0 0 0 0
6060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 607 0 0 0 0 0 0 0 0 0 0 0 0
6070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 608 0 0 0 0 0 0 0 0 0 0 0 0
6080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 609 0 0 0 0 0 0 0 0 0 0 0 0
6090 0 0 0 0 0 0 0 0 82 81 62 161 156 96 230 229 82 610 0 0 0 0 0 0 0 0 0 0 0 0
610230 229 82 233 233 100 230 229 82 230 229 82 230 229 82 230 229 82 611 0 0 0 10 10 10 22 22 22 54 54 54
611230 229 82 230 229 82 230 229 82 230 229 82 161 156 96 118 116 76 612 94 94 94 18 18 18 2 2 6 46 46 46
61227 29 28 27 30 29 30 32 31 30 32 31 23 27 26 20 24 24 613234 234 234 221 221 221 190 190 190 190 190 190
61326 28 27 17 21 21 6 7 7 72 73 67 145 141 105 15 15 15 614190 190 190 187 187 187 187 187 187 190 190 190
61414 17 17 33 37 35 30 32 31 28 31 30 26 28 27 23 27 26 615190 190 190 195 195 195 214 214 214 242 242 242
61520 23 23 16 20 20 15 19 19 14 18 18 14 17 17 13 16 16 616253 253 253 253 253 253 253 253 253 253 253 253
61612 15 15 11 14 14 12 15 15 13 17 17 14 18 18 14 17 17 617 82 82 82 2 2 6 2 2 6 2 2 6
61713 16 16 11 13 13 10 12 12 10 12 12 9 11 11 1 1 1 618 2 2 6 2 2 6 2 2 6 14 14 14
6180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 619 86 86 86 54 54 54 22 22 22 6 6 6
6190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 620 0 0 0 0 0 0 0 0 0 0 0 0
6200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 621 0 0 0 0 0 0 0 0 0 0 0 0
6210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 622 0 0 0 0 0 0 0 0 0 0 0 0
6220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 623 0 0 0 0 0 0 0 0 0 0 0 0
6230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 624 0 0 0 0 0 0 0 0 0 0 0 0
6240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 0 0 0 0 0 0 0 0 0 0 0 0
6250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 626 0 0 0 0 0 0 0 0 0 0 0 0
6260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 627 0 0 0 0 0 0 0 0 0 0 0 0
6270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 628 0 0 0 0 0 0 0 0 0 0 0 0
6280 0 0 629 0 0 0 0 0 0 0 0 0 0 0 0
6290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 630 0 0 0 0 0 0 0 0 0 0 0 0
6300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 631 6 6 6 18 18 18 46 46 46 90 90 90
6310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 632 46 46 46 18 18 18 6 6 6 182 182 182
6320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 633253 253 253 246 246 246 206 206 206 190 190 190
6330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 634190 190 190 190 190 190 190 190 190 190 190 190
6340 0 0 0 0 0 16 17 12 161 156 96 230 229 82 230 229 82 635206 206 206 231 231 231 250 250 250 253 253 253
635243 242 120 235 234 117 230 229 82 230 229 82 230 229 82 230 229 82 636253 253 253 253 253 253 253 253 253 253 253 253
636230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 161 156 96 637202 202 202 14 14 14 2 2 6 2 2 6
63782 81 62 28 31 30 28 31 30 27 30 29 28 31 30 30 32 31 638 2 2 6 2 2 6 2 2 6 2 2 6
63833 37 35 13 16 16 3 3 3 105 104 92 210 208 158 12 14 14 639 42 42 42 86 86 86 42 42 42 18 18 18
63917 21 21 33 37 35 33 37 35 32 35 33 30 32 31 27 30 29 640 6 6 6 0 0 0 0 0 0 0 0 0
64023 27 26 20 23 23 17 20 20 15 18 18 14 18 18 13 17 17 641 0 0 0 0 0 0 0 0 0 0 0 0
64113 16 16 12 15 15 11 14 14 13 16 16 14 17 17 14 18 18 642 0 0 0 0 0 0 0 0 0 0 0 0
64213 17 17 12 15 15 10 12 12 10 12 12 3 4 4 0 0 0 643 0 0 0 0 0 0 0 0 0 0 0 0
6430 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 644 0 0 0 0 0 0 0 0 0 0 0 0
6440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 645 0 0 0 0 0 0 0 0 0 0 0 0
6450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 646 0 0 0 0 0 0 0 0 0 0 0 0
6460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 647 0 0 0 0 0 0 0 0 0 0 0 0
6470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 648 0 0 0 0 0 0 0 0 0 0 0 0
6480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 649 0 0 0 0 0 0 0 0 0 0 0 0
6490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 650 0 0 0 0 0 0 0 0 0 6 6 6
6500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 651 14 14 14 38 38 38 74 74 74 66 66 66
6510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 652 2 2 6 6 6 6 90 90 90 250 250 250
6520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 653253 253 253 253 253 253 238 238 238 198 198 198
6530 0 0 654190 190 190 190 190 190 195 195 195 221 221 221
6540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 655246 246 246 253 253 253 253 253 253 253 253 253
6550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 656253 253 253 253 253 253 253 253 253 253 253 253
6560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 657253 253 253 82 82 82 2 2 6 2 2 6
6570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 658 2 2 6 2 2 6 2 2 6 2 2 6
6580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 659 2 2 6 78 78 78 70 70 70 34 34 34
6590 0 0 0 0 0 96 95 69 230 229 82 230 229 82 244 244 132 660 14 14 14 6 6 6 0 0 0 0 0 0
660241 241 143 243 242 120 230 229 82 230 229 82 230 229 82 230 229 82 661 0 0 0 0 0 0 0 0 0 0 0 0
661230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 662 0 0 0 0 0 0 0 0 0 0 0 0
662161 156 96 46 47 43 32 35 33 33 37 35 33 37 35 33 37 35 663 0 0 0 0 0 0 0 0 0 0 0 0
66340 43 41 23 27 26 1 1 1 2 2 2 24 26 24 14 17 17 664 0 0 0 0 0 0 0 0 0 0 0 0
66423 27 26 33 37 35 33 37 35 33 37 35 33 37 35 30 32 31 665 0 0 0 0 0 0 0 0 0 0 0 0
66527 30 29 23 27 26 20 23 23 15 18 18 14 18 18 14 17 17 666 0 0 0 0 0 0 0 0 0 0 0 0
66613 16 16 12 15 15 11 14 14 12 15 15 13 17 17 14 17 17 667 0 0 0 0 0 0 0 0 0 0 0 0
66714 17 17 13 16 16 11 13 13 6 8 8 0 0 0 0 0 0 668 0 0 0 0 0 0 0 0 0 0 0 0
6680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 669 0 0 0 0 0 0 0 0 0 0 0 0
6690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 670 0 0 0 0 0 0 0 0 0 14 14 14
6700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 671 34 34 34 66 66 66 78 78 78 6 6 6
6710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 672 2 2 6 18 18 18 218 218 218 253 253 253
6720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 673253 253 253 253 253 253 253 253 253 246 246 246
6730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 674226 226 226 231 231 231 246 246 246 253 253 253
6740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 675253 253 253 253 253 253 253 253 253 253 253 253
6750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 676253 253 253 253 253 253 253 253 253 253 253 253
6760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 677253 253 253 178 178 178 2 2 6 2 2 6
6770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 678 2 2 6 2 2 6 2 2 6 2 2 6
6780 0 0 679 2 2 6 18 18 18 90 90 90 62 62 62
6790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 680 30 30 30 10 10 10 0 0 0 0 0 0
6800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 681 0 0 0 0 0 0 0 0 0 0 0 0
6810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 682 0 0 0 0 0 0 0 0 0 0 0 0
6820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 683 0 0 0 0 0 0 0 0 0 0 0 0
6830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 684 0 0 0 0 0 0 0 0 0 0 0 0
6840 0 0 16 17 12 161 156 96 230 229 82 235 234 117 239 239 170 685 0 0 0 0 0 0 0 0 0 0 0 0
685239 239 170 236 236 101 230 229 82 230 229 82 230 229 82 230 229 82 686 0 0 0 0 0 0 0 0 0 0 0 0
686230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 687 0 0 0 0 0 0 0 0 0 0 0 0
687230 229 82 118 116 76 33 37 35 33 37 35 37 39 37 37 39 37 688 0 0 0 0 0 0 0 0 0 0 0 0
68843 45 43 49 51 48 20 24 24 8 10 10 17 20 20 35 37 36 689 0 0 0 0 0 0 0 0 0 0 0 0
68933 37 35 40 43 41 37 39 37 35 37 36 33 37 35 33 37 35 690 0 0 0 0 0 0 10 10 10 26 26 26
69030 32 31 27 30 29 23 27 26 15 19 19 14 18 18 14 17 17 691 58 58 58 90 90 90 18 18 18 2 2 6
69113 17 17 13 16 16 12 15 15 11 14 14 13 16 16 14 17 17 692 2 2 6 110 110 110 253 253 253 253 253 253
69214 17 17 13 17 17 11 14 14 4 5 5 0 0 0 0 0 0 693253 253 253 253 253 253 253 253 253 253 253 253
6930 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 694250 250 250 253 253 253 253 253 253 253 253 253
6940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 695253 253 253 253 253 253 253 253 253 253 253 253
6950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 696253 253 253 253 253 253 253 253 253 253 253 253
6960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 697253 253 253 231 231 231 18 18 18 2 2 6
6970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 698 2 2 6 2 2 6 2 2 6 2 2 6
6980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 699 2 2 6 2 2 6 18 18 18 94 94 94
6990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 700 54 54 54 26 26 26 10 10 10 0 0 0
7000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 701 0 0 0 0 0 0 0 0 0 0 0 0
7010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 702 0 0 0 0 0 0 0 0 0 0 0 0
7020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 703 0 0 0 0 0 0 0 0 0 0 0 0
7030 0 0 704 0 0 0 0 0 0 0 0 0 0 0 0
7040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 705 0 0 0 0 0 0 0 0 0 0 0 0
7050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 706 0 0 0 0 0 0 0 0 0 0 0 0
7060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 707 0 0 0 0 0 0 0 0 0 0 0 0
7070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 708 0 0 0 0 0 0 0 0 0 0 0 0
7080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 709 0 0 0 0 0 0 0 0 0 0 0 0
7090 0 0 96 95 69 230 229 82 230 229 82 239 239 170 251 251 187 710 0 0 0 6 6 6 22 22 22 50 50 50
710241 241 143 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 711 90 90 90 26 26 26 2 2 6 2 2 6
711230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 712 14 14 14 195 195 195 250 250 250 253 253 253
712230 229 82 161 156 96 36 38 35 33 37 35 33 37 35 33 37 35 713253 253 253 253 253 253 253 253 253 253 253 253
71337 39 37 47 48 46 55 57 54 55 57 54 49 51 48 43 45 43 714253 253 253 253 253 253 253 253 253 253 253 253
71443 45 43 43 45 43 40 43 41 40 43 41 37 39 37 33 37 35 715253 253 253 253 253 253 253 253 253 253 253 253
71533 37 35 28 31 30 26 28 27 16 20 20 15 18 18 14 18 18 716253 253 253 253 253 253 253 253 253 253 253 253
71614 17 17 13 16 16 12 15 15 11 14 14 12 15 15 13 17 17 717250 250 250 242 242 242 54 54 54 2 2 6
71714 17 17 14 17 17 8 10 10 5 7 7 0 0 0 0 0 0 718 2 2 6 2 2 6 2 2 6 2 2 6
7180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 719 2 2 6 2 2 6 2 2 6 38 38 38
7190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 720 86 86 86 50 50 50 22 22 22 6 6 6
7200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 721 0 0 0 0 0 0 0 0 0 0 0 0
7210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0
7220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 723 0 0 0 0 0 0 0 0 0 0 0 0
7230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 724 0 0 0 0 0 0 0 0 0 0 0 0
7240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 725 0 0 0 0 0 0 0 0 0 0 0 0
7250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 726 0 0 0 0 0 0 0 0 0 0 0 0
7260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 727 0 0 0 0 0 0 0 0 0 0 0 0
7270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 728 0 0 0 0 0 0 0 0 0 0 0 0
7280 0 0 729 0 0 0 0 0 0 0 0 0 0 0 0
7290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 730 6 6 6 14 14 14 38 38 38 82 82 82
7300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 731 34 34 34 2 2 6 2 2 6 2 2 6
7310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 732 42 42 42 195 195 195 246 246 246 253 253 253
7320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 733253 253 253 253 253 253 253 253 253 250 250 250
7330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 734242 242 242 242 242 242 250 250 250 253 253 253
73416 17 12 230 229 82 230 229 82 243 242 120 251 251 187 251 251 187 735253 253 253 253 253 253 253 253 253 253 253 253
735246 246 123 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 736253 253 253 250 250 250 246 246 246 238 238 238
736230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 737226 226 226 231 231 231 101 101 101 6 6 6
737230 229 82 230 229 82 66 65 55 30 32 31 32 35 33 33 37 35 738 2 2 6 2 2 6 2 2 6 2 2 6
73833 37 35 37 39 37 40 43 41 47 48 46 49 51 48 51 52 50 739 2 2 6 2 2 6 2 2 6 2 2 6
73955 57 54 55 57 54 51 52 50 47 48 46 43 45 43 39 40 39 740 38 38 38 82 82 82 42 42 42 14 14 14
74033 37 35 30 32 31 26 28 27 17 21 21 15 19 19 14 18 18 741 6 6 6 0 0 0 0 0 0 0 0 0
74114 17 17 13 16 16 12 15 15 12 14 14 11 14 14 13 16 16 742 0 0 0 0 0 0 0 0 0 0 0 0
74214 17 17 12 15 15 7 9 9 6 8 8 1 1 1 0 0 0 743 0 0 0 0 0 0 0 0 0 0 0 0
7430 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 744 0 0 0 0 0 0 0 0 0 0 0 0
7440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 745 0 0 0 0 0 0 0 0 0 0 0 0
7450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 746 0 0 0 0 0 0 0 0 0 0 0 0
7460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 747 0 0 0 0 0 0 0 0 0 0 0 0
7470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 748 0 0 0 0 0 0 0 0 0 0 0 0
7480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 749 0 0 0 0 0 0 0 0 0 0 0 0
7490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 750 10 10 10 26 26 26 62 62 62 66 66 66
7500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 751 2 2 6 2 2 6 2 2 6 6 6 6
7510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 752 70 70 70 170 170 170 206 206 206 234 234 234
7520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 753246 246 246 250 250 250 250 250 250 238 238 238
7530 0 0 754226 226 226 231 231 231 238 238 238 250 250 250
7540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 755250 250 250 250 250 250 246 246 246 231 231 231
7550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 756214 214 214 206 206 206 202 202 202 202 202 202
7560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 757198 198 198 202 202 202 182 182 182 18 18 18
7570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 758 2 2 6 2 2 6 2 2 6 2 2 6
7580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 759 2 2 6 2 2 6 2 2 6 2 2 6
75996 95 69 230 229 82 230 229 82 239 239 170 251 251 187 239 239 170 760 2 2 6 62 62 62 66 66 66 30 30 30
760230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 761 10 10 10 0 0 0 0 0 0 0 0 0
761230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 762 0 0 0 0 0 0 0 0 0 0 0 0
762230 229 82 230 229 82 96 95 69 27 30 29 28 31 30 30 32 31 763 0 0 0 0 0 0 0 0 0 0 0 0
76333 37 35 40 43 41 46 47 45 55 57 54 63 64 60 72 73 67 764 0 0 0 0 0 0 0 0 0 0 0 0
76472 73 67 72 73 67 72 73 67 65 66 61 55 57 54 47 48 46 765 0 0 0 0 0 0 0 0 0 0 0 0
76539 40 39 32 35 33 27 30 29 17 21 21 15 19 19 15 18 18 766 0 0 0 0 0 0 0 0 0 0 0 0
76614 18 18 13 17 17 13 16 16 12 15 15 11 14 14 12 14 14 767 0 0 0 0 0 0 0 0 0 0 0 0
76713 16 16 9 11 11 7 9 9 9 11 11 66 65 55 115 113 82 768 0 0 0 0 0 0 0 0 0 0 0 0
76821 22 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 769 0 0 0 0 0 0 0 0 0 0 0 0
7690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 770 14 14 14 42 42 42 82 82 82 18 18 18
7700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 771 2 2 6 2 2 6 2 2 6 10 10 10
7710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 772 94 94 94 182 182 182 218 218 218 242 242 242
7720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 773250 250 250 253 253 253 253 253 253 250 250 250
7730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 774234 234 234 253 253 253 253 253 253 253 253 253
7740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 775253 253 253 253 253 253 253 253 253 246 246 246
7750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 776238 238 238 226 226 226 210 210 210 202 202 202
7760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 777195 195 195 195 195 195 210 210 210 158 158 158
7770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 778 6 6 6 14 14 14 50 50 50 14 14 14
7780 0 0 779 2 2 6 2 2 6 2 2 6 2 2 6
7790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 780 2 2 6 6 6 6 86 86 86 46 46 46
7800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 781 18 18 18 6 6 6 0 0 0 0 0 0
7810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 782 0 0 0 0 0 0 0 0 0 0 0 0
7820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 783 0 0 0 0 0 0 0 0 0 0 0 0
7830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 12 7 784 0 0 0 0 0 0 0 0 0 0 0 0
784230 229 82 230 229 82 236 236 101 251 251 187 251 251 187 246 246 123 785 0 0 0 0 0 0 0 0 0 0 0 0
785230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 786 0 0 0 0 0 0 0 0 0 0 0 0
786230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 787 0 0 0 0 0 0 0 0 0 0 0 0
787230 229 82 230 229 82 118 116 76 23 27 26 26 28 27 32 35 33 788 0 0 0 0 0 0 0 0 0 0 0 0
78851 52 50 90 89 73 110 109 94 145 141 105 168 163 120 177 172 135 789 0 0 0 0 0 0 0 0 0 6 6 6
789177 172 135 188 184 146 188 184 146 181 176 137 194 191 148 188 184 146 790 22 22 22 54 54 54 70 70 70 2 2 6
790184 179 149 188 184 146 188 184 146 156 151 111 177 172 135 181 176 137 791 2 2 6 10 10 10 2 2 6 22 22 22
791177 172 135 168 163 120 168 163 120 158 153 112 156 151 111 158 153 112 792166 166 166 231 231 231 250 250 250 253 253 253
792156 151 111 158 153 112 177 172 135 188 184 146 188 184 146 194 189 146 793253 253 253 253 253 253 253 253 253 250 250 250
79336 38 35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 794242 242 242 253 253 253 253 253 253 253 253 253
7940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 795253 253 253 253 253 253 253 253 253 253 253 253
7950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 796253 253 253 253 253 253 253 253 253 246 246 246
7960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 797231 231 231 206 206 206 198 198 198 226 226 226
7970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 798 94 94 94 2 2 6 6 6 6 38 38 38
7980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 799 30 30 30 2 2 6 2 2 6 2 2 6
7990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 800 2 2 6 2 2 6 62 62 62 66 66 66
8000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 801 26 26 26 10 10 10 0 0 0 0 0 0
8010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 802 0 0 0 0 0 0 0 0 0 0 0 0
8020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 803 0 0 0 0 0 0 0 0 0 0 0 0
8030 0 0 804 0 0 0 0 0 0 0 0 0 0 0 0
8040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 805 0 0 0 0 0 0 0 0 0 0 0 0
8050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 806 0 0 0 0 0 0 0 0 0 0 0 0
8060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 807 0 0 0 0 0 0 0 0 0 0 0 0
8070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 808 0 0 0 0 0 0 0 0 0 0 0 0
8080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 82 81 62 809 0 0 0 0 0 0 0 0 0 10 10 10
809230 229 82 230 229 82 244 244 132 251 251 187 244 244 132 230 229 82 810 30 30 30 74 74 74 50 50 50 2 2 6
810230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 811 26 26 26 26 26 26 2 2 6 106 106 106
811230 229 82 230 229 82 230 229 82 230 229 82 161 156 96 82 81 62 812238 238 238 253 253 253 253 253 253 253 253 253
81296 95 69 230 229 82 181 178 103 110 109 94 156 151 111 188 184 146 813253 253 253 253 253 253 253 253 253 253 253 253
813188 184 146 197 193 154 188 184 146 184 181 136 188 184 146 168 163 120 814253 253 253 253 253 253 253 253 253 253 253 253
814168 163 120 178 174 128 156 151 111 158 153 112 174 170 121 156 151 111 815253 253 253 253 253 253 253 253 253 253 253 253
815156 151 111 158 153 112 156 151 111 168 163 120 178 174 128 181 176 137 816253 253 253 253 253 253 253 253 253 253 253 253
816176 171 126 178 174 128 184 181 136 176 171 126 178 174 128 184 181 136 817253 253 253 246 246 246 218 218 218 202 202 202
817176 171 126 178 174 128 184 181 136 164 159 111 155 149 109 96 95 69 818210 210 210 14 14 14 2 2 6 2 2 6
8181 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 819 30 30 30 22 22 22 2 2 6 2 2 6
8190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 820 2 2 6 2 2 6 18 18 18 86 86 86
8200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 821 42 42 42 14 14 14 0 0 0 0 0 0
8210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 822 0 0 0 0 0 0 0 0 0 0 0 0
8220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 823 0 0 0 0 0 0 0 0 0 0 0 0
8230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 824 0 0 0 0 0 0 0 0 0 0 0 0
8240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 825 0 0 0 0 0 0 0 0 0 0 0 0
8250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 826 0 0 0 0 0 0 0 0 0 0 0 0
8260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 827 0 0 0 0 0 0 0 0 0 0 0 0
8270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 828 0 0 0 0 0 0 0 0 0 0 0 0
8280 0 0 829 0 0 0 0 0 0 0 0 0 14 14 14
8290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 830 42 42 42 90 90 90 22 22 22 2 2 6
8300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 831 42 42 42 2 2 6 18 18 18 218 218 218
8310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 832253 253 253 253 253 253 253 253 253 253 253 253
8320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 833253 253 253 253 253 253 253 253 253 253 253 253
8330 0 0 0 0 0 0 0 0 0 0 0 2 2 1 161 156 96 834253 253 253 253 253 253 253 253 253 253 253 253
834230 229 82 230 229 82 244 244 132 244 244 132 236 236 101 230 229 82 835253 253 253 253 253 253 253 253 253 253 253 253
835230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 836253 253 253 253 253 253 253 253 253 253 253 253
836230 229 82 230 229 82 230 229 82 230 229 82 46 47 43 82 81 62 837253 253 253 253 253 253 250 250 250 221 221 221
837158 153 112 197 193 154 194 189 146 184 181 136 188 184 146 168 163 120 838218 218 218 101 101 101 2 2 6 14 14 14
838156 151 111 137 133 100 131 127 93 137 133 100 137 133 100 158 153 112 839 18 18 18 38 38 38 10 10 10 2 2 6
839121 119 87 137 133 100 156 151 111 145 141 105 99 98 80 84 83 72 840 2 2 6 2 2 6 2 2 6 78 78 78
84063 64 60 52 53 49 40 43 41 33 36 34 36 38 35 36 38 35 841 58 58 58 22 22 22 6 6 6 0 0 0
84138 39 37 43 44 41 43 44 41 46 47 43 48 49 45 48 49 45 842 0 0 0 0 0 0 0 0 0 0 0 0
84246 47 43 36 38 35 30 31 28 19 20 18 6 7 7 0 0 0 843 0 0 0 0 0 0 0 0 0 0 0 0
8430 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 844 0 0 0 0 0 0 0 0 0 0 0 0
8440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 845 0 0 0 0 0 0 0 0 0 0 0 0
8450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 846 0 0 0 0 0 0 0 0 0 0 0 0
8460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 847 0 0 0 0 0 0 0 0 0 0 0 0
8470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 848 0 0 0 0 0 0 0 0 0 0 0 0
8480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 849 0 0 0 0 0 0 6 6 6 18 18 18
8490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 850 54 54 54 82 82 82 2 2 6 26 26 26
8500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 851 22 22 22 2 2 6 123 123 123 253 253 253
8510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 852253 253 253 253 253 253 253 253 253 253 253 253
8520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 853253 253 253 253 253 253 253 253 253 253 253 253
8530 0 0 854253 253 253 253 253 253 253 253 253 253 253 253
8540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 855253 253 253 253 253 253 253 253 253 253 253 253
8550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 856253 253 253 253 253 253 253 253 253 253 253 253
8560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 857253 253 253 253 253 253 253 253 253 250 250 250
8570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 858238 238 238 198 198 198 6 6 6 38 38 38
8580 0 0 0 0 0 0 0 0 0 0 0 36 38 35 230 229 82 859 58 58 58 26 26 26 38 38 38 2 2 6
859230 229 82 230 229 82 246 246 123 236 236 101 230 229 82 230 229 82 860 2 2 6 2 2 6 2 2 6 46 46 46
860230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 861 78 78 78 30 30 30 10 10 10 0 0 0
861230 229 82 230 229 82 230 229 82 230 229 82 53 55 47 121 119 87 862 0 0 0 0 0 0 0 0 0 0 0 0
862176 171 126 171 165 117 161 156 96 82 81 62 53 55 47 33 37 35 863 0 0 0 0 0 0 0 0 0 0 0 0
86339 40 39 63 64 60 99 98 80 121 119 87 137 133 100 177 172 135 864 0 0 0 0 0 0 0 0 0 0 0 0
864176 171 126 184 181 136 131 127 93 131 127 93 110 109 94 84 83 72 865 0 0 0 0 0 0 0 0 0 0 0 0
86551 52 50 39 40 39 27 29 28 18 22 22 16 19 19 15 19 19 866 0 0 0 0 0 0 0 0 0 0 0 0
86615 19 19 14 18 18 14 17 17 13 16 16 12 15 15 11 14 14 867 0 0 0 0 0 0 0 0 0 0 0 0
86710 13 13 9 12 12 9 11 11 8 9 9 7 9 9 1 1 1 868 0 0 0 0 0 0 0 0 0 0 0 0
8680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 869 0 0 0 0 0 0 10 10 10 30 30 30
8690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 870 74 74 74 58 58 58 2 2 6 42 42 42
8700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 871 2 2 6 22 22 22 231 231 231 253 253 253
8710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 872253 253 253 253 253 253 253 253 253 253 253 253
8720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 873253 253 253 253 253 253 253 253 253 250 250 250
8730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 874253 253 253 253 253 253 253 253 253 253 253 253
8740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 875253 253 253 253 253 253 253 253 253 253 253 253
8750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 876253 253 253 253 253 253 253 253 253 253 253 253
8760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 877253 253 253 253 253 253 253 253 253 253 253 253
8770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 878253 253 253 246 246 246 46 46 46 38 38 38
8780 0 0 879 42 42 42 14 14 14 38 38 38 14 14 14
8790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 880 2 2 6 2 2 6 2 2 6 6 6 6
8800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 881 86 86 86 46 46 46 14 14 14 0 0 0
8810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 882 0 0 0 0 0 0 0 0 0 0 0 0
8820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 883 0 0 0 0 0 0 0 0 0 0 0 0
8830 0 0 0 0 0 0 0 0 0 0 0 118 116 76 230 229 82 884 0 0 0 0 0 0 0 0 0 0 0 0
884230 229 82 230 229 82 236 236 101 230 229 82 230 229 82 230 229 82 885 0 0 0 0 0 0 0 0 0 0 0 0
885230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 886 0 0 0 0 0 0 0 0 0 0 0 0
886230 229 82 230 229 82 230 229 82 230 229 82 96 95 69 71 71 57 887 0 0 0 0 0 0 0 0 0 0 0 0
88736 38 35 118 116 76 118 116 76 12 15 15 15 18 18 20 24 24 888 0 0 0 0 0 0 0 0 0 0 0 0
88833 37 35 55 56 53 84 83 72 110 109 94 145 141 105 110 109 94 889 0 0 0 6 6 6 14 14 14 42 42 42
889168 163 120 121 119 87 156 151 111 131 127 93 87 86 72 61 63 57 890 90 90 90 18 18 18 18 18 18 26 26 26
89047 48 46 28 31 30 18 22 22 15 19 19 15 18 18 15 19 19 891 2 2 6 116 116 116 253 253 253 253 253 253
89115 19 19 14 18 18 14 17 17 13 17 17 13 16 16 12 15 15 892253 253 253 253 253 253 253 253 253 253 253 253
89211 13 13 10 12 12 9 11 11 8 10 10 7 9 9 3 3 3 893253 253 253 253 253 253 250 250 250 238 238 238
8930 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 894253 253 253 253 253 253 253 253 253 253 253 253
8940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 895253 253 253 253 253 253 253 253 253 253 253 253
8950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 896253 253 253 253 253 253 253 253 253 253 253 253
8960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 897253 253 253 253 253 253 253 253 253 253 253 253
8970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 898253 253 253 253 253 253 94 94 94 6 6 6
8980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 899 2 2 6 2 2 6 10 10 10 34 34 34
8990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 900 2 2 6 2 2 6 2 2 6 2 2 6
9000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 901 74 74 74 58 58 58 22 22 22 6 6 6
9010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 902 0 0 0 0 0 0 0 0 0 0 0 0
9020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 903 0 0 0 0 0 0 0 0 0 0 0 0
9030 0 0 904 0 0 0 0 0 0 0 0 0 0 0 0
9040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 905 0 0 0 0 0 0 0 0 0 0 0 0
9050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 906 0 0 0 0 0 0 0 0 0 0 0 0
9060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 907 0 0 0 0 0 0 0 0 0 0 0 0
9070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 908 0 0 0 0 0 0 0 0 0 0 0 0
9080 0 0 0 0 0 0 0 0 1 1 0 230 229 82 230 229 82 909 0 0 0 10 10 10 26 26 26 66 66 66
909230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 910 82 82 82 2 2 6 38 38 38 6 6 6
910230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 911 14 14 14 210 210 210 253 253 253 253 253 253
911230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 161 156 96 912253 253 253 253 253 253 253 253 253 253 253 253
912161 156 96 230 229 82 118 116 76 11 14 14 14 17 17 18 22 22 913253 253 253 253 253 253 246 246 246 242 242 242
91327 30 29 40 43 41 60 60 56 84 83 72 105 104 92 110 109 94 914253 253 253 253 253 253 253 253 253 253 253 253
914110 109 94 110 109 94 99 98 80 90 89 73 68 70 65 47 48 46 915253 253 253 253 253 253 253 253 253 253 253 253
91532 34 33 23 25 24 20 23 23 17 21 21 15 19 19 14 17 17 916253 253 253 253 253 253 253 253 253 253 253 253
91615 19 19 15 18 18 14 18 18 13 17 17 13 16 16 12 15 15 917253 253 253 253 253 253 253 253 253 253 253 253
91711 14 14 10 12 12 9 11 11 8 10 10 7 9 9 4 5 5 918253 253 253 253 253 253 144 144 144 2 2 6
9180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 919 2 2 6 2 2 6 2 2 6 46 46 46
9190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 920 2 2 6 2 2 6 2 2 6 2 2 6
9200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 921 42 42 42 74 74 74 30 30 30 10 10 10
9210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 922 0 0 0 0 0 0 0 0 0 0 0 0
9220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 923 0 0 0 0 0 0 0 0 0 0 0 0
9230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 924 0 0 0 0 0 0 0 0 0 0 0 0
9240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 925 0 0 0 0 0 0 0 0 0 0 0 0
9250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 926 0 0 0 0 0 0 0 0 0 0 0 0
9260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 927 0 0 0 0 0 0 0 0 0 0 0 0
9270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 928 0 0 0 0 0 0 0 0 0 0 0 0
9280 0 0 929 6 6 6 14 14 14 42 42 42 90 90 90
9290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 930 26 26 26 6 6 6 42 42 42 2 2 6
9300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 931 74 74 74 250 250 250 253 253 253 253 253 253
9310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 932253 253 253 253 253 253 253 253 253 253 253 253
9320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 933253 253 253 253 253 253 242 242 242 242 242 242
9330 0 0 0 0 0 0 0 0 16 17 12 230 229 82 230 229 82 934253 253 253 253 253 253 253 253 253 253 253 253
934230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 935253 253 253 253 253 253 253 253 253 253 253 253
935230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 936253 253 253 253 253 253 253 253 253 253 253 253
936230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 937253 253 253 253 253 253 253 253 253 253 253 253
937230 229 82 161 156 96 118 116 76 11 13 13 13 16 16 15 19 19 938253 253 253 253 253 253 182 182 182 2 2 6
93820 24 24 30 32 31 40 43 41 51 52 50 63 64 60 72 73 67 939 2 2 6 2 2 6 2 2 6 46 46 46
93965 66 61 65 66 61 65 66 61 55 57 54 46 47 45 33 37 35 940 2 2 6 2 2 6 2 2 6 2 2 6
94027 29 28 20 24 24 17 21 21 16 20 20 16 20 20 15 19 19 941 10 10 10 86 86 86 38 38 38 10 10 10
94115 19 19 15 19 19 14 18 18 14 17 17 13 16 16 12 15 15 942 0 0 0 0 0 0 0 0 0 0 0 0
94211 14 14 10 13 13 9 12 12 8 10 10 7 9 9 6 7 7 943 0 0 0 0 0 0 0 0 0 0 0 0
9430 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 944 0 0 0 0 0 0 0 0 0 0 0 0
9440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 945 0 0 0 0 0 0 0 0 0 0 0 0
9450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 946 0 0 0 0 0 0 0 0 0 0 0 0
9460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 947 0 0 0 0 0 0 0 0 0 0 0 0
9470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 948 0 0 0 0 0 0 0 0 0 0 0 0
9480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 949 10 10 10 26 26 26 66 66 66 82 82 82
9490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 950 2 2 6 22 22 22 18 18 18 2 2 6
9500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 951149 149 149 253 253 253 253 253 253 253 253 253
9510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 952253 253 253 253 253 253 253 253 253 253 253 253
9520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 953253 253 253 253 253 253 234 234 234 242 242 242
9530 0 0 954253 253 253 253 253 253 253 253 253 253 253 253
9540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 955253 253 253 253 253 253 253 253 253 253 253 253
9550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 956253 253 253 253 253 253 253 253 253 253 253 253
9560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 957253 253 253 253 253 253 253 253 253 253 253 253
9570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 958253 253 253 253 253 253 206 206 206 2 2 6
9580 0 0 0 0 0 0 0 0 53 55 47 230 229 82 230 229 82 959 2 2 6 2 2 6 2 2 6 38 38 38
959230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 960 2 2 6 2 2 6 2 2 6 2 2 6
960230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 961 6 6 6 86 86 86 46 46 46 14 14 14
961230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 962 0 0 0 0 0 0 0 0 0 0 0 0
962161 156 96 118 116 76 53 55 47 10 13 13 12 15 15 14 17 17 963 0 0 0 0 0 0 0 0 0 0 0 0
96317 20 20 20 24 24 27 29 28 32 34 33 37 39 37 40 43 41 964 0 0 0 0 0 0 0 0 0 0 0 0
96443 45 43 41 42 42 35 37 36 30 32 31 28 31 30 23 27 26 965 0 0 0 0 0 0 0 0 0 0 0 0
96520 23 23 17 21 21 16 20 20 16 20 20 16 20 20 16 19 19 966 0 0 0 0 0 0 0 0 0 0 0 0
96615 19 19 15 19 19 14 18 18 14 17 17 13 16 16 12 15 15 967 0 0 0 0 0 0 0 0 0 0 0 0
96711 14 14 10 13 13 9 12 12 9 11 11 8 10 10 10 12 12 968 0 0 0 0 0 0 0 0 0 6 6 6
9681 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 969 18 18 18 46 46 46 86 86 86 18 18 18
9690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 970 2 2 6 34 34 34 10 10 10 6 6 6
9700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 971210 210 210 253 253 253 253 253 253 253 253 253
9710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 972253 253 253 253 253 253 253 253 253 253 253 253
9720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 973253 253 253 253 253 253 234 234 234 242 242 242
9730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 974253 253 253 253 253 253 253 253 253 253 253 253
9740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 975253 253 253 253 253 253 253 253 253 253 253 253
9750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 976253 253 253 253 253 253 253 253 253 253 253 253
9760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 977253 253 253 253 253 253 253 253 253 253 253 253
9770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 978253 253 253 253 253 253 221 221 221 6 6 6
9780 0 0 979 2 2 6 2 2 6 6 6 6 30 30 30
9790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 980 2 2 6 2 2 6 2 2 6 2 2 6
9800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 981 2 2 6 82 82 82 54 54 54 18 18 18
9810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 982 6 6 6 0 0 0 0 0 0 0 0 0
9820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 983 0 0 0 0 0 0 0 0 0 0 0 0
9830 0 0 0 0 0 0 0 0 82 81 62 230 229 82 230 229 82 984 0 0 0 0 0 0 0 0 0 0 0 0
984230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 985 0 0 0 0 0 0 0 0 0 0 0 0
985230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 986 0 0 0 0 0 0 0 0 0 0 0 0
986230 229 82 230 229 82 230 229 82 230 229 82 161 156 96 161 156 96 987 0 0 0 0 0 0 0 0 0 0 0 0
987118 116 76 82 81 62 13 14 12 10 13 13 12 15 15 13 17 17 988 0 0 0 0 0 0 0 0 0 10 10 10
98815 19 19 16 20 20 20 23 23 20 24 24 23 27 26 26 28 27 989 26 26 26 66 66 66 62 62 62 2 2 6
98926 28 27 26 28 27 23 27 26 18 22 22 20 23 23 17 21 21 990 2 2 6 38 38 38 10 10 10 26 26 26
99017 21 21 16 20 20 16 20 20 16 20 20 16 20 20 16 19 19 991238 238 238 253 253 253 253 253 253 253 253 253
99115 19 19 15 19 19 15 18 18 14 17 17 13 17 17 13 16 16 992253 253 253 253 253 253 253 253 253 253 253 253
99212 15 15 12 14 14 12 14 14 12 14 14 12 14 14 23 24 24 993253 253 253 253 253 253 231 231 231 238 238 238
9936 8 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 994253 253 253 253 253 253 253 253 253 253 253 253
9940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 995253 253 253 253 253 253 253 253 253 253 253 253
9950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 996253 253 253 253 253 253 253 253 253 253 253 253
9960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 997253 253 253 253 253 253 253 253 253 253 253 253
9970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 998253 253 253 253 253 253 231 231 231 6 6 6
9980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 999 2 2 6 2 2 6 10 10 10 30 30 30
9990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 2 2 6 2 2 6 2 2 6 2 2 6
10000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1001 2 2 6 66 66 66 58 58 58 22 22 22
10010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1002 6 6 6 0 0 0 0 0 0 0 0 0
10020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1003 0 0 0 0 0 0 0 0 0 0 0 0
10030 0 0 1004 0 0 0 0 0 0 0 0 0 0 0 0
10040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1005 0 0 0 0 0 0 0 0 0 0 0 0
10050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1006 0 0 0 0 0 0 0 0 0 0 0 0
10060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1007 0 0 0 0 0 0 0 0 0 0 0 0
10070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1008 0 0 0 0 0 0 0 0 0 10 10 10
10080 0 0 0 0 0 0 0 0 118 116 76 230 229 82 230 229 82 1009 38 38 38 78 78 78 6 6 6 2 2 6
1009230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 1010 2 2 6 46 46 46 14 14 14 42 42 42
1010230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 1011246 246 246 253 253 253 253 253 253 253 253 253
1011230 229 82 230 229 82 230 229 82 161 156 96 161 156 96 118 116 76 1012253 253 253 253 253 253 253 253 253 253 253 253
101271 71 57 13 14 12 9 12 12 10 13 13 12 15 15 13 17 17 1013253 253 253 253 253 253 231 231 231 242 242 242
101315 18 18 15 19 19 16 20 20 17 21 21 17 21 21 18 22 22 1014253 253 253 253 253 253 253 253 253 253 253 253
101418 22 22 18 22 22 17 21 21 16 19 19 15 18 18 14 18 18 1015253 253 253 253 253 253 253 253 253 253 253 253
101516 19 19 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 1016253 253 253 253 253 253 253 253 253 253 253 253
101615 19 19 15 19 19 15 18 18 14 18 18 16 20 20 23 25 24 1017253 253 253 253 253 253 253 253 253 253 253 253
101717 21 21 25 27 26 47 48 46 47 48 46 51 52 50 72 73 67 1018253 253 253 253 253 253 234 234 234 10 10 10
101833 36 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1019 2 2 6 2 2 6 22 22 22 14 14 14
10190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1020 2 2 6 2 2 6 2 2 6 2 2 6
10200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1021 2 2 6 66 66 66 62 62 62 22 22 22
10210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1022 6 6 6 0 0 0 0 0 0 0 0 0
10220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1023 0 0 0 0 0 0 0 0 0 0 0 0
10230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1024 0 0 0 0 0 0 0 0 0 0 0 0
10240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1025 0 0 0 0 0 0 0 0 0 0 0 0
10250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1026 0 0 0 0 0 0 0 0 0 0 0 0
10260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1027 0 0 0 0 0 0 0 0 0 0 0 0
10270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1028 0 0 0 0 0 0 6 6 6 18 18 18
10280 0 0 1029 50 50 50 74 74 74 2 2 6 2 2 6
10290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1030 14 14 14 70 70 70 34 34 34 62 62 62
10300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1031250 250 250 253 253 253 253 253 253 253 253 253
10310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1032253 253 253 253 253 253 253 253 253 253 253 253
10320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1033253 253 253 253 253 253 231 231 231 246 246 246
10330 0 0 0 0 0 0 0 0 118 116 76 230 229 82 230 229 82 1034253 253 253 253 253 253 253 253 253 253 253 253
1034230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 1035253 253 253 253 253 253 253 253 253 253 253 253
1035230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 1036253 253 253 253 253 253 253 253 253 253 253 253
1036230 229 82 230 229 82 161 156 96 118 116 76 118 116 76 46 47 43 1037253 253 253 253 253 253 253 253 253 253 253 253
10379 11 11 9 11 11 10 12 12 11 13 13 12 15 15 14 17 17 1038253 253 253 253 253 253 234 234 234 14 14 14
103815 18 18 15 19 19 16 20 20 16 20 20 16 20 20 16 20 20 1039 2 2 6 2 2 6 30 30 30 2 2 6
103916 20 20 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 1040 2 2 6 2 2 6 2 2 6 2 2 6
104015 19 19 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 1041 2 2 6 66 66 66 62 62 62 22 22 22
104115 19 19 16 20 20 20 24 24 55 56 53 32 34 33 84 83 72 1042 6 6 6 0 0 0 0 0 0 0 0 0
104290 89 73 110 109 94 110 109 94 105 104 92 110 109 94 110 109 94 1043 0 0 0 0 0 0 0 0 0 0 0 0
104372 73 67 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1044 0 0 0 0 0 0 0 0 0 0 0 0
10440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1045 0 0 0 0 0 0 0 0 0 0 0 0
10450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1046 0 0 0 0 0 0 0 0 0 0 0 0
10460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1047 0 0 0 0 0 0 0 0 0 0 0 0
10470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1048 0 0 0 0 0 0 6 6 6 18 18 18
10480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1049 54 54 54 62 62 62 2 2 6 2 2 6
10490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1050 2 2 6 30 30 30 46 46 46 70 70 70
10500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1051250 250 250 253 253 253 253 253 253 253 253 253
10510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1052253 253 253 253 253 253 253 253 253 253 253 253
10520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1053253 253 253 253 253 253 231 231 231 246 246 246
10530 0 0 1054253 253 253 253 253 253 253 253 253 253 253 253
10540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1055253 253 253 253 253 253 253 253 253 253 253 253
10550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1056253 253 253 253 253 253 253 253 253 253 253 253
10560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1057253 253 253 253 253 253 253 253 253 253 253 253
10570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1058253 253 253 253 253 253 226 226 226 10 10 10
10580 0 0 0 0 0 0 0 0 96 95 69 230 229 82 230 229 82 1059 2 2 6 6 6 6 30 30 30 2 2 6
1059230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 1060 2 2 6 2 2 6 2 2 6 2 2 6
1060230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 1061 2 2 6 66 66 66 58 58 58 22 22 22
1061230 229 82 161 156 96 118 116 76 82 81 62 16 17 12 9 11 11 1062 6 6 6 0 0 0 0 0 0 0 0 0
10629 11 11 9 12 12 10 13 13 12 14 14 13 16 16 14 18 18 1063 0 0 0 0 0 0 0 0 0 0 0 0
106315 19 19 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 1064 0 0 0 0 0 0 0 0 0 0 0 0
106416 20 20 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 1065 0 0 0 0 0 0 0 0 0 0 0 0
106516 20 20 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 1066 0 0 0 0 0 0 0 0 0 0 0 0
106616 19 19 33 36 34 99 98 80 156 151 111 145 141 105 184 179 149 1067 0 0 0 0 0 0 0 0 0 0 0 0
1067168 163 120 184 179 149 177 172 135 156 151 111 145 141 105 110 109 94 1068 0 0 0 0 0 0 6 6 6 22 22 22
106890 89 73 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 1069 58 58 58 62 62 62 2 2 6 2 2 6
10690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1070 2 2 6 2 2 6 30 30 30 78 78 78
10700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1071250 250 250 253 253 253 253 253 253 253 253 253
10710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1072253 253 253 253 253 253 253 253 253 253 253 253
10720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1073253 253 253 253 253 253 231 231 231 246 246 246
10730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1074253 253 253 253 253 253 253 253 253 253 253 253
10740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1075253 253 253 253 253 253 253 253 253 253 253 253
10750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1076253 253 253 253 253 253 253 253 253 253 253 253
10760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1077253 253 253 253 253 253 253 253 253 253 253 253
10770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1078253 253 253 253 253 253 206 206 206 2 2 6
10780 0 0 1079 22 22 22 34 34 34 18 14 6 22 22 22
10790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1080 26 26 26 18 18 18 6 6 6 2 2 6
10800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1081 2 2 6 82 82 82 54 54 54 18 18 18
10810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1082 6 6 6 0 0 0 0 0 0 0 0 0
10820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1083 0 0 0 0 0 0 0 0 0 0 0 0
10830 0 0 0 0 0 0 0 0 71 71 57 230 229 82 230 229 82 1084 0 0 0 0 0 0 0 0 0 0 0 0
1084230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 1085 0 0 0 0 0 0 0 0 0 0 0 0
1085230 229 82 161 156 96 230 229 82 230 229 82 230 229 82 161 156 96 1086 0 0 0 0 0 0 0 0 0 0 0 0
1086118 116 76 82 81 62 30 31 28 9 11 11 9 11 11 9 11 11 1087 0 0 0 0 0 0 0 0 0 0 0 0
108710 12 12 10 13 13 11 14 14 13 16 16 14 17 17 15 18 18 1088 0 0 0 0 0 0 6 6 6 26 26 26
108815 19 19 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 1089 62 62 62 106 106 106 74 54 14 185 133 11
108916 20 20 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 1090210 162 10 121 92 8 6 6 6 62 62 62
109016 20 20 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 1091238 238 238 253 253 253 253 253 253 253 253 253
109118 22 22 58 59 55 137 133 100 197 193 154 214 212 158 210 208 158 1092253 253 253 253 253 253 253 253 253 253 253 253
1092197 193 154 184 179 149 184 179 149 137 133 100 110 109 94 99 98 80 1093253 253 253 253 253 253 231 231 231 246 246 246
109384 83 72 10 10 9 0 0 0 0 0 0 0 0 0 0 0 0 1094253 253 253 253 253 253 253 253 253 253 253 253
10940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1095253 253 253 253 253 253 253 253 253 253 253 253
10950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1096253 253 253 253 253 253 253 253 253 253 253 253
10960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1097253 253 253 253 253 253 253 253 253 253 253 253
10970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1098253 253 253 253 253 253 158 158 158 18 18 18
10980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1099 14 14 14 2 2 6 2 2 6 2 2 6
10990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1100 6 6 6 18 18 18 66 66 66 38 38 38
11000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1101 6 6 6 94 94 94 50 50 50 18 18 18
11010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1102 6 6 6 0 0 0 0 0 0 0 0 0
11020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1103 0 0 0 0 0 0 0 0 0 0 0 0
11030 0 0 1104 0 0 0 0 0 0 0 0 0 0 0 0
11040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1105 0 0 0 0 0 0 0 0 0 0 0 0
11050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1106 0 0 0 0 0 0 0 0 0 0 0 0
11060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1107 0 0 0 0 0 0 0 0 0 6 6 6
11070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1108 10 10 10 10 10 10 18 18 18 38 38 38
11080 0 0 0 0 0 0 0 0 16 17 12 230 229 82 230 229 82 1109 78 78 78 142 134 106 216 158 10 242 186 14
1109230 229 82 230 229 82 230 229 82 230 229 82 230 229 82 161 156 96 1110246 190 14 246 190 14 156 118 10 10 10 10
1110161 156 96 161 156 96 161 156 96 161 156 96 118 116 76 71 71 57 1111 90 90 90 238 238 238 253 253 253 253 253 253
111121 22 20 12 14 14 11 13 13 10 12 12 10 12 12 10 13 13 1112253 253 253 253 253 253 253 253 253 253 253 253
111211 13 13 12 15 15 13 16 16 14 17 17 14 18 18 15 19 19 1113253 253 253 253 253 253 231 231 231 250 250 250
111316 20 20 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 1114253 253 253 253 253 253 253 253 253 253 253 253
111416 20 20 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 1115253 253 253 253 253 253 253 253 253 253 253 253
111516 20 20 16 20 20 16 20 20 16 20 20 16 20 20 17 21 21 1116253 253 253 253 253 253 253 253 253 253 253 253
111623 27 26 84 83 72 184 179 149 251 251 187 210 208 158 184 179 149 1117253 253 253 253 253 253 253 253 253 246 230 190
1117184 179 149 156 151 111 110 109 94 84 83 72 63 64 60 51 52 50 1118238 204 91 238 204 91 181 142 44 37 26 9
111818 22 22 6 8 8 0 0 0 0 0 0 0 0 0 0 0 0 1119 2 2 6 2 2 6 2 2 6 2 2 6
11190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1120 2 2 6 2 2 6 38 38 38 46 46 46
11200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1121 26 26 26 106 106 106 54 54 54 18 18 18
11210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1122 6 6 6 0 0 0 0 0 0 0 0 0
11220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1123 0 0 0 0 0 0 0 0 0 0 0 0
11230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1124 0 0 0 0 0 0 0 0 0 0 0 0
11240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1125 0 0 0 0 0 0 0 0 0 0 0 0
11250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1126 0 0 0 0 0 0 0 0 0 0 0 0
11260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1127 0 0 0 6 6 6 14 14 14 22 22 22
11270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1128 30 30 30 38 38 38 50 50 50 70 70 70
11280 0 0 1129106 106 106 190 142 34 226 170 11 242 186 14
11290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1130246 190 14 246 190 14 246 190 14 154 114 10
11300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1131 6 6 6 74 74 74 226 226 226 253 253 253
11310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1132253 253 253 253 253 253 253 253 253 253 253 253
11320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1133253 253 253 253 253 253 231 231 231 250 250 250
11330 0 0 0 0 0 0 0 0 0 0 0 118 116 76 230 229 82 1134253 253 253 253 253 253 253 253 253 253 253 253
1134230 229 82 230 229 82 230 229 82 230 229 82 161 156 96 161 156 96 1135253 253 253 253 253 253 253 253 253 253 253 253
1135161 156 96 161 156 96 118 116 76 53 55 47 20 23 22 16 19 19 1136253 253 253 253 253 253 253 253 253 253 253 253
113613 16 16 12 15 15 12 14 14 11 14 14 11 14 14 11 14 14 1137253 253 253 253 253 253 253 253 253 228 184 62
113712 15 15 13 16 16 14 17 17 15 19 19 16 20 20 17 21 21 1138241 196 14 241 208 19 232 195 16 38 30 10
113823 27 26 18 22 22 20 24 24 23 27 26 30 32 31 17 21 21 1139 2 2 6 2 2 6 2 2 6 2 2 6
113916 20 20 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 1140 2 2 6 6 6 6 30 30 30 26 26 26
114016 20 20 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 1141203 166 17 154 142 90 66 66 66 26 26 26
114123 27 26 33 37 35 137 133 100 156 151 111 158 153 112 105 104 92 1142 6 6 6 0 0 0 0 0 0 0 0 0
1142105 104 92 68 70 65 39 40 39 18 22 22 12 14 14 12 15 15 1143 0 0 0 0 0 0 0 0 0 0 0 0
11439 11 11 4 5 5 0 0 0 0 0 0 0 0 0 0 0 0 1144 0 0 0 0 0 0 0 0 0 0 0 0
11440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1145 0 0 0 0 0 0 0 0 0 0 0 0
11450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1146 0 0 0 0 0 0 0 0 0 0 0 0
11460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1147 6 6 6 18 18 18 38 38 38 58 58 58
11470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1148 78 78 78 86 86 86 101 101 101 123 123 123
11480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1149175 146 61 210 150 10 234 174 13 246 186 14
11490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1150246 190 14 246 190 14 246 190 14 238 190 10
11500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1151102 78 10 2 2 6 46 46 46 198 198 198
11510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1152253 253 253 253 253 253 253 253 253 253 253 253
11520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1153253 253 253 253 253 253 234 234 234 242 242 242
11530 0 0 1154253 253 253 253 253 253 253 253 253 253 253 253
11540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1155253 253 253 253 253 253 253 253 253 253 253 253
11550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1156253 253 253 253 253 253 253 253 253 253 253 253
11560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1157253 253 253 253 253 253 253 253 253 224 178 62
11570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1158242 186 14 241 196 14 210 166 10 22 18 6
11580 0 0 0 0 0 0 0 0 0 0 0 16 17 12 230 229 82 1159 2 2 6 2 2 6 2 2 6 2 2 6
1159230 229 82 230 229 82 230 229 82 161 156 96 118 116 76 118 116 76 1160 2 2 6 2 2 6 6 6 6 121 92 8
1160118 116 76 66 65 55 43 45 43 32 34 33 25 27 26 20 23 22 1161238 202 15 232 195 16 82 82 82 34 34 34
116117 20 20 15 18 18 14 17 17 15 18 18 13 16 16 14 17 17 1162 10 10 10 0 0 0 0 0 0 0 0 0
116214 18 18 16 20 20 32 34 33 55 57 54 58 59 55 72 73 67 1163 0 0 0 0 0 0 0 0 0 0 0 0
1163105 104 92 55 57 54 65 66 61 63 64 60 40 43 41 33 37 35 1164 0 0 0 0 0 0 0 0 0 0 0 0
116441 42 42 20 24 24 16 20 20 16 20 20 16 20 20 16 20 20 1165 0 0 0 0 0 0 0 0 0 0 0 0
116516 20 20 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 1166 0 0 0 0 0 0 0 0 0 0 0 0
116617 21 21 26 28 27 30 32 31 35 37 36 68 70 65 39 40 39 1167 14 14 14 38 38 38 70 70 70 154 122 46
116723 27 26 15 18 18 13 16 16 11 14 14 9 12 12 8 10 10 1168190 142 34 200 144 11 197 138 11 197 138 11
11687 9 9 6 7 7 0 0 0 0 0 0 0 0 0 0 0 0 1169213 154 11 226 170 11 242 186 14 246 190 14
11690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1170246 190 14 246 190 14 246 190 14 246 190 14
11700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1171225 175 15 46 32 6 2 2 6 22 22 22
11710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1172158 158 158 250 250 250 253 253 253 253 253 253
11720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1173253 253 253 253 253 253 253 253 253 253 253 253
11730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1174253 253 253 253 253 253 253 253 253 253 253 253
11740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1175253 253 253 253 253 253 253 253 253 253 253 253
11750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1176253 253 253 253 253 253 253 253 253 253 253 253
11760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1177253 253 253 250 250 250 242 242 242 224 178 62
11770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1178239 182 13 236 186 11 213 154 11 46 32 6
11780 0 0 1179 2 2 6 2 2 6 2 2 6 2 2 6
11790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1180 2 2 6 2 2 6 61 42 6 225 175 15
11800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1181238 190 10 236 186 11 112 100 78 42 42 42
11810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1182 14 14 14 0 0 0 0 0 0 0 0 0
11820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1183 0 0 0 0 0 0 0 0 0 0 0 0
11830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36 38 35 1184 0 0 0 0 0 0 0 0 0 0 0 0
1184230 229 82 230 229 82 230 229 82 96 95 69 30 31 28 49 51 48 1185 0 0 0 0 0 0 0 0 0 0 0 0
118590 89 73 68 70 65 55 57 54 47 48 46 47 48 46 43 45 43 1186 0 0 0 0 0 0 0 0 0 6 6 6
118632 34 33 43 45 43 43 45 43 23 27 26 25 27 26 40 43 41 1187 22 22 22 54 54 54 154 122 46 213 154 11
118740 43 41 90 89 73 110 109 94 145 141 105 156 151 111 156 151 111 1188226 170 11 230 174 11 226 170 11 226 170 11
1188184 179 149 184 179 149 177 172 135 184 179 149 137 133 100 84 83 72 1189236 178 12 242 186 14 246 190 14 246 190 14
1189105 104 92 63 64 60 49 51 48 47 48 46 28 31 30 18 22 22 1190246 190 14 246 190 14 246 190 14 246 190 14
119016 20 20 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 1191241 196 14 184 144 12 10 10 10 2 2 6
119116 20 20 15 19 19 15 19 19 15 19 19 18 22 22 15 19 19 1192 6 6 6 116 116 116 242 242 242 253 253 253
119213 16 16 12 15 15 11 14 14 10 13 13 9 12 12 9 11 11 1193253 253 253 253 253 253 253 253 253 253 253 253
11938 10 10 6 8 8 0 0 0 0 0 0 0 0 0 0 0 0 1194253 253 253 253 253 253 253 253 253 253 253 253
11940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1195253 253 253 253 253 253 253 253 253 253 253 253
11950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1196253 253 253 253 253 253 253 253 253 253 253 253
11960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1197253 253 253 231 231 231 198 198 198 214 170 54
11970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1198236 178 12 236 178 12 210 150 10 137 92 6
11980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1199 18 14 6 2 2 6 2 2 6 2 2 6
11990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1200 6 6 6 70 47 6 200 144 11 236 178 12
12000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1201239 182 13 239 182 13 124 112 88 58 58 58
12010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1202 22 22 22 6 6 6 0 0 0 0 0 0
12020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1203 0 0 0 0 0 0 0 0 0 0 0 0
12030 0 0 1204 0 0 0 0 0 0 0 0 0 0 0 0
12040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1205 0 0 0 0 0 0 0 0 0 0 0 0
12050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1206 0 0 0 0 0 0 0 0 0 10 10 10
12060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1207 30 30 30 70 70 70 180 133 36 226 170 11
12070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1208239 182 13 242 186 14 242 186 14 246 186 14
12080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1209246 190 14 246 190 14 246 190 14 246 190 14
120930 31 28 230 229 82 71 71 57 2 2 1 0 0 0 58 59 55 1210246 190 14 246 190 14 246 190 14 246 190 14
1210105 104 92 84 83 72 65 66 61 84 83 72 110 109 94 110 109 94 1211246 190 14 232 195 16 98 70 6 2 2 6
1211145 141 105 105 104 92 110 109 94 110 109 94 84 83 72 110 109 94 1212 2 2 6 2 2 6 66 66 66 221 221 221
1212158 153 112 197 193 154 197 193 154 239 239 170 251 251 187 251 251 187 1213253 253 253 253 253 253 253 253 253 253 253 253
1213251 251 187 251 251 187 251 251 187 251 251 187 210 208 158 197 193 154 1214253 253 253 253 253 253 253 253 253 253 253 253
1214197 193 154 184 179 149 145 141 105 137 133 100 105 104 92 47 48 46 1215253 253 253 253 253 253 253 253 253 253 253 253
121520 23 23 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 1216253 253 253 253 253 253 253 253 253 253 253 253
121616 20 20 16 19 19 15 19 19 15 19 19 14 18 18 14 17 17 1217253 253 253 206 206 206 198 198 198 214 166 58
121713 17 17 13 16 16 12 14 14 12 14 14 13 13 13 13 13 13 1218230 174 11 230 174 11 216 158 10 192 133 9
121813 13 13 12 12 12 10 10 9 6 7 7 2 2 2 0 0 0 1219163 110 8 116 81 8 102 78 10 116 81 8
12190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1220167 114 7 197 138 11 226 170 11 239 182 13
12200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1221242 186 14 242 186 14 162 146 94 78 78 78
12210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1222 34 34 34 14 14 14 6 6 6 0 0 0
12220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1223 0 0 0 0 0 0 0 0 0 0 0 0
12230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1224 0 0 0 0 0 0 0 0 0 0 0 0
12240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1225 0 0 0 0 0 0 0 0 0 0 0 0
12250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1226 0 0 0 0 0 0 0 0 0 6 6 6
12260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1227 30 30 30 78 78 78 190 142 34 226 170 11
12270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1228239 182 13 246 190 14 246 190 14 246 190 14
12280 0 0 1229246 190 14 246 190 14 246 190 14 246 190 14
12290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1230246 190 14 246 190 14 246 190 14 246 190 14
12300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1231246 190 14 241 196 14 203 166 17 22 18 6
12310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1232 2 2 6 2 2 6 2 2 6 38 38 38
12320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1233218 218 218 253 253 253 253 253 253 253 253 253
12330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1234253 253 253 253 253 253 253 253 253 253 253 253
12340 0 0 0 0 0 1 1 0 0 0 0 0 0 0 65 66 61 1235253 253 253 253 253 253 253 253 253 253 253 253
1235105 104 92 84 83 72 84 83 72 110 109 94 184 179 149 210 208 158 1236253 253 253 253 253 253 253 253 253 253 253 253
1236210 208 158 210 208 158 214 212 158 197 193 154 214 212 158 210 208 158 1237250 250 250 206 206 206 198 198 198 202 162 69
1237251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 1238226 170 11 236 178 12 224 166 10 210 150 10
1238251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 1239200 144 11 197 138 11 192 133 9 197 138 11
1239251 251 187 251 251 187 239 239 170 251 251 187 184 179 149 84 83 72 1240210 150 10 226 170 11 242 186 14 246 190 14
124026 28 27 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 1241246 190 14 246 186 14 225 175 15 124 112 88
124116 20 20 16 20 20 15 19 19 15 19 19 15 18 18 14 18 18 1242 62 62 62 30 30 30 14 14 14 6 6 6
124213 17 17 13 16 16 15 15 15 14 14 13 14 14 13 14 14 13 1243 0 0 0 0 0 0 0 0 0 0 0 0
124313 13 13 13 13 13 12 12 12 12 12 12 12 12 12 3 4 4 1244 0 0 0 0 0 0 0 0 0 0 0 0
12440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1245 0 0 0 0 0 0 0 0 0 0 0 0
12450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1246 0 0 0 0 0 0 0 0 0 10 10 10
12460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1247 30 30 30 78 78 78 174 135 50 224 166 10
12470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1248239 182 13 246 190 14 246 190 14 246 190 14
12480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1249246 190 14 246 190 14 246 190 14 246 190 14
12490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1250246 190 14 246 190 14 246 190 14 246 190 14
12500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1251246 190 14 246 190 14 241 196 14 139 102 15
12510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1252 2 2 6 2 2 6 2 2 6 2 2 6
12520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1253 78 78 78 250 250 250 253 253 253 253 253 253
12530 0 0 1254253 253 253 253 253 253 253 253 253 253 253 253
12540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1255253 253 253 253 253 253 253 253 253 253 253 253
12550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1256253 253 253 253 253 253 253 253 253 253 253 253
12560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1257250 250 250 214 214 214 198 198 198 190 150 46
12570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1258219 162 10 236 178 12 234 174 13 224 166 10
12580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1259216 158 10 213 154 11 213 154 11 216 158 10
12590 0 0 0 0 0 0 0 0 0 0 0 0 0 0 72 73 67 1260226 170 11 239 182 13 246 190 14 246 190 14
1260105 104 92 99 98 80 84 83 72 99 98 80 177 172 135 197 193 154 1261246 190 14 246 190 14 242 186 14 206 162 42
1261251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 1262101 101 101 58 58 58 30 30 30 14 14 14
1262251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 1263 6 6 6 0 0 0 0 0 0 0 0 0
1263251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 1264 0 0 0 0 0 0 0 0 0 0 0 0
1264251 251 187 251 251 187 251 251 187 214 212 158 197 193 154 99 98 80 1265 0 0 0 0 0 0 0 0 0 0 0 0
126523 27 26 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 1266 0 0 0 0 0 0 0 0 0 10 10 10
126616 20 20 16 20 20 15 19 19 15 19 19 15 18 18 14 18 18 1267 30 30 30 74 74 74 174 135 50 216 158 10
126714 17 17 16 16 16 16 16 16 16 16 16 15 15 15 14 14 13 1268236 178 12 246 190 14 246 190 14 246 190 14
126814 14 13 13 13 13 13 13 13 12 12 12 12 12 12 12 12 12 1269246 190 14 246 190 14 246 190 14 246 190 14
12693 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1270246 190 14 246 190 14 246 190 14 246 190 14
12700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1271246 190 14 246 190 14 241 196 14 226 184 13
12710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1272 61 42 6 2 2 6 2 2 6 2 2 6
12720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1273 22 22 22 238 238 238 253 253 253 253 253 253
12730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1274253 253 253 253 253 253 253 253 253 253 253 253
12740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1275253 253 253 253 253 253 253 253 253 253 253 253
12750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1276253 253 253 253 253 253 253 253 253 253 253 253
12760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1277253 253 253 226 226 226 187 187 187 180 133 36
12770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1278216 158 10 236 178 12 239 182 13 236 178 12
12780 0 0 1279230 174 11 226 170 11 226 170 11 230 174 11
12790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1280236 178 12 242 186 14 246 190 14 246 190 14
12800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1281246 190 14 246 190 14 246 186 14 239 182 13
12810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1282206 162 42 106 106 106 66 66 66 34 34 34
12820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1283 14 14 14 6 6 6 0 0 0 0 0 0
12830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1284 0 0 0 0 0 0 0 0 0 0 0 0
12840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 84 83 72 1285 0 0 0 0 0 0 0 0 0 0 0 0
1285110 109 94 99 98 80 72 73 67 63 64 60 99 98 80 177 172 135 1286 0 0 0 0 0 0 0 0 0 6 6 6
1286184 179 149 210 208 158 251 251 187 251 251 187 251 251 187 251 251 187 1287 26 26 26 70 70 70 163 133 67 213 154 11
1287251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 1288236 178 12 246 190 14 246 190 14 246 190 14
1288251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 1289246 190 14 246 190 14 246 190 14 246 190 14
1289251 251 187 210 208 158 184 179 149 177 172 135 110 109 94 33 37 35 1290246 190 14 246 190 14 246 190 14 246 190 14
129017 21 21 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 1291246 190 14 246 190 14 246 190 14 241 196 14
129116 20 20 16 20 20 15 19 19 15 19 19 15 19 19 14 18 18 1292190 146 13 18 14 6 2 2 6 2 2 6
129215 18 18 18 19 18 18 19 18 17 17 17 16 16 16 15 15 15 1293 46 46 46 246 246 246 253 253 253 253 253 253
129314 14 13 13 13 13 13 13 13 12 12 12 12 12 12 12 12 12 1294253 253 253 253 253 253 253 253 253 253 253 253
129410 10 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1295253 253 253 253 253 253 253 253 253 253 253 253
12950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1296253 253 253 253 253 253 253 253 253 253 253 253
12960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1297253 253 253 221 221 221 86 86 86 156 107 11
12970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1298216 158 10 236 178 12 242 186 14 246 186 14
12980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1299242 186 14 239 182 13 239 182 13 242 186 14
12990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1300242 186 14 246 186 14 246 190 14 246 190 14
13000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1301246 190 14 246 190 14 246 190 14 246 190 14
13010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1302242 186 14 225 175 15 142 122 72 66 66 66
13020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1303 30 30 30 10 10 10 0 0 0 0 0 0
13030 0 0 1304 0 0 0 0 0 0 0 0 0 0 0 0
13040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1305 0 0 0 0 0 0 0 0 0 0 0 0
13050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1306 0 0 0 0 0 0 0 0 0 6 6 6
13060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1307 26 26 26 70 70 70 163 133 67 210 150 10
13070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1308236 178 12 246 190 14 246 190 14 246 190 14
13080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1309246 190 14 246 190 14 246 190 14 246 190 14
13090 0 0 0 0 0 0 0 0 0 0 0 2 2 2 105 104 92 1310246 190 14 246 190 14 246 190 14 246 190 14
1310108 107 93 99 98 80 72 73 67 63 64 60 51 52 50 87 86 72 1311246 190 14 246 190 14 246 190 14 246 190 14
1311105 104 92 110 109 94 108 107 93 156 151 111 184 179 149 184 179 149 1312232 195 16 121 92 8 34 34 34 106 106 106
1312197 193 154 197 193 154 197 193 154 184 179 149 184 179 149 177 172 135 1313221 221 221 253 253 253 253 253 253 253 253 253
1313197 193 154 156 151 111 177 172 135 184 179 149 168 163 120 137 133 100 1314253 253 253 253 253 253 253 253 253 253 253 253
1314145 141 105 110 109 94 99 98 80 47 48 46 55 57 54 15 19 19 1315253 253 253 253 253 253 253 253 253 253 253 253
131516 19 19 16 20 20 16 20 20 16 20 20 16 20 20 16 20 20 1316253 253 253 253 253 253 253 253 253 253 253 253
131617 20 20 17 21 21 16 20 20 16 19 19 15 19 19 16 19 19 1317242 242 242 82 82 82 18 14 6 163 110 8
131720 20 20 21 22 21 20 20 20 19 20 19 18 19 18 16 16 16 1318216 158 10 236 178 12 242 186 14 246 190 14
131815 15 15 14 14 13 13 13 13 13 13 13 12 12 12 12 12 12 1319246 190 14 246 190 14 246 190 14 246 190 14
131912 12 12 4 5 5 0 0 0 0 0 0 0 0 0 0 0 0 1320246 190 14 246 190 14 246 190 14 246 190 14
13200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1321246 190 14 246 190 14 246 190 14 246 190 14
13210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1322246 190 14 246 190 14 242 186 14 163 133 67
13220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1323 46 46 46 18 18 18 6 6 6 0 0 0
13230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1324 0 0 0 0 0 0 0 0 0 0 0 0
13240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1325 0 0 0 0 0 0 0 0 0 0 0 0
13250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1326 0 0 0 0 0 0 0 0 0 10 10 10
13260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1327 30 30 30 78 78 78 163 133 67 210 150 10
13270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328236 178 12 246 186 14 246 190 14 246 190 14
13280 0 0 1329246 190 14 246 190 14 246 190 14 246 190 14
13290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1330246 190 14 246 190 14 246 190 14 246 190 14
13300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1331246 190 14 246 190 14 246 190 14 246 190 14
13310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1332241 196 14 215 174 15 190 178 144 253 253 253
13320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1333253 253 253 253 253 253 253 253 253 253 253 253
13330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1334253 253 253 253 253 253 253 253 253 253 253 253
13340 0 0 0 0 0 0 0 0 0 0 0 58 59 55 110 109 94 1335253 253 253 253 253 253 253 253 253 253 253 253
1335105 104 92 90 89 73 72 73 67 55 57 54 43 45 43 39 40 39 1336253 253 253 253 253 253 253 253 253 218 218 218
133643 45 43 46 47 45 43 45 43 68 70 65 65 66 61 63 64 60 1337 58 58 58 2 2 6 22 18 6 167 114 7
1337108 107 93 72 73 67 105 104 92 90 89 73 72 73 67 40 43 41 1338216 158 10 236 178 12 246 186 14 246 190 14
133872 73 67 68 70 65 68 70 65 58 59 55 63 64 60 49 51 48 1339246 190 14 246 190 14 246 190 14 246 190 14
133943 45 43 33 36 34 27 30 29 20 24 24 16 20 20 15 19 19 1340246 190 14 246 190 14 246 190 14 246 190 14
134015 19 19 15 19 19 15 19 19 16 19 19 16 20 20 16 20 20 1341246 190 14 246 190 14 246 190 14 246 190 14
134117 21 21 20 24 24 20 23 22 17 21 21 17 20 20 20 20 20 1342246 190 14 246 186 14 242 186 14 190 150 46
134221 22 21 21 22 21 21 22 21 21 22 21 20 20 20 18 19 18 1343 54 54 54 22 22 22 6 6 6 0 0 0
134316 16 16 15 15 15 13 13 13 13 13 13 12 12 12 12 12 12 1344 0 0 0 0 0 0 0 0 0 0 0 0
134412 12 12 10 10 9 0 0 0 0 0 0 0 0 0 0 0 0 1345 0 0 0 0 0 0 0 0 0 0 0 0
13450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1346 0 0 0 0 0 0 0 0 0 14 14 14
13460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1347 38 38 38 86 86 86 180 133 36 213 154 11
13470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1348236 178 12 246 186 14 246 190 14 246 190 14
13480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1349246 190 14 246 190 14 246 190 14 246 190 14
13490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1350246 190 14 246 190 14 246 190 14 246 190 14
13500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1351246 190 14 246 190 14 246 190 14 246 190 14
13510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1352246 190 14 232 195 16 190 146 13 214 214 214
13520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1353253 253 253 253 253 253 253 253 253 253 253 253
13530 0 0 1354253 253 253 253 253 253 253 253 253 253 253 253
13540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1355253 253 253 253 253 253 253 253 253 253 253 253
13550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1356253 253 253 250 250 250 170 170 170 26 26 26
13560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1357 2 2 6 2 2 6 37 26 9 163 110 8
13570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1358219 162 10 239 182 13 246 186 14 246 190 14
13580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1359246 190 14 246 190 14 246 190 14 246 190 14
13590 0 0 0 0 0 0 0 0 21 22 21 110 109 94 110 109 94 1360246 190 14 246 190 14 246 190 14 246 190 14
1360105 104 92 84 83 72 68 70 65 51 52 50 41 42 42 33 37 35 1361246 190 14 246 190 14 246 190 14 246 190 14
136128 31 30 23 27 26 20 23 23 18 22 22 17 20 20 25 27 26 1362246 186 14 236 178 12 224 166 10 142 122 72
136226 28 27 27 30 29 25 27 26 20 23 23 23 27 26 30 32 31 1363 46 46 46 18 18 18 6 6 6 0 0 0
136320 24 24 17 21 21 18 22 22 15 19 19 26 28 27 20 23 23 1364 0 0 0 0 0 0 0 0 0 0 0 0
136414 18 18 15 19 19 15 18 18 15 19 19 15 19 19 15 19 19 1365 0 0 0 0 0 0 0 0 0 0 0 0
136515 19 19 15 19 19 15 19 19 15 19 19 15 19 19 16 19 19 1366 0 0 0 0 0 0 6 6 6 18 18 18
136616 20 20 22 24 23 24 26 24 22 24 23 20 23 22 22 24 23 1367 50 50 50 109 106 95 192 133 9 224 166 10
136724 26 24 24 26 24 23 24 24 22 24 23 21 22 21 19 20 19 1368242 186 14 246 190 14 246 190 14 246 190 14
136817 17 17 15 15 15 14 14 13 13 13 13 12 12 12 12 12 12 1369246 190 14 246 190 14 246 190 14 246 190 14
136912 12 12 12 12 12 2 2 2 0 0 0 0 0 0 0 0 0 1370246 190 14 246 190 14 246 190 14 246 190 14
13700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1371246 190 14 246 190 14 246 190 14 246 190 14
13710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1372242 186 14 226 184 13 210 162 10 142 110 46
13720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1373226 226 226 253 253 253 253 253 253 253 253 253
13730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1374253 253 253 253 253 253 253 253 253 253 253 253
13740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1375253 253 253 253 253 253 253 253 253 253 253 253
13750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1376198 198 198 66 66 66 2 2 6 2 2 6
13760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1377 2 2 6 2 2 6 50 34 6 156 107 11
13770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1378219 162 10 239 182 13 246 186 14 246 190 14
13780 0 0 1379246 190 14 246 190 14 246 190 14 246 190 14
13790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1380246 190 14 246 190 14 246 190 14 246 190 14
13800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1381246 190 14 246 190 14 246 190 14 242 186 14
13810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1382234 174 13 213 154 11 154 122 46 66 66 66
13820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1383 30 30 30 10 10 10 0 0 0 0 0 0
13830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1384 0 0 0 0 0 0 0 0 0 0 0 0
13840 0 0 0 0 0 2 2 2 99 98 80 110 109 94 108 107 93 1385 0 0 0 0 0 0 0 0 0 0 0 0
1385105 104 92 84 83 72 63 64 60 49 51 48 39 40 39 32 34 33 1386 0 0 0 0 0 0 6 6 6 22 22 22
138627 30 29 23 25 24 20 23 23 17 20 20 15 19 19 14 18 18 1387 58 58 58 154 121 60 206 145 10 234 174 13
138714 17 17 13 17 17 13 17 17 13 17 17 13 17 17 13 17 17 1388242 186 14 246 186 14 246 190 14 246 190 14
138814 17 17 14 17 17 14 17 17 14 17 17 14 17 17 14 17 17 1389246 190 14 246 190 14 246 190 14 246 190 14
138914 18 18 14 18 18 14 18 18 14 18 18 15 18 18 15 19 19 1390246 190 14 246 190 14 246 190 14 246 190 14
139015 19 19 15 19 19 15 19 19 15 19 19 15 19 19 15 19 19 1391246 190 14 246 190 14 246 190 14 246 190 14
139115 19 19 17 21 21 27 29 28 26 28 27 25 27 26 25 27 26 1392246 186 14 236 178 12 210 162 10 163 110 8
139227 29 28 27 29 28 26 28 27 24 26 24 21 22 21 20 20 20 1393 61 42 6 138 138 138 218 218 218 250 250 250
139318 19 18 16 16 16 14 14 13 13 13 13 12 12 12 12 12 12 1394253 253 253 253 253 253 253 253 253 250 250 250
139412 12 12 12 12 12 4 5 5 0 0 0 0 0 0 0 0 0 1395242 242 242 210 210 210 144 144 144 66 66 66
13950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1396 6 6 6 2 2 6 2 2 6 2 2 6
13960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1397 2 2 6 2 2 6 61 42 6 163 110 8
13970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1398216 158 10 236 178 12 246 190 14 246 190 14
13980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1399246 190 14 246 190 14 246 190 14 246 190 14
13990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1400246 190 14 246 190 14 246 190 14 246 190 14
14000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1401246 190 14 239 182 13 230 174 11 216 158 10
14010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1402190 142 34 124 112 88 70 70 70 38 38 38
14020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1403 18 18 18 6 6 6 0 0 0 0 0 0
14030 0 0 1404 0 0 0 0 0 0 0 0 0 0 0 0
14040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1405 0 0 0 0 0 0 0 0 0 0 0 0
14050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1406 0 0 0 0 0 0 6 6 6 22 22 22
14060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1407 62 62 62 168 124 44 206 145 10 224 166 10
14070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1408236 178 12 239 182 13 242 186 14 242 186 14
14080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1409246 186 14 246 190 14 246 190 14 246 190 14
14090 0 0 0 0 0 51 52 50 110 109 94 110 109 94 105 104 92 1410246 190 14 246 190 14 246 190 14 246 190 14
141090 89 73 72 73 67 55 57 54 43 45 43 35 37 36 30 32 31 1411246 190 14 246 190 14 246 190 14 246 190 14
141126 28 27 20 24 24 17 21 21 16 19 19 15 18 18 14 17 17 1412246 190 14 236 178 12 216 158 10 175 118 6
141213 16 16 13 16 16 13 16 16 13 16 16 13 16 16 13 16 16 1413 80 54 7 2 2 6 6 6 6 30 30 30
141313 16 16 13 16 16 13 16 16 13 17 17 13 17 17 14 17 17 1414 54 54 54 62 62 62 50 50 50 38 38 38
141414 17 17 14 17 17 14 17 17 14 18 18 14 18 18 14 18 18 1415 14 14 14 2 2 6 2 2 6 2 2 6
141515 18 18 15 18 18 15 19 19 15 19 19 15 19 19 15 19 19 1416 2 2 6 2 2 6 2 2 6 2 2 6
141615 19 19 15 19 19 27 29 28 32 34 33 28 31 30 27 29 28 1417 2 2 6 6 6 6 80 54 7 167 114 7
141730 32 31 30 32 31 30 31 28 26 28 27 23 24 24 21 22 21 1418213 154 11 236 178 12 246 190 14 246 190 14
141819 20 19 16 16 16 14 14 13 13 13 13 12 12 12 12 12 12 1419246 190 14 246 190 14 246 190 14 246 190 14
141912 12 12 12 12 12 6 7 7 0 0 0 0 0 0 0 0 0 1420246 190 14 242 186 14 239 182 13 239 182 13
14200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1421230 174 11 210 150 10 174 135 50 124 112 88
14210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1422 82 82 82 54 54 54 34 34 34 18 18 18
14220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1423 6 6 6 0 0 0 0 0 0 0 0 0
14230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1424 0 0 0 0 0 0 0 0 0 0 0 0
14240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1425 0 0 0 0 0 0 0 0 0 0 0 0
14250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1426 0 0 0 0 0 0 6 6 6 18 18 18
14260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1427 50 50 50 158 118 36 192 133 9 200 144 11
14270 0 0 0 0 0 0 0 0 3 3 3 0 0 0 0 0 0 1428216 158 10 219 162 10 224 166 10 226 170 11
14280 0 0 1429230 174 11 236 178 12 239 182 13 239 182 13
14290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1430242 186 14 246 186 14 246 190 14 246 190 14
14300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1431246 190 14 246 190 14 246 190 14 246 190 14
14310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1432246 186 14 230 174 11 210 150 10 163 110 8
14320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1433104 69 6 10 10 10 2 2 6 2 2 6
14330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1434 2 2 6 2 2 6 2 2 6 2 2 6
14340 0 0 10 10 9 108 107 93 110 109 94 108 107 93 99 98 80 1435 2 2 6 2 2 6 2 2 6 2 2 6
143584 83 72 63 64 60 49 51 48 40 43 41 33 36 34 27 30 29 1436 2 2 6 2 2 6 2 2 6 2 2 6
143623 27 26 18 22 22 17 20 20 15 18 18 14 17 17 13 16 16 1437 2 2 6 6 6 6 91 60 6 167 114 7
143713 16 16 13 16 16 12 15 15 12 15 15 12 15 15 12 15 15 1438206 145 10 230 174 11 242 186 14 246 190 14
143813 16 16 13 16 16 13 16 16 13 16 16 13 16 16 13 16 16 1439246 190 14 246 190 14 246 186 14 242 186 14
143913 17 17 13 17 17 14 17 17 14 17 17 14 17 17 14 18 18 1440239 182 13 230 174 11 224 166 10 213 154 11
144014 18 18 14 18 18 15 18 18 15 18 18 15 19 19 15 19 19 1441180 133 36 124 112 88 86 86 86 58 58 58
144115 19 19 15 19 19 17 21 21 33 36 34 32 34 33 31 33 31 1442 38 38 38 22 22 22 10 10 10 6 6 6
144233 36 34 33 36 34 31 33 31 27 29 28 25 27 26 21 22 21 1443 0 0 0 0 0 0 0 0 0 0 0 0
144319 20 19 17 17 17 15 15 15 13 13 13 12 12 12 12 12 12 1444 0 0 0 0 0 0 0 0 0 0 0 0
144412 12 12 12 12 12 8 8 7 0 0 0 0 0 0 0 0 0 1445 0 0 0 0 0 0 0 0 0 0 0 0
14450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1446 0 0 0 0 0 0 0 0 0 14 14 14
14460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1447 34 34 34 70 70 70 138 110 50 158 118 36
14470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1448167 114 7 180 123 7 192 133 9 197 138 11
14480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1449200 144 11 206 145 10 213 154 11 219 162 10
14490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1450224 166 10 230 174 11 239 182 13 242 186 14
14500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1451246 186 14 246 186 14 246 186 14 246 186 14
14510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1452239 182 13 216 158 10 185 133 11 152 99 6
14520 0 0 0 0 0 63 64 60 137 133 100 43 45 43 0 0 0 1453104 69 6 18 14 6 2 2 6 2 2 6
14530 0 0 1454 2 2 6 2 2 6 2 2 6 2 2 6
14540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1455 2 2 6 2 2 6 2 2 6 2 2 6
14550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1456 2 2 6 2 2 6 2 2 6 2 2 6
14560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1457 2 2 6 6 6 6 80 54 7 152 99 6
14570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1458192 133 9 219 162 10 236 178 12 239 182 13
14580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1459246 186 14 242 186 14 239 182 13 236 178 12
14590 0 0 68 70 65 110 109 94 110 109 94 105 104 92 84 83 72 1460224 166 10 206 145 10 192 133 9 154 121 60
146068 70 65 55 57 54 43 45 43 35 37 36 30 32 31 26 28 27 1461 94 94 94 62 62 62 42 42 42 22 22 22
146120 24 24 17 21 21 16 19 19 14 17 17 13 16 16 12 15 15 1462 14 14 14 6 6 6 0 0 0 0 0 0
146212 15 15 12 15 15 12 15 15 12 15 15 12 15 15 12 15 15 1463 0 0 0 0 0 0 0 0 0 0 0 0
146312 15 15 12 15 15 12 15 15 12 15 15 12 15 15 13 16 16 1464 0 0 0 0 0 0 0 0 0 0 0 0
146413 16 16 13 16 16 13 16 16 13 17 17 13 17 17 14 17 17 1465 0 0 0 0 0 0 0 0 0 0 0 0
146514 17 17 14 17 17 14 18 18 14 18 18 14 18 18 15 18 18 1466 0 0 0 0 0 0 0 0 0 6 6 6
146615 19 19 15 19 19 15 19 19 20 24 24 32 34 33 35 37 36 1467 18 18 18 34 34 34 58 58 58 78 78 78
146737 39 37 35 37 36 33 36 34 30 32 31 26 28 27 22 24 23 1468101 98 89 124 112 88 142 110 46 156 107 11
146820 20 20 17 17 17 15 15 15 13 13 13 12 12 12 12 12 12 1469163 110 8 167 114 7 175 118 6 180 123 7
146912 12 12 12 12 12 8 8 7 0 0 0 0 0 0 0 0 0 1470185 133 11 197 138 11 210 150 10 219 162 10
14700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1471226 170 11 236 178 12 236 178 12 234 174 13
14710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1472219 162 10 197 138 11 163 110 8 130 83 6
14720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1473 91 60 6 10 10 10 2 2 6 2 2 6
14730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1474 18 18 18 38 38 38 38 38 38 38 38 38
14740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1475 38 38 38 38 38 38 38 38 38 38 38 38
14750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1476 38 38 38 38 38 38 26 26 26 2 2 6
14760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1477 2 2 6 6 6 6 70 47 6 137 92 6
14771 1 1 99 98 80 184 179 149 184 179 149 68 70 65 0 0 0 1478175 118 6 200 144 11 219 162 10 230 174 11
14780 0 0 1479234 174 13 230 174 11 219 162 10 210 150 10
14790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1480192 133 9 163 110 8 124 112 88 82 82 82
14800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1481 50 50 50 30 30 30 14 14 14 6 6 6
14810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1482 0 0 0 0 0 0 0 0 0 0 0 0
14820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1483 0 0 0 0 0 0 0 0 0 0 0 0
14830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1484 0 0 0 0 0 0 0 0 0 0 0 0
148415 15 15 110 109 94 110 109 94 108 107 93 99 98 80 72 73 67 1485 0 0 0 0 0 0 0 0 0 0 0 0
148561 63 57 49 51 48 39 40 39 33 36 34 27 30 29 23 25 24 1486 0 0 0 0 0 0 0 0 0 0 0 0
148618 22 22 16 19 19 14 17 17 13 16 16 12 15 15 12 15 15 1487 6 6 6 14 14 14 22 22 22 34 34 34
148711 14 14 11 14 14 11 14 14 11 14 14 11 14 14 11 14 14 1488 42 42 42 58 58 58 74 74 74 86 86 86
148811 14 14 11 14 14 12 14 14 12 15 15 12 15 15 12 15 15 1489101 98 89 122 102 70 130 98 46 121 87 25
148912 15 15 13 16 16 13 16 16 13 16 16 13 16 16 13 16 16 1490137 92 6 152 99 6 163 110 8 180 123 7
149013 17 17 14 17 17 14 17 17 14 17 17 14 18 18 14 18 18 1491185 133 11 197 138 11 206 145 10 200 144 11
149114 18 18 15 18 18 15 19 19 15 19 19 30 32 31 38 39 37 1492180 123 7 156 107 11 130 83 6 104 69 6
149239 40 39 39 40 39 35 37 36 31 33 31 27 29 28 22 24 23 1493 50 34 6 54 54 54 110 110 110 101 98 89
149320 20 20 17 17 17 15 15 15 13 13 13 12 12 12 12 12 12 1494 86 86 86 82 82 82 78 78 78 78 78 78
149412 12 12 12 12 12 8 8 7 0 0 0 0 0 0 0 0 0 1495 78 78 78 78 78 78 78 78 78 78 78 78
14950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1496 78 78 78 82 82 82 86 86 86 94 94 94
14960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1497106 106 106 101 101 101 86 66 34 124 80 6
14970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1498156 107 11 180 123 7 192 133 9 200 144 11
14980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1499206 145 10 200 144 11 192 133 9 175 118 6
14990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1500139 102 15 109 106 95 70 70 70 42 42 42
15000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1501 22 22 22 10 10 10 0 0 0 0 0 0
15010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 1502 0 0 0 0 0 0 0 0 0 0 0 0
1502110 109 94 197 193 154 210 208 158 184 179 149 68 70 65 0 0 0 1503 0 0 0 0 0 0 0 0 0 0 0 0
15030 0 0 1504 0 0 0 0 0 0 0 0 0 0 0 0
15040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1505 0 0 0 0 0 0 0 0 0 0 0 0
15050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1506 0 0 0 0 0 0 0 0 0 0 0 0
15060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1507 0 0 0 0 0 0 6 6 6 10 10 10
15070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1508 14 14 14 22 22 22 30 30 30 38 38 38
15080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1509 50 50 50 62 62 62 74 74 74 90 90 90
150968 70 65 110 109 94 110 109 94 105 104 92 84 83 72 65 66 61 1510101 98 89 112 100 78 121 87 25 124 80 6
151051 52 50 43 45 43 35 37 36 30 32 31 25 27 26 20 23 23 1511137 92 6 152 99 6 152 99 6 152 99 6
151117 20 20 15 18 18 13 16 16 12 15 15 12 15 15 11 14 14 1512138 86 6 124 80 6 98 70 6 86 66 30
151211 14 14 11 14 14 11 13 13 11 13 13 11 13 13 11 13 13 1513101 98 89 82 82 82 58 58 58 46 46 46
151311 14 14 11 14 14 11 14 14 11 14 14 11 14 14 11 14 14 1514 38 38 38 34 34 34 34 34 34 34 34 34
151412 15 15 12 15 15 12 15 15 12 15 15 13 16 16 13 16 16 1515 34 34 34 34 34 34 34 34 34 34 34 34
151513 16 16 13 16 16 13 17 17 13 17 17 14 17 17 14 17 17 1516 34 34 34 34 34 34 38 38 38 42 42 42
151614 18 18 14 18 18 14 18 18 16 19 19 37 39 37 41 42 42 1517 54 54 54 82 82 82 94 86 76 91 60 6
151741 42 42 41 42 42 38 39 37 32 34 33 27 29 28 23 24 24 1518134 86 6 156 107 11 167 114 7 175 118 6
151821 22 21 17 17 17 15 15 15 13 13 13 12 12 12 12 12 12 1519175 118 6 167 114 7 152 99 6 121 87 25
151912 12 12 12 12 12 8 8 7 0 0 0 0 0 0 0 0 0 1520101 98 89 62 62 62 34 34 34 18 18 18
15200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1521 6 6 6 0 0 0 0 0 0 0 0 0
15210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1522 0 0 0 0 0 0 0 0 0 0 0 0
15220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1523 0 0 0 0 0 0 0 0 0 0 0 0
15230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1524 0 0 0 0 0 0 0 0 0 0 0 0
15240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1525 0 0 0 0 0 0 0 0 0 0 0 0
15250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1526 0 0 0 0 0 0 0 0 0 0 0 0
15260 0 0 0 0 0 0 0 0 0 0 0 11 11 11 137 133 100 1527 0 0 0 0 0 0 0 0 0 0 0 0
1527197 193 154 251 251 187 239 239 170 184 179 149 31 33 31 0 0 0 1528 0 0 0 6 6 6 6 6 6 10 10 10
15280 0 0 1529 18 18 18 22 22 22 30 30 30 42 42 42
15290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1530 50 50 50 66 66 66 86 86 86 101 98 89
15300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1531106 86 58 98 70 6 104 69 6 104 69 6
15310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1532104 69 6 91 60 6 82 62 34 90 90 90
15320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1533 62 62 62 38 38 38 22 22 22 14 14 14
15330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 12 12 1534 10 10 10 10 10 10 10 10 10 10 10 10
1534110 109 94 110 109 94 105 104 92 90 89 73 72 73 67 58 59 55 1535 10 10 10 10 10 10 6 6 6 10 10 10
153546 47 45 37 39 37 31 33 31 26 28 27 20 24 24 17 21 21 1536 10 10 10 10 10 10 10 10 10 14 14 14
153615 18 18 13 16 16 12 15 15 12 14 14 11 13 13 11 13 13 1537 22 22 22 42 42 42 70 70 70 89 81 66
153710 13 13 10 13 13 10 13 13 10 13 13 10 13 13 10 13 13 1538 80 54 7 104 69 6 124 80 6 137 92 6
153810 13 13 10 13 13 11 13 13 11 13 13 11 14 14 11 14 14 1539134 86 6 116 81 8 100 82 52 86 86 86
153911 14 14 11 14 14 12 14 14 12 15 15 12 15 15 12 15 15 1540 58 58 58 30 30 30 14 14 14 6 6 6
154013 16 16 13 16 16 13 16 16 13 16 16 13 17 17 13 17 17 1541 0 0 0 0 0 0 0 0 0 0 0 0
154114 17 17 14 17 17 14 18 18 23 27 26 41 42 42 41 42 42 1542 0 0 0 0 0 0 0 0 0 0 0 0
154243 45 43 41 42 42 39 40 39 33 36 34 27 29 28 23 24 24 1543 0 0 0 0 0 0 0 0 0 0 0 0
154321 22 21 17 17 17 15 15 15 13 13 13 12 12 12 12 12 12 1544 0 0 0 0 0 0 0 0 0 0 0 0
154412 12 12 12 12 12 6 7 7 0 0 0 0 0 0 0 0 0 1545 0 0 0 0 0 0 0 0 0 0 0 0
15450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1546 0 0 0 0 0 0 0 0 0 0 0 0
15460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1547 0 0 0 0 0 0 0 0 0 0 0 0
15470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1548 0 0 0 0 0 0 0 0 0 0 0 0
15480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1549 0 0 0 6 6 6 10 10 10 14 14 14
15490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1550 18 18 18 26 26 26 38 38 38 54 54 54
15500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1551 70 70 70 86 86 86 94 86 76 89 81 66
15510 0 0 0 0 0 0 0 0 27 29 28 168 163 120 210 208 158 1552 89 81 66 86 86 86 74 74 74 50 50 50
1552251 251 187 251 251 187 210 208 158 137 133 100 1 1 1 0 0 0 1553 30 30 30 14 14 14 6 6 6 0 0 0
15530 0 0 1554 0 0 0 0 0 0 0 0 0 0 0 0
15540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1555 0 0 0 0 0 0 0 0 0 0 0 0
15550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1556 0 0 0 0 0 0 0 0 0 0 0 0
15560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1557 6 6 6 18 18 18 34 34 34 58 58 58
15570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1558 82 82 82 89 81 66 89 81 66 89 81 66
15580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 60 56 1559 94 86 66 94 86 76 74 74 74 50 50 50
1559110 109 94 105 104 92 105 104 92 84 83 72 65 66 61 51 52 50 1560 26 26 26 14 14 14 6 6 6 0 0 0
156040 43 41 33 36 34 27 30 29 23 25 24 18 22 22 16 19 19 1561 0 0 0 0 0 0 0 0 0 0 0 0
156114 17 17 12 15 15 11 14 14 11 14 14 10 13 13 10 13 13 1562 0 0 0 0 0 0 0 0 0 0 0 0
156210 13 13 10 12 12 10 12 12 10 12 12 10 12 12 10 12 12 1563 0 0 0 0 0 0 0 0 0 0 0 0
156310 12 12 10 12 12 10 13 13 10 13 13 10 13 13 11 13 13 1564 0 0 0 0 0 0 0 0 0 0 0 0
156411 13 13 11 14 14 11 14 14 11 14 14 11 14 14 12 15 15 1565 0 0 0 0 0 0 0 0 0 0 0 0
156512 15 15 12 15 15 12 15 15 13 16 16 13 16 16 13 16 16 1566 0 0 0 0 0 0 0 0 0 0 0 0
156613 17 17 13 17 17 14 17 17 32 34 33 43 45 43 43 45 43 1567 0 0 0 0 0 0 0 0 0 0 0 0
156743 45 43 43 45 43 39 40 39 33 36 34 27 29 28 23 24 24 1568 0 0 0 0 0 0 0 0 0 0 0 0
156821 22 21 17 17 17 15 15 15 13 13 13 12 12 12 12 12 12 1569 0 0 0 0 0 0 0 0 0 0 0 0
156912 12 12 12 12 12 6 7 7 0 0 0 0 0 0 0 0 0 1570 6 6 6 6 6 6 14 14 14 18 18 18
15700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1571 30 30 30 38 38 38 46 46 46 54 54 54
15710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1572 50 50 50 42 42 42 30 30 30 18 18 18
15720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1573 10 10 10 0 0 0 0 0 0 0 0 0
15730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1574 0 0 0 0 0 0 0 0 0 0 0 0
15740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1575 0 0 0 0 0 0 0 0 0 0 0 0
15750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1576 0 0 0 0 0 0 0 0 0 0 0 0
15760 0 0 1 1 1 68 70 65 184 179 149 210 208 158 251 251 187 1577 0 0 0 6 6 6 14 14 14 26 26 26
1577251 251 187 214 212 158 184 179 149 37 39 37 0 0 0 0 0 0 1578 38 38 38 50 50 50 58 58 58 58 58 58
15780 0 0 1579 54 54 54 42 42 42 30 30 30 18 18 18
15790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1580 10 10 10 0 0 0 0 0 0 0 0 0
15800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1581 0 0 0 0 0 0 0 0 0 0 0 0
15810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1582 0 0 0 0 0 0 0 0 0 0 0 0
15820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1583 0 0 0 0 0 0 0 0 0 0 0 0
15830 0 0 0 0 0 0 0 0 0 0 0 6 7 7 105 104 92 1584 0 0 0 0 0 0 0 0 0 0 0 0
1584105 104 92 105 104 92 99 98 80 72 73 67 58 59 55 46 47 45 1585 0 0 0 0 0 0 0 0 0 0 0 0
158535 37 36 30 32 31 25 27 26 20 23 23 16 19 19 14 17 17 1586 0 0 0 0 0 0 0 0 0 0 0 0
158612 15 15 12 14 14 11 13 13 10 13 13 10 12 12 10 12 12 1587 0 0 0 0 0 0 0 0 0 0 0 0
158710 12 12 10 12 12 9 12 12 9 12 12 9 12 12 9 12 12 1588 0 0 0 0 0 0 0 0 0 0 0 0
158810 12 12 10 12 12 10 12 12 10 12 12 10 12 12 10 13 13 1589 0 0 0 0 0 0 0 0 0 0 0 0
158910 13 13 10 13 13 11 13 13 11 13 13 11 14 14 11 14 14 1590 0 0 0 0 0 0 0 0 0 6 6 6
159011 14 14 12 15 15 12 15 15 12 15 15 12 15 15 13 16 16 1591 6 6 6 10 10 10 14 14 14 18 18 18
159113 16 16 13 16 16 17 20 20 41 42 42 46 47 45 46 47 45 1592 18 18 18 14 14 14 10 10 10 6 6 6
159246 47 45 43 45 43 40 41 39 33 36 34 27 29 28 23 24 24 1593 0 0 0 0 0 0 0 0 0 0 0 0
159320 20 20 17 17 17 15 15 15 13 13 13 12 12 12 12 12 12 1594 0 0 0 0 0 0 0 0 0 0 0 0
159412 12 12 12 12 12 4 5 5 0 0 0 0 0 0 0 0 0 1595 0 0 0 0 0 0 0 0 0 0 0 0
15950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1596 0 0 0 0 0 0 0 0 0 0 0 0
15960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1597 0 0 0 0 0 0 0 0 0 6 6 6
15970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1598 14 14 14 18 18 18 22 22 22 22 22 22
15980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1599 18 18 18 14 14 14 10 10 10 6 6 6
15990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1600 0 0 0 0 0 0 0 0 0 0 0 0
16000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1601 0 0 0 0 0 0 0 0 0 0 0 0
160115 15 15 110 109 94 197 193 154 214 212 158 251 251 187 251 251 187 1602 0 0 0 0 0 0 0 0 0 0 0 0
1602239 239 170 184 179 149 84 83 72 0 0 0 0 0 0 0 0 0 1603 0 0 0 0 0 0 0 0 0 0 0 0
16030 0 0 1604 0 0 0 0 0 0 0 0 0 0 0 0
16040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16080 0 0 0 0 0 0 0 0 0 0 0 47 48 46 105 104 92
1609105 104 92 99 98 80 84 83 72 68 70 65 51 52 50 40 43 41
161032 34 33 27 29 28 22 24 23 17 21 21 15 18 18 13 16 16
161112 15 15 11 13 13 10 13 13 10 12 12 9 12 12 9 12 12
16129 12 12 9 12 12 9 11 11 9 11 11 9 11 11 9 11 11
16139 12 12 9 12 12 9 12 12 9 12 12 10 12 12 10 12 12
161410 12 12 10 12 12 10 13 13 10 13 13 10 13 13 11 13 13
161511 14 14 11 14 14 11 14 14 12 14 14 12 15 15 12 15 15
161612 15 15 13 16 16 28 31 30 43 45 43 47 48 46 47 48 46
161747 48 46 43 45 43 40 41 39 33 36 34 27 29 28 22 24 23
161820 20 20 17 17 17 15 15 15 13 13 13 12 12 12 12 12 12
161912 12 12 12 12 12 3 4 4 0 0 0 0 0 0 0 0 0
16200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16250 0 0 0 0 0 0 0 0 0 0 0 1 1 1 60 60 56
1626177 172 135 197 193 154 251 251 187 251 251 187 251 251 187 251 251 187
1627184 179 149 110 109 94 3 4 4 0 0 0 0 0 0 0 0 0
16280 0 0
16290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16330 0 0 0 0 0 0 0 0 1 1 1 99 98 80 105 104 92
163499 98 80 87 86 72 84 83 72 63 64 60 46 47 45 35 37 36
163530 32 31 25 27 26 18 22 22 16 19 19 14 17 17 12 15 15
163611 14 14 10 13 13 9 12 12 9 12 12 9 11 11 9 11 11
16379 11 11 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11
16389 11 11 9 11 11 9 11 11 9 11 11 9 12 12 9 12 12
16399 12 12 10 12 12 10 12 12 10 12 12 10 13 13 10 13 13
164010 13 13 11 13 13 11 14 14 11 14 14 11 14 14 12 15 15
164112 15 15 14 17 17 41 42 42 47 48 46 49 51 48 51 52 50
164247 48 46 43 45 43 40 41 39 33 36 34 27 29 28 22 24 23
164319 20 19 16 16 16 14 14 13 13 13 13 12 12 12 12 12 12
164412 12 12 12 12 12 2 2 2 0 0 0 0 0 0 0 0 0
16450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16500 0 0 0 0 0 0 0 0 23 24 24 137 133 100 184 179 149
1651210 208 158 251 251 187 251 251 187 251 251 187 251 251 187 184 179 149
1652110 109 94 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0
16530 0 0
16540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16580 0 0 0 0 0 0 0 0 30 32 31 105 104 92 99 98 80
165984 83 72 84 83 72 72 73 67 55 57 54 41 42 42 32 34 33
166027 29 28 20 24 24 17 20 20 14 17 17 13 16 16 12 14 14
166110 13 13 10 12 12 9 11 11 9 11 11 9 11 11 9 11 11
16629 11 11 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11
16639 11 11 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11
16649 11 11 9 12 12 9 12 12 10 12 12 10 12 12 10 12 12
166510 13 13 10 13 13 10 13 13 11 13 13 11 14 14 11 14 14
166611 14 14 27 29 28 55 56 53 72 73 67 51 52 50 51 52 50
166749 51 48 43 45 43 39 40 39 32 34 33 26 28 27 21 22 21
166819 20 19 16 16 16 18 19 17 13 13 13 12 12 12 12 12 12
166912 12 12 12 12 12 1 1 1 0 0 0 0 0 0 0 0 0
16700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16750 0 0 8 8 7 84 83 72 184 179 149 197 193 154 251 251 187
1676251 251 187 251 251 187 251 251 187 251 251 187 184 179 149 145 141 105
167719 20 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16780 0 0
16790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16820 0 0 14 14 13 0 0 0 0 0 0 0 0 0 0 0 0
16830 0 0 0 0 0 0 0 0 72 73 67 105 104 92 84 83 72
168472 73 67 84 83 72 68 70 65 49 51 48 39 40 39 30 32 31
168525 27 26 18 22 22 15 18 18 13 16 16 12 15 15 11 13 13
168610 12 12 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11
16879 11 11 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11
16889 11 11 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11
16899 11 11 9 11 11 9 11 11 9 12 12 9 12 12 9 12 12
169010 12 12 10 12 12 10 12 12 10 13 13 10 13 13 11 13 13
169113 16 16 41 42 42 99 98 80 158 153 112 65 66 61 51 52 50
169249 51 48 43 45 43 39 40 39 31 33 31 25 27 26 21 22 21
169321 22 21 68 70 65 55 56 53 13 13 13 12 12 12 12 12 12
169412 12 12 11 11 11 0 0 0 0 0 0 0 0 0 0 0 0
16950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3
170063 64 60 158 153 112 184 179 149 210 208 158 251 251 187 251 251 187
1701251 251 187 251 251 187 251 251 187 184 179 149 137 133 100 27 29 28
17020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17030 0 0
17040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
170721 22 21 110 109 94 5 6 5 0 0 0 0 0 0 0 0 0
17080 0 0 0 0 0 13 13 13 105 104 92 90 89 73 72 73 67
170968 70 65 84 83 72 63 64 60 46 47 45 35 37 36 27 29 28
171022 24 23 17 20 20 14 17 17 12 15 15 11 14 14 10 12 12
171110 12 12 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11
17129 11 11 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
17138 10 10 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11
17149 11 11 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11
17159 12 12 9 12 12 10 12 12 10 12 12 10 13 13 10 13 13
171630 32 31 47 48 46 177 172 135 210 208 158 137 133 100 55 56 53
171749 51 48 43 45 43 38 39 37 31 33 31 25 27 26 22 24 23
1718110 109 94 184 179 149 63 64 60 13 13 13 12 12 12 12 12 12
171912 12 12 8 9 9 0 0 0 1 1 1 0 0 0 0 0 0
17200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17240 0 0 0 0 0 0 0 0 0 0 0 21 22 21 105 104 92
1725184 179 149 210 208 158 251 251 187 251 251 187 251 251 187 251 251 187
1726251 251 187 251 251 187 184 179 149 145 141 105 23 24 24 0 0 0
17270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17280 0 0
17290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
173268 70 65 184 179 149 105 104 92 0 0 0 0 0 0 0 0 0
17330 0 0 0 0 0 51 52 50 99 98 80 84 83 72 63 64 60
173468 70 65 72 73 67 55 57 54 41 42 42 32 34 33 25 27 26
173520 23 23 16 19 19 13 16 16 12 14 14 10 13 13 10 12 12
17369 11 11 9 11 11 9 11 11 9 11 11 9 11 11 8 10 10
17378 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
17388 10 10 8 10 10 8 10 10 8 10 10 9 11 11 9 11 11
17399 11 11 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11
17409 11 11 9 11 11 9 12 12 9 12 12 10 12 12 17 20 20
174146 47 45 72 73 67 210 208 158 251 251 187 210 208 158 63 64 60
174249 51 48 43 45 43 37 39 37 30 32 31 24 26 24 105 104 92
1743210 208 158 197 193 154 47 48 46 13 13 13 12 12 12 12 12 12
174412 12 12 6 7 7 33 36 34 48 49 45 0 0 0 0 0 0
17450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17490 0 0 0 0 0 8 8 7 23 24 24 55 56 53 110 109 94
1750210 208 158 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187
1751251 251 187 184 179 149 110 109 94 20 20 20 0 0 0 0 0 0
17520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17530 0 0
17540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1757110 109 94 251 251 187 210 208 158 47 48 46 0 0 0 0 0 0
17580 0 0 1 1 1 90 89 73 90 89 73 72 73 67 55 56 53
175972 73 67 68 70 65 51 52 50 37 39 37 28 31 30 23 25 24
176017 21 21 15 18 18 12 15 15 11 14 14 10 13 13 9 12 12
17619 11 11 9 11 11 9 11 11 8 10 10 8 10 10 8 10 10
17628 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
17638 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
17648 10 10 9 11 11 9 11 11 9 11 11 9 11 11 9 11 11
17659 11 11 9 11 11 9 11 11 9 12 12 13 16 16 41 42 42
176649 51 48 110 109 94 251 251 187 251 251 187 251 251 187 105 104 92
176749 51 48 43 45 43 35 37 36 30 31 28 47 48 46 197 193 154
1768251 251 187 197 193 154 31 33 31 12 12 12 12 12 12 12 12 12
176912 12 12 51 52 50 184 179 149 72 73 67 0 0 0 0 0 0
17700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2
177411 11 11 21 22 21 30 32 31 40 41 39 60 60 56 145 141 105
1775251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 214 212 158
1776184 179 149 110 109 94 13 13 13 0 0 0 0 0 0 0 0 0
17770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17780 0 0
17790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17800 0 0 0 0 0 4 5 4 61 61 53 48 49 45 3 4 3
17810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1782156 151 111 251 251 187 251 251 187 184 179 149 11 11 11 0 0 0
17830 0 0 26 28 27 99 98 80 84 83 72 60 60 56 43 45 43
178472 73 67 65 66 61 49 51 48 35 37 36 27 29 28 20 24 24
178517 20 20 14 17 17 12 15 15 11 13 13 10 12 12 9 11 11
17869 11 11 9 11 11 8 10 10 8 10 10 8 10 10 8 10 10
17878 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
17888 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
17898 10 10 8 10 10 8 10 10 8 10 10 9 11 11 9 11 11
17909 11 11 9 11 11 9 11 11 11 13 13 37 39 37 47 48 46
179151 52 50 184 179 149 251 251 187 251 251 187 251 251 187 145 141 105
179247 48 46 41 42 42 35 37 36 27 29 28 137 133 100 251 251 187
1793251 251 187 197 193 154 19 20 19 12 12 12 12 12 12 12 12 12
179427 29 28 184 179 149 214 212 158 63 64 60 0 0 0 0 0 0
17950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17980 0 0 0 0 0 1 1 1 6 7 7 16 16 16 24 26 24
179930 32 31 38 39 37 47 48 46 55 57 54 68 70 65 110 109 94
1800197 193 154 251 251 187 251 251 187 251 251 187 210 208 158 184 179 149
1801105 104 92 8 8 7 0 0 0 0 0 0 0 0 0 0 0 0
18020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18030 0 0
18040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18050 0 0 0 0 0 0 0 0 65 66 61 184 179 149 156 151 111
180630 32 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1807168 163 120 251 251 187 251 251 187 251 251 187 110 109 94 0 0 0
18080 0 0 60 60 56 84 83 72 68 70 65 51 52 50 38 39 37
180984 83 72 63 64 60 43 45 43 33 36 34 25 27 26 20 23 22
181015 18 18 13 16 16 12 14 14 10 13 13 9 12 12 9 11 11
18119 11 11 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
18128 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
18138 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
18148 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
18159 11 11 9 11 11 10 12 12 33 36 34 46 47 45 51 52 50
181672 73 67 210 208 158 251 251 187 251 251 187 251 251 187 177 172 135
181747 48 46 41 42 42 35 37 36 37 39 37 184 179 149 251 251 187
1818251 251 187 197 193 154 13 13 13 12 12 12 12 12 12 12 12 12
1819110 109 94 251 251 187 251 251 187 37 39 37 0 0 0 0 0 0
18200 0 0 21 22 20 2 2 1 0 0 0 0 0 0 0 0 0
18210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18234 5 5 12 12 12 21 22 21 25 27 26 30 32 31 38 39 37
182446 47 45 55 56 53 60 60 56 65 66 61 68 70 65 105 104 92
1825110 109 94 197 193 154 210 208 158 197 193 154 184 179 149 84 83 72
18262 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18280 0 0
18290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18300 0 0 0 0 0 0 0 0 13 13 13 184 179 149 251 251 187
1831197 193 154 43 44 41 0 0 0 0 0 0 0 0 0 0 0 0
1832145 141 105 251 251 187 251 251 187 251 251 187 214 212 158 43 45 43
18332 2 2 84 83 72 72 73 67 58 59 55 41 42 42 38 39 37
183472 73 67 58 59 55 41 42 42 31 33 31 25 27 26 18 22 22
183514 17 17 12 15 15 12 14 14 10 12 12 9 12 12 9 11 11
18369 11 11 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
18378 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
18388 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
18398 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
18408 10 10 9 12 12 31 33 31 43 45 43 49 51 48 55 56 53
1841110 109 94 251 251 187 251 251 187 251 251 187 251 251 187 168 163 120
184247 48 46 41 42 42 33 36 34 63 64 60 197 193 154 251 251 187
1843251 251 187 184 179 149 13 13 13 12 12 12 12 12 12 16 16 16
1844197 193 154 251 251 187 239 239 170 20 20 20 0 0 0 2 2 1
1845108 107 93 110 109 94 0 0 0 0 0 0 0 0 0 0 0 0
18460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18470 0 0 0 0 0 1 1 1 4 5 5 11 11 11 18 19 18
184822 24 23 26 28 27 32 34 33 39 40 39 46 47 45 51 52 50
184955 57 54 60 60 56 63 64 60 63 64 60 63 64 60 58 59 55
185063 64 60 99 98 80 145 141 105 137 133 100 43 45 43 0 0 0
18510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18530 0 0
18540 0 0 0 0 0 0 0 0 3 4 3 0 0 0 0 0 0
18550 0 0 0 0 0 0 0 0 0 0 0 110 109 94 251 251 187
1856251 251 187 184 179 149 25 27 26 0 0 0 0 0 0 0 0 0
185799 98 80 251 251 187 251 251 187 251 251 187 251 251 187 156 151 111
185825 27 26 84 83 72 65 66 61 47 48 46 32 34 33 39 40 39
185972 73 67 55 57 54 40 41 39 30 32 31 23 25 24 18 22 22
186014 17 17 12 15 15 11 13 13 10 12 12 9 11 11 9 11 11
18619 11 11 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
18628 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
18638 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
18648 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
18659 11 11 28 31 30 41 42 42 47 48 46 55 56 53 58 59 55
1866137 133 100 251 251 187 251 251 187 251 251 187 210 208 158 137 133 100
186747 48 46 40 41 39 32 34 33 75 75 61 184 179 149 239 239 170
1868251 251 187 177 172 135 13 13 13 12 12 12 12 12 12 43 44 41
1869197 193 154 251 251 187 210 208 158 10 10 9 0 0 0 84 83 72
1870251 251 187 84 83 72 0 0 0 0 0 0 0 0 0 0 0 0
18710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
18726 7 7 11 11 11 17 17 17 20 20 20 23 24 24 27 29 28
187332 34 33 38 39 37 43 45 43 47 48 46 51 52 50 55 56 53
187458 59 55 58 59 55 55 57 54 55 56 53 47 48 46 41 42 42
187535 37 36 31 33 31 47 48 46 14 14 13 0 0 0 0 0 0
18760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18780 0 0
18790 0 0 0 0 0 0 0 0 66 65 55 99 98 80 20 20 20
18800 0 0 0 0 0 0 0 0 0 0 0 43 45 43 214 212 158
1881251 251 187 251 251 187 145 141 105 3 3 3 0 0 0 0 0 0
188248 49 45 184 179 149 239 239 170 251 251 187 239 239 170 177 172 135
188384 83 72 72 73 67 55 56 53 39 40 39 26 28 27 39 40 39
188468 70 65 51 52 50 39 40 39 28 31 30 22 24 23 17 20 20
188514 17 17 12 14 14 10 13 13 9 11 11 9 11 11 9 11 11
18868 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
18878 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
18888 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
18898 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
189027 29 28 40 41 39 46 47 45 51 52 50 55 57 54 63 64 60
1891131 127 93 197 193 154 210 208 158 197 193 154 168 163 120 96 95 69
189247 48 46 40 41 39 32 34 33 71 71 57 145 141 105 184 179 149
1893184 179 149 131 127 93 13 13 13 12 12 12 12 12 12 48 49 45
1894168 163 120 184 179 149 156 151 111 6 7 7 14 14 13 177 172 135
1895239 239 170 40 41 39 0 0 0 0 0 0 0 0 0 0 0 0
18960 0 0 0 0 0 3 3 3 6 7 7 11 11 11 16 16 16
189718 19 18 21 22 21 23 24 24 27 29 28 32 34 33 37 39 37
189841 42 42 43 45 43 47 48 46 51 52 50 51 52 50 51 52 50
189951 52 50 49 51 48 46 47 45 40 41 39 32 34 33 25 27 26
190020 20 20 14 14 13 2 2 2 0 0 0 0 0 0 0 0 0
19010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19030 0 0
19040 0 0 0 0 0 0 0 0 33 36 34 197 193 154 184 179 149
190541 42 42 0 0 0 0 0 0 0 0 0 3 3 3 184 179 149
1906251 251 187 251 251 187 184 179 149 48 49 45 0 0 0 0 0 0
190716 17 12 121 119 87 177 172 135 194 189 146 188 184 146 145 141 105
190882 81 62 63 64 60 46 47 45 31 33 31 21 22 21 35 37 36
190968 70 65 51 52 50 37 39 37 27 30 29 22 24 23 17 20 20
191013 16 16 12 14 14 10 13 13 9 11 11 8 10 10 8 10 10
19118 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
19128 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
19138 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
19148 10 10 8 10 10 8 10 10 8 10 10 8 10 10 25 27 26
191538 39 37 43 45 43 51 52 50 55 56 53 60 60 56 63 64 60
191692 91 72 158 153 112 176 171 126 171 165 117 149 143 98 82 81 62
191744 46 43 38 39 37 30 32 31 71 71 57 131 127 93 160 154 106
1918149 143 98 82 81 62 13 13 13 12 12 12 12 12 12 46 47 43
1919121 119 87 134 131 96 96 95 69 7 7 6 38 39 37 131 127 93
1920145 141 105 12 13 12 0 0 0 1 1 1 3 3 3 6 7 7
192110 10 9 12 12 12 14 14 13 16 16 16 18 19 18 21 22 21
192222 24 23 26 28 27 30 31 28 33 36 34 37 39 37 40 41 39
192341 42 42 43 45 43 46 47 45 46 47 45 46 47 45 43 45 43
192441 42 42 37 39 37 31 33 31 26 28 27 21 22 21 16 16 16
19256 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19280 0 0
19290 0 0 0 0 0 0 0 0 0 0 0 177 172 135 251 251 187
1930197 193 154 27 29 28 0 0 0 0 0 0 0 0 0 110 109 94
1931239 239 170 239 239 170 184 179 149 87 86 72 2 2 1 0 0 0
19321 1 1 82 81 62 142 137 94 165 161 109 165 161 109 131 127 93
193375 75 61 55 56 53 37 39 37 25 27 26 19 20 19 32 34 33
193465 66 61 49 51 48 35 37 36 27 29 28 20 23 23 16 19 19
193513 16 16 13 13 13 10 12 12 9 11 11 8 10 10 8 10 10
19368 9 9 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
19378 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
19388 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
19398 10 10 8 10 10 8 10 10 8 10 10 22 24 23 35 37 36
194041 42 42 47 48 46 55 56 53 58 59 55 63 64 60 65 66 61
194171 71 57 131 127 93 160 154 106 160 154 106 142 137 94 82 81 62
194246 47 43 40 41 39 33 36 34 66 65 55 125 122 87 149 143 98
1943142 137 94 82 81 62 17 17 17 18 19 17 14 14 13 46 47 43
1944118 116 76 125 122 87 96 95 69 16 17 12 71 71 57 103 101 77
194582 81 62 11 11 11 11 11 11 13 13 13 14 14 13 14 14 13
194615 15 15 16 16 16 17 17 17 19 20 19 21 22 21 23 24 24
194726 28 27 27 29 28 31 33 31 33 36 34 35 37 36 38 39 37
194839 40 39 39 40 39 38 39 37 37 39 37 35 37 36 31 33 31
194927 29 28 24 26 24 21 22 21 17 17 17 12 12 12 2 2 2
19500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19530 0 0
19540 0 0 0 0 0 0 0 0 0 0 0 68 70 65 251 251 187
1955251 251 187 156 151 111 2 2 1 0 0 0 0 0 0 43 44 41
1956177 172 135 184 179 149 158 153 112 103 101 77 19 20 18 0 0 0
19570 0 0 46 47 43 131 127 93 160 154 106 160 154 106 131 127 93
195871 71 57 43 45 43 30 32 31 21 22 21 16 16 16 26 28 27
195963 64 60 47 48 46 35 37 36 26 28 27 20 23 23 16 19 19
196013 16 16 13 13 13 10 12 12 9 11 11 8 10 10 8 10 10
19617 9 9 7 9 9 8 9 9 8 10 10 8 10 10 8 10 10
19628 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
19638 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
19648 10 10 8 10 10 8 10 10 20 20 20 33 36 34 40 41 39
196546 47 45 51 52 50 55 57 54 60 60 56 63 64 60 65 66 61
196666 65 55 118 116 76 151 147 98 165 161 109 151 147 98 121 119 87
196796 95 69 96 95 69 96 95 69 103 101 77 142 137 94 151 147 98
1968142 137 94 103 101 77 82 81 62 82 81 62 82 81 62 96 95 69
1969131 127 93 142 137 94 103 101 77 46 47 43 96 95 69 118 116 76
197071 71 57 14 14 13 14 14 13 15 15 15 15 15 15 16 16 16
197116 16 16 17 17 17 18 19 18 20 20 20 21 22 21 23 24 24
197225 27 26 27 29 28 30 31 28 30 32 31 31 33 31 31 33 31
197331 33 31 31 33 31 30 31 28 27 29 28 25 27 26 22 24 23
197420 20 20 16 16 16 13 13 13 6 7 7 0 0 0 0 0 0
19750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19780 0 0
197958 59 55 68 70 65 8 8 7 0 0 0 10 10 9 210 208 158
1980251 251 187 184 179 149 38 39 37 0 0 0 0 0 0 8 8 7
1981103 101 77 149 143 98 149 143 98 118 116 76 40 41 39 25 27 25
198253 55 47 82 81 62 144 139 99 165 161 109 165 161 109 142 137 94
198371 71 57 35 37 36 24 26 24 18 19 18 15 15 15 22 24 23
198463 64 60 46 47 45 33 36 34 26 28 27 20 23 22 17 18 17
198512 15 15 11 13 13 10 12 12 9 11 11 8 10 10 8 10 10
19867 9 9 7 9 9 7 9 9 7 9 9 8 9 9 8 10 10
19878 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
19888 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
19898 10 10 8 10 10 16 16 16 30 31 28 35 37 36 41 42 42
199047 48 46 55 56 53 58 59 55 63 64 60 65 66 61 65 66 61
199161 61 53 103 101 77 151 147 98 171 165 117 171 165 117 168 163 120
1992158 153 112 158 153 112 155 149 109 151 147 98 151 147 98 160 154 106
1993151 147 98 149 143 98 142 137 94 149 143 98 149 143 98 149 143 98
1994155 149 109 151 147 98 131 127 93 103 101 77 125 122 87 118 116 76
199571 71 57 16 16 16 16 16 16 16 16 16 17 17 17 17 17 17
199617 17 17 17 17 17 18 19 18 19 20 19 20 20 20 21 22 21
199723 24 24 24 26 24 25 27 26 26 28 27 26 28 27 26 28 27
199825 27 26 24 26 24 22 24 23 21 22 21 19 20 19 16 16 16
199914 14 13 8 8 7 1 1 1 0 0 0 0 0 0 0 0 0
20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20030 0 0
200420 20 20 184 179 149 168 163 120 21 22 21 0 0 0 105 104 92
2005177 172 135 145 141 105 71 71 57 0 0 0 0 0 0 0 0 0
200666 65 55 131 127 93 151 147 98 142 137 94 118 116 76 121 119 87
2007145 141 105 158 153 112 176 171 126 178 174 128 176 171 126 149 145 103
200896 95 69 31 33 31 21 22 21 16 16 16 14 14 13 18 19 18
200960 60 56 46 47 45 33 36 34 25 27 26 21 22 21 15 18 18
201012 15 15 11 13 13 9 11 11 8 10 10 8 10 10 8 9 9
20117 9 9 7 9 9 7 9 9 7 9 9 7 9 9 8 9 9
20128 9 9 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
20138 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
20148 10 10 10 12 12 26 28 27 31 33 31 38 39 37 43 45 43
201551 52 50 55 56 53 60 60 56 63 64 60 65 66 61 68 70 65
201663 64 60 96 95 69 158 153 112 178 174 128 188 184 146 194 189 146
2017194 189 146 188 184 146 184 181 136 176 171 126 171 165 117 173 167 111
2018173 167 111 165 161 109 171 165 117 174 170 121 176 171 126 178 174 128
2019178 174 128 174 170 121 160 154 106 149 143 98 149 143 98 125 122 87
202071 71 57 16 16 16 16 16 16 17 17 17 17 17 17 17 17 17
202117 17 17 17 17 17 17 17 17 18 19 18 19 20 19 20 20 20
202221 22 21 21 22 21 21 22 21 22 24 23 21 22 21 21 22 21
202321 22 21 19 20 19 18 19 18 16 16 16 14 14 13 11 11 11
20243 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20280 0 0
20290 0 0 105 104 92 197 193 154 110 109 94 9 9 8 36 38 35
2030121 119 87 131 127 93 96 95 69 18 19 17 30 31 28 66 65 55
203196 95 69 142 137 94 160 154 106 160 154 106 160 154 106 168 163 120
2032184 181 136 194 191 148 197 193 154 197 193 154 194 189 146 168 163 120
2033125 122 87 46 47 43 18 19 18 15 15 15 13 13 13 14 14 13
203455 57 54 43 45 43 32 34 33 25 27 26 18 22 22 17 17 17
203512 14 14 10 12 12 9 11 11 8 10 10 8 9 9 7 9 9
20366 8 8 7 9 9 7 9 9 7 9 9 7 9 9 7 9 9
20377 9 9 8 9 9 8 9 9 8 10 10 8 10 10 8 10 10
20388 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
20398 10 10 32 34 33 41 42 42 35 37 36 39 40 39 37 39 37
204035 37 36 55 57 54 60 60 56 63 64 60 65 66 61 65 66 61
204161 63 57 115 113 82 168 163 120 194 191 148 204 201 155 210 208 158
2042210 208 158 210 208 158 197 193 154 194 189 146 186 182 128 176 171 126
2043174 170 121 176 171 126 186 182 128 190 186 136 194 191 148 197 193 154
2044197 193 154 188 184 146 181 176 137 174 170 121 165 161 109 142 137 94
204582 81 62 24 26 24 16 16 16 16 16 16 16 16 16 16 16 16
204617 17 17 17 17 17 17 17 17 17 17 17 18 19 18 19 20 19
204719 20 19 19 20 19 20 20 20 19 20 19 19 20 19 18 19 18
204817 17 17 15 15 15 13 13 13 12 12 12 6 7 7 0 0 0
20490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20530 0 0
20540 0 0 17 18 17 137 133 100 115 113 82 53 55 47 19 20 18
2055103 101 77 144 139 99 137 133 100 115 113 82 137 133 100 156 151 111
2056158 153 112 164 159 111 171 165 117 174 170 121 178 174 128 194 189 146
2057204 201 155 214 212 158 214 212 158 214 212 158 210 208 158 188 184 146
2058158 153 112 87 86 72 17 17 17 13 13 13 13 13 13 15 15 15
205955 56 53 43 45 43 32 34 33 24 26 24 17 20 20 16 16 16
206012 14 14 10 12 12 8 10 10 8 10 10 7 9 9 6 8 8
20616 8 8 6 8 8 6 8 8 7 9 9 7 9 9 7 9 9
20627 9 9 7 9 9 7 9 9 7 9 9 8 9 9 8 10 10
20638 10 10 8 10 10 8 10 10 8 10 10 8 10 10 8 10 10
20648 10 10 110 109 94 84 83 72 49 51 48 26 28 27 8 10 10
20658 9 9 51 52 50 58 59 55 63 64 60 63 64 60 63 64 60
206666 65 55 134 131 96 181 176 137 210 208 158 214 212 158 239 239 170
2067239 239 170 224 223 159 210 208 158 204 201 155 194 189 146 186 182 128
2068186 182 128 184 181 136 194 189 146 204 201 155 210 208 158 210 208 158
2069210 208 158 210 208 158 197 193 154 190 186 136 176 171 126 155 149 109
2070118 116 76 36 38 35 15 15 15 16 16 16 16 16 16 16 16 16
207116 16 16 16 16 16 16 16 16 16 16 16 16 16 16 17 17 17
207217 17 17 17 17 17 17 17 17 16 16 16 16 16 16 15 15 15
207313 13 13 12 12 12 8 8 7 2 2 2 0 0 0 0 0 0
20740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20780 0 0
20790 0 0 0 0 0 53 55 47 103 101 77 96 95 69 53 55 47
2080103 101 77 158 153 112 177 172 135 184 179 149 188 184 146 197 193 154
2081194 189 146 190 186 136 184 181 136 184 181 136 194 189 146 210 208 158
2082214 212 158 239 239 170 251 251 187 251 251 187 224 223 159 204 201 155
2083177 172 135 121 119 87 30 31 28 13 13 13 12 12 12 39 40 39
208460 60 56 43 45 43 32 34 33 23 25 24 18 19 18 13 16 16
208513 13 13 9 11 11 8 10 10 8 9 9 6 8 8 6 8 8
20866 8 8 6 8 8 6 8 8 6 8 8 6 8 8 7 9 9
20877 9 9 7 9 9 7 9 9 7 9 9 7 9 9 7 9 9
20887 9 9 8 9 9 8 9 9 8 10 10 8 10 10 8 10 10
208914 17 17 197 193 154 158 153 112 55 57 54 7 9 9 7 9 9
20908 10 10 51 52 50 58 59 55 60 60 56 63 64 60 63 64 60
209171 71 57 155 149 109 194 191 148 214 212 158 251 251 187 251 251 187
2092251 251 187 251 251 187 239 239 170 210 208 158 197 193 154 190 186 136
2093190 186 136 194 189 146 204 201 155 210 208 158 224 223 159 239 239 170
2094239 239 170 224 223 159 210 208 158 204 201 155 190 186 136 164 159 111
2095125 122 87 40 41 39 15 15 15 15 15 15 15 15 15 15 15 15
209616 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
209716 16 16 16 16 16 15 15 15 14 14 13 13 13 13 12 12 12
20988 9 9 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0
20990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21030 0 0
21040 0 0 0 0 0 21 22 20 96 95 69 125 122 87 121 119 87
2105144 139 99 177 172 135 197 193 154 210 208 158 214 212 158 214 212 158
2106210 208 158 204 201 155 194 191 148 194 189 146 204 201 155 214 212 158
2107239 239 170 251 251 187 251 251 187 251 251 187 251 251 187 214 212 158
2108188 184 146 145 141 105 53 55 47 12 12 12 15 15 15 63 64 60
210963 64 60 41 42 42 31 33 31 23 24 24 17 18 17 12 15 15
211011 13 13 9 11 11 8 9 9 7 9 9 6 8 8 6 8 8
21116 7 7 6 7 7 6 8 8 6 8 8 6 8 8 6 8 8
21126 8 8 7 9 9 7 9 9 7 9 9 7 9 9 7 9 9
21137 9 9 7 9 9 7 9 9 7 9 9 7 9 9 8 8 7
211443 45 43 251 251 187 156 151 111 8 10 10 7 9 9 7 9 9
211521 22 21 51 52 50 55 56 53 55 57 54 58 59 55 58 59 55
211675 75 61 158 153 112 197 193 154 224 223 159 251 251 187 251 251 187
2117251 251 187 251 251 187 251 251 187 214 212 158 204 201 155 194 189 146
2118190 186 136 197 193 154 210 208 158 224 223 159 251 251 187 251 251 187
2119251 251 187 251 251 187 239 239 170 210 208 158 197 193 154 176 171 126
2120125 122 87 36 38 35 14 14 13 14 14 13 15 15 15 15 15 15
212115 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15
212215 15 15 14 14 13 13 13 13 12 12 12 10 10 9 3 4 4
21230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21280 0 0
21290 0 0 0 0 0 7 7 5 71 71 57 131 127 93 158 153 112
2130177 172 135 197 193 154 214 212 158 239 239 170 251 251 187 251 251 187
2131238 237 168 210 208 158 204 201 155 197 193 154 204 201 155 214 212 158
2132251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 214 212 158
2133197 193 154 156 151 111 66 65 55 12 12 12 37 39 37 58 59 55
213458 59 55 41 42 42 31 33 31 22 24 23 17 17 17 12 14 14
213510 12 12 8 10 10 6 8 8 6 8 8 6 7 7 6 7 7
21366 7 7 5 7 7 6 7 7 6 7 7 6 8 8 6 8 8
21376 8 8 6 8 8 6 8 8 7 9 9 7 9 9 7 9 9
21387 9 9 6 8 8 6 8 8 6 8 8 6 8 8 6 8 8
213961 63 57 197 193 154 16 19 19 6 8 8 6 8 8 8 9 9
214041 42 42 47 48 46 51 52 50 51 52 50 55 56 53 55 56 53
214171 71 57 158 153 112 197 193 154 224 223 159 251 251 187 251 251 187
2142251 251 187 251 251 187 239 239 170 214 212 158 204 201 155 194 189 146
2143190 186 136 197 193 154 210 208 158 239 239 170 251 251 187 251 251 187
2144251 251 187 251 251 187 251 251 187 224 223 159 204 201 155 177 172 135
2145121 119 87 30 31 28 13 13 13 14 14 13 14 14 13 14 14 13
214614 14 13 14 14 13 15 15 15 15 15 15 14 14 13 13 13 13
214712 12 12 12 12 12 10 10 9 4 5 5 0 0 0 0 0 0
21480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21530 0 0
21540 0 0 0 0 0 0 0 0 48 49 45 131 127 93 174 170 121
2155194 189 146 210 208 158 239 239 170 251 251 187 251 251 187 251 251 187
2156251 251 187 214 212 158 204 201 155 197 193 154 204 201 155 210 208 158
2157239 239 170 251 251 187 251 251 187 251 251 187 239 239 170 214 212 158
2158194 191 148 156 151 111 71 71 57 19 20 19 51 52 50 51 52 50
215951 52 50 41 42 42 30 32 31 21 22 21 17 17 17 13 13 13
21609 11 11 8 9 9 6 8 8 6 7 7 6 7 7 5 7 7
21615 6 5 5 6 5 5 7 7 5 7 7 6 7 7 6 7 7
21626 8 8 6 8 8 6 8 8 6 7 7 6 7 7 6 7 7
21636 7 7 6 8 8 6 8 8 6 8 8 6 8 8 6 8 8
216455 56 53 43 45 43 6 8 8 6 8 8 6 8 8 47 48 46
216560 60 56 47 48 46 46 47 45 47 48 46 38 39 37 10 12 12
216666 65 55 145 141 105 197 193 154 214 212 158 251 251 187 251 251 187
2167251 251 187 251 251 187 224 223 159 210 208 158 194 191 148 184 181 136
2168184 181 136 194 189 146 204 201 155 224 223 159 251 251 187 251 251 187
2169251 251 187 251 251 187 251 251 187 239 239 170 210 208 158 181 176 137
2170115 113 82 21 22 20 13 13 13 13 13 13 13 13 13 13 13 13
217114 14 13 13 13 13 13 13 13 13 13 13 12 12 12 11 11 11
217210 10 9 6 7 7 1 1 1 0 0 0 0 0 0 0 0 0
21730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21780 0 0
21790 0 0 0 0 0 2 2 1 66 65 55 144 139 99 178 174 128
2180204 201 155 214 212 158 251 251 187 251 251 187 251 251 187 251 251 187
2181251 251 187 214 212 158 204 201 155 194 191 148 197 193 154 204 201 155
2182214 212 158 239 239 170 239 239 170 239 239 170 214 212 158 210 208 158
2183184 181 136 149 145 103 66 65 55 41 42 42 47 48 46 46 47 45
218443 45 43 39 40 39 28 31 30 21 22 21 16 16 16 10 12 12
21858 10 10 6 8 8 6 7 7 6 7 7 5 6 5 5 6 5
21865 6 5 5 6 5 5 6 5 5 6 5 5 7 7 5 7 7
21876 7 7 6 7 7 6 7 7 5 7 7 5 7 7 5 7 7
21885 7 7 6 7 7 6 7 7 6 7 7 6 7 7 6 8 8
21896 8 8 6 8 8 6 7 7 6 7 7 46 47 45 156 151 111
2190105 104 92 58 59 55 43 45 43 32 34 33 6 8 8 6 8 8
219149 51 48 125 122 87 181 176 137 204 201 155 214 212 158 239 239 170
2192239 239 170 214 212 158 210 208 158 197 193 154 181 176 137 176 171 126
2193176 171 126 184 181 136 197 193 154 210 208 158 239 239 170 251 251 187
2194251 251 187 251 251 187 251 251 187 251 251 187 210 208 158 177 172 135
219599 98 80 13 13 13 12 12 12 12 12 12 13 13 13 12 12 12
219612 12 12 12 12 12 11 11 11 11 11 11 8 9 9 4 5 5
21971 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22030 0 0
22040 0 0 0 0 0 1 1 0 61 61 53 142 137 94 181 176 137
2205204 201 155 224 223 159 251 251 187 251 251 187 251 251 187 251 251 187
2206251 251 187 214 212 158 197 193 154 190 186 136 184 181 136 188 184 146
2207197 193 154 204 201 155 210 208 158 210 208 158 204 201 155 194 189 146
2208176 171 126 134 131 96 66 65 55 43 45 43 41 42 42 39 40 39
220935 37 36 33 36 34 27 29 28 20 20 20 15 15 15 9 11 11
22108 9 9 6 7 7 5 6 5 5 6 5 4 5 5 4 5 5
22114 5 5 4 5 5 4 5 5 4 5 5 5 6 5 4 5 5
22124 5 5 5 6 5 4 5 5 5 6 5 5 6 5 5 6 5
22135 7 7 5 7 7 5 7 7 5 7 7 5 7 7 5 7 7
22146 7 7 6 7 7 6 7 7 28 31 30 184 179 149 184 179 149
2215145 141 105 84 83 72 27 29 28 5 7 7 5 6 5 16 16 16
221643 44 41 96 95 69 158 153 112 188 184 146 204 201 155 210 208 158
2217204 201 155 197 193 154 184 179 149 177 172 135 168 163 120 164 159 111
2218164 159 111 174 170 121 184 181 136 197 193 154 214 212 158 251 251 187
2219251 251 187 251 251 187 251 251 187 251 251 187 210 208 158 177 172 135
222071 71 57 11 11 11 12 12 12 11 11 11 11 11 11 11 11 11
222110 10 9 10 10 9 8 8 7 3 4 4 0 0 0 0 0 0
22220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22280 0 0
22290 0 0 0 0 0 0 0 0 31 33 31 121 119 87 176 171 126
2230197 193 154 214 212 158 251 251 187 251 251 187 251 251 187 251 251 187
2231239 239 170 210 208 158 194 189 146 178 174 128 174 170 121 176 171 126
2232177 172 135 181 176 137 184 179 149 184 179 149 181 176 137 178 174 128
2233158 153 112 121 119 87 53 55 47 37 39 37 33 36 34 30 32 31
223427 29 28 25 27 26 24 26 24 19 20 19 13 13 13 8 10 10
22356 8 8 6 7 7 5 6 5 4 5 5 4 5 5 4 5 5
22364 5 5 4 5 5 4 5 5 3 4 4 3 4 4 4 5 5
22374 5 5 4 5 5 4 5 5 4 5 5 4 5 5 4 5 5
22385 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5
22395 6 5 5 6 5 12 14 14 145 141 105 184 179 149 177 172 135
224090 89 73 21 22 21 5 6 5 5 6 5 4 5 5 37 39 37
224138 39 37 61 61 53 134 131 96 168 163 120 184 181 136 188 184 146
2242184 179 149 177 172 135 168 163 120 164 159 111 155 149 109 151 147 98
2243151 147 98 164 159 111 176 171 126 184 179 149 210 208 158 239 239 170
2244251 251 187 251 251 187 251 251 187 239 239 170 210 208 158 158 153 112
224546 47 43 10 10 9 10 10 9 10 10 9 8 9 9 8 9 9
22466 7 7 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0
22470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22530 0 0
22540 0 0 0 0 0 0 0 0 13 12 7 82 81 62 158 153 112
2255188 184 146 210 208 158 239 239 170 251 251 187 251 251 187 251 251 187
2256224 223 159 204 201 155 184 181 136 171 165 117 164 159 111 160 154 106
2257158 153 112 164 159 111 168 163 120 168 163 120 168 163 120 164 159 111
2258142 137 94 96 95 69 43 44 41 27 29 28 26 28 27 23 24 24
225921 22 21 18 19 18 17 17 17 18 19 18 13 13 13 8 8 7
22606 7 7 5 6 5 4 5 5 3 4 4 3 4 4 3 4 4
22613 4 4 3 4 4 3 3 3 3 3 3 3 4 4 3 4 4
22623 4 4 3 4 4 4 5 5 4 5 5 4 5 5 4 5 5
22634 5 5 4 5 5 4 5 5 4 5 5 4 5 5 4 5 5
22644 5 5 4 5 5 4 5 5 4 5 5 4 5 5 4 5 5
22654 5 5 4 5 5 4 5 5 4 5 5 31 33 31 65 66 61
226637 39 37 38 39 37 96 95 69 144 139 99 168 163 120 174 170 121
2267168 163 120 164 159 111 155 149 109 149 145 103 149 143 98 142 137 94
2268149 143 98 151 147 98 164 159 111 177 172 135 197 193 154 210 208 158
2269251 251 187 251 251 187 251 251 187 239 239 170 197 193 154 137 133 100
227024 26 24 8 9 9 8 9 9 8 8 7 6 7 7 2 2 2
22710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22780 0 0
22790 0 0 0 0 0 0 0 0 0 0 0 46 47 43 125 122 87
2280176 171 126 197 193 154 210 208 158 239 239 170 251 251 187 239 239 170
2281214 212 158 197 193 154 181 176 137 164 159 111 151 147 98 149 143 98
2282149 143 98 149 143 98 149 145 103 155 149 109 160 154 106 149 143 98
2283118 116 76 82 81 62 30 31 28 21 22 21 19 20 19 17 17 17
228414 14 13 12 12 12 10 10 9 12 12 12 10 12 12 6 8 8
22854 5 5 3 4 4 3 4 4 3 4 4 3 3 3 3 3 3
22863 3 3 3 3 3 3 3 3 3 3 3 2 3 3 2 3 3
22873 4 4 3 4 4 3 4 4 3 4 4 3 4 4 4 5 5
22884 5 5 3 4 4 3 4 4 3 4 4 3 4 4 3 4 4
22894 5 5 4 5 5 4 5 5 4 5 5 4 5 5 4 5 5
22904 5 5 3 4 4 3 4 4 23 24 24 110 109 94 72 73 67
229139 40 39 22 24 23 46 47 43 103 101 77 142 137 94 155 149 109
2292160 154 106 155 149 109 149 143 98 142 137 94 142 137 94 142 137 94
2293142 137 94 149 143 98 155 149 109 176 171 126 184 179 149 210 208 158
2294239 239 170 251 251 187 251 251 187 214 212 158 184 179 149 105 104 92
229510 10 9 6 7 7 3 4 4 1 1 1 0 0 0 0 0 0
22960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23030 0 0
23040 0 0 0 0 0 0 0 0 0 0 0 12 12 9 82 81 62
2305149 145 103 181 176 137 197 193 154 210 208 158 214 212 158 214 212 158
2306210 208 158 197 193 154 177 172 135 158 153 112 149 143 98 142 137 94
2307142 137 94 142 137 94 149 143 98 151 147 98 151 147 98 131 127 93
2308103 101 77 71 71 57 22 24 23 15 15 15 13 13 13 11 11 11
23098 9 9 6 7 7 6 7 7 4 5 5 8 9 9 6 7 7
23104 5 5 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2
23112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3
23122 3 3 2 3 3 2 3 3 3 4 4 3 4 4 3 4 4
23133 4 4 3 4 4 3 3 3 3 4 4 3 4 4 3 4 4
23143 4 4 3 4 4 3 4 4 3 4 4 3 4 4 3 4 4
23153 4 4 3 4 4 21 22 21 145 141 105 145 141 105 72 73 67
231617 18 17 3 4 4 21 22 20 66 65 55 118 116 76 142 137 94
2317149 143 98 151 147 98 149 143 98 142 137 94 142 137 94 142 137 94
2318142 137 94 149 143 98 155 149 109 168 163 120 184 179 149 210 208 158
2319239 239 170 251 251 187 251 251 187 210 208 158 177 172 135 71 71 57
23203 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23280 0 0
23290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36 38 35
2330115 113 82 158 153 112 181 176 137 197 193 154 204 201 155 210 208 158
2331204 201 155 188 184 146 177 172 135 164 159 111 149 145 103 142 137 94
2332142 137 94 142 137 94 149 143 98 151 147 98 149 143 98 125 122 87
233396 95 69 61 61 53 16 17 12 8 9 9 8 8 7 6 7 7
23344 5 5 3 4 4 3 3 3 3 3 3 3 3 3 5 6 5
23353 4 4 2 3 3 2 2 2 2 2 2 2 2 2 2 2 2
23362 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2
23372 2 2 2 2 2 2 3 3 2 3 3 2 3 3 2 3 3
23383 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
23393 3 3 2 3 3 2 3 3 3 4 4 3 4 4 3 4 4
23403 4 4 3 4 4 3 4 4 8 9 9 8 8 7 3 3 3
23413 3 3 3 3 3 9 9 8 36 38 35 82 81 62 118 116 76
2342142 137 94 151 147 98 151 147 98 151 147 98 149 143 98 149 143 98
2343149 143 98 151 147 98 160 154 106 176 171 126 188 184 146 210 208 158
2344239 239 170 251 251 187 239 239 170 210 208 158 156 151 111 31 33 31
23450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23530 0 0
23540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 7 5
235566 65 55 125 122 87 158 153 112 181 176 137 194 189 146 197 193 154
2356197 193 154 184 179 149 177 172 135 168 163 120 156 151 111 151 147 98
2357151 147 98 151 147 98 151 147 98 161 156 96 149 143 98 118 116 76
235882 81 62 53 55 47 12 12 9 4 5 5 3 4 4 3 3 3
23593 3 3 3 3 3 2 2 2 2 2 2 1 1 1 1 2 2
23603 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
23611 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2
23621 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 3 3
23632 3 3 2 3 3 2 3 3 2 3 3 2 2 2 2 2 2
23642 3 3 2 3 3 2 3 3 2 3 3 2 3 3 2 3 3
23652 3 3 2 3 3 2 3 3 2 3 3 2 3 3 3 3 3
23663 3 3 3 3 3 72 73 67 61 61 53 53 55 47 96 95 69
2367131 127 93 151 147 98 161 156 96 161 156 96 151 147 98 151 147 98
2368161 156 96 160 154 106 164 159 111 177 172 135 197 193 154 210 208 158
2369239 239 170 251 251 187 224 223 159 197 193 154 131 127 93 9 9 8
23700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23780 0 0
23790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
238024 26 24 82 81 62 131 127 93 164 159 111 178 174 128 188 184 146
2381188 184 146 188 184 146 181 176 137 176 171 126 168 163 120 164 159 111
2382160 154 106 160 154 106 160 154 106 160 154 106 151 147 98 125 122 87
238382 81 62 61 61 53 12 12 9 3 3 3 3 3 3 2 2 2
23842 2 2 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0
23850 0 0 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1
23861 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
23871 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 2 2
23881 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
23892 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
23902 3 3 2 3 3 2 3 3 2 3 3 2 3 3 2 3 3
23912 3 3 30 32 31 72 73 67 31 33 31 36 38 35 82 81 62
2392118 116 76 149 143 98 161 156 96 161 156 96 161 156 96 160 154 106
2393165 161 109 165 161 109 176 171 126 188 184 146 204 201 155 214 212 158
2394239 239 170 239 239 170 214 212 158 184 179 149 82 81 62 0 0 0
23950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24030 0 0
24040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24052 2 2 43 44 41 96 95 69 131 127 93 160 154 106 176 171 126
2406184 181 136 184 181 136 184 181 136 181 176 137 178 174 128 174 170 121
2407171 165 117 173 167 111 173 167 111 173 167 111 160 154 106 131 127 93
240896 95 69 66 65 55 16 17 12 2 2 2 1 1 1 1 1 1
24091 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
24100 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
24111 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
24121 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
24131 2 2 1 2 2 1 2 2 1 2 2 1 2 2 2 2 2
24142 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
24152 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
24162 2 2 2 2 2 2 2 2 10 9 6 30 31 28 71 71 57
2417118 116 76 149 143 98 165 161 109 165 161 109 165 161 109 173 167 111
2418173 167 111 176 171 126 184 181 136 197 193 154 210 208 158 224 223 159
2419251 251 187 239 239 170 210 208 158 168 163 120 40 41 39 0 0 0
24200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24280 0 0
24290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24300 0 0 13 12 7 61 61 53 96 95 69 131 127 93 160 154 106
2431176 171 126 184 181 136 184 181 136 188 184 146 184 181 136 184 181 136
2432184 181 136 186 182 128 186 182 128 178 174 128 174 170 121 149 145 103
2433118 116 76 82 81 62 21 22 20 1 1 1 1 1 1 0 0 0
24340 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24350 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
24361 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
24371 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
24381 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2
24391 2 2 1 2 2 1 2 2 1 2 2 1 2 2 2 2 2
24402 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
24412 2 2 2 2 2 2 2 2 3 3 3 30 31 28 66 65 55
2442118 116 76 149 143 98 165 161 109 173 167 111 173 167 111 174 170 121
2443186 182 128 190 186 136 197 193 154 210 208 158 224 223 159 251 251 187
2444251 251 187 239 239 170 197 193 154 137 133 100 12 12 9 0 0 0
24450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24530 0 0
24540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24550 0 0 0 0 0 30 31 28 71 71 57 103 101 77 134 131 96
2456164 159 111 176 171 126 184 181 136 188 184 146 194 189 146 197 193 154
2457197 193 154 197 193 154 194 191 148 194 189 146 190 186 136 176 171 126
2458145 141 105 103 101 77 40 41 39 0 0 0 0 0 0 0 0 0
24590 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24611 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
24621 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
24631 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
24641 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2
24651 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2
24661 2 2 1 2 2 1 2 2 1 2 2 30 31 28 71 71 57
2467118 116 76 160 154 106 173 167 111 178 174 128 186 182 128 190 186 136
2468194 191 148 204 201 155 210 208 158 224 223 159 251 251 187 251 251 187
2469251 251 187 214 212 158 184 179 149 84 83 72 0 0 0 0 0 0
24700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24780 0 0
24790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24800 0 0 0 0 0 5 5 3 43 44 41 82 81 62 103 101 77
2481142 137 94 165 161 109 178 174 128 190 186 136 197 193 154 204 201 155
2482210 208 158 210 208 158 210 208 158 210 208 158 210 208 158 197 193 154
2483177 172 135 145 141 105 79 78 62 5 4 3 0 0 0 0 0 0
24840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24850 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24860 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
24871 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
24881 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
24891 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
24901 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
24911 1 1 1 1 1 1 2 2 1 2 2 30 31 28 82 81 62
2492142 137 94 165 161 109 178 174 128 190 186 136 194 191 148 204 201 155
2493210 208 158 214 212 158 239 239 170 251 251 187 251 251 187 251 251 187
2494251 251 187 210 208 158 168 163 120 36 38 35 0 0 0 0 0 0
24950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25030 0 0
25040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25050 0 0 0 0 0 0 0 0 16 17 12 53 55 47 82 81 62
2506118 116 76 151 147 98 171 165 117 184 181 136 194 191 148 210 208 158
2507214 212 158 224 223 159 239 239 170 239 239 170 224 223 159 214 212 158
2508197 193 154 176 171 126 115 113 82 24 26 24 0 0 0 0 0 0
25090 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25110 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
25121 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
25131 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
25141 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
25151 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
25161 1 1 1 1 1 1 1 1 1 1 1 40 41 39 103 101 77
2517151 147 98 176 171 126 190 186 136 197 193 154 210 208 158 214 212 158
2518239 239 170 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187
2519239 239 170 197 193 154 110 109 94 3 4 3 0 0 0 0 0 0
25200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25280 0 0
25290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25300 0 0 0 0 0 0 0 0 0 0 0 30 31 28 66 65 55
253196 95 69 125 122 87 160 154 106 178 174 128 194 189 146 204 201 155
2532214 212 158 239 239 170 251 251 187 251 251 187 251 251 187 239 239 170
2533210 208 158 188 184 146 149 145 103 61 61 53 0 0 0 0 0 0
25340 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25370 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
25381 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
25391 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
25401 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
25411 1 1 1 1 1 1 1 1 1 1 1 61 61 53 131 127 93
2542164 159 111 184 181 136 197 193 154 210 208 158 224 223 159 251 251 187
2543251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 251 251 187
2544210 208 158 168 163 120 43 44 41 0 0 0 0 0 0 0 0 0
25450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25530 0 0
25540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25550 0 0 0 0 0 0 0 0 0 0 0 4 3 2 36 38 35
255671 71 57 96 95 69 142 137 94 165 161 109 184 181 136 197 193 154
2557210 208 158 239 239 170 251 251 187 251 251 187 251 251 187 251 251 187
2558214 212 158 197 193 154 168 163 120 103 101 77 7 7 5 0 0 0
25590 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
25631 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
25641 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
25651 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
25661 1 1 0 0 0 0 0 0 0 0 0 82 81 62 142 137 94
2567174 170 121 194 189 146 210 208 158 224 223 159 251 251 187 251 251 187
2568251 251 187 251 251 187 251 251 187 251 251 187 251 251 187 224 223 159
2569184 179 149 99 98 80 3 3 3 0 0 0 0 0 0 0 0 0
25700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25780 0 0
25790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 7 5
258143 44 41 82 81 62 118 116 76 142 137 94 171 165 117 190 186 136
2582204 201 155 224 223 159 251 251 187 251 251 187 251 251 187 251 251 187
2583214 212 158 197 193 154 174 170 121 125 122 87 30 31 28 0 0 0
25840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25850 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25860 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25870 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25880 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
25891 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
25900 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25910 0 0 0 0 0 0 0 0 3 4 3 82 81 62 149 143 98
2592176 171 126 194 191 148 210 208 158 239 239 170 251 251 187 251 251 187
2593251 251 187 251 251 187 251 251 187 251 251 187 239 239 170 204 201 155
2594145 141 105 30 31 28 0 0 0 0 0 0 0 0 0 0 0 0
25950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26030 0 0
26040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
260610 9 6 46 47 43 82 81 62 118 116 76 149 143 98 174 170 121
2607194 189 146 210 208 158 224 223 159 251 251 187 251 251 187 224 223 159
2608210 208 158 194 191 148 174 170 121 134 131 96 53 55 47 0 0 0
26090 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26160 0 0 0 0 0 0 0 0 7 7 5 96 95 69 149 143 98
2617176 171 126 194 191 148 210 208 158 239 239 170 251 251 187 251 251 187
2618251 251 187 251 251 187 251 251 187 239 239 170 210 208 158 177 172 135
261975 75 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26280 0 0
26290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26310 0 0 10 9 6 46 47 43 82 81 62 118 116 76 149 143 98
2632176 171 126 194 191 148 210 208 158 214 212 158 214 212 158 210 208 158
2633197 193 154 184 181 136 164 159 111 131 127 93 53 55 47 0 0 0
26340 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26410 0 0 0 0 0 0 0 0 7 7 5 96 95 69 149 143 98
2642174 170 121 194 189 146 204 201 155 214 212 158 239 239 170 251 251 187
2643251 251 187 251 251 187 239 239 170 210 208 158 184 179 149 110 109 94
264412 12 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26530 0 0
26540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26560 0 0 0 0 0 10 9 6 43 44 41 82 81 62 115 113 82
2657144 139 99 168 163 120 188 184 146 197 193 154 197 193 154 194 189 146
2658184 181 136 174 170 121 151 147 98 118 116 76 36 38 35 0 0 0
26590 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26630 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26660 0 0 0 0 0 0 0 0 4 3 2 82 81 62 142 137 94
2667171 165 117 186 182 128 194 191 148 210 208 158 214 212 158 224 223 159
2668239 239 170 224 223 159 210 208 158 184 179 149 137 133 100 36 38 35
26690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26780 0 0
26790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26810 0 0 0 0 0 0 0 0 7 7 5 36 38 35 71 71 57
2682103 101 77 131 127 93 155 149 109 168 163 120 168 163 120 168 163 120
2683164 159 111 149 143 98 125 122 87 82 81 62 13 12 7 0 0 0
26840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26850 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26860 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26870 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26880 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26890 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26900 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26910 0 0 0 0 0 0 0 0 0 0 0 61 61 53 125 122 87
2692160 154 106 174 170 121 184 181 136 194 189 146 204 201 155 210 208 158
2693210 208 158 204 201 155 184 179 149 145 141 105 61 61 53 0 0 0
26940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27030 0 0
27040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27060 0 0 0 0 0 0 0 0 0 0 0 3 3 2 30 31 28
270761 61 53 82 81 62 103 101 77 121 119 87 125 122 87 125 122 87
2708118 116 76 103 101 77 79 78 62 24 26 24 0 0 0 0 0 0
27090 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27160 0 0 0 0 0 0 0 0 0 0 0 25 27 25 96 95 69
2717142 137 94 160 154 106 171 165 117 178 174 128 184 181 136 184 181 136
2718181 176 137 177 172 135 145 141 105 75 75 61 5 5 3 0 0 0
27190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27280 0 0
27290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
273216 17 12 40 41 39 61 61 53 71 71 57 71 71 57 71 71 57
273366 65 55 43 44 41 12 12 9 0 0 0 0 0 0 0 0 0
27340 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27410 0 0 0 0 0 0 0 0 0 0 0 1 1 1 46 47 43
274296 95 69 125 122 87 142 137 94 149 145 103 155 149 109 155 149 109
2743145 141 105 121 119 87 66 65 55 7 7 5 0 0 0 0 0 0
27440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27530 0 0
27540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27570 0 0 1 1 1 16 17 12 24 26 24 25 27 25 19 20 18
27587 7 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27590 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27630 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27660 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 1
276725 27 25 61 61 53 82 81 62 96 95 69 96 95 69 82 81 62
276861 61 53 25 27 25 2 2 1 0 0 0 0 0 0 0 0 0
27690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27780 0 0
27790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27850 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27860 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27870 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27880 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27890 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27900 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27910 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27920 0 0 0 0 0 5 6 5 13 12 7 10 9 6 3 4 3
27930 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28030 0 0
28040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28090 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28280 0 0
diff --git a/drivers/video/logo/logo_linux_vga16.ppm b/drivers/video/logo/logo_linux_vga16.ppm
index 12ac3a5454c0..1850c15e6feb 100644
--- a/drivers/video/logo/logo_linux_vga16.ppm
+++ b/drivers/video/logo/logo_linux_vga16.ppm
@@ -1,2739 +1,1604 @@
1P3 1P3
2142 114 2# Standard 16-color Linux logo
380 80
3255 4255
40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0
50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0
60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0
70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0
80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0
90 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0
100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0
110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0
120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 0 0 0 0 0 0 0 0 0 0 0 0
130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0 0
140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 0 0 0 0 0 0 0 0 0 0 0
150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 0
160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0
170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 0 0 0 0 0 0 0 0 0 0 0 0
180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0 0 0 0 0 0 0 0
190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 0 0 0 0 0 0 0 0 0 0 0 0
200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 0 0 0 0 0 0 0 0 0 0 0 0
210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 0 0 0 0 0 0 0 0 0 0 0 0
220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 0 0 0 0 0 0 0 0 0 0 0 0
230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 0 0 0 0 0 0 0 0 0 0 0 0
240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0
250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 0 0 0 0 0 0 0 0 0 0 0 0
260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 0 0 0 0 0 0 0 0 0 0 0 0
270 0 0 0 0 0 0 0 0 0 0 0 28 0 0 0 0 0 0 0 0 0 0 0 0
280 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 0 0 0 0 0 0 0 0 0 0 0 0
290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 0 0 0 0 0 0 0 0 0 0 0 0
300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 0 0 0 0 0 0 0 0 0 0 0 0
310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0
320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 0 0 0 0 0 0 0 0 0 0 0 0
330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 0 0 0 0 0 0 0 0 0 0 0 0
340 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 0 0 0 0 0 0 0 0 0 0 0 0
350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36 0 0 0 0 0 0 0 0 0 0 0 0
360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 37 0 0 0 0 0 0 0 0 0 0 0 0
370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 38 0 0 0 0 0 0 0 0 0 0 0 0
380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 0 0 0 0 0 0 0 0 0 0 0 0
390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40 0 0 0 0 0 0 0 0 0 0 0 0
400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 0 0 0 0 0 0 0 0 0 0 0 0
410 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 42 0 0 0 0 0 0 0 0 0 0 0 0
420 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 0 0 0 0 0 0 0 0 0 0 0 0
430 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 44 0 0 0 0 0 0 0 0 0 0 0 0
440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 0 0 0 0 0 0 0 0 0 0 0 0
450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 46 0 0 0 0 0 0 0 0 0 0 0 0
460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 47 0 0 0 0 0 0 0 0 0 0 0 0
470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 0 0 0 0 0 0 0 0 0 0 0 0
480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 49 0 0 0 0 0 0 0 0 0 0 0 0
490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50 0 0 0 0 0 0 0 0 0 0 0 0
500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 51 0 0 0 0 0 0 0 0 0 0 0 0
510 0 0 0 0 0 0 0 0 0 0 0 52 0 0 0 0 0 0 0 0 0 0 0 0
520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 53 0 0 0 0 0 0 0 0 0 0 0 0
530 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 54 85 85 85 85 85 85 85 85 85 85 85 85
540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 55 85 85 85 85 85 85 85 85 85 0 0 0
550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 56 0 0 0 0 0 0 0 0 0 0 0 0
560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 57 0 0 0 0 0 0 0 0 0 0 0 0
570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 58 0 0 0 0 0 0 0 0 0 0 0 0
580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 59 0 0 0 0 0 0 0 0 0 0 0 0
590 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 0 0 0 0 0 0 0 0 0 0 0 0
600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 0 0 0 0 0 0 0 0 0 0 0 0
610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62 0 0 0 0 0 0 0 0 0 0 0 0
620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 0 0 0 0 0 0
630 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64 0 0 0 0 0 0 0 0 0 0 0 0
640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65 0 0 0 0 0 0 0 0 0 0 0 0
650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 66 0 0 0 0 0 0 0 0 0 0 0 0
660 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 67 0 0 0 0 0 0 0 0 0 0 0 0
670 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 68 0 0 0 0 0 0 0 0 0 0 0 0
680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 69 0 0 0 0 0 0 0 0 0 0 0 0
690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 70 0 0 0 0 0 0 0 0 0 0 0 0
700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 71 0 0 0 0 0 0 0 0 0 0 0 0
710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 72 0 0 0 0 0 0 0 0 0 0 0 0
720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 73 0 0 0 0 0 0 85 85 85 85 85 85
730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 74 85 85 85 0 0 0 0 0 0 0 0 0
740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 75 0 0 0 0 0 0 0 0 0 85 85 85
750 0 0 0 0 0 0 0 0 0 0 0 76 85 85 85 85 85 85 0 0 0 0 0 0
760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 0 0 0 0 0 0 0 0 0 0 0 0
770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 78 0 0 0 0 0 0 0 0 0 0 0 0
780 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 79 0 0 0 0 0 0 0 0 0 0 0 0
790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 80 0 0 0 0 0 0 0 0 0 0 0 0
800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 81 0 0 0 0 0 0 0 0 0 0 0 0
810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 82 0 0 0 0 0 0 0 0 0 0 0 0
820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 83 0 0 0 0 0 0 0 0 0 0 0 0
830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 84 0 0 0 0 0 0 0 0 0 0 0 0
840 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 85 0 0 0 0 0 0 0 0 0 0 0 0
8585 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 86 0 0 0 0 0 0 0 0 0 0 0 0
860 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 87 0 0 0 0 0 0 0 0 0 0 0 0
870 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 88 0 0 0 0 0 0 0 0 0 0 0 0
880 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 89 0 0 0 0 0 0 0 0 0 0 0 0
890 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 90 0 0 0 0 0 0 0 0 0 0 0 0
900 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 91 0 0 0 0 0 0 0 0 0 0 0 0
910 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 92 0 0 0 0 0 0 0 0 0 0 0 0
920 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 93 0 0 0 85 85 85 0 0 0 0 0 0
930 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 94 0 0 0 0 0 0 0 0 0 0 0 0
940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 95 0 0 0 0 0 0 0 0 0 0 0 0
950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 96 0 0 0 0 0 0 85 85 85 85 85 85
960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97 0 0 0 0 0 0 0 0 0 0 0 0
970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 98 0 0 0 0 0 0 0 0 0 0 0 0
980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 99 0 0 0 0 0 0 0 0 0 0 0 0
990 0 0 0 0 0 0 0 0 0 0 0 100 0 0 0 0 0 0 0 0 0 0 0 0
1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 101 0 0 0 0 0 0 0 0 0 0 0 0
1010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 102 0 0 0 0 0 0 0 0 0 0 0 0
1020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 103 0 0 0 0 0 0 0 0 0 0 0 0
1030 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 104 0 0 0 0 0 0 0 0 0 0 0 0
1040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 105 0 0 0 0 0 0 0 0 0 0 0 0
1050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 106 0 0 0 0 0 0 0 0 0 0 0 0
1060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 107 0 0 0 0 0 0 0 0 0 0 0 0
1070 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 108 0 0 0 0 0 0 0 0 0 0 0 0
10885 85 85 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 109 0 0 0 0 0 0 0 0 0 0 0 0
1090 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 110 0 0 0 0 0 0 0 0 0 0 0 0
1100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 111 0 0 0 0 0 0 0 0 0 0 0 0
1110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 112 0 0 0 0 0 0 0 0 0 0 0 0
1120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 113 85 85 85 0 0 0 0 0 0 0 0 0
1130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 114 0 0 0 0 0 0 0 0 0 0 0 0
1140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 115 0 0 0 0 0 0 0 0 0 0 0 0
1150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 116 0 0 0 0 0 0 0 0 0 85 85 85
1160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 117 85 85 85 0 0 0 0 0 0 0 0 0
1170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 118 0 0 0 0 0 0 0 0 0 0 0 0
1180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 119 0 0 0 0 0 0 0 0 0 0 0 0
1190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 120 0 0 0 0 0 0 0 0 0 0 0 0
1200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 121 0 0 0 0 0 0 0 0 0 0 0 0
1210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 122 0 0 0 0 0 0 0 0 0 0 0 0
1220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 123 0 0 0 0 0 0 0 0 0 0 0 0
1230 0 0 0 0 0 0 0 0 0 0 0 124 0 0 0 0 0 0 0 0 0 0 0 0
1240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 125 0 0 0 0 0 0 0 0 0 0 0 0
1250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 126 0 0 0 0 0 0 0 0 0 0 0 0
1260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0 0 0 0 0 0 0 0 0 0 0 0
1270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 0 0 0 0 0 0 0 0 0 0 0 0
1280 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 129 0 0 0 0 0 0 0 0 0 0 0 0
1290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 130 0 0 0 0 0 0 0 0 0 0 0 0
1300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 131 0 0 0 0 0 0 0 0 0 0 0 0
13185 85 85 85 85 85 85 85 85 0 0 0 85 85 85 85 85 85 132 0 0 0 0 0 0 0 0 0 85 85 85
1320 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 133 0 0 0 0 0 0 0 0 0 0 0 0
13385 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 134 0 0 0 0 0 0 0 0 0 0 0 0
1340 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 135 0 0 0 0 0 0 0 0 0 0 0 0
1350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 136 0 0 0 0 0 0 0 0 0 0 0 0
1360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 137 85 85 85 85 85 85 0 0 0 0 0 0
1370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 138 0 0 0 0 0 0 0 0 0 0 0 0
1380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 139 0 0 0 0 0 0 0 0 0 0 0 0
1390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 140 0 0 0 0 0 0 0 0 0 0 0 0
1400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 141 0 0 0 0 0 0 0 0 0 0 0 0
1410 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 142 0 0 0 0 0 0 0 0 0 0 0 0
1420 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 143 0 0 0 0 0 0 0 0 0 0 0 0
1430 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 144 0 0 0 0 0 0 0 0 0 0 0 0
1440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 145 0 0 0 0 0 0 0 0 0 0 0 0
1450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 146 0 0 0 0 0 0 0 0 0 0 0 0
1460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 147 0 0 0 0 0 0 0 0 0 0 0 0
1470 0 0 0 0 0 0 0 0 0 0 0 148 0 0 0 0 0 0 0 0 0 0 0 0
1480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 149 0 0 0 0 0 0 0 0 0 0 0 0
1490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 150 0 0 0 0 0 0 0 0 0 0 0 0
1500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 151 0 0 0 0 0 0 0 0 0 0 0 0
1510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 152 0 0 0 0 0 0 0 0 0 85 85 85
1520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 153 0 0 0 0 0 0 0 0 0 0 0 0
1530 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 154 0 0 0 0 0 0 0 0 0 0 0 0
1540 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 155 0 0 0 0 0 0 0 0 0 0 0 0
15585 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 156 85 85 85 170 170 170 0 0 0 0 0 0
15685 85 85 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 157 0 0 0 85 85 85 0 0 0 0 0 0
1570 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 158 0 0 0 0 0 0 0 0 0 0 0 0
1580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 159 0 0 0 0 0 0 0 0 0 0 0 0
1590 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 160 0 0 0 0 0 0 0 0 0 0 0 0
1600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 161 0 0 0 0 0 0 0 0 0 0 0 0
1610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 162 0 0 0 0 0 0 0 0 0 0 0 0
1620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 163 0 0 0 0 0 0 0 0 0 0 0 0
1630 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 164 0 0 0 0 0 0 0 0 0 0 0 0
1640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 165 0 0 0 0 0 0 0 0 0 0 0 0
1650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 166 0 0 0 0 0 0 0 0 0 0 0 0
1660 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 167 0 0 0 0 0 0 0 0 0 0 0 0
1670 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 168 0 0 0 0 0 0 0 0 0 0 0 0
1680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 169 0 0 0 0 0 0 0 0 0 0 0 0
1690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 0 0 0 0 0 0 0 0 0 0 0 0
1700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 171 0 0 0 0 0 0 0 0 0 0 0 0
1710 0 0 0 0 0 0 0 0 0 0 0 172 0 0 0 0 0 0 85 85 85 0 0 0
1720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 173 0 0 0 0 0 0 0 0 0 0 0 0
1730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 174 0 0 0 0 0 0 0 0 0 0 0 0
1740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 175 0 0 0 0 0 0 0 0 0 0 0 0
1750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 176170 170 170 170 170 170 85 85 85 0 0 0
1760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 177 0 0 0 0 0 0 85 85 85 0 0 0
1770 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 178 0 0 0 0 0 0 0 0 0 0 0 0
17885 85 85 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 179 0 0 0 0 0 0 0 0 0 0 0 0
1790 0 0 85 85 85 85 85 85 0 0 0 85 85 85 85 85 85 180 0 0 0 0 0 0 0 0 0 0 0 0
1800 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 181 0 0 0 0 0 0 0 0 0 0 0 0
1810 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 182 0 0 0 0 0 0 0 0 0 0 0 0
18285 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 183 0 0 0 0 0 0 0 0 0 0 0 0
1830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 184 0 0 0 0 0 0 0 0 0 0 0 0
1840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 185 0 0 0 0 0 0 0 0 0 0 0 0
1850 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 186 0 0 0 0 0 0 0 0 0 0 0 0
1860 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 187 0 0 0 0 0 0 0 0 0 0 0 0
1870 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 188 0 0 0 0 0 0 0 0 0 0 0 0
1880 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 189 0 0 0 0 0 0 0 0 0 0 0 0
1890 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 190 0 0 0 0 0 0 0 0 0 0 0 0
1900 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 191 0 0 0 0 0 0 0 0 0 0 0 0
1910 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 192 0 0 0 0 0 0 85 85 85 0 0 0
1920 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 193 0 0 0 0 0 0 0 0 0 0 0 0
1930 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 194 0 0 0 0 0 0 0 0 0 0 0 0
1940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 195 0 0 0 0 0 0 0 0 0 0 0 0
1950 0 0 0 0 0 0 0 0 0 0 0 196 0 0 0 85 85 85 0 0 0 0 0 0
1960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 197 0 0 0 0 0 0 0 0 0 85 85 85
1970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 198 0 0 0 0 0 0 0 0 0 0 0 0
1980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 199 0 0 0 0 0 0 0 0 0 0 0 0
1990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 0 0 0 0 0
2000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 201 0 0 0 0 0 0 0 0 0 0 0 0
2010 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 202 0 0 0 0 0 0 0 0 0 0 0 0
20285 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 203 0 0 0 0 0 0 0 0 0 0 0 0
20385 85 85 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 204 0 0 0 0 0 0 0 0 0 0 0 0
2040 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 205 0 0 0 0 0 0 0 0 0 0 0 0
2050 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 206 0 0 0 0 0 0 0 0 0 0 0 0
2060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 207 0 0 0 0 0 0 0 0 0 0 0 0
2070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 208 0 0 0 0 0 0 0 0 0 0 0 0
2080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 209 0 0 0 0 0 0 0 0 0 0 0 0
2090 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 210 0 0 0 0 0 0 0 0 0 0 0 0
2100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 211 0 0 0 0 0 0 0 0 0 0 0 0
2110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 212 0 0 0 0 0 0 85 85 85 0 0 0
2120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 213 0 0 0 0 0 0 0 0 0 0 0 0
2130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 214 0 0 0 0 0 0 0 0 0 0 0 0
2140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 215 0 0 0 0 0 0 0 0 0 0 0 0
2150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 216 0 0 0 0 0 0 0 0 0 0 0 0
2160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 217 0 0 0 0 0 0 0 0 0 85 85 85
2170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 218 0 0 0 0 0 0 0 0 0 0 0 0
2180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 219 0 0 0 0 0 0 0 0 0 0 0 0
2190 0 0 0 0 0 0 0 0 0 0 0 220 0 0 0 0 0 0 0 0 0 0 0 0
2200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 221 0 0 0 0 0 0 0 0 0 0 0 0
2210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 222 0 0 0 0 0 0 0 0 0 0 0 0
2220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 223 0 0 0 0 0 0 0 0 0 0 0 0
2230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 224 0 0 0 0 0 0 0 0 0 0 0 0
2240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 225 0 0 0 0 0 0 0 0 0 0 0 0
2250 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 226 0 0 0 0 0 0 0 0 0 0 0 0
22685 85 85 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 227 0 0 0 0 0 0 0 0 0 0 0 0
2270 0 0 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 228 0 0 0 0 0 0 0 0 0 0 0 0
22885 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 229 0 0 0 0 0 0 0 0 0 0 0 0
2290 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 230 0 0 0 0 0 0 0 0 0 0 0 0
23085 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 231 0 0 0 0 0 0 0 0 0 0 0 0
23185 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 232 0 0 0 85 85 85 0 0 0 0 0 0
2320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 233 0 0 0 0 0 0 0 0 0 0 0 0
2330 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 234 0 0 0 0 0 0 0 0 0 0 0 0
2340 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 235 0 0 0 0 0 0 0 0 0 0 0 0
2350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 236 0 0 0 0 0 0 0 0 0 0 0 0
2360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 237 0 0 0 0 0 0 0 0 0 85 85 85
2370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 238 0 0 0 0 0 0 0 0 0 0 0 0
2380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 239 0 0 0 0 0 0 0 0 0 0 0 0
2390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 240 0 0 0 0 0 0 0 0 0 0 0 0
2400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 241 0 0 0 0 0 0 0 0 0 0 0 0
2410 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 242 0 0 0 0 0 0 0 0 0 0 0 0
2420 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 243 0 0 0 0 0 0 0 0 0 0 0 0
2430 0 0 0 0 0 0 0 0 0 0 0 244 0 0 0 0 0 0 0 0 0 0 0 0
2440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 245 0 0 0 0 0 0 0 0 0 0 0 0
2450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 246 0 0 0 0 0 0 0 0 0 0 0 0
2460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 247 0 0 0 0 0 0 0 0 0 0 0 0
2470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 248 0 0 0 0 0 0 0 0 0 0 0 0
2480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 249 0 0 0 0 0 0 0 0 0 0 0 0
2490 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 250 0 0 0 0 0 0 0 0 0 0 0 0
25085 85 85 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 251 0 0 0 0 0 0 0 0 0 0 0 0
2510 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 252 0 0 0 85 85 85 0 0 0 0 0 0
2520 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 253 0 0 0 0 0 0 0 0 0 0 0 0
2530 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 254 0 0 0 0 0 0 0 0 0 0 0 0
2540 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0
2550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 256 0 0 0 0 0 0 0 0 0 0 0 0
2560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 257 0 0 0 0 0 0 0 0 0 0 0 0
2570 0 0 85 85 85 170 170 170 170 85 0 170 170 170 85 85 85 258 85 85 85 0 0 0 0 0 0 0 0 0
2580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 259 0 0 0 0 0 0 0 0 0 0 0 0
2590 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 260 0 0 0 0 0 0 0 0 0 0 0 0
2600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 261 0 0 0 0 0 0 0 0 0 0 0 0
2610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 262 0 0 0 0 0 0 0 0 0 0 0 0
2620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 263 0 0 0 0 0 0 0 0 0 0 0 0
2630 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 264 0 0 0 0 0 0 0 0 0 0 0 0
2640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 265 0 0 0 0 0 0 0 0 0 0 0 0
2650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 266 0 0 0 0 0 0 0 0 0 0 0 0
2660 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 267 0 0 0 0 0 0 0 0 0 0 0 0
2670 0 0 0 0 0 0 0 0 0 0 0 268 0 0 0 0 0 0 0 0 0 0 0 0
2680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 269 0 0 0 0 0 0 0 0 0 0 0 0
2690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 270 0 0 0 0 0 0 0 0 0 0 0 0
2700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 271 0 0 0 0 0 0 0 0 0 0 0 0
2710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 272 0 0 0 85 85 85 0 0 0 0 0 0
2720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 273 0 0 0 0 0 0 0 0 0 0 0 0
2730 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 274 0 0 0 0 0 0 0 0 0 0 0 0
27485 85 85 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 275 0 0 0 0 0 0 0 0 0 0 0 0
2750 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 276 0 0 0 0 0 0 0 0 0 0 0 0
27685 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 277 0 0 0 0 0 0 0 0 0 0 0 0
27785 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 278 85 85 85 0 0 0 0 0 0 0 0 0
27885 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 279 0 0 0 0 0 0 0 0 0 0 0 0
2790 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 280 0 0 0 0 0 0 0 0 0 0 0 0
2800 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 281 0 0 0 0 0 0 0 0 0 0 0 0
281170 170 170 255 255 85 170 170 170 170 170 170 170 170 170 85 85 85 282 0 0 0 0 0 0 0 0 0 0 0 0
2820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 283 0 0 0 0 0 0 0 0 0 0 0 0
2830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 284 0 0 0 0 0 0 0 0 0 0 0 0
2840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 285 0 0 0 0 0 0 0 0 0 0 0 0
2850 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 286 0 0 0 0 0 0 0 0 0 0 0 0
2860 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 287 0 0 0 0 0 0 0 0 0 0 0 0
2870 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 288 0 0 0 0 0 0 0 0 0 0 0 0
2880 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 289 0 0 0 0 0 0 0 0 0 0 0 0
2890 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 290 0 0 0 0 0 0 0 0 0 0 0 0
2900 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 291 0 0 0 0 0 0 0 0 0 0 0 0
2910 0 0 0 0 0 0 0 0 0 0 0 292 0 0 0 85 85 85 0 0 0 0 0 0
2920 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 293 0 0 0 85 85 85 170 170 170 0 0 0
2930 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 294 0 0 0 0 0 0 0 0 0 0 0 0
2940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 295 0 0 0 0 0 0 170 170 170 170 170 170
2950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 296170 170 170 0 0 0 0 0 0 0 0 0
2960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 297 0 0 0 0 0 0 0 0 0 0 0 0
2970 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 298 85 85 85 0 0 0 0 0 0 0 0 0
29885 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 299 0 0 0 0 0 0 0 0 0 0 0 0
29985 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 300 0 0 0 0 0 0 0 0 0 0 0 0
3000 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 301 0 0 0 0 0 0 0 0 0 0 0 0
3010 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 302 0 0 0 0 0 0 0 0 0 0 0 0
3020 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 303 0 0 0 0 0 0 0 0 0 0 0 0
3030 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 304 0 0 0 0 0 0 0 0 0 0 0 0
3040 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 305 0 0 0 0 0 0 0 0 0 0 0 0
305255 255 85 170 170 170 170 170 170 170 85 0 85 255 85 170 85 0 306 0 0 0 0 0 0 0 0 0 0 0 0
3060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 307 0 0 0 0 0 0 0 0 0 0 0 0
3070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 308 0 0 0 0 0 0 0 0 0 0 0 0
3080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 309 0 0 0 0 0 0 0 0 0 0 0 0
3090 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 310 0 0 0 0 0 0 0 0 0 0 0 0
3100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 311 0 0 0 0 0 0 0 0 0 0 0 0
3110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 312 0 0 0 85 85 85 0 0 0 0 0 0
3120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 313 85 85 85 170 170 170 170 170 170 170 170 170
3130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 314 0 0 0 0 0 0 0 0 0 0 0 0
3140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 315 0 0 0 170 170 170 255 255 255 255 255 255
3150 0 0 0 0 0 0 0 0 0 0 0 316255 255 255 170 170 170 0 0 0 0 0 0
3160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 317 0 0 0 0 0 0 0 0 0 0 0 0
3170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 318 85 85 85 0 0 0 0 0 0 0 0 0
3180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 319 0 0 0 0 0 0 0 0 0 0 0 0
3190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 320 0 0 0 0 0 0 0 0 0 0 0 0
3200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 321 0 0 0 0 0 0 0 0 0 0 0 0
3210 0 0 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 322 0 0 0 0 0 0 0 0 0 0 0 0
32285 85 85 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 323 0 0 0 0 0 0 0 0 0 0 0 0
3230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 324 0 0 0 0 0 0 0 0 0 0 0 0
3240 0 0 85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 325 0 0 0 0 0 0 0 0 0 0 0 0
3250 0 0 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 326 0 0 0 0 0 0 0 0 0 0 0 0
3260 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 327 0 0 0 0 0 0 0 0 0 0 0 0
3270 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 328 0 0 0 0 0 0 0 0 0 0 0 0
32885 85 85 0 0 0 0 0 0 85 85 85 170 170 170 170 85 0 329 0 0 0 0 0 0 0 0 0 0 0 0
329170 170 170 170 170 170 255 255 85 170 170 170 170 170 170 85 85 85 330 0 0 0 0 0 0 0 0 0 0 0 0
3300 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 331 0 0 0 0 0 0 0 0 0 0 0 0
3310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 332 0 0 0 85 85 85 0 0 0 85 85 85
3320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333170 170 170 170 170 170 255 255 255 255 255 255
3330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 334 0 0 0 0 0 0 0 0 0 0 0 0
3340 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 335170 170 170 255 255 255 170 170 170 170 170 170
3350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 336255 255 255 170 170 170 0 0 0 0 0 0
3360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 337 0 0 0 0 0 0 0 0 0 0 0 0
3370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 338 85 85 85 0 0 0 0 0 0 0 0 0
3380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 339 0 0 0 0 0 0 0 0 0 0 0 0
3390 0 0 0 0 0 0 0 0 0 0 0 340 0 0 0 0 0 0 0 0 0 0 0 0
3400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 341 0 0 0 0 0 0 0 0 0 0 0 0
3410 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 342 0 0 0 0 0 0 0 0 0 0 0 0
3420 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 343 0 0 0 0 0 0 0 0 0 0 0 0
3430 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 344 0 0 0 0 0 0 0 0 0 0 0 0
3440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 345 0 0 0 0 0 0 0 0 0 0 0 0
3450 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 346 0 0 0 0 0 0 0 0 0 0 0 0
3460 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 347 0 0 0 0 0 0 0 0 0 0 0 0
34785 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 348 0 0 0 0 0 0 0 0 0 0 0 0
3480 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 349 0 0 0 0 0 0 0 0 0 0 0 0
34985 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 350 0 0 0 0 0 0 0 0 0 0 0 0
35085 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 351 0 0 0 0 0 0 0 0 0 0 0 0
3510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 352 0 0 0 85 85 85 0 0 0 85 85 85
3520 0 0 0 0 0 85 85 85 85 85 85 170 85 0 170 170 170 353170 170 170 0 0 0 0 0 0 255 255 255
353170 170 170 170 85 0 170 170 170 170 170 170 170 85 0 85 85 85 354 85 85 85 0 0 0 0 0 0 0 0 0
3540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 355255 255 255 170 170 170 0 0 0 85 85 85
3550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 356170 170 170 255 255 255 170 170 170 0 0 0
3560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 357 0 0 0 0 0 0 0 0 0 0 0 0
3570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 358 85 85 85 0 0 0 0 0 0 0 0 0
3580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 359 0 0 0 0 0 0 0 0 0 0 0 0
3590 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 360 0 0 0 0 0 0 0 0 0 0 0 0
3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 361 0 0 0 0 0 0 0 0 0 0 0 0
3610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 362 0 0 0 0 0 0 0 0 0 0 0 0
3620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 363 0 0 0 0 0 0 0 0 0 0 0 0
3630 0 0 0 0 0 0 0 0 0 0 0 364 0 0 0 0 0 0 0 0 0 0 0 0
3640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 365 0 0 0 0 0 0 0 0 0 0 0 0
3650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 366 0 0 0 0 0 0 0 0 0 0 0 0
3660 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 367 0 0 0 0 0 0 0 0 0 0 0 0
3670 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 368 0 0 0 0 0 0 0 0 0 0 0 0
3680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 369 0 0 0 0 0 0 0 0 0 0 0 0
3690 0 0 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 370 0 0 0 0 0 0 0 0 0 0 0 0
37085 85 85 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 371 0 0 0 0 0 0 0 0 0 0 0 0
3710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 372 0 0 0 85 85 85 0 0 0 85 85 85
37285 85 85 0 0 0 85 85 85 0 0 0 85 85 85 85 85 85 373 85 85 85 0 0 0 0 0 0 170 170 170
37385 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 374 85 85 85 0 0 0 0 0 0 0 0 0
37485 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 375255 255 255 85 85 85 0 0 0 0 0 0
37585 85 85 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 376 85 85 85 255 255 255 170 170 170 0 0 0
3760 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 255 85 377 0 0 0 0 0 0 0 0 0 0 0 0
377255 85 85 85 255 85 170 170 170 170 85 0 170 170 170 85 85 85 378 85 85 85 0 0 0 0 0 0 0 0 0
3780 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 379 0 0 0 0 0 0 0 0 0 0 0 0
3790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 380 0 0 0 0 0 0 0 0 0 0 0 0
3800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 381 0 0 0 0 0 0 0 0 0 0 0 0
3810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 382 0 0 0 0 0 0 0 0 0 0 0 0
3820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 383 0 0 0 0 0 0 0 0 0 0 0 0
3830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 384 0 0 0 0 0 0 0 0 0 0 0 0
3840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 385 0 0 0 0 0 0 0 0 0 0 0 0
3850 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 386 0 0 0 0 0 0 0 0 0 0 0 0
3860 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 387 0 0 0 0 0 0 0 0 0 0 0 0
3870 0 0 0 0 0 0 0 0 0 0 0 388 0 0 0 0 0 0 0 0 0 0 0 0
3880 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 389 0 0 0 0 0 0 0 0 0 0 0 0
3890 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 390 0 0 0 0 0 0 0 0 0 0 0 0
3900 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 391 0 0 0 0 0 0 0 0 0 0 0 0
3910 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 392 0 0 0 85 85 85 0 0 0 85 85 85
3920 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 393170 170 170 0 0 0 0 0 0 170 170 170
3930 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 394 85 85 85 85 85 85 85 85 85 85 85 85
3940 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 395255 255 255 85 85 85 0 0 0 0 0 0
3950 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 396 85 85 85 255 255 255 170 170 170 0 0 0
3960 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 397 0 0 0 0 0 0 0 0 0 0 0 0
39785 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 398 85 85 85 0 0 0 0 0 0 0 0 0
39885 85 85 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 399 0 0 0 0 0 0 0 0 0 0 0 0
3990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 400 0 0 0 0 0 0 0 0 0 0 0 0
4000 0 0 0 0 0 85 85 85 170 85 0 85 85 85 85 85 85 401 0 0 0 0 0 0 0 0 0 0 0 0
401170 170 170 170 85 0 170 170 170 85 85 85 170 85 0 85 85 85 402 0 0 0 0 0 0 0 0 0 0 0 0
4020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 403 0 0 0 0 0 0 0 0 0 0 0 0
4030 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 404 0 0 0 0 0 0 0 0 0 0 0 0
4040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 405 0 0 0 0 0 0 0 0 0 0 0 0
4050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 406 0 0 0 0 0 0 0 0 0 0 0 0
4060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 407 0 0 0 0 0 0 0 0 0 0 0 0
4070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 408 0 0 0 0 0 0 0 0 0 0 0 0
4080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 409 0 0 0 0 0 0 0 0 0 0 0 0
4090 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 410 0 0 0 0 0 0 0 0 0 0 0 0
4100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 411 0 0 0 0 0 0 0 0 0 0 0 0
4110 0 0 0 0 0 0 0 0 0 0 0 412 0 0 0 85 85 85 0 0 0 0 0 0
4120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 413255 255 255 0 0 0 0 0 0 170 85 0
4130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 414255 255 85 170 85 0 255 255 85 170 85 0
4140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 415255 255 85 170 85 0 0 0 0 0 0 0
4150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 416 85 85 85 255 255 255 0 0 0 0 0 0
4160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 417 0 0 0 0 0 0 0 0 0 0 0 0
4170 0 0 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 418 85 85 85 0 0 0 0 0 0 0 0 0
41885 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 419 0 0 0 0 0 0 0 0 0 0 0 0
4190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 420 0 0 0 0 0 0 0 0 0 0 0 0
4200 0 0 85 85 85 0 0 0 85 85 85 85 85 85 0 0 0 421 0 0 0 0 0 0 0 0 0 0 0 0
4210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 422 0 0 0 0 0 0 0 0 0 0 0 0
4220 0 0 0 0 0 85 85 85 85 85 85 0 0 0 85 85 85 423 0 0 0 0 0 0 0 0 0 0 0 0
4230 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 424 0 0 0 0 0 0 0 0 0 0 0 0
42485 85 85 0 0 0 0 0 0 85 85 85 85 85 85 170 85 0 425 0 0 0 0 0 0 0 0 0 0 0 0
42585 85 85 85 85 85 170 85 0 85 255 85 85 85 85 85 85 85 426 0 0 0 0 0 0 0 0 0 0 0 0
4260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 427 0 0 0 0 0 0 0 0 0 0 0 0
4270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 428 0 0 0 0 0 0 0 0 0 0 0 0
4280 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 429 0 0 0 0 0 0 0 0 0 0 0 0
4290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 430 0 0 0 0 0 0 0 0 0 0 0 0
4300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 431 0 0 0 0 0 0 0 0 0 0 0 0
4310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 432 0 0 0 85 85 85 0 0 0 0 0 0
4320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 433170 170 170 170 170 170 170 85 0 255 255 85
4330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 434170 85 0 255 255 85 170 85 0 255 255 85
4340 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 435170 85 0 255 255 85 170 85 0 255 255 85
4350 0 0 0 0 0 0 0 0 0 0 0 436170 170 170 170 170 170 0 0 0 0 0 0
4360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 437 0 0 0 0 0 0 0 0 0 0 0 0
4370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 438 85 85 85 0 0 0 0 0 0 0 0 0
4380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 439 0 0 0 0 0 0 0 0 0 0 0 0
4390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 440 0 0 0 0 0 0 0 0 0 0 0 0
4400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 441 0 0 0 0 0 0 0 0 0 0 0 0
4410 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 442 0 0 0 0 0 0 0 0 0 0 0 0
44285 85 85 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 443 0 0 0 0 0 0 0 0 0 0 0 0
4430 0 0 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 444 0 0 0 0 0 0 0 0 0 0 0 0
4440 0 0 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 445 0 0 0 0 0 0 0 0 0 0 0 0
4450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 446 0 0 0 0 0 0 0 0 0 0 0 0
4460 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 447 0 0 0 0 0 0 0 0 0 0 0 0
4470 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 448 0 0 0 0 0 0 0 0 0 0 0 0
4480 0 0 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 449 0 0 0 0 0 0 0 0 0 0 0 0
44985 85 85 85 85 85 85 85 85 85 85 85 170 85 0 0 0 0 450 0 0 0 0 0 0 0 0 0 0 0 0
4500 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 451 0 0 0 0 0 0 0 0 0 0 0 0
4510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 452 0 0 0 85 85 85 0 0 0 0 0 0
4520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 453 0 0 0 170 85 0 255 255 85 170 85 0
4530 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 454255 255 85 170 85 0 255 255 85 170 85 0
4540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 455255 255 85 170 85 0 255 255 85 170 85 0
4550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 456255 255 85 170 85 0 0 0 0 0 0 0
4560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 457 0 0 0 0 0 0 0 0 0 0 0 0
4570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 458 85 85 85 0 0 0 0 0 0 0 0 0
4580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 459 0 0 0 0 0 0 0 0 0 0 0 0
4590 0 0 0 0 0 0 0 0 0 0 0 460 0 0 0 0 0 0 0 0 0 0 0 0
4600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 461 0 0 0 0 0 0 0 0 0 0 0 0
4610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 462 0 0 0 0 0 0 0 0 0 0 0 0
4620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 463 0 0 0 0 0 0 0 0 0 0 0 0
4630 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 464 0 0 0 0 0 0 0 0 0 0 0 0
4640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 465 0 0 0 0 0 0 0 0 0 0 0 0
4650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 466 0 0 0 0 0 0 0 0 0 0 0 0
4660 0 0 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 467 0 0 0 0 0 0 0 0 0 0 0 0
4670 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 468 0 0 0 0 0 0 0 0 0 0 0 0
46885 85 85 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 469 0 0 0 0 0 0 0 0 0 0 0 0
4690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 470 0 0 0 0 0 0 0 0 0 0 0 0
4700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 471 0 0 0 0 0 0 0 0 0 0 0 0
47185 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 472 0 0 0 85 85 85 0 0 0 0 0 0
4720 0 0 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 473170 85 0 255 255 85 170 85 0 255 255 85
47385 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 474170 85 0 255 255 85 170 85 0 255 255 85
4740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 475170 85 0 255 255 85 170 85 0 255 255 85
4750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 476170 85 0 255 255 85 170 85 0 0 0 0
4760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 477 0 0 0 0 0 0 0 0 0 0 0 0
4770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 478 0 0 0 85 85 85 0 0 0 0 0 0
4780 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 479 0 0 0 0 0 0 0 0 0 0 0 0
4790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 480 0 0 0 0 0 0 0 0 0 0 0 0
4800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 481 0 0 0 0 0 0 0 0 0 0 0 0
4810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 482 0 0 0 0 0 0 0 0 0 0 0 0
4820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 483 0 0 0 0 0 0 0 0 0 0 0 0
4830 0 0 0 0 0 0 0 0 0 0 0 484 0 0 0 0 0 0 0 0 0 0 0 0
4840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 485 0 0 0 0 0 0 0 0 0 0 0 0
4850 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 486 0 0 0 0 0 0 0 0 0 0 0 0
4860 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 487 0 0 0 0 0 0 0 0 0 0 0 0
4870 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 488 0 0 0 0 0 0 0 0 0 0 0 0
4880 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 489 0 0 0 0 0 0 0 0 0 0 0 0
4890 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 490 0 0 0 0 0 0 0 0 0 0 0 0
4900 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 491 0 0 0 0 0 0 0 0 0 0 0 0
4910 0 0 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 492 0 0 0 85 85 85 85 85 85 0 0 0
4920 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 493255 255 85 170 85 0 255 255 85 170 85 0
4930 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 494255 255 85 170 85 0 255 255 85 170 85 0
4940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 495255 255 85 170 85 0 255 255 85 170 85 0
4950 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 496255 255 85 170 85 0 170 85 0 0 0 0
4960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 497 0 0 0 0 0 0 0 0 0 0 0 0
4970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 498 0 0 0 85 85 85 0 0 0 0 0 0
4980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 499 0 0 0 0 0 0 0 0 0 0 0 0
4990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 0 0 0 0 0 0 0 0 0 0 0
5000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 501 0 0 0 0 0 0 0 0 0 0 0 0
5010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 502 0 0 0 0 0 0 0 0 0 0 0 0
5020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 503 0 0 0 0 0 0 0 0 0 0 0 0
5030 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 504 0 0 0 0 0 0 0 0 0 0 0 0
5040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 505 0 0 0 0 0 0 0 0 0 0 0 0
5050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 506 0 0 0 0 0 0 0 0 0 0 0 0
5060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 507 0 0 0 0 0 0 0 0 0 0 0 0
5070 0 0 0 0 0 0 0 0 0 0 0 508 0 0 0 0 0 0 0 0 0 0 0 0
5080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 509 0 0 0 0 0 0 0 0 0 0 0 0
5090 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 510 0 0 0 0 0 0 0 0 0 0 0 0
5100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 511 0 0 0 0 0 0 0 0 0 0 0 0
5110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 512 0 0 0 85 85 85 85 85 85 0 0 0
5120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 513170 85 0 255 255 85 170 85 0 255 255 85
5130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 514170 85 0 255 255 85 170 85 0 255 255 85
5140 0 0 85 85 85 0 0 0 0 170 0 85 85 85 0 0 0 515170 85 0 255 255 85 170 85 0 170 85 0
51585 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 516170 85 0 170 85 0 85 85 85 0 0 0
5160 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 517 0 0 0 85 85 85 0 0 0 0 0 0
5170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 518 0 0 0 0 0 0 85 85 85 0 0 0
5180 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 519 0 0 0 0 0 0 0 0 0 0 0 0
5190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 520 0 0 0 0 0 0 0 0 0 0 0 0
5200 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 521 0 0 0 0 0 0 0 0 0 0 0 0
5210 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 522 0 0 0 0 0 0 0 0 0 0 0 0
5220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 523 0 0 0 0 0 0 0 0 0 0 0 0
5230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 524 0 0 0 0 0 0 0 0 0 0 0 0
5240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 525 0 0 0 0 0 0 0 0 0 0 0 0
5250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 526 0 0 0 0 0 0 0 0 0 0 0 0
5260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 527 0 0 0 0 0 0 0 0 0 0 0 0
5270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 528 0 0 0 0 0 0 0 0 0 0 0 0
5280 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 529 0 0 0 0 0 0 0 0 0 0 0 0
5290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 530 0 0 0 0 0 0 0 0 0 0 0 0
5300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 531 0 0 0 0 0 0 0 0 0 0 0 0
5310 0 0 0 0 0 0 0 0 0 0 0 532 0 0 0 85 85 85 85 85 85 0 0 0
5320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 533 85 85 85 170 85 0 255 255 85 170 85 0
5330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 534255 255 85 170 85 0 255 255 85 170 85 0
5340 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 535170 85 0 170 85 0 170 85 0 170 85 0
5350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 536170 85 0 170 85 0 85 85 85 0 0 0
5360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 537 0 0 0 85 85 85 170 170 170 85 85 85
5370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 538 0 0 0 0 0 0 85 85 85 0 0 0
538170 85 0 85 255 85 170 85 0 170 85 0 170 85 0 85 255 85 539 0 0 0 0 0 0 0 0 0 0 0 0
539170 85 0 170 85 0 0 170 0 0 0 0 0 0 0 0 0 0 540 0 0 0 0 0 0 0 0 0 0 0 0
54085 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 541 0 0 0 0 0 0 0 0 0 0 0 0
5410 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 542 0 0 0 0 0 0 0 0 0 0 0 0
5420 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 543 0 0 0 0 0 0 0 0 0 0 0 0
54385 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 544 0 0 0 0 0 0 0 0 0 0 0 0
5440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 545 0 0 0 0 0 0 0 0 0 0 0 0
54585 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 546 0 0 0 0 0 0 0 0 0 0 0 0
5460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 547 0 0 0 0 0 0 0 0 0 0 0 0
5470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 548 0 0 0 0 0 0 0 0 0 0 0 0
5480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 549 0 0 0 0 0 0 0 0 0 0 0 0
5490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 550 0 0 0 0 0 0 0 0 0 0 0 0
5500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 551 0 0 0 0 0 0 0 0 0 0 0 0
5510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 552 0 0 0 85 85 85 85 85 85 0 0 0
5520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 553 85 85 85 170 85 0 170 85 0 170 85 0
5530 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 554170 85 0 170 85 0 170 85 0 170 85 0
5540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 555170 85 0 170 85 0 170 85 0 170 85 0
5550 0 0 0 0 0 0 0 0 0 0 0 556170 170 170 170 170 170 170 170 170 0 0 0
5560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 557 0 0 0 0 0 0 170 170 170 170 170 170
5570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 558 0 0 0 0 0 0 0 0 0 85 85 85
5580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 559 0 0 0 0 0 0 0 0 0 0 0 0
5590 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 560 0 0 0 0 0 0 0 0 0 0 0 0
5600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 561 0 0 0 0 0 0 0 0 0 0 0 0
5610 0 0 0 0 0 0 0 0 0 0 0 0 170 0 170 85 0 562 0 0 0 0 0 0 0 0 0 0 0 0
562255 255 85 170 85 0 255 255 85 255 255 85 255 255 85 170 85 0 563 0 0 0 0 0 0 0 0 0 0 0 0
563255 255 85 85 255 85 170 85 0 170 85 0 85 85 85 0 0 0 564 0 0 0 0 0 0 0 0 0 0 0 0
5640 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 565 0 0 0 0 0 0 0 0 0 0 0 0
56585 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 566 0 0 0 0 0 0 0 0 0 0 0 0
5660 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 567 0 0 0 0 0 0 0 0 0 0 0 0
5670 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 568 0 0 0 0 0 0 0 0 0 0 0 0
56885 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 569 0 0 0 0 0 0 0 0 0 0 0 0
5690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 570 0 0 0 0 0 0 0 0 0 0 0 0
5700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 571 0 0 0 0 0 0 0 0 0 0 0 0
5710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 572 0 0 0 85 85 85 0 0 0 0 0 0
5720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 573 85 85 85 170 170 170 170 85 0 170 85 0
5730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 574170 85 0 170 85 0 170 85 0 170 85 0
5740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 575170 85 0 170 85 0 170 170 170 170 170 170
5750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 576170 170 170 170 170 170 170 170 170 85 85 85
5760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 577 0 0 0 0 0 0 85 85 85 85 85 85
5770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 578 0 0 0 0 0 0 0 0 0 85 85 85
5780 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 579 0 0 0 0 0 0 0 0 0 0 0 0
5790 0 0 0 0 0 0 0 0 0 0 0 580 0 0 0 0 0 0 0 0 0 0 0 0
5800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 581 0 0 0 0 0 0 0 0 0 0 0 0
5810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 582 0 0 0 0 0 0 0 0 0 0 0 0
5820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 583 0 0 0 0 0 0 0 0 0 0 0 0
5830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 584 0 0 0 0 0 0 0 0 0 0 0 0
5840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 585 0 0 0 0 0 0 0 0 0 0 0 0
5850 0 0 0 0 0 0 0 0 0 0 0 170 85 0 255 255 85 586 0 0 0 0 0 0 0 0 0 0 0 0
58685 255 85 255 255 85 255 255 85 170 85 0 255 255 85 255 255 85 587 0 0 0 0 0 0 0 0 0 0 0 0
587255 255 85 170 85 0 255 255 85 85 255 85 170 85 0 0 0 0 588 0 0 0 0 0 0 0 0 0 0 0 0
58885 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 589 0 0 0 0 0 0 0 0 0 0 0 0
5890 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 590 0 0 0 0 0 0 0 0 0 0 0 0
5900 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 591 0 0 0 0 0 0 0 0 0 0 0 0
5910 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 592 0 0 0 85 85 85 0 0 0 0 0 0
5920 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 593 85 85 85 170 170 170 170 170 170 170 85 0
5930 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 594170 85 0 170 85 0 170 85 0 170 85 0
5940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 595170 170 170 170 170 170 170 170 170 170 170 170
5950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 596255 255 255 255 255 255 255 255 255 170 170 170
5960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 597 0 0 0 0 0 0 0 0 0 0 0 0
5970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 598 0 0 0 0 0 0 0 0 0 85 85 85
5980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 599 0 0 0 0 0 0 0 0 0 0 0 0
5990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 0 0 0 0 0
6000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 601 0 0 0 0 0 0 0 0 0 0 0 0
6010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 602 0 0 0 0 0 0 0 0 0 0 0 0
6020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 603 0 0 0 0 0 0 0 0 0 0 0 0
6030 0 0 0 0 0 0 0 0 0 0 0 604 0 0 0 0 0 0 0 0 0 0 0 0
6040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 605 0 0 0 0 0 0 0 0 0 0 0 0
6050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 606 0 0 0 0 0 0 0 0 0 0 0 0
6060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 607 0 0 0 0 0 0 0 0 0 0 0 0
6070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 608 0 0 0 0 0 0 0 0 0 0 0 0
6080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 609 0 0 0 0 0 0 0 0 0 0 0 0
6090 0 0 0 0 0 0 0 0 85 85 85 255 255 85 170 85 0 610 0 0 0 0 0 0 0 0 0 0 0 0
610255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 611 0 0 0 0 0 0 0 0 0 0 0 0
611255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 85 255 85 612 85 85 85 0 0 0 0 0 0 85 85 85
6120 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 613255 255 255 255 255 255 170 170 170 170 170 170
6130 0 0 85 85 85 0 0 0 85 85 85 170 170 170 0 0 0 614170 170 170 170 170 170 170 170 170 170 170 170
6140 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 615170 170 170 170 170 170 255 255 255 255 255 255
61585 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 616255 255 255 255 255 255 255 255 255 255 255 255
6160 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 617 85 85 85 0 0 0 0 0 0 0 0 0
6170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 618 0 0 0 0 0 0 0 0 0 0 0 0
6180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 619 85 85 85 0 0 0 0 0 0 0 0 0
6190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 620 0 0 0 0 0 0 0 0 0 0 0 0
6200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 621 0 0 0 0 0 0 0 0 0 0 0 0
6210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 622 0 0 0 0 0 0 0 0 0 0 0 0
6220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 623 0 0 0 0 0 0 0 0 0 0 0 0
6230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 624 0 0 0 0 0 0 0 0 0 0 0 0
6240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 0 0 0 0 0 0 0 0 0 0 0 0
6250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 626 0 0 0 0 0 0 0 0 0 0 0 0
6260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 627 0 0 0 0 0 0 0 0 0 0 0 0
6270 0 0 0 0 0 0 0 0 0 0 0 628 0 0 0 0 0 0 0 0 0 0 0 0
6280 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 629 0 0 0 0 0 0 0 0 0 0 0 0
6290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 630 0 0 0 0 0 0 0 0 0 0 0 0
6300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 631 0 0 0 0 0 0 0 0 0 0 0 0
6310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 632 85 85 85 0 0 0 0 0 0 170 170 170
6320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 633255 255 255 255 255 255 170 170 170 170 170 170
6330 0 0 0 0 0 0 0 0 170 85 0 255 255 85 255 255 85 634170 170 170 170 170 170 170 170 170 170 170 170
634255 255 85 255 255 85 170 85 0 255 255 85 85 255 85 255 255 85 635170 170 170 255 255 255 255 255 255 255 255 255
635255 255 85 170 85 0 255 255 85 170 85 0 255 255 85 170 85 0 636255 255 255 255 255 255 255 255 255 255 255 255
636170 85 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 637170 170 170 0 0 0 0 0 0 0 0 0
63785 85 85 0 0 0 0 0 0 85 85 85 170 170 170 0 0 0 638 0 0 0 0 0 0 0 0 0 0 0 0
63885 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 639 85 85 85 0 0 0 0 0 0 0 0 0
6390 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 640 0 0 0 0 0 0 0 0 0 0 0 0
6400 0 0 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 641 0 0 0 0 0 0 0 0 0 0 0 0
6410 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 642 0 0 0 0 0 0 0 0 0 0 0 0
6420 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 643 0 0 0 0 0 0 0 0 0 0 0 0
6430 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 644 0 0 0 0 0 0 0 0 0 0 0 0
6440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 645 0 0 0 0 0 0 0 0 0 0 0 0
6450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 646 0 0 0 0 0 0 0 0 0 0 0 0
6460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 647 0 0 0 0 0 0 0 0 0 0 0 0
6470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 648 0 0 0 0 0 0 0 0 0 0 0 0
6480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 649 0 0 0 0 0 0 0 0 0 0 0 0
6490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 650 0 0 0 0 0 0 0 0 0 0 0 0
6500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 651 0 0 0 0 0 0 0 0 0 85 85 85
6510 0 0 0 0 0 0 0 0 0 0 0 652 0 0 0 0 0 0 85 85 85 255 255 255
6520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 653255 255 255 255 255 255 255 255 255 170 170 170
6530 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 654170 170 170 170 170 170 170 170 170 170 170 170
6540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 655255 255 255 255 255 255 255 255 255 255 255 255
6550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 656255 255 255 255 255 255 255 255 255 255 255 255
6560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 657255 255 255 0 0 0 0 0 0 0 0 0
6570 0 0 0 0 0 170 85 0 255 255 85 85 255 85 255 255 85 658 0 0 0 0 0 0 0 0 0 0 0 0
658170 170 170 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 659 0 0 0 85 85 85 0 0 0 0 0 0
659255 255 85 255 255 85 85 255 85 255 255 85 255 255 85 255 255 85 660 0 0 0 0 0 0 0 0 0 0 0 0
66085 255 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 661 0 0 0 0 0 0 0 0 0 0 0 0
66185 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 662 0 0 0 0 0 0 0 0 0 0 0 0
6620 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 663 0 0 0 0 0 0 0 0 0 0 0 0
66385 85 85 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 664 0 0 0 0 0 0 0 0 0 0 0 0
6640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 665 0 0 0 0 0 0 0 0 0 0 0 0
6650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 666 0 0 0 0 0 0 0 0 0 0 0 0
6660 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 0 0 0 0 0 0 0 0 0 0 0 0
6670 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 668 0 0 0 0 0 0 0 0 0 0 0 0
6680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 669 0 0 0 0 0 0 0 0 0 0 0 0
6690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 670 0 0 0 0 0 0 0 0 0 0 0 0
6700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 671 0 0 0 0 0 0 85 85 85 0 0 0
6710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 672 0 0 0 85 85 85 170 170 170 255 255 255
6720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 673255 255 255 255 255 255 255 255 255 255 255 255
6730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 674255 255 255 255 255 255 255 255 255 255 255 255
6740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 675255 255 255 255 255 255 255 255 255 255 255 255
6750 0 0 0 0 0 0 0 0 0 0 0 676255 255 255 255 255 255 255 255 255 255 255 255
6760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 677255 255 255 85 85 85 0 0 0 0 0 0
6770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 678 0 0 0 0 0 0 0 0 0 0 0 0
6780 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 679 0 0 0 0 0 0 85 85 85 0 0 0
6790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 680 0 0 0 0 0 0 0 0 0 0 0 0
6800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 681 0 0 0 0 0 0 0 0 0 0 0 0
6810 0 0 0 0 0 170 85 0 255 255 85 255 255 85 255 255 85 682 0 0 0 0 0 0 0 0 0 0 0 0
682255 255 255 255 255 85 255 255 85 170 85 0 255 255 85 170 85 0 683 0 0 0 0 0 0 0 0 0 0 0 0
683255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 255 255 85 684 0 0 0 0 0 0 0 0 0 0 0 0
684170 85 0 170 85 0 0 170 0 0 0 0 85 85 85 0 0 0 685 0 0 0 0 0 0 0 0 0 0 0 0
68585 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 686 0 0 0 0 0 0 0 0 0 0 0 0
6860 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 687 0 0 0 0 0 0 0 0 0 0 0 0
6870 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 688 0 0 0 0 0 0 0 0 0 0 0 0
6880 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 689 0 0 0 0 0 0 0 0 0 0 0 0
6890 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 690 0 0 0 0 0 0 0 0 0 0 0 0
6900 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 691 0 0 0 85 85 85 0 0 0 0 0 0
6910 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 692 0 0 0 85 85 85 255 255 255 255 255 255
6920 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 693255 255 255 255 255 255 255 255 255 255 255 255
6930 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 694255 255 255 255 255 255 255 255 255 255 255 255
6940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 695255 255 255 255 255 255 255 255 255 255 255 255
6950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 696255 255 255 255 255 255 255 255 255 255 255 255
6960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 697255 255 255 170 170 170 0 0 0 0 0 0
6970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 698 0 0 0 0 0 0 0 0 0 0 0 0
6980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 699 0 0 0 0 0 0 0 0 0 85 85 85
6990 0 0 0 0 0 0 0 0 0 0 0 700 0 0 0 0 0 0 0 0 0 0 0 0
7000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 701 0 0 0 0 0 0 0 0 0 0 0 0
7010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 702 0 0 0 0 0 0 0 0 0 0 0 0
7020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 703 0 0 0 0 0 0 0 0 0 0 0 0
7030 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 704 0 0 0 0 0 0 0 0 0 0 0 0
7040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 705 0 0 0 0 0 0 0 0 0 0 0 0
7050 0 0 170 85 0 85 255 85 255 255 85 170 170 170 255 255 255 706 0 0 0 0 0 0 0 0 0 0 0 0
706255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 707 0 0 0 0 0 0 0 0 0 0 0 0
707255 255 85 255 255 85 170 85 0 255 255 85 85 255 85 255 255 85 708 0 0 0 0 0 0 0 0 0 0 0 0
708255 255 85 85 255 85 0 0 0 85 85 85 0 0 0 85 85 85 709 0 0 0 0 0 0 0 0 0 0 0 0
7090 0 0 85 85 85 0 0 0 85 85 85 85 85 85 0 0 0 710 0 0 0 0 0 0 0 0 0 0 0 0
71085 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 711 0 0 0 85 85 85 0 0 0 0 0 0
71185 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 712 0 0 0 85 85 85 255 255 255 255 255 255
71285 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 713255 255 255 255 255 255 255 255 255 255 255 255
7130 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 714255 255 255 255 255 255 255 255 255 255 255 255
7140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 715255 255 255 255 255 255 255 255 255 255 255 255
7150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 716255 255 255 255 255 255 255 255 255 255 255 255
7160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 717255 255 255 255 255 255 0 0 0 0 0 0
7170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 718 0 0 0 0 0 0 0 0 0 0 0 0
7180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 719 0 0 0 0 0 0 0 0 0 0 0 0
7190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 720 85 85 85 0 0 0 0 0 0 0 0 0
7200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 721 0 0 0 0 0 0 0 0 0 0 0 0
7210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0
7220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 723 0 0 0 0 0 0 0 0 0 0 0 0
7230 0 0 0 0 0 0 0 0 0 0 0 724 0 0 0 0 0 0 0 0 0 0 0 0
7240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 725 0 0 0 0 0 0 0 0 0 0 0 0
7250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 726 0 0 0 0 0 0 0 0 0 0 0 0
7260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 727 0 0 0 0 0 0 0 0 0 0 0 0
7270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 728 0 0 0 0 0 0 0 0 0 0 0 0
7280 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 729 0 0 0 0 0 0 0 0 0 0 0 0
7290 0 0 255 255 85 255 255 85 255 255 85 255 255 255 255 255 85 730 0 0 0 0 0 0 0 0 0 0 0 0
730255 255 85 255 255 85 85 255 85 255 255 85 255 255 85 85 255 85 731 85 85 85 0 0 0 0 0 0 0 0 0
731255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 732 85 85 85 170 170 170 255 255 255 255 255 255
732255 255 85 170 85 0 85 85 85 0 0 0 0 0 0 85 85 85 733255 255 255 255 255 255 255 255 255 255 255 255
7330 0 0 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 734255 255 255 255 255 255 255 255 255 255 255 255
73485 85 85 0 0 0 85 85 85 85 85 85 0 0 0 85 85 85 735255 255 255 255 255 255 255 255 255 255 255 255
7350 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 736255 255 255 255 255 255 255 255 255 255 255 255
7360 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 737255 255 255 255 255 255 85 85 85 0 0 0
73785 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 738 0 0 0 0 0 0 0 0 0 0 0 0
7380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 739 0 0 0 0 0 0 0 0 0 0 0 0
7390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 740 0 0 0 85 85 85 0 0 0 0 0 0
7400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 741 0 0 0 0 0 0 0 0 0 0 0 0
7410 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 742 0 0 0 0 0 0 0 0 0 0 0 0
7420 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 743 0 0 0 0 0 0 0 0 0 0 0 0
7430 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 744 0 0 0 0 0 0 0 0 0 0 0 0
7440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 745 0 0 0 0 0 0 0 0 0 0 0 0
7450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 746 0 0 0 0 0 0 0 0 0 0 0 0
7460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 747 0 0 0 0 0 0 0 0 0 0 0 0
7470 0 0 0 0 0 0 0 0 0 0 0 748 0 0 0 0 0 0 0 0 0 0 0 0
7480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 749 0 0 0 0 0 0 0 0 0 0 0 0
7490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 750 0 0 0 0 0 0 0 0 0 85 85 85
7500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 751 0 0 0 0 0 0 0 0 0 0 0 0
7510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 752 85 85 85 170 170 170 170 170 170 170 170 170
7520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 753255 255 255 255 255 255 255 255 255 170 170 170
753170 85 0 170 85 0 255 255 85 255 255 85 255 255 255 170 170 170 754170 170 170 170 170 170 255 255 255 255 255 255
754255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 755255 255 255 255 255 255 255 255 255 255 255 255
755170 85 0 255 255 85 255 255 85 170 85 0 255 255 85 255 255 85 756170 170 170 170 170 170 170 170 170 170 170 170
756255 255 85 85 255 85 170 85 0 85 85 85 0 0 0 0 0 0 757170 170 170 170 170 170 170 170 170 85 85 85
75785 85 85 0 0 0 85 85 85 0 0 0 85 85 85 85 85 85 758 0 0 0 0 0 0 0 0 0 0 0 0
75885 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 759 0 0 0 0 0 0 0 0 0 0 0 0
75985 85 85 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 760 0 0 0 85 85 85 0 0 0 0 0 0
7600 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 761 0 0 0 0 0 0 0 0 0 0 0 0
7610 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 762 0 0 0 0 0 0 0 0 0 0 0 0
7620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 763 0 0 0 0 0 0 0 0 0 0 0 0
7630 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 764 0 0 0 0 0 0 0 0 0 0 0 0
7640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 765 0 0 0 0 0 0 0 0 0 0 0 0
7650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 766 0 0 0 0 0 0 0 0 0 0 0 0
7660 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 767 0 0 0 0 0 0 0 0 0 0 0 0
7670 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 768 0 0 0 0 0 0 0 0 0 0 0 0
7680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 769 0 0 0 0 0 0 0 0 0 0 0 0
7690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 770 0 0 0 0 0 0 0 0 0 85 85 85
7700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 771 0 0 0 0 0 0 0 0 0 0 0 0
7710 0 0 0 0 0 0 0 0 0 0 0 772170 170 170 170 170 170 170 170 170 255 255 255
7720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 773255 255 255 255 255 255 255 255 255 255 255 255
7730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 774170 170 170 255 255 255 255 255 255 255 255 255
7740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 775255 255 255 255 255 255 255 255 255 255 255 255
7750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 776255 255 255 255 255 255 170 170 170 170 170 170
7760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 777170 170 170 170 170 170 170 170 170 85 85 85
777255 255 85 85 255 85 255 255 85 170 170 170 255 255 255 255 255 85 778 0 0 0 0 0 0 85 85 85 0 0 0
778255 255 85 255 255 85 170 85 0 255 255 85 255 255 85 255 255 85 779 0 0 0 0 0 0 0 0 0 0 0 0
779255 255 85 255 255 85 255 255 85 255 255 85 85 255 85 170 85 0 780 0 0 0 0 0 0 85 85 85 0 0 0
780255 255 85 170 85 0 170 85 0 0 0 0 85 85 85 0 0 0 781 0 0 0 0 0 0 0 0 0 0 0 0
78185 85 85 85 85 85 85 85 85 170 170 170 170 170 170 170 170 170 782 0 0 0 0 0 0 0 0 0 0 0 0
78285 255 85 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 783 0 0 0 0 0 0 0 0 0 0 0 0
783170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 784 0 0 0 0 0 0 0 0 0 0 0 0
784170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 785 0 0 0 0 0 0 0 0 0 0 0 0
785170 170 170 170 170 170 170 170 170 170 170 170 255 255 85 170 170 170 786 0 0 0 0 0 0 0 0 0 0 0 0
78685 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 787 0 0 0 0 0 0 0 0 0 0 0 0
7870 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 788 0 0 0 0 0 0 0 0 0 0 0 0
7880 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 789 0 0 0 0 0 0 0 0 0 0 0 0
7890 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 790 0 0 0 0 0 0 85 85 85 0 0 0
7900 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 791 0 0 0 0 0 0 0 0 0 0 0 0
7910 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 792170 170 170 255 255 255 255 255 255 255 255 255
7920 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 793255 255 255 255 255 255 255 255 255 255 255 255
7930 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 794255 255 255 255 255 255 255 255 255 255 255 255
7940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 795255 255 255 255 255 255 255 255 255 255 255 255
7950 0 0 0 0 0 0 0 0 0 0 0 796255 255 255 255 255 255 255 255 255 255 255 255
7960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 797255 255 255 170 170 170 170 170 170 170 170 170
7970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 798 0 0 0 0 0 0 0 0 0 85 85 85
7980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 799 85 85 85 0 0 0 0 0 0 0 0 0
7990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 800 0 0 0 0 0 0 85 85 85 0 0 0
8000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 0 801 0 0 0 0 0 0 0 0 0 0 0 0
801170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 802 0 0 0 0 0 0 0 0 0 0 0 0
802255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 803 0 0 0 0 0 0 0 0 0 0 0 0
803255 255 85 255 255 85 85 255 85 255 255 85 170 85 0 170 85 0 804 0 0 0 0 0 0 0 0 0 0 0 0
804170 85 0 85 255 85 255 255 85 85 85 85 170 170 170 170 170 170 805 0 0 0 0 0 0 0 0 0 0 0 0
805170 170 170 170 170 170 170 170 170 85 255 85 170 170 170 170 170 170 806 0 0 0 0 0 0 0 0 0 0 0 0
80685 85 85 170 170 170 170 170 170 170 85 0 170 170 170 170 170 170 807 0 0 0 0 0 0 0 0 0 0 0 0
80785 255 85 170 170 170 170 85 0 170 170 170 85 255 85 255 85 85 808 0 0 0 0 0 0 0 0 0 0 0 0
80885 255 85 170 170 170 255 255 85 85 85 85 255 255 85 170 170 170 809 0 0 0 0 0 0 0 0 0 0 0 0
80985 255 85 170 170 170 255 255 85 170 170 170 170 170 170 85 85 85 810 0 0 0 0 0 0 85 85 85 0 0 0
8100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 811 85 85 85 0 0 0 0 0 0 85 85 85
8110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 812255 255 255 255 255 255 255 255 255 255 255 255
8120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 813255 255 255 255 255 255 255 255 255 255 255 255
8130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 814255 255 255 255 255 255 255 255 255 255 255 255
8140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 815255 255 255 255 255 255 255 255 255 255 255 255
8150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 816255 255 255 255 255 255 255 255 255 255 255 255
8160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 817255 255 255 255 255 255 170 170 170 170 170 170
8170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 818 85 85 85 0 0 0 0 0 0 0 0 0
8180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 819 0 0 0 85 85 85 0 0 0 0 0 0
8190 0 0 0 0 0 0 0 0 0 0 0 820 0 0 0 0 0 0 0 0 0 85 85 85
8200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 821 0 0 0 0 0 0 0 0 0 0 0 0
8210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 822 0 0 0 0 0 0 0 0 0 0 0 0
8220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 823 0 0 0 0 0 0 0 0 0 0 0 0
8230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 824 0 0 0 0 0 0 0 0 0 0 0 0
8240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 85 825 0 0 0 0 0 0 0 0 0 0 0 0
825255 255 85 255 255 85 255 255 85 255 255 255 255 255 85 255 255 85 826 0 0 0 0 0 0 0 0 0 0 0 0
826255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 827 0 0 0 0 0 0 0 0 0 0 0 0
827255 255 85 255 255 85 255 255 85 170 85 0 0 170 0 85 85 85 828 0 0 0 0 0 0 0 0 0 0 0 0
828170 170 170 170 170 170 255 255 85 170 170 170 170 170 170 85 255 85 829 0 0 0 0 0 0 0 0 0 0 0 0
829255 85 85 85 255 85 85 85 85 255 85 85 85 85 85 170 170 170 830 0 0 0 85 85 85 0 0 0 0 0 0
830170 85 0 170 170 170 85 85 85 85 255 85 85 85 85 85 85 85 831 85 85 85 0 0 0 0 0 0 170 170 170
83185 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 832255 255 255 255 255 255 255 255 255 255 255 255
8320 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 833255 255 255 255 255 255 255 255 255 255 255 255
833170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 834255 255 255 255 255 255 255 255 255 255 255 255
8340 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 835255 255 255 255 255 255 255 255 255 255 255 255
8350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 836255 255 255 255 255 255 255 255 255 255 255 255
8360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 837255 255 255 255 255 255 255 255 255 255 255 255
8370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 838170 170 170 85 85 85 0 0 0 0 0 0
8380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 839 0 0 0 85 85 85 85 85 85 0 0 0
8390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 840 0 0 0 0 0 0 0 0 0 85 85 85
8400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 841 0 0 0 0 0 0 0 0 0 0 0 0
8410 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 842 0 0 0 0 0 0 0 0 0 0 0 0
8420 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 843 0 0 0 0 0 0 0 0 0 0 0 0
8430 0 0 0 0 0 0 0 0 0 0 0 844 0 0 0 0 0 0 0 0 0 0 0 0
8440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 845 0 0 0 0 0 0 0 0 0 0 0 0
8450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 846 0 0 0 0 0 0 0 0 0 0 0 0
8460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 847 0 0 0 0 0 0 0 0 0 0 0 0
8470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 848 0 0 0 0 0 0 0 0 0 0 0 0
8480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 85 849 0 0 0 0 0 0 0 0 0 0 0 0
849170 85 0 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 850 0 0 0 85 85 85 0 0 0 85 85 85
850255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 851 0 0 0 0 0 0 85 85 85 255 255 255
851255 255 85 255 255 85 170 85 0 255 255 85 85 85 85 85 85 85 852255 255 255 255 255 255 255 255 255 255 255 255
852255 255 85 170 170 170 85 85 85 85 85 85 0 0 0 85 85 85 853255 255 255 255 255 255 255 255 255 255 255 255
8530 0 0 85 85 85 85 85 85 170 170 170 170 85 0 170 170 170 854255 255 255 255 255 255 255 255 255 255 255 255
854170 170 170 255 255 85 170 170 170 85 85 85 85 85 85 85 85 85 855255 255 255 255 255 255 255 255 255 255 255 255
8550 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 856255 255 255 255 255 255 255 255 255 255 255 255
85685 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 857255 255 255 255 255 255 255 255 255 255 255 255
8570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 858255 255 255 170 170 170 0 0 0 85 85 85
8580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 859 85 85 85 0 0 0 85 85 85 0 0 0
8590 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 860 0 0 0 0 0 0 0 0 0 85 85 85
8600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 861 0 0 0 0 0 0 0 0 0 0 0 0
8610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 862 0 0 0 0 0 0 0 0 0 0 0 0
8620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 863 0 0 0 0 0 0 0 0 0 0 0 0
8630 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 864 0 0 0 0 0 0 0 0 0 0 0 0
8640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 865 0 0 0 0 0 0 0 0 0 0 0 0
8650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 866 0 0 0 0 0 0 0 0 0 0 0 0
8660 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 867 0 0 0 0 0 0 0 0 0 0 0 0
8670 0 0 0 0 0 0 0 0 0 0 0 868 0 0 0 0 0 0 0 0 0 0 0 0
8680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 869 0 0 0 0 0 0 0 0 0 0 0 0
8690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 870 0 0 0 85 85 85 0 0 0 85 85 85
8700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 871 0 0 0 85 85 85 170 170 170 255 255 255
8710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 872255 255 255 255 255 255 255 255 255 255 255 255
8720 0 0 0 0 0 0 0 0 0 0 0 170 85 0 255 255 85 873255 255 255 255 255 255 255 255 255 255 255 255
873255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 874255 255 255 255 255 255 255 255 255 255 255 255
874255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 875255 255 255 255 255 255 255 255 255 255 255 255
875255 255 85 255 255 85 255 255 85 170 85 0 170 85 0 0 170 0 876255 255 255 255 255 255 255 255 255 255 255 255
8760 0 0 170 85 0 170 85 0 0 170 0 0 0 0 0 0 0 877255 255 255 255 255 255 255 255 255 255 255 255
87785 85 85 0 0 0 85 85 85 85 85 85 170 170 170 85 85 85 878255 255 255 170 170 170 0 0 0 85 85 85
878170 170 170 85 85 85 85 85 85 170 170 170 170 85 0 85 85 85 879 85 85 85 0 0 0 85 85 85 0 0 0
87985 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 880 0 0 0 0 0 0 0 0 0 0 0 0
8800 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 881 85 85 85 0 0 0 0 0 0 0 0 0
88185 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 882 0 0 0 0 0 0 0 0 0 0 0 0
8820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 883 0 0 0 0 0 0 0 0 0 0 0 0
8830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 884 0 0 0 0 0 0 0 0 0 0 0 0
8840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 885 0 0 0 0 0 0 0 0 0 0 0 0
8850 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 886 0 0 0 0 0 0 0 0 0 0 0 0
8860 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 887 0 0 0 0 0 0 0 0 0 0 0 0
8870 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 888 0 0 0 0 0 0 0 0 0 0 0 0
8880 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 889 0 0 0 0 0 0 0 0 0 0 0 0
8890 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 890 85 85 85 0 0 0 0 0 0 85 85 85
8900 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 891 0 0 0 170 170 170 255 255 255 255 255 255
8910 0 0 0 0 0 0 0 0 0 0 0 892255 255 255 255 255 255 255 255 255 255 255 255
8920 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 893255 255 255 255 255 255 255 255 255 255 255 255
8930 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 894255 255 255 255 255 255 255 255 255 255 255 255
8940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 895255 255 255 255 255 255 255 255 255 255 255 255
8950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 896255 255 255 255 255 255 255 255 255 255 255 255
8960 0 0 0 0 0 0 0 0 0 0 0 255 255 85 170 85 0 897255 255 255 255 255 255 255 255 255 255 255 255
897255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 898255 255 255 255 255 255 85 85 85 0 0 0
898255 255 85 255 255 85 255 255 85 170 85 0 255 255 85 255 255 85 899 0 0 0 0 0 0 0 0 0 85 85 85
899170 85 0 255 255 85 85 255 85 255 255 85 255 255 85 170 85 0 900 0 0 0 0 0 0 0 0 0 0 0 0
900170 85 0 255 255 85 170 85 0 0 0 0 0 0 0 0 0 0 901 85 85 85 0 0 0 0 0 0 0 0 0
9010 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 902 0 0 0 0 0 0 0 0 0 0 0 0
90285 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 903 0 0 0 0 0 0 0 0 0 0 0 0
9030 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 904 0 0 0 0 0 0 0 0 0 0 0 0
90485 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 905 0 0 0 0 0 0 0 0 0 0 0 0
9050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 906 0 0 0 0 0 0 0 0 0 0 0 0
9060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 907 0 0 0 0 0 0 0 0 0 0 0 0
9070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 908 0 0 0 0 0 0 0 0 0 0 0 0
9080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 909 0 0 0 0 0 0 0 0 0 0 0 0
9090 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 910 85 85 85 0 0 0 85 85 85 0 0 0
9100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 911 0 0 0 255 255 255 255 255 255 255 255 255
9110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 912255 255 255 255 255 255 255 255 255 255 255 255
9120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 913255 255 255 255 255 255 255 255 255 255 255 255
9130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 914255 255 255 255 255 255 255 255 255 255 255 255
9140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 915255 255 255 255 255 255 255 255 255 255 255 255
9150 0 0 0 0 0 0 0 0 0 0 0 916255 255 255 255 255 255 255 255 255 255 255 255
9160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 917255 255 255 255 255 255 255 255 255 255 255 255
9170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 918255 255 255 255 255 255 170 170 170 0 0 0
9180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 919 0 0 0 0 0 0 0 0 0 85 85 85
9190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 920 0 0 0 0 0 0 0 0 0 0 0 0
9200 0 0 0 0 0 0 0 0 0 0 0 255 255 85 255 255 85 921 85 85 85 0 0 0 0 0 0 0 0 0
921255 255 85 255 255 85 170 85 0 255 255 85 255 255 85 255 255 85 922 0 0 0 0 0 0 0 0 0 0 0 0
922255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 923 0 0 0 0 0 0 0 0 0 0 0 0
923255 255 85 255 255 85 255 255 85 170 85 0 255 255 85 255 255 85 924 0 0 0 0 0 0 0 0 0 0 0 0
92485 255 85 170 85 0 0 170 0 85 85 85 0 0 0 85 85 85 925 0 0 0 0 0 0 0 0 0 0 0 0
9250 0 0 85 85 85 0 0 0 85 85 85 85 85 85 85 85 85 926 0 0 0 0 0 0 0 0 0 0 0 0
92685 85 85 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 927 0 0 0 0 0 0 0 0 0 0 0 0
9270 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 928 0 0 0 0 0 0 0 0 0 0 0 0
9280 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 929 0 0 0 0 0 0 0 0 0 85 85 85
9290 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 930 0 0 0 0 0 0 85 85 85 0 0 0
9300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 931 85 85 85 255 255 255 255 255 255 255 255 255
9310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 932255 255 255 255 255 255 255 255 255 255 255 255
9320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 933255 255 255 255 255 255 255 255 255 255 255 255
9330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 934255 255 255 255 255 255 255 255 255 255 255 255
9340 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 935255 255 255 255 255 255 255 255 255 255 255 255
9350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 936255 255 255 255 255 255 255 255 255 255 255 255
9360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 937255 255 255 255 255 255 255 255 255 255 255 255
9370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 938255 255 255 255 255 255 170 170 170 0 0 0
9380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 939 0 0 0 0 0 0 0 0 0 85 85 85
9390 0 0 0 0 0 0 0 0 0 0 0 940 0 0 0 0 0 0 0 0 0 0 0 0
9400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 941 85 85 85 0 0 0 0 0 0 0 0 0
9410 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 942 0 0 0 0 0 0 0 0 0 0 0 0
9420 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 943 0 0 0 0 0 0 0 0 0 0 0 0
9430 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 944 0 0 0 0 0 0 0 0 0 0 0 0
9440 0 0 0 0 0 0 0 0 0 170 0 170 85 0 255 255 85 945 0 0 0 0 0 0 0 0 0 0 0 0
94585 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 946 0 0 0 0 0 0 0 0 0 0 0 0
946255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 947 0 0 0 0 0 0 0 0 0 0 0 0
947170 85 0 255 255 85 85 255 85 255 255 85 255 255 85 170 85 0 948 0 0 0 0 0 0 0 0 0 0 0 0
94885 255 85 170 85 0 170 85 0 0 0 0 0 0 0 0 0 0 949 0 0 0 0 0 0 0 0 0 85 85 85
9490 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 950 0 0 0 85 85 85 0 0 0 0 0 0
9500 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 951170 170 170 255 255 255 255 255 255 255 255 255
9510 0 0 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 952255 255 255 255 255 255 255 255 255 255 255 255
9520 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 953255 255 255 255 255 255 255 255 255 255 255 255
9530 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 954255 255 255 255 255 255 255 255 255 255 255 255
9540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 955255 255 255 255 255 255 255 255 255 255 255 255
9550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 956255 255 255 255 255 255 255 255 255 255 255 255
9560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 957255 255 255 255 255 255 255 255 255 255 255 255
9570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 958255 255 255 255 255 255 170 170 170 0 0 0
9580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 959 0 0 0 0 0 0 0 0 0 85 85 85
9590 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 960 0 0 0 0 0 0 0 0 0 0 0 0
9600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 961 0 0 0 85 85 85 0 0 0 0 0 0
9610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 962 0 0 0 0 0 0 0 0 0 0 0 0
9620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 963 0 0 0 0 0 0 0 0 0 0 0 0
9630 0 0 0 0 0 0 0 0 0 0 0 964 0 0 0 0 0 0 0 0 0 0 0 0
9640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 965 0 0 0 0 0 0 0 0 0 0 0 0
9650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 966 0 0 0 0 0 0 0 0 0 0 0 0
9660 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 967 0 0 0 0 0 0 0 0 0 0 0 0
9670 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 968 0 0 0 0 0 0 0 0 0 0 0 0
9680 0 0 0 0 0 0 0 0 170 85 0 255 255 85 255 255 85 969 0 0 0 0 0 0 85 85 85 0 0 0
969255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 970 0 0 0 85 85 85 0 0 0 0 0 0
970255 255 85 170 85 0 255 255 85 85 255 85 255 255 85 170 85 0 971255 255 255 255 255 255 255 255 255 255 255 255
971255 255 85 255 255 85 170 85 0 255 255 85 170 85 0 85 255 85 972255 255 255 255 255 255 255 255 255 255 255 255
972170 85 0 170 85 0 0 0 0 0 0 0 0 0 0 85 85 85 973255 255 255 255 255 255 170 170 170 255 255 255
9730 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 974255 255 255 255 255 255 255 255 255 255 255 255
9740 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 975255 255 255 255 255 255 255 255 255 255 255 255
9750 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 976255 255 255 255 255 255 255 255 255 255 255 255
9760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 977255 255 255 255 255 255 255 255 255 255 255 255
97785 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 978255 255 255 255 255 255 255 255 255 0 0 0
9780 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 979 0 0 0 0 0 0 0 0 0 85 85 85
9790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 980 0 0 0 0 0 0 0 0 0 0 0 0
9800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 981 0 0 0 85 85 85 0 0 0 0 0 0
9810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 982 0 0 0 0 0 0 0 0 0 0 0 0
9820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 983 0 0 0 0 0 0 0 0 0 0 0 0
9830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 984 0 0 0 0 0 0 0 0 0 0 0 0
9840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 985 0 0 0 0 0 0 0 0 0 0 0 0
9850 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 986 0 0 0 0 0 0 0 0 0 0 0 0
9860 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 987 0 0 0 0 0 0 0 0 0 0 0 0
9870 0 0 0 0 0 0 0 0 0 0 0 988 0 0 0 0 0 0 0 0 0 0 0 0
9880 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 989 0 0 0 85 85 85 0 0 0 0 0 0
9890 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 990 0 0 0 85 85 85 0 0 0 0 0 0
9900 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 991255 255 255 255 255 255 255 255 255 255 255 255
9910 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 992255 255 255 255 255 255 255 255 255 255 255 255
9920 0 0 0 0 0 0 0 0 85 85 85 255 255 85 170 85 0 993255 255 255 255 255 255 170 170 170 255 255 255
993255 255 85 170 85 0 255 255 85 170 85 0 255 255 85 85 255 85 994255 255 255 255 255 255 255 255 255 255 255 255
994255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 995255 255 255 255 255 255 255 255 255 255 255 255
995255 255 85 170 85 0 255 255 85 85 255 85 170 85 0 170 85 0 996255 255 255 255 255 255 255 255 255 255 255 255
9960 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 997255 255 255 255 255 255 255 255 255 255 255 255
9970 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 998255 255 255 255 255 255 255 255 255 0 0 0
9980 0 0 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 999 0 0 0 0 0 0 0 0 0 85 85 85
9990 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0
10000 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 1001 0 0 0 85 85 85 0 0 0 0 0 0
10010 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 1002 0 0 0 0 0 0 0 0 0 0 0 0
100285 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1003 0 0 0 0 0 0 0 0 0 0 0 0
10030 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1004 0 0 0 0 0 0 0 0 0 0 0 0
10040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1005 0 0 0 0 0 0 0 0 0 0 0 0
10050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1006 0 0 0 0 0 0 0 0 0 0 0 0
10060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1007 0 0 0 0 0 0 0 0 0 0 0 0
10070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1008 0 0 0 0 0 0 0 0 0 0 0 0
10080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1009 0 0 0 85 85 85 0 0 0 0 0 0
10090 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1010 0 0 0 85 85 85 0 0 0 85 85 85
10100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1011255 255 255 255 255 255 255 255 255 255 255 255
10110 0 0 0 0 0 0 0 0 0 0 0 1012255 255 255 255 255 255 255 255 255 255 255 255
10120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1013255 255 255 255 255 255 170 170 170 255 255 255
10130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1014255 255 255 255 255 255 255 255 255 255 255 255
10140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1015255 255 255 255 255 255 255 255 255 255 255 255
10150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1016255 255 255 255 255 255 255 255 255 255 255 255
10160 0 0 0 0 0 0 0 0 170 85 0 255 255 85 255 255 85 1017255 255 255 255 255 255 255 255 255 255 255 255
1017255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 1018255 255 255 255 255 255 255 255 255 0 0 0
1018255 255 85 255 255 85 170 85 0 255 255 85 170 85 0 85 255 85 1019 0 0 0 0 0 0 0 0 0 85 85 85
1019255 255 85 85 255 85 170 85 0 170 85 0 85 255 85 170 85 0 1020 0 0 0 0 0 0 0 0 0 0 0 0
10200 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 1021 0 0 0 85 85 85 0 0 0 0 0 0
10210 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 1022 0 0 0 0 0 0 0 0 0 0 0 0
102285 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1023 0 0 0 0 0 0 0 0 0 0 0 0
10230 0 0 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 1024 0 0 0 0 0 0 0 0 0 0 0 0
10240 0 0 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 1025 0 0 0 0 0 0 0 0 0 0 0 0
102585 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 1026 0 0 0 0 0 0 0 0 0 0 0 0
102685 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1027 0 0 0 0 0 0 0 0 0 0 0 0
10270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1028 0 0 0 0 0 0 0 0 0 0 0 0
10280 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1029 0 0 0 85 85 85 0 0 0 0 0 0
10290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1030 0 0 0 85 85 85 0 0 0 85 85 85
10300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1031255 255 255 255 255 255 255 255 255 255 255 255
10310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1032255 255 255 255 255 255 255 255 255 255 255 255
10320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1033255 255 255 255 255 255 170 170 170 255 255 255
10330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1034255 255 255 255 255 255 255 255 255 255 255 255
10340 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1035255 255 255 255 255 255 255 255 255 255 255 255
10350 0 0 0 0 0 0 0 0 0 0 0 1036255 255 255 255 255 255 255 255 255 255 255 255
10360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1037255 255 255 255 255 255 255 255 255 255 255 255
10370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1038255 255 255 255 255 255 255 255 255 0 0 0
10380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1039 0 0 0 0 0 0 0 0 0 85 85 85
10390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1040 0 0 0 0 0 0 0 0 0 0 0 0
10400 0 0 0 0 0 0 0 0 85 85 85 255 255 85 85 255 85 1041 0 0 0 85 85 85 0 0 0 0 0 0
1041255 255 85 255 255 85 85 255 85 255 255 85 255 255 85 255 255 85 1042 0 0 0 0 0 0 0 0 0 0 0 0
1042255 255 85 170 85 0 255 255 85 85 255 85 255 255 85 255 255 85 1043 0 0 0 0 0 0 0 0 0 0 0 0
1043170 85 0 170 85 0 85 255 85 170 85 0 0 0 0 0 0 0 1044 0 0 0 0 0 0 0 0 0 0 0 0
10440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1045 0 0 0 0 0 0 0 0 0 0 0 0
10450 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 1046 0 0 0 0 0 0 0 0 0 0 0 0
10460 0 0 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 1047 0 0 0 0 0 0 0 0 0 0 0 0
10470 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 1048 0 0 0 0 0 0 0 0 0 0 0 0
10480 0 0 85 85 85 85 85 85 170 170 170 170 170 170 170 170 170 1049 0 0 0 85 85 85 0 0 0 0 0 0
1049170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 1050 0 0 0 0 0 0 85 85 85 85 85 85
105085 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1051255 255 255 255 255 255 255 255 255 255 255 255
10510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1052255 255 255 255 255 255 255 255 255 255 255 255
10520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1053255 255 255 255 255 255 170 170 170 255 255 255
10530 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1054255 255 255 255 255 255 255 255 255 255 255 255
10540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1055255 255 255 255 255 255 255 255 255 255 255 255
10550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1056255 255 255 255 255 255 255 255 255 255 255 255
10560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1057255 255 255 255 255 255 255 255 255 255 255 255
10570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1058255 255 255 255 255 255 255 255 255 0 0 0
10580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1059 0 0 0 0 0 0 0 0 0 85 85 85
10590 0 0 0 0 0 0 0 0 0 0 0 1060 0 0 0 0 0 0 0 0 0 0 0 0
10600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1061 0 0 0 85 85 85 0 0 0 0 0 0
10610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1062 0 0 0 0 0 0 0 0 0 0 0 0
10620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1063 0 0 0 0 0 0 0 0 0 0 0 0
10630 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1064 0 0 0 0 0 0 0 0 0 0 0 0
10640 0 0 0 0 0 0 0 0 85 85 85 255 255 85 255 255 85 1065 0 0 0 0 0 0 0 0 0 0 0 0
1065170 85 0 255 255 85 255 255 85 170 85 0 255 255 85 170 85 0 1066 0 0 0 0 0 0 0 0 0 0 0 0
1066255 255 85 85 255 85 170 85 0 255 255 85 170 85 0 85 255 85 1067 0 0 0 0 0 0 0 0 0 0 0 0
1067170 85 0 170 85 0 0 0 0 0 0 0 0 0 0 0 0 0 1068 0 0 0 0 0 0 0 0 0 0 0 0
10680 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 1069 0 0 0 85 85 85 0 0 0 0 0 0
106985 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 1070 0 0 0 0 0 0 0 0 0 85 85 85
10700 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 1071255 255 255 255 255 255 255 255 255 255 255 255
10710 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 1072255 255 255 255 255 255 255 255 255 255 255 255
107285 85 85 0 0 0 170 170 170 170 170 170 170 170 170 170 170 170 1073255 255 255 255 255 255 170 170 170 255 255 255
1073170 170 170 170 170 170 170 170 170 85 85 85 85 85 85 85 85 85 1074255 255 255 255 255 255 255 255 255 255 255 255
107485 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1075255 255 255 255 255 255 255 255 255 255 255 255
10750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1076255 255 255 255 255 255 255 255 255 255 255 255
10760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1077255 255 255 255 255 255 255 255 255 255 255 255
10770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1078255 255 255 255 255 255 255 255 255 0 0 0
10780 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1079 85 85 85 85 85 85 85 85 85 85 85 85
10790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1080 85 85 85 0 0 0 0 0 0 0 0 0
10800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1081 0 0 0 85 85 85 0 0 0 0 0 0
10810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1082 0 0 0 0 0 0 0 0 0 0 0 0
10820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1083 0 0 0 0 0 0 0 0 0 0 0 0
10830 0 0 0 0 0 0 0 0 0 0 0 1084 0 0 0 0 0 0 0 0 0 0 0 0
10840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1085 0 0 0 0 0 0 0 0 0 0 0 0
10850 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1086 0 0 0 0 0 0 0 0 0 0 0 0
10860 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1087 0 0 0 0 0 0 0 0 0 0 0 0
10870 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1088 0 0 0 0 0 0 0 0 0 0 0 0
10880 0 0 0 0 0 0 0 0 0 0 0 170 85 0 255 255 85 1089 0 0 0 85 85 85 0 0 0 170 85 0
1089255 255 85 255 255 85 255 255 85 255 255 85 255 255 85 85 255 85 1090255 255 85 170 85 0 0 0 0 0 0 0
1090170 85 0 255 255 85 170 85 0 85 255 85 170 85 0 170 85 0 1091 85 85 85 255 255 255 255 255 255 255 255 255
10910 170 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 1092255 255 255 255 255 255 255 255 255 255 255 255
10920 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1093255 255 255 255 255 255 170 170 170 255 255 255
10930 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 1094255 255 255 255 255 255 255 255 255 255 255 255
10940 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 1095255 255 255 255 255 255 255 255 255 255 255 255
10950 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 1096255 255 255 255 255 255 255 255 255 255 255 255
10960 0 0 85 85 85 170 170 170 170 170 170 255 255 255 170 170 170 1097255 255 255 255 255 255 255 255 255 255 255 255
1097170 170 170 170 170 170 85 85 85 85 85 85 85 85 85 85 85 85 1098255 255 255 255 255 255 255 255 255 85 85 85
10980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1099 0 0 0 0 0 0 0 0 0 0 0 0
10990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1100 0 0 0 85 85 85 85 85 85 0 0 0
11000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1101 0 0 0 85 85 85 0 0 0 0 0 0
11010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1102 0 0 0 0 0 0 0 0 0 0 0 0
11020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1103 0 0 0 0 0 0 0 0 0 0 0 0
11030 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1104 0 0 0 0 0 0 0 0 0 0 0 0
11040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1105 0 0 0 0 0 0 0 0 0 0 0 0
11050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1106 0 0 0 0 0 0 0 0 0 0 0 0
11060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1107 0 0 0 0 0 0 0 0 0 0 0 0
11070 0 0 0 0 0 0 0 0 0 0 0 1108 0 0 0 0 0 0 0 0 0 0 0 0
11080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1109 0 0 0 0 0 0 170 85 0 255 255 85
11090 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1110170 85 0 255 255 85 170 85 0 0 0 0
11100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1111 0 0 0 85 85 85 255 255 255 255 255 255
11110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1112255 255 255 255 255 255 255 255 255 255 255 255
11120 0 0 0 0 0 0 0 0 0 0 0 85 255 85 255 255 85 1113255 255 255 255 255 255 170 170 170 255 255 255
1113170 85 0 255 255 85 255 255 85 170 85 0 85 255 85 170 85 0 1114255 255 255 255 255 255 255 255 255 255 255 255
1114255 255 85 170 85 0 0 170 0 170 85 0 0 0 0 0 0 0 1115255 255 255 255 255 255 255 255 255 255 255 255
11150 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 1116255 255 255 255 255 255 255 255 255 255 255 255
11160 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 1117255 255 255 255 255 255 255 255 255 255 255 255
111785 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 1118255 255 85 170 85 0 255 255 85 0 0 0
11180 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 1119 0 0 0 0 0 0 0 0 0 0 0 0
111985 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1120 0 0 0 0 0 0 85 85 85 85 85 85
112085 85 85 0 0 0 170 170 170 170 170 170 170 170 170 85 85 85 1121 85 85 85 0 0 0 0 0 0 0 0 0
112185 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 1122 0 0 0 0 0 0 0 0 0 0 0 0
11220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1123 0 0 0 0 0 0 0 0 0 0 0 0
11230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1124 0 0 0 0 0 0 0 0 0 0 0 0
11240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1125 0 0 0 0 0 0 0 0 0 0 0 0
11250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1126 0 0 0 0 0 0 0 0 0 0 0 0
11260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1127 0 0 0 0 0 0 0 0 0 0 0 0
11270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1128 0 0 0 0 0 0 0 0 0 0 0 0
11280 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1129 0 0 0 170 85 0 255 255 85 170 85 0
11290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1130255 255 85 170 85 0 255 255 85 170 85 0
11300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1131 0 0 0 0 0 0 85 85 85 255 255 255
11310 0 0 0 0 0 0 0 0 0 0 0 1132255 255 255 255 255 255 255 255 255 255 255 255
11320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1133255 255 255 255 255 255 255 255 255 255 255 255
11330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1134255 255 255 255 255 255 255 255 255 255 255 255
11340 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1135255 255 255 255 255 255 255 255 255 255 255 255
11350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1136255 255 255 255 255 255 255 255 255 255 255 255
11360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 85 1137255 255 255 255 255 255 255 255 255 255 255 85
1137255 255 85 255 255 85 255 255 85 255 255 85 170 85 0 170 85 0 1138170 85 0 255 255 85 170 85 0 0 0 0
11380 170 0 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 1139 0 0 0 0 0 0 0 0 0 0 0 0
11390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 1140 0 0 0 0 0 0 0 0 0 0 0 0
11400 0 0 0 0 0 85 85 85 0 0 0 85 85 85 85 85 85 1141170 85 0 0 0 0 0 0 0 0 0 0
114185 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 1142 0 0 0 0 0 0 0 0 0 0 0 0
114285 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 1143 0 0 0 0 0 0 0 0 0 0 0 0
11430 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 1144 0 0 0 0 0 0 0 0 0 0 0 0
11440 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 1145 0 0 0 0 0 0 0 0 0 0 0 0
114585 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1146 0 0 0 0 0 0 0 0 0 0 0 0
11460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1147 0 0 0 0 0 0 0 0 0 0 0 0
11470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1148 0 0 0 0 0 0 0 0 0 0 0 0
11480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1149170 85 0 255 255 85 170 85 0 255 255 85
11490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1150170 85 0 255 255 85 170 85 0 255 255 85
11500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1151170 85 0 0 0 0 0 0 0 85 85 85
11510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1152255 255 255 255 255 255 255 255 255 255 255 255
11520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1153255 255 255 255 255 255 255 255 255 255 255 255
11530 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1154255 255 255 255 255 255 255 255 255 255 255 255
11540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1155255 255 255 255 255 255 255 255 255 255 255 255
11550 0 0 0 0 0 0 0 0 0 0 0 1156255 255 255 255 255 255 255 255 255 255 255 255
11560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1157255 255 255 255 255 255 255 255 255 170 85 0
11570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1158255 255 85 170 85 0 255 255 85 0 0 0
11580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1159 0 0 0 0 0 0 0 0 0 0 0 0
11590 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1160 0 0 0 0 0 0 0 0 0 170 85 0
11600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1161255 255 85 170 85 0 0 0 0 0 0 0
1161255 255 85 255 255 85 170 85 0 0 170 0 85 85 85 85 85 85 1162 0 0 0 0 0 0 0 0 0 0 0 0
116285 85 85 85 85 85 0 0 0 85 85 85 85 85 85 0 0 0 1163 0 0 0 0 0 0 0 0 0 0 0 0
116385 85 85 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 1164 0 0 0 0 0 0 0 0 0 0 0 0
116485 85 85 85 85 85 85 85 85 170 170 170 170 170 170 85 85 85 1165 0 0 0 0 0 0 0 0 0 0 0 0
1165170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 85 85 85 1166 0 0 0 0 0 0 0 0 0 0 0 0
116685 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 1167 0 0 0 0 0 0 0 0 0 170 85 0
116785 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1168255 255 85 170 85 0 255 255 85 170 85 0
116885 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 1169255 255 85 170 85 0 255 255 85 170 85 0
11690 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 1170255 255 85 170 85 0 255 255 85 170 85 0
117085 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1171255 255 85 0 0 0 0 0 0 0 0 0
11710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1172 85 85 85 255 255 255 255 255 255 255 255 255
11720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1173255 255 255 255 255 255 255 255 255 255 255 255
11730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1174255 255 255 255 255 255 255 255 255 255 255 255
11740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1175255 255 255 255 255 255 255 255 255 255 255 255
11750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1176255 255 255 255 255 255 255 255 255 255 255 255
11760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1177255 255 255 255 255 255 255 255 255 255 255 85
11770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1178170 85 0 255 255 85 170 85 0 0 0 0
11780 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1179 0 0 0 0 0 0 0 0 0 0 0 0
11790 0 0 0 0 0 0 0 0 0 0 0 1180 0 0 0 0 0 0 0 0 0 255 255 85
11800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1181170 85 0 255 255 85 0 0 0 0 0 0
11810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1182 0 0 0 0 0 0 0 0 0 0 0 0
11820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1183 0 0 0 0 0 0 0 0 0 0 0 0
11830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1184 0 0 0 0 0 0 0 0 0 0 0 0
11840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1185 0 0 0 0 0 0 0 0 0 0 0 0
11850 0 0 170 85 0 85 85 85 0 0 0 0 0 0 0 0 0 1186 0 0 0 0 0 0 0 0 0 0 0 0
118685 85 85 85 85 85 85 85 85 85 85 85 170 170 170 85 85 85 1187 0 0 0 0 0 0 170 85 0 255 255 85
118785 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 1188170 85 0 255 255 85 170 85 0 255 255 85
1188170 170 170 170 170 170 170 170 170 170 170 170 255 255 255 255 255 255 1189170 85 0 255 255 85 170 85 0 255 255 85
1189255 255 255 255 255 255 255 255 255 170 170 170 255 255 255 170 170 170 1190170 85 0 255 255 85 170 85 0 255 255 85
1190170 170 170 170 170 170 170 170 170 85 85 85 85 85 85 85 85 85 1191170 85 0 255 255 85 0 0 0 0 0 0
11910 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 1192 0 0 0 85 85 85 255 255 255 255 255 255
11920 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 1193255 255 255 255 255 255 255 255 255 255 255 255
11930 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 1194255 255 255 255 255 255 255 255 255 255 255 255
11940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1195255 255 255 255 255 255 255 255 255 255 255 255
11950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1196255 255 255 255 255 255 255 255 255 255 255 255
11960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1197255 255 255 255 255 255 170 170 170 170 85 0
11970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1198255 255 85 170 85 0 255 255 85 170 85 0
11980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1199 0 0 0 0 0 0 0 0 0 0 0 0
11990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1200 0 0 0 0 0 0 255 255 85 170 85 0
12000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1201255 255 85 170 85 0 0 0 0 0 0 0
12010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1202 0 0 0 0 0 0 0 0 0 0 0 0
12020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1203 0 0 0 0 0 0 0 0 0 0 0 0
12030 0 0 0 0 0 0 0 0 0 0 0 1204 0 0 0 0 0 0 0 0 0 0 0 0
12040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1205 0 0 0 0 0 0 0 0 0 0 0 0
12050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1206 0 0 0 0 0 0 0 0 0 0 0 0
12060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1207 0 0 0 0 0 0 255 255 85 170 85 0
12070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1208255 255 85 170 85 0 255 255 85 170 85 0
12080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1209255 255 85 170 85 0 255 255 85 170 85 0
12090 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 1210255 255 85 170 85 0 255 255 85 170 85 0
121085 85 85 85 85 85 85 85 85 85 85 85 170 170 170 170 170 170 1211255 255 85 170 85 0 255 255 85 0 0 0
1211255 255 255 255 255 255 255 255 255 170 170 170 255 255 255 170 170 170 1212 0 0 0 0 0 0 85 85 85 255 255 255
1212255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1213255 255 255 255 255 255 255 255 255 255 255 255
1213255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1214255 255 255 255 255 255 255 255 255 255 255 255
1214255 255 255 255 255 255 170 170 170 255 255 255 170 170 170 85 85 85 1215255 255 255 255 255 255 255 255 255 255 255 255
12150 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 1216255 255 255 255 255 255 255 255 255 255 255 255
121685 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1217255 255 255 170 170 170 170 170 170 255 255 85
121785 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 1218170 85 0 255 255 85 170 85 0 255 255 85
12180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1219170 85 0 255 255 85 170 85 0 255 255 85
12190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1220170 85 0 255 255 85 170 85 0 255 255 85
12200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1221170 85 0 255 255 85 0 0 0 0 0 0
12210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1222 0 0 0 0 0 0 0 0 0 0 0 0
12220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1223 0 0 0 0 0 0 0 0 0 0 0 0
12230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1224 0 0 0 0 0 0 0 0 0 0 0 0
12240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1225 0 0 0 0 0 0 0 0 0 0 0 0
12250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1226 0 0 0 0 0 0 0 0 0 0 0 0
12260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1227 0 0 0 0 0 0 170 85 0 255 255 85
12270 0 0 0 0 0 0 0 0 0 0 0 1228170 85 0 255 255 85 170 85 0 255 255 85
12280 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1229170 85 0 255 255 85 170 85 0 255 255 85
12290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1230170 85 0 255 255 85 170 85 0 255 255 85
12300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1231170 85 0 255 255 85 170 85 0 0 0 0
12310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1232 0 0 0 0 0 0 0 0 0 85 85 85
12320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1233255 255 255 255 255 255 255 255 255 255 255 255
12330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 1234255 255 255 255 255 255 255 255 255 255 255 255
123485 85 85 85 85 85 85 85 85 85 85 85 170 170 170 170 170 170 1235255 255 255 255 255 255 255 255 255 255 255 255
1235255 255 255 170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 1236255 255 255 255 255 255 255 255 255 255 255 255
1236255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 1237255 255 255 170 170 170 170 170 170 170 85 0
1237255 255 255 255 255 255 170 170 170 255 255 255 255 255 255 255 255 255 1238255 255 85 170 85 0 255 255 85 170 85 0
1238255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 85 85 85 1239255 255 85 170 85 0 255 255 85 170 85 0
12390 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 1240255 255 85 170 85 0 255 255 85 170 85 0
12400 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 1241255 255 85 170 85 0 255 255 85 0 0 0
12410 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1242 0 0 0 0 0 0 0 0 0 0 0 0
124285 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 1243 0 0 0 0 0 0 0 0 0 0 0 0
12430 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1244 0 0 0 0 0 0 0 0 0 0 0 0
12440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1245 0 0 0 0 0 0 0 0 0 0 0 0
12450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1246 0 0 0 0 0 0 0 0 0 0 0 0
12460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1247 0 0 0 0 0 0 255 255 85 170 85 0
12470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1248255 255 85 170 85 0 255 255 85 170 85 0
12480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1249255 255 85 170 85 0 255 255 85 170 85 0
12490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1250255 255 85 170 85 0 255 255 85 170 85 0
12500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1251255 255 85 170 85 0 255 255 85 170 85 0
12510 0 0 0 0 0 0 0 0 0 0 0 1252 0 0 0 0 0 0 0 0 0 0 0 0
12520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1253 0 0 0 255 255 255 255 255 255 255 255 255
12530 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1254255 255 255 255 255 255 255 255 255 255 255 255
12540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1255255 255 255 255 255 255 255 255 255 255 255 255
12550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1256255 255 255 255 255 255 255 255 255 255 255 255
12560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1257255 255 255 170 170 170 170 170 170 255 255 85
12570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 1258170 85 0 255 255 85 170 85 0 255 255 85
125885 85 85 85 85 85 85 85 85 85 85 85 85 85 85 170 170 170 1259170 85 0 255 255 85 170 85 0 255 255 85
1259170 170 170 170 170 170 255 255 255 170 170 170 255 255 255 170 170 170 1260170 85 0 255 255 85 170 85 0 255 255 85
1260255 255 255 170 170 170 255 255 255 170 170 170 255 255 255 255 255 255 1261170 85 0 255 255 85 170 85 0 255 255 85
1261255 255 255 170 170 170 255 255 255 170 170 170 255 255 255 170 170 170 1262 0 0 0 0 0 0 0 0 0 0 0 0
1262170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 85 85 85 1263 0 0 0 0 0 0 0 0 0 0 0 0
12630 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1264 0 0 0 0 0 0 0 0 0 0 0 0
126485 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1265 0 0 0 0 0 0 0 0 0 0 0 0
126585 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 1266 0 0 0 0 0 0 0 0 0 0 0 0
12660 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1267 0 0 0 0 0 0 170 85 0 255 255 85
12670 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1268170 85 0 255 255 85 170 85 0 255 255 85
12680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1269170 85 0 255 255 85 170 85 0 255 255 85
12690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1270170 85 0 255 255 85 170 85 0 255 255 85
12700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1271170 85 0 255 255 85 170 85 0 255 255 85
12710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1272170 85 0 0 0 0 0 0 0 0 0 0
12720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1273 0 0 0 255 255 255 255 255 255 255 255 255
12730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1274255 255 255 255 255 255 255 255 255 255 255 255
12740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1275255 255 255 255 255 255 255 255 255 255 255 255
12750 0 0 0 0 0 0 0 0 0 0 0 1276255 255 255 255 255 255 255 255 255 255 255 255
12760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1277255 255 255 170 170 170 170 170 170 170 85 0
12770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1278255 255 85 170 85 0 255 255 85 170 85 0
12780 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1279255 255 85 170 85 0 255 255 85 170 85 0
12790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1280255 255 85 170 85 0 255 255 85 170 85 0
12800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1281255 255 85 170 85 0 255 255 85 170 85 0
12810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 1282255 255 85 0 0 0 0 0 0 0 0 0
128285 85 85 85 85 85 85 85 85 0 0 0 85 85 85 85 85 85 1283 0 0 0 0 0 0 0 0 0 0 0 0
128385 85 85 85 85 85 85 85 85 170 170 170 170 170 170 170 170 170 1284 0 0 0 0 0 0 0 0 0 0 0 0
1284170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 1285 0 0 0 0 0 0 0 0 0 0 0 0
1285170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 170 170 170 1286 0 0 0 0 0 0 0 0 0 0 0 0
1286170 170 170 170 170 170 85 85 85 0 0 0 85 85 85 0 0 0 1287 0 0 0 0 0 0 255 255 85 170 85 0
12870 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 1288255 255 85 170 85 0 255 255 85 170 85 0
12880 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 1289255 255 85 170 85 0 255 255 85 170 85 0
12890 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 1290255 255 85 170 85 0 255 255 85 170 85 0
12900 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 1291255 255 85 170 85 0 255 255 85 170 85 0
12910 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1292255 255 85 0 0 0 0 0 0 0 0 0
12920 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1293 85 85 85 255 255 255 255 255 255 255 255 255
12930 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1294255 255 255 255 255 255 255 255 255 255 255 255
12940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1295255 255 255 255 255 255 255 255 255 255 255 255
12950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1296255 255 255 255 255 255 255 255 255 255 255 255
12960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1297255 255 255 170 170 170 85 85 85 255 255 85
12970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1298170 85 0 255 255 85 170 85 0 255 255 85
12980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1299170 85 0 255 255 85 170 85 0 255 255 85
12990 0 0 0 0 0 0 0 0 0 0 0 1300170 85 0 255 255 85 170 85 0 255 255 85
13000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1301170 85 0 255 255 85 170 85 0 255 255 85
13010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1302170 85 0 255 255 85 0 0 0 0 0 0
13020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1303 0 0 0 0 0 0 0 0 0 0 0 0
13030 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1304 0 0 0 0 0 0 0 0 0 0 0 0
13040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1305 0 0 0 0 0 0 0 0 0 0 0 0
13050 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 1306 0 0 0 0 0 0 0 0 0 0 0 0
1306170 170 170 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 1307 0 0 0 0 0 0 170 85 0 255 255 85
13070 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 1308170 85 0 255 255 85 170 85 0 255 255 85
130885 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 1309170 85 0 255 255 85 170 85 0 255 255 85
130985 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 1310170 85 0 255 255 85 170 85 0 255 255 85
13100 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 1311170 85 0 255 255 85 170 85 0 255 255 85
131185 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1312170 85 0 255 255 85 85 85 85 85 85 85
13120 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 1313255 255 255 255 255 255 255 255 255 255 255 255
131385 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 1314255 255 255 255 255 255 255 255 255 255 255 255
13140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1315255 255 255 255 255 255 255 255 255 255 255 255
13150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1316255 255 255 255 255 255 255 255 255 255 255 255
13160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1317170 170 170 85 85 85 85 85 85 170 85 0
13170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1318255 255 85 170 85 0 255 255 85 170 85 0
13180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1319255 255 85 170 85 0 255 255 85 170 85 0
13190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1320255 255 85 170 85 0 255 255 85 170 85 0
13200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1321255 255 85 170 85 0 255 255 85 170 85 0
13210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1322255 255 85 170 85 0 255 255 85 170 85 0
13220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1323 0 0 0 0 0 0 0 0 0 0 0 0
13230 0 0 0 0 0 0 0 0 0 0 0 1324 0 0 0 0 0 0 0 0 0 0 0 0
13240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1325 0 0 0 0 0 0 0 0 0 0 0 0
13250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1326 0 0 0 0 0 0 0 0 0 0 0 0
13260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1327 0 0 0 0 0 0 255 255 85 170 85 0
13270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1328255 255 85 170 85 0 255 255 85 170 85 0
13280 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1329255 255 85 170 85 0 255 255 85 170 85 0
13290 0 0 0 0 0 0 0 0 0 0 0 170 170 170 85 85 85 1330255 255 85 170 85 0 255 255 85 170 85 0
133085 85 85 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 1331255 255 85 170 85 0 255 255 85 170 85 0
133185 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1332255 255 85 170 85 0 255 255 85 255 255 255
133285 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 1333255 255 255 255 255 255 255 255 255 255 255 255
13330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1334255 255 255 255 255 255 255 255 255 255 255 255
133485 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 1335255 255 255 255 255 255 255 255 255 255 255 255
13350 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 1336255 255 255 255 255 255 255 255 255 170 170 170
13360 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 1337 85 85 85 0 0 0 0 0 0 170 85 0
13370 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 1338170 85 0 255 255 85 170 85 0 255 255 85
133885 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 1339170 85 0 255 255 85 170 85 0 255 255 85
13390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1340170 85 0 255 255 85 170 85 0 255 255 85
13400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1341170 85 0 255 255 85 170 85 0 255 255 85
13410 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1342170 85 0 255 255 85 170 85 0 255 255 85
13420 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1343 0 0 0 0 0 0 0 0 0 0 0 0
13430 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1344 0 0 0 0 0 0 0 0 0 0 0 0
13440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1345 0 0 0 0 0 0 0 0 0 0 0 0
13450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1346 0 0 0 0 0 0 0 0 0 0 0 0
13460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1347 0 0 0 0 0 0 170 85 0 255 255 85
13470 0 0 0 0 0 0 0 0 0 0 0 1348170 85 0 255 255 85 170 85 0 255 255 85
13480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1349170 85 0 255 255 85 170 85 0 255 255 85
13490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1350170 85 0 255 255 85 170 85 0 255 255 85
13500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1351170 85 0 255 255 85 170 85 0 255 255 85
13510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1352170 85 0 255 255 85 170 85 0 255 255 85
13520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1353255 255 255 255 255 255 255 255 255 255 255 255
13530 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 1354255 255 255 255 255 255 255 255 255 255 255 255
135485 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 1355255 255 255 255 255 255 255 255 255 255 255 255
13550 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 1356255 255 255 255 255 255 170 170 170 85 85 85
13560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1357 0 0 0 0 0 0 0 0 0 170 85 0
13570 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 1358255 255 85 170 85 0 255 255 85 170 85 0
13580 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 1359255 255 85 170 85 0 255 255 85 170 85 0
135985 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 1360255 255 85 170 85 0 255 255 85 170 85 0
13600 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 1361255 255 85 170 85 0 255 255 85 170 85 0
136185 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 1362255 255 85 170 85 0 255 255 85 0 0 0
13620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 1363 0 0 0 0 0 0 0 0 0 0 0 0
13630 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1364 0 0 0 0 0 0 0 0 0 0 0 0
13640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1365 0 0 0 0 0 0 0 0 0 0 0 0
13650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1366 0 0 0 0 0 0 0 0 0 0 0 0
13660 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1367 0 0 0 0 0 0 255 255 85 170 85 0
13670 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1368255 255 85 170 85 0 255 255 85 170 85 0
13680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1369255 255 85 170 85 0 255 255 85 170 85 0
13690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1370255 255 85 170 85 0 255 255 85 170 85 0
13700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1371255 255 85 170 85 0 255 255 85 170 85 0
13710 0 0 0 0 0 0 0 0 0 0 0 1372255 255 85 170 85 0 255 255 85 170 85 0
13720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1373170 170 170 255 255 255 255 255 255 255 255 255
13730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1374255 255 255 255 255 255 255 255 255 255 255 255
13740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1375255 255 255 255 255 255 255 255 255 255 255 255
13750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1376170 170 170 85 85 85 85 85 85 0 0 0
13760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1377 0 0 0 0 0 0 0 0 0 170 85 0
13770 0 0 0 0 0 85 85 85 85 85 85 170 170 170 85 85 85 1378170 85 0 255 255 85 170 85 0 255 255 85
137885 85 85 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 1379170 85 0 255 255 85 170 85 0 255 255 85
137985 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 1380170 85 0 255 255 85 170 85 0 255 255 85
13800 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 1381170 85 0 255 255 85 170 85 0 255 255 85
13810 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 1382170 85 0 255 255 85 0 0 0 0 0 0
138285 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 1383 0 0 0 0 0 0 0 0 0 0 0 0
13830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1384 0 0 0 0 0 0 0 0 0 0 0 0
138485 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 1385 0 0 0 0 0 0 0 0 0 0 0 0
138585 85 85 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 1386 0 0 0 0 0 0 0 0 0 0 0 0
13860 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 1387 0 0 0 255 255 85 170 85 0 255 255 85
13870 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1388170 85 0 255 255 85 170 85 0 255 255 85
13880 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1389170 85 0 255 255 85 170 85 0 255 255 85
13890 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1390170 85 0 255 255 85 170 85 0 255 255 85
13900 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1391170 85 0 255 255 85 170 85 0 255 255 85
13910 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1392170 85 0 255 255 85 170 85 0 170 85 0
13920 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1393170 85 0 170 170 170 255 255 255 255 255 255
13930 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1394255 255 255 255 255 255 255 255 255 255 255 255
13940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1395255 255 255 255 255 255 170 170 170 85 85 85
13950 0 0 0 0 0 0 0 0 0 0 0 1396 85 85 85 0 0 0 0 0 0 0 0 0
13960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1397 0 0 0 0 0 0 85 85 85 170 85 0
13970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1398255 255 85 170 85 0 255 255 85 170 85 0
13980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1399255 255 85 170 85 0 255 255 85 170 85 0
13990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1400255 255 85 170 85 0 255 255 85 170 85 0
14000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1401255 255 85 170 85 0 255 255 85 170 85 0
14010 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 1402255 255 85 0 0 0 0 0 0 0 0 0
140285 85 85 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 1403 0 0 0 0 0 0 0 0 0 0 0 0
14030 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 1404 0 0 0 0 0 0 0 0 0 0 0 0
14040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1405 0 0 0 0 0 0 0 0 0 0 0 0
14050 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 1406 0 0 0 0 0 0 0 0 0 0 0 0
14060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1407 0 0 0 170 85 0 255 255 85 170 85 0
140785 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 1408255 255 85 170 85 0 255 255 85 170 85 0
14080 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 1409255 255 85 170 85 0 255 255 85 170 85 0
14090 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 1410255 255 85 170 85 0 255 255 85 170 85 0
141085 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1411255 255 85 170 85 0 255 255 85 170 85 0
141185 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1412255 255 85 170 85 0 255 255 85 170 85 0
14120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1413170 85 0 0 0 0 0 0 0 0 0 0
14130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1414 0 0 0 0 0 0 0 0 0 0 0 0
14140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1415 0 0 0 0 0 0 0 0 0 0 0 0
14150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1416 0 0 0 0 0 0 0 0 0 0 0 0
14160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1417 0 0 0 0 0 0 85 85 85 170 85 0
14170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1418170 85 0 255 255 85 170 85 0 255 255 85
14180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1419170 85 0 255 255 85 170 85 0 255 255 85
14190 0 0 0 0 0 85 85 85 85 85 85 1420170 85 0 255 255 85 170 85 0 255 255 85
14200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1421170 85 0 170 85 0 170 85 0 0 0 0
14210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1422 0 0 0 0 0 0 0 0 0 0 0 0
14220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1423 0 0 0 0 0 0 0 0 0 0 0 0
14230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1424 0 0 0 0 0 0 0 0 0 0 0 0
14240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1425 0 0 0 0 0 0 0 0 0 0 0 0
14250 0 0 85 85 85 85 85 85 170 170 170 85 85 85 85 85 85 1426 0 0 0 0 0 0 0 0 0 0 0 0
142685 85 85 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 1427 0 0 0 255 255 85 170 85 0 255 255 85
142785 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1428170 85 0 255 255 85 170 85 0 255 255 85
142885 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 1429170 85 0 255 255 85 170 85 0 255 255 85
142985 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1430170 85 0 255 255 85 170 85 0 255 255 85
143085 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 1431170 85 0 255 255 85 170 85 0 255 255 85
14310 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 1432170 85 0 255 255 85 170 85 0 170 85 0
143285 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1433170 85 0 0 0 0 0 0 0 0 0 0
143385 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 1434 0 0 0 0 0 0 0 0 0 0 0 0
14340 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 1435 0 0 0 0 0 0 0 0 0 0 0 0
14350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1436 0 0 0 0 0 0 0 0 0 0 0 0
14360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1437 0 0 0 0 0 0 85 85 85 170 85 0
14370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1438255 255 85 170 85 0 255 255 85 170 85 0
14380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1439255 255 85 170 85 0 255 255 85 170 85 0
14390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1440255 255 85 170 85 0 255 255 85 170 85 0
14400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1441170 85 0 0 0 0 0 0 0 0 0 0
14410 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1442 0 0 0 0 0 0 0 0 0 0 0 0
14420 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1443 0 0 0 0 0 0 0 0 0 0 0 0
14430 0 0 85 85 85 170 170 170 170 170 170 1444 0 0 0 0 0 0 0 0 0 0 0 0
14440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1445 0 0 0 0 0 0 0 0 0 0 0 0
14450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1446 0 0 0 0 0 0 0 0 0 0 0 0
14460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1447 0 0 0 0 0 0 255 255 85 170 85 0
14470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1448255 255 85 170 85 0 255 255 85 170 85 0
14480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1449255 255 85 170 85 0 255 255 85 170 85 0
14490 0 0 85 85 85 170 170 170 85 85 85 85 85 85 85 85 85 1450255 255 85 170 85 0 255 255 85 170 85 0
145085 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 1451255 255 85 170 85 0 255 255 85 170 85 0
14510 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 1452255 255 85 170 85 0 255 255 85 170 85 0
14520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1453170 85 0 0 0 0 0 0 0 0 0 0
14530 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 1454 0 0 0 0 0 0 0 0 0 0 0 0
14540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 1455 0 0 0 0 0 0 0 0 0 0 0 0
14550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1456 0 0 0 0 0 0 0 0 0 0 0 0
14560 0 0 0 0 0 85 85 85 0 0 0 85 85 85 85 85 85 1457 0 0 0 0 0 0 85 85 85 170 85 0
14570 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 1458170 85 0 255 255 85 170 85 0 255 255 85
145885 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1459170 85 0 255 255 85 170 85 0 255 255 85
14590 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1460170 85 0 170 85 0 170 85 0 170 85 0
14600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1461 0 0 0 0 0 0 0 0 0 0 0 0
14610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1462 0 0 0 0 0 0 0 0 0 0 0 0
14620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1463 0 0 0 0 0 0 0 0 0 0 0 0
14630 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1464 0 0 0 0 0 0 0 0 0 0 0 0
14640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1465 0 0 0 0 0 0 0 0 0 0 0 0
14650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1466 0 0 0 0 0 0 0 0 0 0 0 0
14660 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1467 0 0 0 0 0 0 0 0 0 0 0 0
146785 85 85 170 170 170 255 255 255 170 170 170 1468 0 0 0 0 0 0 170 85 0 170 85 0
14680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1469170 85 0 170 85 0 170 85 0 170 85 0
14690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1470170 85 0 255 255 85 170 85 0 255 255 85
14700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1471170 85 0 255 255 85 170 85 0 255 255 85
14710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1472170 85 0 255 255 85 170 85 0 170 85 0
14720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1473170 85 0 0 0 0 0 0 0 0 0 0
147385 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 1474 85 85 85 85 85 85 85 85 85 85 85 85
147485 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 1475 85 85 85 85 85 85 85 85 85 85 85 85
14750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 1476 85 85 85 85 85 85 85 85 85 0 0 0
14760 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 1477 0 0 0 0 0 0 0 0 0 170 85 0
14770 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 1478170 85 0 170 85 0 255 255 85 170 85 0
14780 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 1479255 255 85 170 85 0 255 255 85 170 85 0
14790 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 1480170 85 0 170 85 0 0 0 0 0 0 0
148085 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1481 0 0 0 0 0 0 0 0 0 0 0 0
148185 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 1482 0 0 0 0 0 0 0 0 0 0 0 0
14820 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 1483 0 0 0 0 0 0 0 0 0 0 0 0
14830 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 1484 0 0 0 0 0 0 0 0 0 0 0 0
14840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1485 0 0 0 0 0 0 0 0 0 0 0 0
14850 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1486 0 0 0 0 0 0 0 0 0 0 0 0
14860 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1487 0 0 0 0 0 0 0 0 0 0 0 0
14870 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1488 0 0 0 0 0 0 0 0 0 0 0 0
14880 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1489 0 0 0 0 0 0 170 85 0 170 85 0
14890 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1490170 85 0 170 85 0 170 85 0 170 85 0
14900 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 1491170 85 0 170 85 0 255 255 85 170 85 0
1491170 170 170 255 255 255 170 170 170 170 170 170 1492255 255 85 170 85 0 170 85 0 170 85 0
14920 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1493 85 85 85 85 85 85 85 85 85 85 85 85
14930 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1494 0 0 0 0 0 0 0 0 0 0 0 0
14940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1495 0 0 0 0 0 0 0 0 0 0 0 0
14950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1496 0 0 0 0 0 0 0 0 0 85 85 85
14960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1497 85 85 85 85 85 85 85 85 85 170 85 0
149785 85 85 170 170 170 85 85 85 85 85 85 85 85 85 0 0 0 1498170 85 0 170 85 0 170 85 0 255 255 85
149885 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1499170 85 0 255 255 85 170 85 0 170 85 0
149985 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 1500170 85 0 0 0 0 0 0 0 0 0 0
15000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1501 0 0 0 0 0 0 0 0 0 0 0 0
15010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1502 0 0 0 0 0 0 0 0 0 0 0 0
15020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1503 0 0 0 0 0 0 0 0 0 0 0 0
15030 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1504 0 0 0 0 0 0 0 0 0 0 0 0
15040 0 0 0 0 0 85 85 85 0 0 0 85 85 85 85 85 85 1505 0 0 0 0 0 0 0 0 0 0 0 0
15050 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 1506 0 0 0 0 0 0 0 0 0 0 0 0
15060 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 1507 0 0 0 0 0 0 0 0 0 0 0 0
15070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1508 0 0 0 0 0 0 0 0 0 0 0 0
15080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1509 0 0 0 0 0 0 0 0 0 0 0 0
15090 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1510 0 0 0 0 0 0 0 0 0 170 85 0
15100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1511170 85 0 170 85 0 170 85 0 170 85 0
15110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1512170 85 0 170 85 0 170 85 0 170 85 0
15120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1513 0 0 0 0 0 0 0 0 0 0 0 0
15130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1514 0 0 0 0 0 0 0 0 0 0 0 0
15140 0 0 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 1515 0 0 0 0 0 0 0 0 0 0 0 0
1515255 255 255 255 255 255 170 170 170 170 170 170 1516 0 0 0 0 0 0 0 0 0 0 0 0
15160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1517 0 0 0 0 0 0 0 0 0 170 85 0
15170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1518170 85 0 170 85 0 170 85 0 170 85 0
15180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1519170 85 0 170 85 0 170 85 0 170 85 0
15190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1520 0 0 0 0 0 0 0 0 0 0 0 0
15200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 1521 0 0 0 0 0 0 0 0 0 0 0 0
152185 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 1522 0 0 0 0 0 0 0 0 0 0 0 0
152285 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 1523 0 0 0 0 0 0 0 0 0 0 0 0
15230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1524 0 0 0 0 0 0 0 0 0 0 0 0
152485 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 1525 0 0 0 0 0 0 0 0 0 0 0 0
15250 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 1526 0 0 0 0 0 0 0 0 0 0 0 0
152685 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 1527 0 0 0 0 0 0 0 0 0 0 0 0
15270 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 1528 0 0 0 0 0 0 0 0 0 0 0 0
15280 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 1529 0 0 0 0 0 0 0 0 0 0 0 0
152985 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 1530 0 0 0 0 0 0 0 0 0 0 0 0
15300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1531 0 0 0 170 85 0 170 85 0 170 85 0
153185 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1532170 85 0 170 85 0 170 85 0 0 0 0
15320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1533 0 0 0 0 0 0 0 0 0 0 0 0
15330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1534 0 0 0 0 0 0 0 0 0 0 0 0
15340 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1535 0 0 0 0 0 0 0 0 0 0 0 0
15350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1536 0 0 0 0 0 0 0 0 0 0 0 0
15360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1537 0 0 0 0 0 0 0 0 0 0 0 0
15370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1538170 85 0 170 85 0 170 85 0 170 85 0
15380 0 0 0 0 0 85 85 85 170 170 170 170 170 170 255 255 255 1539170 85 0 170 85 0 170 85 0 0 0 0
1539255 255 255 170 170 170 170 170 170 0 0 0 1540 0 0 0 0 0 0 0 0 0 0 0 0
15400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1541 0 0 0 0 0 0 0 0 0 0 0 0
15410 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1542 0 0 0 0 0 0 0 0 0 0 0 0
15420 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1543 0 0 0 0 0 0 0 0 0 0 0 0
15430 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1544 0 0 0 0 0 0 0 0 0 0 0 0
15440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 1545 0 0 0 0 0 0 0 0 0 0 0 0
1545170 170 170 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 1546 0 0 0 0 0 0 0 0 0 0 0 0
15460 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 1547 0 0 0 0 0 0 0 0 0 0 0 0
154785 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1548 0 0 0 0 0 0 0 0 0 0 0 0
15480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1549 0 0 0 0 0 0 0 0 0 0 0 0
154985 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1550 0 0 0 0 0 0 0 0 0 0 0 0
15500 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 1551 0 0 0 0 0 0 0 0 0 0 0 0
15510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1552 0 0 0 0 0 0 0 0 0 0 0 0
15520 0 0 85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 1553 0 0 0 0 0 0 0 0 0 0 0 0
15530 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 1554 0 0 0 0 0 0 0 0 0 0 0 0
155485 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 1555 0 0 0 0 0 0 0 0 0 0 0 0
15550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1556 0 0 0 0 0 0 0 0 0 0 0 0
15560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1557 0 0 0 0 0 0 0 0 0 0 0 0
15570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1558 0 0 0 0 0 0 0 0 0 0 0 0
15580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1559 0 0 0 0 0 0 0 0 0 0 0 0
15590 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1560 0 0 0 0 0 0 0 0 0 0 0 0
15600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1561 0 0 0 0 0 0 0 0 0 0 0 0
15610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1562 0 0 0 0 0 0 0 0 0 0 0 0
15620 0 0 85 85 85 170 170 170 255 255 255 255 255 255 255 255 255 1563 0 0 0 0 0 0 0 0 0 0 0 0
1563170 170 170 170 170 170 85 85 85 0 0 0 1564 0 0 0 0 0 0 0 0 0 0 0 0
15640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1565 0 0 0 0 0 0 0 0 0 0 0 0
15650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1566 0 0 0 0 0 0 0 0 0 0 0 0
15660 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1567 0 0 0 0 0 0 0 0 0 0 0 0
15670 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1568 0 0 0 0 0 0 0 0 0 0 0 0
15680 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 1569 0 0 0 0 0 0 0 0 0 0 0 0
156985 85 85 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 1570 0 0 0 0 0 0 0 0 0 0 0 0
15700 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 1571 0 0 0 0 0 0 0 0 0 0 0 0
15710 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 1572 0 0 0 0 0 0 0 0 0 0 0 0
15720 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 1573 0 0 0 0 0 0 0 0 0 0 0 0
15730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 1574 0 0 0 0 0 0 0 0 0 0 0 0
15740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1575 0 0 0 0 0 0 0 0 0 0 0 0
15750 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 1576 0 0 0 0 0 0 0 0 0 0 0 0
15760 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 1577 0 0 0 0 0 0 0 0 0 0 0 0
157785 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 1578 0 0 0 0 0 0 0 0 0 0 0 0
15780 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1579 0 0 0 0 0 0 0 0 0 0 0 0
15790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1580 0 0 0 0 0 0 0 0 0 0 0 0
15800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1581 0 0 0 0 0 0 0 0 0 0 0 0
15810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1582 0 0 0 0 0 0 0 0 0 0 0 0
15820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1583 0 0 0 0 0 0 0 0 0 0 0 0
15830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1584 0 0 0 0 0 0 0 0 0 0 0 0
15840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1585 0 0 0 0 0 0 0 0 0 0 0 0
15850 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 1586 0 0 0 0 0 0 0 0 0 0 0 0
1586170 170 170 170 170 170 255 255 255 255 255 255 255 255 255 170 170 170 1587 0 0 0 0 0 0 0 0 0 0 0 0
1587170 170 170 170 170 170 0 0 0 0 0 0 1588 0 0 0 0 0 0 0 0 0 0 0 0
15880 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1589 0 0 0 0 0 0 0 0 0 0 0 0
15890 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1590 0 0 0 0 0 0 0 0 0 0 0 0
15900 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1591 0 0 0 0 0 0 0 0 0 0 0 0
15910 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1592 0 0 0 0 0 0 0 0 0 0 0 0
15920 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 1593 0 0 0 0 0 0 0 0 0 0 0 0
159385 85 85 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 1594 0 0 0 0 0 0 0 0 0 0 0 0
15940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1595 0 0 0 0 0 0 0 0 0 0 0 0
15950 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 1596 0 0 0 0 0 0 0 0 0 0 0 0
15960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1597 0 0 0 0 0 0 0 0 0 0 0 0
15970 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 1598 0 0 0 0 0 0 0 0 0 0 0 0
15980 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 1599 0 0 0 0 0 0 0 0 0 0 0 0
15990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1600 0 0 0 0 0 0 0 0 0 0 0 0
16000 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0 1601 0 0 0 0 0 0 0 0 0 0 0 0
160185 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 1602 0 0 0 0 0 0 0 0 0 0 0 0
16020 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 1603 0 0 0 0 0 0 0 0 0 0 0 0
16030 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 1604 0 0 0 0 0 0 0 0 0 0 0 0
16040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16090 0 0 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170
1610170 170 170 255 255 255 255 255 255 255 255 255 170 170 170 170 170 170
1611170 170 170 0 0 0 0 0 0 0 0 0
16120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16160 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85
161785 85 85 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0
161885 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85
16190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
162085 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0
162185 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
162285 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
16230 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85
16240 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85
16250 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0
16260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16280 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16330 0 0 0 0 0 85 85 85 170 170 170 170 170 170 170 170 170
1634255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 170 170 170
16350 0 0 0 0 0 0 0 0 0 0 0
16360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16400 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85
164185 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0
16420 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16430 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0
16440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16480 0 0 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0
164985 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0
165085 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0
16510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16530 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
165785 85 85 170 170 170 170 170 170 255 255 255 255 255 255 255 255 255
1658255 255 255 255 255 255 170 170 170 170 170 170 85 85 85 0 0 0
16590 0 0 0 0 0 0 0 0 0 0 0
16600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16630 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
16640 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85
166585 85 85 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0
166685 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0
16670 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0
16680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16690 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0
16700 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0
167185 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
167285 85 85 0 0 0 170 170 170 255 255 255 85 85 85 85 85 85
167385 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0
167485 85 85 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0
167585 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16780 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
1681170 170 170 170 170 170 255 255 255 170 170 170 255 255 255 255 255 255
1682255 255 255 255 255 255 170 170 170 170 170 170 85 85 85 0 0 0
16830 0 0 0 0 0 0 0 0 0 0 0
16840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16850 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16860 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
168785 85 85 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0
16880 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85
168985 85 85 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0
16900 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16910 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16920 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0
16930 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
16940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16950 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85
16960 0 0 85 85 85 170 170 170 255 255 255 170 170 170 85 85 85
16970 0 0 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85
1698255 255 255 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0
16990 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0
17000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17030 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17040 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85
1705255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
1706170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0
17070 0 0 0 0 0 0 0 0 0 0 0
17080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17090 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
171185 85 85 255 255 255 170 170 170 85 85 85 0 0 0 0 0 0
17120 0 0 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0
171385 85 85 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85
17140 0 0 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85
17150 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0
17160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
171885 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0
17190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
172085 85 85 85 85 85 255 255 255 255 255 255 255 255 255 85 85 85
172185 85 85 0 0 0 85 85 85 0 0 0 85 85 85 170 170 170
1722255 255 255 170 170 170 0 0 0 0 0 0 85 85 85 0 0 0
17230 0 0 85 85 85 170 170 170 85 85 85 0 0 0 0 0 0
17240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17280 0 0 0 0 0 85 85 85 0 0 0 85 85 85 170 170 170
1729170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170
1730170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0
17310 0 0 0 0 0 0 0 0 0 0 0
17320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17330 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0
17340 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1735170 170 170 255 255 255 255 255 255 170 170 170 0 0 0 0 0 0
17360 0 0 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0
173785 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0
17380 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0
17390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
17400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17410 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0
17420 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17430 0 0 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85
174485 85 85 170 170 170 255 255 255 255 255 255 255 255 255 85 85 85
174585 85 85 0 0 0 85 85 85 0 0 0 85 85 85 255 255 255
1746255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0
174785 85 85 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0
17480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
175285 85 85 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85
1753170 170 170 255 255 255 255 255 255 255 255 255 170 170 170 170 170 170
175485 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17550 0 0 0 0 0 0 0 0 0 0 0
17560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17570 0 0 0 0 0 0 0 0 85 85 85 170 170 170 170 170 170
17580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1759170 170 170 255 255 255 255 255 255 255 255 255 85 85 85 0 0 0
17600 0 0 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0
176185 85 85 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85
17620 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
17630 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17640 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0
176585 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17660 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0
17670 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0
176885 85 85 170 170 170 255 255 255 255 255 255 255 255 255 170 170 170
17690 0 0 85 85 85 0 0 0 85 85 85 170 170 170 255 255 255
1770255 255 255 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0
177185 85 85 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0
17720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17750 0 0 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85
17760 0 0 85 85 85 85 85 85 0 0 0 85 85 85 85 85 85
1777170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 85 85 85
17780 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17790 0 0 0 0 0 0 0 0 0 0 0
17800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17810 0 0 0 0 0 0 0 0 0 0 0 170 170 170 255 255 255
1782170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
178385 85 85 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0
17840 0 0 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0
178585 85 85 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0
17860 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
17870 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0
17880 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17890 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17900 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
17910 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85
179285 85 85 255 255 255 255 255 255 255 255 255 170 170 170 170 170 170
179385 85 85 0 0 0 0 0 0 85 85 85 170 170 170 255 255 255
1794255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0
1795170 170 170 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0
179685 85 85 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0
17970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17990 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0
180085 85 85 85 85 85 0 0 0 85 85 85 85 85 85 0 0 0
180185 85 85 85 85 85 170 170 170 85 85 85 85 85 85 0 0 0
18020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18030 0 0 0 0 0 0 0 0 0 0 0
18040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18050 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170
1806255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0
180785 85 85 170 170 170 255 255 255 255 255 255 255 255 255 170 170 170
18080 0 0 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0
180985 85 85 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0
18100 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
18110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
18120 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0
18130 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0
181485 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18150 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0
1816170 170 170 170 170 170 255 255 255 170 170 170 255 255 255 85 85 85
18170 0 0 85 85 85 0 0 0 85 85 85 170 170 170 255 255 255
1818170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 85 85 85
1819170 170 170 255 255 255 255 255 255 0 0 0 0 0 0 85 85 85
1820255 255 255 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
18210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18220 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0
182385 85 85 0 0 0 85 85 85 0 0 0 85 85 85 85 85 85
182485 85 85 0 0 0 85 85 85 85 85 85 0 0 0 85 85 85
18250 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0
18260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18270 0 0 0 0 0 0 0 0 0 0 0
18280 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0
18290 0 0 0 0 0 0 0 0 0 0 0 85 85 85 255 255 255
1830255 255 255 255 255 255 170 170 170 0 0 0 0 0 0 0 0 0
183185 85 85 170 170 170 255 255 255 170 170 170 170 170 170 170 170 170
183285 85 85 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85
183385 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85
18340 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0
18350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
18370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18380 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0
183985 85 85 0 0 0 85 85 85 0 0 0 85 85 85 85 85 85
184085 85 85 170 170 170 255 255 255 170 170 170 170 170 170 85 85 85
184185 85 85 0 0 0 85 85 85 85 85 85 85 85 85 170 170 170
1842170 170 170 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85
1843170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 170 170 170
1844170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18460 0 0 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85
18470 0 0 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85
18480 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0
184985 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18510 0 0 0 0 0 0 0 0 0 0 0
18520 0 0 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170
185385 85 85 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170
1854255 255 255 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0
18550 0 0 85 85 85 170 170 170 170 170 170 255 255 85 85 85 85
185685 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0
185785 85 85 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0
18580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18590 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0
18600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18610 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
18620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
186385 85 85 0 0 0 85 85 85 85 85 85 0 0 0 85 85 85
186485 85 85 170 170 170 170 170 170 170 170 170 170 85 0 85 85 85
18650 0 0 85 85 85 0 0 0 85 85 85 170 170 170 170 85 0
1866170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
1867170 85 0 170 170 170 85 85 85 0 0 0 85 85 85 85 85 85
1868170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
18700 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0
187185 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0
187285 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0
18730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18750 0 0 0 0 0 0 0 0 0 0 0
18760 0 0 0 0 0 0 0 0 0 0 0 170 170 170 255 255 255
1877170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
1878255 255 255 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0
18790 0 0 85 85 85 170 85 0 170 170 170 170 170 170 85 85 85
188085 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0
188185 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85
18820 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0
18830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
18840 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0
18850 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0
18860 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0
188785 85 85 0 0 0 85 85 85 0 0 0 85 85 85 85 85 85
188885 85 85 170 85 0 85 255 85 170 85 0 170 170 170 85 85 85
188985 85 85 0 0 0 0 0 0 85 85 85 170 85 0 85 255 85
1890170 85 0 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85
189185 85 85 85 85 85 170 85 0 0 0 0 85 85 85 85 85 85
189285 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18930 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0
18940 0 0 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85
18950 0 0 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85
18960 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0
18970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18990 0 0 0 0 0 0 0 0 0 0 0
19000 0 0 0 0 0 0 0 0 0 0 0 85 85 85 255 255 255
1901255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0
1902170 170 170 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0
19030 0 0 0 0 0 170 170 170 170 85 0 170 170 170 170 85 0
190485 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
190585 85 85 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0
19060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
190785 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19090 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
191085 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0
191185 85 85 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0
191285 85 85 85 85 85 255 85 85 170 170 170 85 255 85 170 85 0
191385 85 85 85 85 85 170 85 0 85 85 85 170 170 170 85 85 85
1914170 170 170 170 85 0 85 85 85 85 85 85 85 85 85 85 85 85
1915170 85 0 85 255 85 85 85 85 85 85 85 85 85 85 170 85 0
191685 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85
19170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
191885 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0
19190 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0
19200 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
19210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19230 0 0 0 0 0 0 0 0 0 0 0
192485 85 85 85 85 85 0 0 0 0 0 0 0 0 0 170 170 170
1925255 255 255 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0
192685 85 85 170 85 0 170 170 170 170 85 0 85 85 85 0 0 0
192785 85 85 85 85 85 85 255 85 170 170 170 170 170 170 170 85 0
192885 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0
192985 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0
193085 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19310 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0
19320 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0
19330 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
19340 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85
19350 0 0 85 85 85 85 85 85 0 0 0 85 85 85 85 85 85
193685 85 85 85 85 85 85 255 85 255 85 85 170 170 170 170 170 170
1937170 170 170 85 255 85 170 170 170 170 85 0 170 170 170 170 85 0
1938170 170 170 85 85 85 85 255 85 170 85 0 170 170 170 170 85 0
1939170 170 170 170 170 170 170 85 0 85 85 85 85 85 85 85 255 85
194085 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19410 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0
19420 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85
19430 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0
19440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19470 0 0 0 0 0 0 0 0 0 0 0
19480 0 0 170 170 170 170 170 170 0 0 0 0 0 0 85 85 85
1949170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0
195085 85 85 85 85 85 255 255 85 85 85 85 85 85 85 85 85 85
195185 255 85 255 85 85 170 170 170 170 85 0 170 170 170 85 255 85
195285 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
195385 85 85 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0
19540 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0
19550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19560 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
19570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19580 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0
195985 85 85 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0
196085 85 85 85 85 85 170 85 0 170 170 170 170 170 170 255 255 85
1961170 170 170 255 85 85 170 170 170 170 170 170 255 255 85 170 170 170
196285 255 85 170 170 170 255 85 85 170 170 170 170 170 170 170 170 170
1963170 170 170 170 170 170 170 170 170 170 85 0 170 170 170 170 85 0
196485 85 85 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85
19650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
196685 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0
19670 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19710 0 0 0 0 0 0 0 0 0 0 0
19720 0 0 85 85 85 170 170 170 85 85 85 0 0 0 85 85 85
197385 85 85 170 85 0 85 85 85 0 0 0 85 85 85 85 85 85
197485 85 85 170 85 0 170 170 170 170 170 170 255 255 85 170 170 170
1975170 170 170 170 170 170 255 255 85 170 170 170 170 170 170 255 85 85
197685 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0
197785 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0
197885 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19810 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0
198285 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0
198385 85 85 85 85 85 0 0 0 85 85 85 85 85 85 85 85 85
198485 85 85 85 85 85 170 170 170 255 255 85 170 170 170 170 170 170
1985170 170 170 255 255 85 170 170 170 170 170 170 170 170 170 170 85 0
1986170 170 170 255 255 85 170 170 170 255 255 85 170 170 170 255 255 85
1987170 170 170 255 255 85 170 170 170 170 170 170 85 255 85 170 85 0
198885 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19890 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0
19900 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
19910 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0
19920 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19930 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19950 0 0 0 0 0 0 0 0 0 0 0
19960 0 0 0 0 0 170 170 170 85 85 85 85 85 85 0 0 0
199785 85 85 85 85 85 170 170 170 85 85 85 170 170 170 170 85 0
1998170 170 170 85 255 85 170 170 170 170 85 0 170 170 170 170 170 170
1999255 255 85 170 170 170 170 170 170 255 255 255 255 255 85 170 170 170
2000255 255 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
200185 85 85 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0
20020 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0
20030 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0
20040 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0
200585 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20060 0 0 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0
20070 0 0 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0
200885 85 85 170 85 0 170 170 170 170 170 170 170 170 170 255 255 255
2009170 170 170 255 255 255 255 255 85 170 170 170 255 255 85 170 170 170
2010255 255 85 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170
2011170 170 170 170 170 170 170 170 170 255 85 85 170 170 170 170 170 170
201285 85 85 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0
20130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20140 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0
20150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20190 0 0 0 0 0 0 0 0 0 0 0
20200 0 0 0 0 0 85 85 85 85 85 85 170 85 0 85 85 85
202185 85 85 255 255 85 170 170 170 170 170 170 170 170 170 170 170 170
2022255 255 85 170 170 170 170 170 170 255 255 85 170 170 170 170 170 170
2023170 170 170 255 255 255 255 255 255 170 170 170 255 255 255 170 170 170
2024170 170 170 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85
20250 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0
20260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20280 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
203085 85 85 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0
20310 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85
203285 85 85 85 255 85 170 170 170 255 255 85 255 255 255 255 255 255
2033255 255 255 170 170 170 255 255 255 170 170 170 170 170 170 170 170 170
2034170 170 170 170 170 170 255 255 85 170 170 170 255 255 85 255 255 255
2035255 255 85 255 255 255 255 255 85 170 170 170 170 170 170 170 85 0
2036170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
203785 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0
20380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20410 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20420 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20430 0 0 0 0 0 0 0 0 0 0 0
20440 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85
204585 85 85 170 170 170 255 255 85 170 170 170 255 255 85 170 170 170
2046170 170 170 255 255 85 170 170 170 170 170 170 170 170 170 255 255 85
2047255 255 255 255 255 255 255 255 85 255 255 255 255 255 255 170 170 170
2048255 255 85 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85
204985 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
20500 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0
20510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20520 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
20530 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0
205485 85 85 170 170 170 170 170 170 0 0 0 0 0 0 0 0 0
205585 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0
205685 85 85 170 170 170 170 170 170 170 170 170 255 255 255 170 170 170
2057255 255 255 255 255 255 255 255 255 170 170 170 170 170 170 255 255 85
2058170 170 170 255 255 85 170 170 170 255 255 255 170 170 170 255 255 255
2059255 255 255 255 255 255 170 170 170 255 255 85 170 170 170 255 255 85
206085 85 85 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0
20610 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0
20620 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
20630 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20660 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20670 0 0 0 0 0 0 0 0 0 0 0
20680 0 0 0 0 0 0 0 0 85 85 85 170 85 0 170 170 170
2069255 255 85 170 170 170 170 170 170 255 255 255 255 255 255 255 255 255
2070170 170 170 170 170 170 170 170 170 255 255 85 170 170 170 170 170 170
2071255 255 255 170 170 170 255 255 255 255 255 255 170 170 170 255 255 255
2072170 170 170 170 170 170 85 85 85 0 0 0 85 85 85 0 0 0
207385 85 85 0 0 0 85 85 85 0 0 0 85 85 85 0 0 0
20740 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
20750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
20770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
207885 85 85 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0
20790 0 0 85 85 85 0 0 0 85 85 85 85 85 85 0 0 0
208085 85 85 170 85 0 255 255 255 170 170 170 255 255 255 255 255 255
2081255 255 85 255 255 255 170 170 170 255 255 85 170 170 170 170 170 170
2082170 170 170 170 170 170 170 170 170 255 255 85 255 255 255 255 255 255
2083170 170 170 255 255 255 255 255 255 170 170 170 170 170 170 170 170 170
208485 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20850 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
20860 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20870 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20880 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20890 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20900 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20910 0 0 0 0 0 0 0 0 0 0 0
20920 0 0 0 0 0 0 0 0 85 85 85 85 255 85 170 170 170
2093170 170 170 255 255 85 170 170 170 255 255 255 170 170 170 255 255 255
2094255 255 255 255 255 255 255 255 85 170 170 170 170 170 170 255 255 255
2095170 170 170 255 255 255 255 255 255 170 170 170 255 255 255 255 255 85
2096170 170 170 170 85 0 85 85 85 0 0 0 0 0 0 85 85 85
20970 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
20980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20990 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0
21000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
210285 85 85 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85
210385 85 85 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0
210485 85 85 170 170 170 170 170 170 255 255 85 170 170 170 255 255 255
2105255 255 255 170 170 170 255 255 255 170 170 170 170 170 170 255 255 85
2106170 170 170 255 255 85 170 170 170 255 255 255 170 170 170 255 255 255
2107255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 255 255 85
210885 85 85 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0
21090 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
21100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21150 0 0 0 0 0 0 0 0 0 0 0
21160 0 0 0 0 0 0 0 0 85 85 85 170 85 0 170 170 170
2117170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
2118170 170 170 170 170 170 170 170 170 170 170 170 255 255 85 170 170 170
2119255 255 85 255 255 255 170 170 170 255 255 255 170 170 170 170 170 170
2120170 170 170 170 170 170 85 85 85 0 0 0 85 85 85 85 85 85
21210 0 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0
21220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
212385 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21260 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85
212785 85 85 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0
212885 85 85 85 85 85 170 170 170 170 170 170 255 255 255 170 170 170
2129255 255 255 170 170 170 255 255 85 170 170 170 170 170 170 170 170 170
2130255 85 85 170 170 170 170 170 170 170 170 170 255 255 255 255 255 255
2131170 170 170 255 255 255 255 255 255 170 170 170 255 255 255 170 170 170
213285 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21330 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
21340 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21390 0 0 0 0 0 0 0 0 0 0 0
21400 0 0 0 0 0 0 0 0 85 85 85 85 85 85 170 170 170
2141255 255 85 170 170 170 255 255 255 170 170 170 255 255 255 255 255 255
2142255 255 85 255 255 255 170 170 170 255 255 85 170 170 170 170 170 170
2143170 170 170 170 170 170 255 255 85 170 170 170 170 170 170 255 255 85
2144170 170 170 170 85 0 85 85 85 0 0 0 85 85 85 0 0 0
21450 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
214685 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21480 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0
21490 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0
21500 0 0 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170
2151170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
21520 0 0 85 85 85 170 170 170 255 255 85 170 170 170 170 170 170
2153255 255 85 170 170 170 170 170 170 170 170 170 170 170 170 255 85 85
215485 255 85 170 170 170 170 170 170 170 170 170 255 255 85 170 170 170
2155255 255 255 255 255 255 255 255 255 255 255 85 170 170 170 170 170 170
215685 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0
21570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21590 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21630 0 0 0 0 0 0 0 0 0 0 0
21640 0 0 0 0 0 0 0 0 0 0 0 85 85 85 255 255 85
2165170 170 170 170 170 170 255 255 255 255 255 255 255 255 255 170 170 170
2166255 255 255 170 170 170 170 170 170 170 170 170 170 170 170 255 85 85
2167170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170
2168170 170 170 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0
216985 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0
21700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
217285 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21740 0 0 0 0 0 0 0 0 170 170 170 170 170 170 170 170 170
217585 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
21760 0 0 85 85 85 170 85 0 170 170 170 170 170 170 170 170 170
2177170 170 170 170 170 170 170 170 170 170 85 0 170 170 170 85 255 85
2178255 85 85 170 170 170 255 255 85 170 170 170 170 170 170 255 255 255
2179255 255 255 170 170 170 255 255 255 255 255 255 170 170 170 170 170 170
21800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21850 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21860 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21870 0 0 0 0 0 0 0 0 0 0 0
21880 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170
2189170 170 170 255 255 85 170 170 170 255 255 85 255 255 255 255 255 255
2190170 170 170 170 170 170 255 255 85 170 170 170 255 85 85 85 255 85
2191170 170 170 170 85 0 170 170 170 170 170 170 255 255 85 170 170 170
2192170 85 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0
21930 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21940 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0
21950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
22000 0 0 85 85 85 85 85 85 85 85 85 170 170 170 255 255 85
2201170 170 170 170 85 0 170 170 170 170 170 170 170 85 0 85 85 85
2202170 170 170 170 85 0 85 85 85 170 170 170 170 170 170 170 170 170
2203170 170 170 255 255 255 255 255 255 255 255 85 170 170 170 170 170 170
22040 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
22050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22090 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22110 0 0 0 0 0 0 0 0 0 0 0
22120 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 85 0
2213170 170 170 170 170 170 255 255 255 170 170 170 255 255 255 170 170 170
2214255 255 255 170 170 170 170 170 170 170 85 0 170 170 170 85 85 85
2215170 170 170 170 170 170 170 85 0 170 170 170 170 85 0 85 85 85
221685 255 85 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85
22170 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0
22180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
222185 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22230 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85
222485 85 85 0 0 0 85 85 85 170 85 0 85 85 85 170 170 170
2225170 85 0 170 170 170 85 255 85 170 85 0 170 170 170 85 85 85
2226170 85 0 170 170 170 170 170 170 255 255 85 170 170 170 255 255 255
2227255 255 85 255 255 255 170 170 170 170 170 170 170 170 170 170 85 0
22280 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22340 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22350 0 0 0 0 0 0 0 0 0 0 0
22360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
2237170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 255 255 85
2238170 170 170 255 255 85 170 170 170 170 170 170 85 255 85 170 170 170
2239170 85 0 170 85 0 170 170 170 85 255 85 85 85 85 170 170 170
2240170 85 0 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0
22410 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0
22420 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22430 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22460 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
22470 0 0 0 0 0 0 0 0 85 85 85 170 170 170 85 85 85
22480 0 0 0 0 0 0 0 0 85 85 85 170 85 0 85 85 85
2249170 170 170 170 85 0 170 170 170 85 85 85 170 170 170 170 85 0
2250170 170 170 85 255 85 170 85 0 170 170 170 170 170 170 170 170 170
2251255 255 255 170 170 170 255 255 255 255 255 255 170 170 170 85 85 85
22520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22530 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22590 0 0 0 0 0 0 0 0 0 0 0
22600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2261170 85 0 170 170 170 255 255 85 170 170 170 255 255 255 170 170 170
2262170 170 170 170 170 170 170 170 170 170 85 0 170 170 170 170 85 0
2263170 170 170 85 255 85 170 85 0 170 170 170 170 85 0 85 85 85
226485 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
22650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22660 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22670 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0
22680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22710 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0
22720 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85
227385 255 85 170 170 170 170 85 0 170 170 170 170 85 0 85 255 85
2274170 170 170 170 85 0 170 170 170 170 170 170 170 170 170 255 255 85
2275170 170 170 255 255 255 170 170 170 170 170 170 170 170 170 0 0 0
22760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22780 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22830 0 0 0 0 0 0 0 0 0 0 0
22840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
228585 85 85 170 85 0 85 85 85 170 170 170 255 255 85 170 170 170
2286170 170 170 255 255 85 170 170 170 170 170 170 170 170 170 170 85 0
2287170 170 170 85 85 85 170 170 170 170 85 0 170 170 170 85 85 85
2288170 85 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
22890 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22900 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22910 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22920 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22930 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22960 0 0 0 0 0 85 85 85 0 0 0 85 85 85 170 85 0
229785 85 85 255 85 85 85 255 85 170 85 0 170 170 170 170 170 170
2298170 85 0 170 170 170 85 85 85 255 255 85 170 170 170 170 170 170
2299255 255 255 170 170 170 255 255 255 255 255 85 85 85 85 0 0 0
23000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23030 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23070 0 0 0 0 0 0 0 0 0 0 0
23080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23090 0 0 85 85 85 170 170 170 170 85 0 170 170 170 170 170 170
2310170 170 170 170 170 170 170 170 170 255 255 85 85 85 85 170 170 170
231185 255 85 255 85 85 170 170 170 85 255 85 255 85 85 85 255 85
231285 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23200 0 0 0 0 0 85 85 85 85 85 85 0 0 0 85 85 85
232185 85 85 85 255 85 255 85 85 170 170 170 85 255 85 170 85 0
2322170 170 170 170 170 170 255 255 85 170 170 170 170 170 170 255 255 255
2323170 170 170 255 255 255 170 170 170 170 170 170 85 85 85 0 0 0
23240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23280 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23310 0 0 0 0 0 0 0 0 0 0 0
23320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23330 0 0 0 0 0 85 85 85 170 170 170 85 85 85 255 255 85
2334170 170 170 255 255 85 170 170 170 170 170 170 170 170 170 255 255 85
233585 85 85 255 255 85 170 170 170 170 85 0 170 170 170 85 85 85
2336170 85 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0
23370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23410 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23420 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23430 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
2345170 170 170 170 85 0 170 170 170 170 85 0 170 170 170 170 170 170
2346170 85 0 170 170 170 170 170 170 170 170 170 255 255 85 170 170 170
2347255 255 85 255 255 255 170 170 170 170 170 170 85 85 85 0 0 0
23480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23530 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23550 0 0 0 0 0 0 0 0 0 0 0
23560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23570 0 0 0 0 0 85 85 85 170 85 0 85 85 85 170 170 170
2358170 85 0 170 170 170 170 170 170 255 255 85 170 170 170 170 170 170
2359170 170 170 170 170 170 170 170 170 255 255 85 170 170 170 170 85 0
236085 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
23610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23630 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23660 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23670 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23680 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85
2369170 85 0 85 255 85 170 170 170 170 170 170 255 255 85 170 170 170
2370255 255 85 170 170 170 170 170 170 170 170 170 255 255 255 255 255 255
2371255 255 255 170 170 170 255 255 85 85 85 85 0 0 0 0 0 0
23720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23780 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23790 0 0 0 0 0 0 0 0 0 0 0
23800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23810 0 0 0 0 0 0 0 0 85 85 85 85 85 85 170 85 0
2382170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 255 255 85
2383170 170 170 255 255 85 170 170 170 170 170 170 170 170 170 170 170 170
2384170 170 170 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0
23850 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23860 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23870 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23880 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23890 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23900 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23910 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23920 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
239385 85 85 170 85 0 170 170 170 170 85 0 170 170 170 170 170 170
2394170 170 170 255 255 85 170 170 170 255 255 85 170 170 170 255 255 255
2395170 170 170 255 255 255 170 170 170 85 85 85 0 0 0 0 0 0
23960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24030 0 0 0 0 0 0 0 0 0 0 0
24040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24050 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85
2406170 85 0 170 170 170 170 85 0 255 255 85 170 170 170 170 170 170
2407170 170 170 170 170 170 255 255 85 170 170 170 255 255 85 170 170 170
2408255 255 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0
24090 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24160 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85
241785 85 85 170 170 170 255 255 85 170 170 170 255 255 85 170 170 170
2418170 170 170 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
2419170 170 170 170 170 170 170 170 170 0 0 0 0 0 0 0 0 0
24200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24270 0 0 0 0 0 0 0 0 0 0 0
24280 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24290 0 0 0 0 0 0 0 0 0 0 0 0 170 0 85 85 85
2430170 85 0 85 255 85 170 170 170 170 170 170 170 170 170 255 255 85
2431255 255 255 170 170 170 255 255 255 170 170 170 255 255 255 170 170 170
2432170 170 170 255 255 85 85 85 85 0 0 0 0 0 0 0 0 0
24330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24340 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
2441170 85 0 170 170 170 170 170 170 170 170 170 170 170 170 255 255 85
2442170 170 170 255 255 255 170 170 170 255 255 255 170 170 170 255 255 255
2443255 255 255 255 255 85 85 85 85 0 0 0 0 0 0 0 0 0
24440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24510 0 0 0 0 0 0 0 0 0 0 0
24520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24530 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
245485 85 85 170 85 0 170 170 170 170 170 170 255 255 85 170 170 170
2455170 170 170 255 255 255 255 255 255 255 255 255 170 170 170 255 255 255
2456170 170 170 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0
24570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24590 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24630 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24640 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 255 85
2465170 170 170 255 255 85 170 170 170 255 255 85 255 255 255 255 255 255
2466255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 170 170 170
2467170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0
24680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24750 0 0 0 0 0 0 0 0 0 0 0
24760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
247885 85 85 85 85 85 85 85 85 170 85 0 170 170 170 170 170 170
2479255 255 85 170 170 170 255 255 255 255 255 85 255 255 255 255 255 255
2480170 170 170 255 255 85 170 170 170 85 85 85 0 0 0 0 0 0
24810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24850 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24860 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24870 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24880 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 85 0
2489170 170 170 170 170 170 170 170 170 255 255 255 170 170 170 255 255 255
2490170 170 170 255 255 255 170 170 170 255 255 255 255 255 85 255 255 255
2491170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
24920 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24930 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
24990 0 0 0 0 0 0 0 0 0 0 0
25000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
250285 85 85 170 85 0 85 85 85 170 170 170 170 170 170 170 170 170
2503170 170 170 255 255 255 170 170 170 255 255 255 255 255 255 170 170 170
2504255 255 85 170 170 170 170 170 170 170 85 0 85 85 85 0 0 0
25050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25090 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25120 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170
2513255 255 85 170 170 170 255 255 85 170 170 170 255 255 255 255 255 255
2514255 255 255 255 255 255 255 255 255 255 255 255 170 170 170 170 170 170
2515170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25230 0 0 0 0 0 0 0 0 0 0 0
25240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25260 0 0 85 85 85 85 85 85 85 85 85 170 85 0 170 170 170
2527255 255 85 170 170 170 255 255 85 255 255 255 170 170 170 255 255 255
2528170 170 170 170 170 170 170 170 170 170 170 170 0 0 0 0 0 0
25290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25340 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25360 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170
2537170 85 0 170 170 170 255 255 255 170 170 170 255 255 255 170 170 170
2538255 255 255 255 255 255 170 170 170 255 255 255 255 255 85 170 170 170
253985 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25410 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25420 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25430 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25470 0 0 0 0 0 0 0 0 0 0 0
25480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25500 0 0 0 0 0 85 85 85 170 85 0 85 85 85 170 170 170
2551170 170 170 170 170 170 170 170 170 170 170 170 255 255 85 170 170 170
2552255 255 85 170 170 170 170 85 0 85 255 85 85 85 85 0 0 0
25530 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25570 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25590 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25600 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 85 0
2561170 170 170 170 170 170 255 255 85 170 170 170 255 255 255 255 255 255
2562255 255 85 255 255 255 170 170 170 255 255 255 170 170 170 85 85 85
25630 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25660 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25670 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25710 0 0 0 0 0 0 0 0 0 0 0
25720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25740 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85
2575170 85 0 170 170 170 170 170 170 255 255 85 170 170 170 170 170 170
2576170 170 170 170 170 170 170 170 170 170 85 0 0 0 0 0 0 0
25770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25780 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25810 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25840 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85
2585255 255 85 170 170 170 170 170 170 170 170 170 255 255 85 170 170 170
2586255 255 255 170 170 170 255 255 85 170 170 170 85 85 85 85 85 85
25870 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25880 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25890 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25900 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25910 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25920 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25930 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25950 0 0 0 0 0 0 0 0 0 0 0
25960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25980 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85
259985 85 85 170 85 0 170 170 170 170 170 170 170 170 170 170 170 170
2600170 85 0 170 170 170 170 85 0 85 85 85 0 0 0 0 0 0
26010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26030 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26080 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85
2609170 170 170 170 170 170 255 255 85 170 170 170 170 170 170 170 170 170
2610170 170 170 255 255 255 170 170 170 170 170 170 85 85 85 0 0 0
26110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26190 0 0 0 0 0 0 0 0 0 0 0
26200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
262385 85 85 85 85 85 85 85 85 170 85 0 85 85 85 170 85 0
262485 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0
26250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26280 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 85 0
263385 85 85 170 85 0 170 170 170 170 170 170 170 170 170 255 255 85
2634170 170 170 170 170 170 170 85 0 85 85 85 0 0 0 0 0 0
26350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26410 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26420 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26430 0 0 0 0 0 0 0 0 0 0 0
26440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26470 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85
264885 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0
26490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26530 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85
265785 85 85 85 255 85 170 85 0 170 170 170 170 85 0 170 170 170
265885 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0
26590 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26630 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26660 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26670 0 0 0 0 0 0 0 0 0 0 0
26680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26700 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26710 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26740 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26780 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26790 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26810 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85
268285 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26850 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26860 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26870 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26880 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26890 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26900 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26910 0 0 0 0 0 0 0 0 0 0 0
26920 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26930 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26940 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26960 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
26990 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27030 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27050 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27060 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27070 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27090 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27120 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27130 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27150 0 0 0 0 0 0 0 0 0 0 0
27160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27180 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27220 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27230 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27270 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27280 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27290 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27310 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27340 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27390 0 0 0 0 0 0 0 0 0 0 0
diff --git a/drivers/video/mx3fb.c b/drivers/video/mx3fb.c
index 21b3692092f2..9894de1c9b9f 100644
--- a/drivers/video/mx3fb.c
+++ b/drivers/video/mx3fb.c
@@ -1152,11 +1152,11 @@ static struct fb_ops mx3fb_ops = {
1152 */ 1152 */
1153static int mx3fb_suspend(struct platform_device *pdev, pm_message_t state) 1153static int mx3fb_suspend(struct platform_device *pdev, pm_message_t state)
1154{ 1154{
1155 struct mx3fb_data *drv_data = platform_get_drvdata(pdev); 1155 struct mx3fb_data *mx3fb = platform_get_drvdata(pdev);
1156 struct mx3fb_info *mx3_fbi = drv_data->fbi->par; 1156 struct mx3fb_info *mx3_fbi = mx3fb->fbi->par;
1157 1157
1158 acquire_console_sem(); 1158 acquire_console_sem();
1159 fb_set_suspend(drv_data->fbi, 1); 1159 fb_set_suspend(mx3fb->fbi, 1);
1160 release_console_sem(); 1160 release_console_sem();
1161 1161
1162 if (mx3_fbi->blank == FB_BLANK_UNBLANK) { 1162 if (mx3_fbi->blank == FB_BLANK_UNBLANK) {
@@ -1172,16 +1172,16 @@ static int mx3fb_suspend(struct platform_device *pdev, pm_message_t state)
1172 */ 1172 */
1173static int mx3fb_resume(struct platform_device *pdev) 1173static int mx3fb_resume(struct platform_device *pdev)
1174{ 1174{
1175 struct mx3fb_data *drv_data = platform_get_drvdata(pdev); 1175 struct mx3fb_data *mx3fb = platform_get_drvdata(pdev);
1176 struct mx3fb_info *mx3_fbi = drv_data->fbi->par; 1176 struct mx3fb_info *mx3_fbi = mx3fb->fbi->par;
1177 1177
1178 if (mx3_fbi->blank == FB_BLANK_UNBLANK) { 1178 if (mx3_fbi->blank == FB_BLANK_UNBLANK) {
1179 sdc_enable_channel(mx3_fbi); 1179 sdc_enable_channel(mx3_fbi);
1180 sdc_set_brightness(mx3fb, drv_data->backlight_level); 1180 sdc_set_brightness(mx3fb, mx3fb->backlight_level);
1181 } 1181 }
1182 1182
1183 acquire_console_sem(); 1183 acquire_console_sem();
1184 fb_set_suspend(drv_data->fbi, 0); 1184 fb_set_suspend(mx3fb->fbi, 0);
1185 release_console_sem(); 1185 release_console_sem();
1186 1186
1187 return 0; 1187 return 0;
diff --git a/drivers/video/pxafb.c b/drivers/video/pxafb.c
index 84f63205c46d..0889d50c3288 100644
--- a/drivers/video/pxafb.c
+++ b/drivers/video/pxafb.c
@@ -1439,7 +1439,7 @@ static void pxafb_disable_controller(struct pxafb_info *fbi)
1439static irqreturn_t pxafb_handle_irq(int irq, void *dev_id) 1439static irqreturn_t pxafb_handle_irq(int irq, void *dev_id)
1440{ 1440{
1441 struct pxafb_info *fbi = dev_id; 1441 struct pxafb_info *fbi = dev_id;
1442 unsigned int lccr0, lcsr, lcsr1; 1442 unsigned int lccr0, lcsr;
1443 1443
1444 lcsr = lcd_readl(fbi, LCSR); 1444 lcsr = lcd_readl(fbi, LCSR);
1445 if (lcsr & LCSR_LDD) { 1445 if (lcsr & LCSR_LDD) {
@@ -1455,14 +1455,16 @@ static irqreturn_t pxafb_handle_irq(int irq, void *dev_id)
1455 lcd_writel(fbi, LCSR, lcsr); 1455 lcd_writel(fbi, LCSR, lcsr);
1456 1456
1457#ifdef CONFIG_FB_PXA_OVERLAY 1457#ifdef CONFIG_FB_PXA_OVERLAY
1458 lcsr1 = lcd_readl(fbi, LCSR1); 1458 {
1459 if (lcsr1 & LCSR1_BS(1)) 1459 unsigned int lcsr1 = lcd_readl(fbi, LCSR1);
1460 complete(&fbi->overlay[0].branch_done); 1460 if (lcsr1 & LCSR1_BS(1))
1461 complete(&fbi->overlay[0].branch_done);
1461 1462
1462 if (lcsr1 & LCSR1_BS(2)) 1463 if (lcsr1 & LCSR1_BS(2))
1463 complete(&fbi->overlay[1].branch_done); 1464 complete(&fbi->overlay[1].branch_done);
1464 1465
1465 lcd_writel(fbi, LCSR1, lcsr1); 1466 lcd_writel(fbi, LCSR1, lcsr1);
1467 }
1466#endif 1468#endif
1467 return IRQ_HANDLED; 1469 return IRQ_HANDLED;
1468} 1470}
diff --git a/drivers/video/s3fb.c b/drivers/video/s3fb.c
index 4dcec48a1d78..c3fad34309ed 100644
--- a/drivers/video/s3fb.c
+++ b/drivers/video/s3fb.c
@@ -45,11 +45,11 @@ struct s3fb_info {
45static const struct svga_fb_format s3fb_formats[] = { 45static const struct svga_fb_format s3fb_formats[] = {
46 { 0, {0, 6, 0}, {0, 6, 0}, {0, 6, 0}, {0, 0, 0}, 0, 46 { 0, {0, 6, 0}, {0, 6, 0}, {0, 6, 0}, {0, 0, 0}, 0,
47 FB_TYPE_TEXT, FB_AUX_TEXT_SVGA_STEP4, FB_VISUAL_PSEUDOCOLOR, 8, 16}, 47 FB_TYPE_TEXT, FB_AUX_TEXT_SVGA_STEP4, FB_VISUAL_PSEUDOCOLOR, 8, 16},
48 { 4, {0, 6, 0}, {0, 6, 0}, {0, 6, 0}, {0, 0, 0}, 0, 48 { 4, {0, 4, 0}, {0, 4, 0}, {0, 4, 0}, {0, 0, 0}, 0,
49 FB_TYPE_PACKED_PIXELS, 0, FB_VISUAL_PSEUDOCOLOR, 8, 16}, 49 FB_TYPE_PACKED_PIXELS, 0, FB_VISUAL_PSEUDOCOLOR, 8, 16},
50 { 4, {0, 6, 0}, {0, 6, 0}, {0, 6, 0}, {0, 0, 0}, 1, 50 { 4, {0, 4, 0}, {0, 4, 0}, {0, 4, 0}, {0, 0, 0}, 1,
51 FB_TYPE_INTERLEAVED_PLANES, 1, FB_VISUAL_PSEUDOCOLOR, 8, 16}, 51 FB_TYPE_INTERLEAVED_PLANES, 1, FB_VISUAL_PSEUDOCOLOR, 8, 16},
52 { 8, {0, 6, 0}, {0, 6, 0}, {0, 6, 0}, {0, 0, 0}, 0, 52 { 8, {0, 8, 0}, {0, 8, 0}, {0, 8, 0}, {0, 0, 0}, 0,
53 FB_TYPE_PACKED_PIXELS, 0, FB_VISUAL_PSEUDOCOLOR, 4, 8}, 53 FB_TYPE_PACKED_PIXELS, 0, FB_VISUAL_PSEUDOCOLOR, 4, 8},
54 {16, {10, 5, 0}, {5, 5, 0}, {0, 5, 0}, {0, 0, 0}, 0, 54 {16, {10, 5, 0}, {5, 5, 0}, {0, 5, 0}, {0, 0, 0}, 0,
55 FB_TYPE_PACKED_PIXELS, 0, FB_VISUAL_TRUECOLOR, 2, 4}, 55 FB_TYPE_PACKED_PIXELS, 0, FB_VISUAL_TRUECOLOR, 2, 4},
diff --git a/drivers/video/sa1100fb.c b/drivers/video/sa1100fb.c
index fad58cf9ef73..10ddad8e17d6 100644
--- a/drivers/video/sa1100fb.c
+++ b/drivers/video/sa1100fb.c
@@ -199,16 +199,20 @@
199extern void (*sa1100fb_backlight_power)(int on); 199extern void (*sa1100fb_backlight_power)(int on);
200extern void (*sa1100fb_lcd_power)(int on); 200extern void (*sa1100fb_lcd_power)(int on);
201 201
202/* 202static struct sa1100fb_rgb rgb_4 = {
203 * IMHO this looks wrong. In 8BPP, length should be 8.
204 */
205static struct sa1100fb_rgb rgb_8 = {
206 .red = { .offset = 0, .length = 4, }, 203 .red = { .offset = 0, .length = 4, },
207 .green = { .offset = 0, .length = 4, }, 204 .green = { .offset = 0, .length = 4, },
208 .blue = { .offset = 0, .length = 4, }, 205 .blue = { .offset = 0, .length = 4, },
209 .transp = { .offset = 0, .length = 0, }, 206 .transp = { .offset = 0, .length = 0, },
210}; 207};
211 208
209static struct sa1100fb_rgb rgb_8 = {
210 .red = { .offset = 0, .length = 8, },
211 .green = { .offset = 0, .length = 8, },
212 .blue = { .offset = 0, .length = 8, },
213 .transp = { .offset = 0, .length = 0, },
214};
215
212static struct sa1100fb_rgb def_rgb_16 = { 216static struct sa1100fb_rgb def_rgb_16 = {
213 .red = { .offset = 11, .length = 5, }, 217 .red = { .offset = 11, .length = 5, },
214 .green = { .offset = 5, .length = 6, }, 218 .green = { .offset = 5, .length = 6, },
@@ -613,7 +617,7 @@ sa1100fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
613 DPRINTK("var->bits_per_pixel=%d\n", var->bits_per_pixel); 617 DPRINTK("var->bits_per_pixel=%d\n", var->bits_per_pixel);
614 switch (var->bits_per_pixel) { 618 switch (var->bits_per_pixel) {
615 case 4: 619 case 4:
616 rgbidx = RGB_8; 620 rgbidx = RGB_4;
617 break; 621 break;
618 case 8: 622 case 8:
619 rgbidx = RGB_8; 623 rgbidx = RGB_8;
@@ -1382,6 +1386,7 @@ static struct sa1100fb_info * __init sa1100fb_init_fbinfo(struct device *dev)
1382 fbi->fb.monspecs = monspecs; 1386 fbi->fb.monspecs = monspecs;
1383 fbi->fb.pseudo_palette = (fbi + 1); 1387 fbi->fb.pseudo_palette = (fbi + 1);
1384 1388
1389 fbi->rgb[RGB_4] = &rgb_4;
1385 fbi->rgb[RGB_8] = &rgb_8; 1390 fbi->rgb[RGB_8] = &rgb_8;
1386 fbi->rgb[RGB_16] = &def_rgb_16; 1391 fbi->rgb[RGB_16] = &def_rgb_16;
1387 1392
diff --git a/drivers/video/sa1100fb.h b/drivers/video/sa1100fb.h
index 86831db9a042..1c3b459865d8 100644
--- a/drivers/video/sa1100fb.h
+++ b/drivers/video/sa1100fb.h
@@ -57,9 +57,10 @@ struct sa1100fb_lcd_reg {
57 unsigned long lccr3; 57 unsigned long lccr3;
58}; 58};
59 59
60#define RGB_8 (0) 60#define RGB_4 (0)
61#define RGB_16 (1) 61#define RGB_8 (1)
62#define NR_RGB 2 62#define RGB_16 (2)
63#define NR_RGB 3
63 64
64struct sa1100fb_info { 65struct sa1100fb_info {
65 struct fb_info fb; 66 struct fb_info fb;
diff --git a/drivers/video/sis/sis_main.c b/drivers/video/sis/sis_main.c
index 346d6458cf76..7e17ee95a97a 100644
--- a/drivers/video/sis/sis_main.c
+++ b/drivers/video/sis/sis_main.c
@@ -1129,7 +1129,7 @@ sisfb_bpp_to_var(struct sis_video_info *ivideo, struct fb_var_screeninfo *var)
1129 switch(var->bits_per_pixel) { 1129 switch(var->bits_per_pixel) {
1130 case 8: 1130 case 8:
1131 var->red.offset = var->green.offset = var->blue.offset = 0; 1131 var->red.offset = var->green.offset = var->blue.offset = 0;
1132 var->red.length = var->green.length = var->blue.length = 6; 1132 var->red.length = var->green.length = var->blue.length = 8;
1133 break; 1133 break;
1134 case 16: 1134 case 16:
1135 var->red.offset = 11; 1135 var->red.offset = 11;
diff --git a/drivers/video/skeletonfb.c b/drivers/video/skeletonfb.c
index a439159204a8..89158bc71da2 100644
--- a/drivers/video/skeletonfb.c
+++ b/drivers/video/skeletonfb.c
@@ -308,9 +308,11 @@ static int xxxfb_setcolreg(unsigned regno, unsigned red, unsigned green,
308 * color depth = SUM(var->{color}.length) 308 * color depth = SUM(var->{color}.length)
309 * 309 *
310 * Pseudocolor: 310 * Pseudocolor:
311 * var->{color}.offset is 0 311 * var->{color}.offset is 0 unless the palette index takes less than
312 * var->{color}.length contains width of DAC or the number of unique 312 * bits_per_pixel bits and is stored in the upper
313 * colors available (color depth) 313 * bits of the pixel value
314 * var->{color}.length is set so that 1 << length is the number of
315 * available palette entries
314 * pseudo_palette is not used 316 * pseudo_palette is not used
315 * RAMDAC[X] is programmed to (red, green, blue) 317 * RAMDAC[X] is programmed to (red, green, blue)
316 * color depth = var->{color}.length 318 * color depth = var->{color}.length
diff --git a/drivers/video/sysfillrect.c b/drivers/video/sysfillrect.c
index f94d6b6e29ee..33ee3d34f9d2 100644
--- a/drivers/video/sysfillrect.c
+++ b/drivers/video/sysfillrect.c
@@ -124,7 +124,7 @@ bitfill_unaligned(struct fb_info *p, unsigned long *dst, int dst_idx,
124 124
125 /* Trailing bits */ 125 /* Trailing bits */
126 if (last) 126 if (last)
127 *dst = comp(pat, *dst, first); 127 *dst = comp(pat, *dst, last);
128 } 128 }
129} 129}
130 130
@@ -242,7 +242,7 @@ bitfill_unaligned_rev(struct fb_info *p, unsigned long *dst, int dst_idx,
242 242
243void sys_fillrect(struct fb_info *p, const struct fb_fillrect *rect) 243void sys_fillrect(struct fb_info *p, const struct fb_fillrect *rect)
244{ 244{
245 unsigned long pat, fg; 245 unsigned long pat, pat2, fg;
246 unsigned long width = rect->width, height = rect->height; 246 unsigned long width = rect->width, height = rect->height;
247 int bits = BITS_PER_LONG, bytes = bits >> 3; 247 int bits = BITS_PER_LONG, bytes = bits >> 3;
248 u32 bpp = p->var.bits_per_pixel; 248 u32 bpp = p->var.bits_per_pixel;
@@ -292,17 +292,16 @@ void sys_fillrect(struct fb_info *p, const struct fb_fillrect *rect)
292 dst_idx += p->fix.line_length*8; 292 dst_idx += p->fix.line_length*8;
293 } 293 }
294 } else { 294 } else {
295 int right; 295 int right, r;
296 int r;
297 int rot = (left-dst_idx) % bpp;
298 void (*fill_op)(struct fb_info *p, unsigned long *dst, 296 void (*fill_op)(struct fb_info *p, unsigned long *dst,
299 int dst_idx, unsigned long pat, int left, 297 int dst_idx, unsigned long pat, int left,
300 int right, unsigned n, int bits) = NULL; 298 int right, unsigned n, int bits) = NULL;
301 299#ifdef __LITTLE_ENDIAN
302 /* rotate pattern to correct start position */ 300 right = left;
303 pat = pat << rot | pat >> (bpp-rot); 301 left = bpp - right;
304 302#else
305 right = bpp-left; 303 right = bpp - left;
304#endif
306 switch (rect->rop) { 305 switch (rect->rop) {
307 case ROP_XOR: 306 case ROP_XOR:
308 fill_op = bitfill_unaligned_rev; 307 fill_op = bitfill_unaligned_rev;
@@ -311,18 +310,19 @@ void sys_fillrect(struct fb_info *p, const struct fb_fillrect *rect)
311 fill_op = bitfill_unaligned; 310 fill_op = bitfill_unaligned;
312 break; 311 break;
313 default: 312 default:
314 printk(KERN_ERR "cfb_fillrect(): unknown rop, " 313 printk(KERN_ERR "sys_fillrect(): unknown rop, "
315 "defaulting to ROP_COPY\n"); 314 "defaulting to ROP_COPY\n");
316 fill_op = bitfill_unaligned; 315 fill_op = bitfill_unaligned;
317 break; 316 break;
318 } 317 }
319 while (height--) { 318 while (height--) {
320 dst += dst_idx >> (ffs(bits) - 1); 319 dst += dst_idx / bits;
321 dst_idx &= (bits - 1); 320 dst_idx &= (bits - 1);
322 fill_op(p, dst, dst_idx, pat, left, right, 321 r = dst_idx % bpp;
322 /* rotate pattern to the correct start position */
323 pat2 = le_long_to_cpu(rolx(cpu_to_le_long(pat), r, bpp));
324 fill_op(p, dst, dst_idx, pat2, left, right,
323 width*bpp, bits); 325 width*bpp, bits);
324 r = (p->fix.line_length*8) % bpp;
325 pat = pat << (bpp-r) | pat >> r;
326 dst_idx += p->fix.line_length*8; 326 dst_idx += p->fix.line_length*8;
327 } 327 }
328 } 328 }
diff --git a/drivers/video/uvesafb.c b/drivers/video/uvesafb.c
index 0b370aebdbfd..421770b5e6ab 100644
--- a/drivers/video/uvesafb.c
+++ b/drivers/video/uvesafb.c
@@ -55,6 +55,7 @@ static u16 maxvf __devinitdata; /* maximum vertical frequency */
55static u16 maxhf __devinitdata; /* maximum horizontal frequency */ 55static u16 maxhf __devinitdata; /* maximum horizontal frequency */
56static u16 vbemode __devinitdata; /* force use of a specific VBE mode */ 56static u16 vbemode __devinitdata; /* force use of a specific VBE mode */
57static char *mode_option __devinitdata; 57static char *mode_option __devinitdata;
58static u8 dac_width = 6;
58 59
59static struct uvesafb_ktask *uvfb_tasks[UVESAFB_TASKS_MAX]; 60static struct uvesafb_ktask *uvfb_tasks[UVESAFB_TASKS_MAX];
60static DEFINE_MUTEX(uvfb_lock); 61static DEFINE_MUTEX(uvfb_lock);
@@ -303,22 +304,10 @@ static void uvesafb_setup_var(struct fb_var_screeninfo *var,
303 var->blue.offset = 0; 304 var->blue.offset = 0;
304 var->transp.offset = 0; 305 var->transp.offset = 0;
305 306
306 /* 307 var->red.length = 8;
307 * We're assuming that we can switch the DAC to 8 bits. If 308 var->green.length = 8;
308 * this proves to be incorrect, we'll update the fields 309 var->blue.length = 8;
309 * later in set_par(). 310 var->transp.length = 0;
310 */
311 if (par->vbe_ib.capabilities & VBE_CAP_CAN_SWITCH_DAC) {
312 var->red.length = 8;
313 var->green.length = 8;
314 var->blue.length = 8;
315 var->transp.length = 0;
316 } else {
317 var->red.length = 6;
318 var->green.length = 6;
319 var->blue.length = 6;
320 var->transp.length = 0;
321 }
322 } 311 }
323} 312}
324 313
@@ -1006,7 +995,7 @@ static int uvesafb_setcolreg(unsigned regno, unsigned red, unsigned green,
1006 struct fb_info *info) 995 struct fb_info *info)
1007{ 996{
1008 struct uvesafb_pal_entry entry; 997 struct uvesafb_pal_entry entry;
1009 int shift = 16 - info->var.green.length; 998 int shift = 16 - dac_width;
1010 int err = 0; 999 int err = 0;
1011 1000
1012 if (regno >= info->cmap.len) 1001 if (regno >= info->cmap.len)
@@ -1055,7 +1044,7 @@ static int uvesafb_setcolreg(unsigned regno, unsigned red, unsigned green,
1055static int uvesafb_setcmap(struct fb_cmap *cmap, struct fb_info *info) 1044static int uvesafb_setcmap(struct fb_cmap *cmap, struct fb_info *info)
1056{ 1045{
1057 struct uvesafb_pal_entry *entries; 1046 struct uvesafb_pal_entry *entries;
1058 int shift = 16 - info->var.green.length; 1047 int shift = 16 - dac_width;
1059 int i, err = 0; 1048 int i, err = 0;
1060 1049
1061 if (info->var.bits_per_pixel == 8) { 1050 if (info->var.bits_per_pixel == 8) {
@@ -1317,13 +1306,9 @@ setmode:
1317 err = uvesafb_exec(task); 1306 err = uvesafb_exec(task);
1318 if (err || (task->t.regs.eax & 0xffff) != 0x004f || 1307 if (err || (task->t.regs.eax & 0xffff) != 0x004f ||
1319 ((task->t.regs.ebx & 0xff00) >> 8) != 8) { 1308 ((task->t.regs.ebx & 0xff00) >> 8) != 8) {
1320 /* 1309 dac_width = 6;
1321 * We've failed to set the DAC palette format - 1310 } else {
1322 * time to correct var. 1311 dac_width = 8;
1323 */
1324 info->var.red.length = 6;
1325 info->var.green.length = 6;
1326 info->var.blue.length = 6;
1327 } 1312 }
1328 } 1313 }
1329 1314
diff --git a/drivers/video/vfb.c b/drivers/video/vfb.c
index cc919ae46571..050d432c7d95 100644
--- a/drivers/video/vfb.c
+++ b/drivers/video/vfb.c
@@ -318,13 +318,16 @@ static int vfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
318 * {hardwarespecific} contains width of RAMDAC 318 * {hardwarespecific} contains width of RAMDAC
319 * cmap[X] is programmed to (X << red.offset) | (X << green.offset) | (X << blue.offset) 319 * cmap[X] is programmed to (X << red.offset) | (X << green.offset) | (X << blue.offset)
320 * RAMDAC[X] is programmed to (red, green, blue) 320 * RAMDAC[X] is programmed to (red, green, blue)
321 * 321 *
322 * Pseudocolor: 322 * Pseudocolor:
323 * uses offset = 0 && length = RAMDAC register width. 323 * var->{color}.offset is 0 unless the palette index takes less than
324 * var->{color}.offset is 0 324 * bits_per_pixel bits and is stored in the upper
325 * var->{color}.length contains widht of DAC 325 * bits of the pixel value
326 * var->{color}.length is set so that 1 << length is the number of available
327 * palette entries
326 * cmap is not used 328 * cmap is not used
327 * RAMDAC[X] is programmed to (red, green, blue) 329 * RAMDAC[X] is programmed to (red, green, blue)
330 *
328 * Truecolor: 331 * Truecolor:
329 * does not use DAC. Usually 3 are present. 332 * does not use DAC. Usually 3 are present.
330 * var->{color}.offset contains start of bitfield 333 * var->{color}.offset contains start of bitfield
diff --git a/drivers/video/via/viafbdev.c b/drivers/video/via/viafbdev.c
index e327b84820d2..a0fec298216e 100644
--- a/drivers/video/via/viafbdev.c
+++ b/drivers/video/via/viafbdev.c
@@ -2103,7 +2103,7 @@ static void viafb_remove_proc(struct proc_dir_entry *viafb_entry)
2103 2103
2104static int __devinit via_pci_probe(void) 2104static int __devinit via_pci_probe(void)
2105{ 2105{
2106 unsigned int default_xres, default_yres; 2106 unsigned long default_xres, default_yres;
2107 char *tmpc, *tmpm; 2107 char *tmpc, *tmpm;
2108 char *tmpc_sec, *tmpm_sec; 2108 char *tmpc_sec, *tmpm_sec;
2109 int vmode_index; 2109 int vmode_index;
@@ -2196,8 +2196,8 @@ static int __devinit via_pci_probe(void)
2196 viafb_FB_MM = viaparinfo->fbmem_virt; 2196 viafb_FB_MM = viaparinfo->fbmem_virt;
2197 tmpm = viafb_mode; 2197 tmpm = viafb_mode;
2198 tmpc = strsep(&tmpm, "x"); 2198 tmpc = strsep(&tmpm, "x");
2199 strict_strtoul(tmpc, 0, (unsigned long *)&default_xres); 2199 strict_strtoul(tmpc, 0, &default_xres);
2200 strict_strtoul(tmpm, 0, (unsigned long *)&default_yres); 2200 strict_strtoul(tmpm, 0, &default_yres);
2201 2201
2202 vmode_index = viafb_get_mode_index(default_xres, default_yres, 0); 2202 vmode_index = viafb_get_mode_index(default_xres, default_yres, 0);
2203 DEBUG_MSG(KERN_INFO "0->index=%d\n", vmode_index); 2203 DEBUG_MSG(KERN_INFO "0->index=%d\n", vmode_index);
diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
index 59268266b79a..9c76a061a04d 100644
--- a/drivers/virtio/virtio_balloon.c
+++ b/drivers/virtio/virtio_balloon.c
@@ -190,7 +190,8 @@ static int balloon(void *_vballoon)
190 try_to_freeze(); 190 try_to_freeze();
191 wait_event_interruptible(vb->config_change, 191 wait_event_interruptible(vb->config_change,
192 (diff = towards_target(vb)) != 0 192 (diff = towards_target(vb)) != 0
193 || kthread_should_stop()); 193 || kthread_should_stop()
194 || freezing(current));
194 if (diff > 0) 195 if (diff > 0)
195 fill_balloon(vb, diff); 196 fill_balloon(vb, diff);
196 else if (diff < 0) 197 else if (diff < 0)
diff --git a/drivers/watchdog/orion5x_wdt.c b/drivers/watchdog/orion5x_wdt.c
index 7529616739d2..2cde568e4fb0 100644
--- a/drivers/watchdog/orion5x_wdt.c
+++ b/drivers/watchdog/orion5x_wdt.c
@@ -22,6 +22,7 @@
22#include <linux/uaccess.h> 22#include <linux/uaccess.h>
23#include <linux/io.h> 23#include <linux/io.h>
24#include <linux/spinlock.h> 24#include <linux/spinlock.h>
25#include <mach/bridge-regs.h>
25#include <plat/orion5x_wdt.h> 26#include <plat/orion5x_wdt.h>
26 27
27/* 28/*
diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c
index efa4b363ce72..f5bbd9e83416 100644
--- a/drivers/xen/balloon.c
+++ b/drivers/xen/balloon.c
@@ -513,7 +513,8 @@ static ssize_t show_target(struct sys_device *dev, struct sysdev_attribute *attr
513 char *buf) 513 char *buf)
514{ 514{
515 return sprintf(buf, "%llu\n", 515 return sprintf(buf, "%llu\n",
516 (u64)balloon_stats.target_pages << PAGE_SHIFT); 516 (unsigned long long)balloon_stats.target_pages
517 << PAGE_SHIFT);
517} 518}
518 519
519static ssize_t store_target(struct sys_device *dev, 520static ssize_t store_target(struct sys_device *dev,
diff --git a/drivers/xen/cpu_hotplug.c b/drivers/xen/cpu_hotplug.c
index 5f54c01c1568..bdfd584ad853 100644
--- a/drivers/xen/cpu_hotplug.c
+++ b/drivers/xen/cpu_hotplug.c
@@ -21,29 +21,41 @@ static void disable_hotplug_cpu(int cpu)
21 set_cpu_present(cpu, false); 21 set_cpu_present(cpu, false);
22} 22}
23 23
24static void vcpu_hotplug(unsigned int cpu) 24static int vcpu_online(unsigned int cpu)
25{ 25{
26 int err; 26 int err;
27 char dir[32], state[32]; 27 char dir[32], state[32];
28 28
29 if (!cpu_possible(cpu))
30 return;
31
32 sprintf(dir, "cpu/%u", cpu); 29 sprintf(dir, "cpu/%u", cpu);
33 err = xenbus_scanf(XBT_NIL, dir, "availability", "%s", state); 30 err = xenbus_scanf(XBT_NIL, dir, "availability", "%s", state);
34 if (err != 1) { 31 if (err != 1) {
35 printk(KERN_ERR "XENBUS: Unable to read cpu state\n"); 32 printk(KERN_ERR "XENBUS: Unable to read cpu state\n");
36 return; 33 return err;
37 } 34 }
38 35
39 if (strcmp(state, "online") == 0) { 36 if (strcmp(state, "online") == 0)
37 return 1;
38 else if (strcmp(state, "offline") == 0)
39 return 0;
40
41 printk(KERN_ERR "XENBUS: unknown state(%s) on CPU%d\n", state, cpu);
42 return -EINVAL;
43}
44static void vcpu_hotplug(unsigned int cpu)
45{
46 if (!cpu_possible(cpu))
47 return;
48
49 switch (vcpu_online(cpu)) {
50 case 1:
40 enable_hotplug_cpu(cpu); 51 enable_hotplug_cpu(cpu);
41 } else if (strcmp(state, "offline") == 0) { 52 break;
53 case 0:
42 (void)cpu_down(cpu); 54 (void)cpu_down(cpu);
43 disable_hotplug_cpu(cpu); 55 disable_hotplug_cpu(cpu);
44 } else { 56 break;
45 printk(KERN_ERR "XENBUS: unknown state(%s) on CPU%d\n", 57 default:
46 state, cpu); 58 break;
47 } 59 }
48} 60}
49 61
@@ -64,12 +76,20 @@ static void handle_vcpu_hotplug_event(struct xenbus_watch *watch,
64static int setup_cpu_watcher(struct notifier_block *notifier, 76static int setup_cpu_watcher(struct notifier_block *notifier,
65 unsigned long event, void *data) 77 unsigned long event, void *data)
66{ 78{
79 int cpu;
67 static struct xenbus_watch cpu_watch = { 80 static struct xenbus_watch cpu_watch = {
68 .node = "cpu", 81 .node = "cpu",
69 .callback = handle_vcpu_hotplug_event}; 82 .callback = handle_vcpu_hotplug_event};
70 83
71 (void)register_xenbus_watch(&cpu_watch); 84 (void)register_xenbus_watch(&cpu_watch);
72 85
86 for_each_possible_cpu(cpu) {
87 if (vcpu_online(cpu) == 0) {
88 (void)cpu_down(cpu);
89 cpu_clear(cpu, cpu_present_map);
90 }
91 }
92
73 return NOTIFY_DONE; 93 return NOTIFY_DONE;
74} 94}
75 95
diff --git a/drivers/xen/manage.c b/drivers/xen/manage.c
index 0d61db1e7b49..4b5b84837ee1 100644
--- a/drivers/xen/manage.c
+++ b/drivers/xen/manage.c
@@ -62,14 +62,15 @@ static int xen_suspend(void *data)
62 gnttab_resume(); 62 gnttab_resume();
63 xen_mm_unpin_all(); 63 xen_mm_unpin_all();
64 64
65 sysdev_resume();
66
67 if (!*cancelled) { 65 if (!*cancelled) {
68 xen_irq_resume(); 66 xen_irq_resume();
69 xen_console_resume(); 67 xen_console_resume();
70 xen_timer_resume(); 68 xen_timer_resume();
71 } 69 }
72 70
71 sysdev_resume();
72 device_power_up(PMSG_RESUME);
73
73 return 0; 74 return 0;
74} 75}
75 76