Merge branch 'staging-next' into Linux 3.1
authorGreg Kroah-Hartman <gregkh@suse.de>
Tue, 25 Oct 2011 07:18:11 +0000 (09:18 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 25 Oct 2011 07:18:11 +0000 (09:18 +0200)
This was done to resolve a conflict in the
drivers/staging/comedi/drivers/ni_labpc.c file that resolved a build
bugfix in Linus's tree with a "better" bugfix that was in the
staging-next tree that resolved the issue in a more complete manner.

Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
834 files changed:
MAINTAINERS
arch/x86/include/asm/hyperv.h
drivers/Kconfig
drivers/Makefile
drivers/char/scc.h [deleted file]
drivers/hv/Kconfig [new file with mode: 0644]
drivers/hv/Makefile [new file with mode: 0644]
drivers/hv/channel.c [moved from drivers/staging/hv/channel.c with 88% similarity]
drivers/hv/channel_mgmt.c [moved from drivers/staging/hv/channel_mgmt.c with 77% similarity]
drivers/hv/connection.c [moved from drivers/staging/hv/connection.c with 86% similarity]
drivers/hv/hv.c [moved from drivers/staging/hv/hv.c with 96% similarity]
drivers/hv/hv_kvp.c [moved from drivers/staging/hv/hv_kvp.c with 91% similarity]
drivers/hv/hv_kvp.h [moved from drivers/staging/hv/hv_kvp.h with 99% similarity]
drivers/hv/hv_util.c [moved from drivers/staging/hv/hv_util.c with 61% similarity]
drivers/hv/hyperv_vmbus.h [moved from drivers/staging/hv/hyperv_vmbus.h with 97% similarity]
drivers/hv/ring_buffer.c [moved from drivers/staging/hv/ring_buffer.c with 93% similarity]
drivers/hv/vmbus_drv.c [moved from drivers/staging/hv/vmbus_drv.c with 63% similarity]
drivers/staging/Kconfig
drivers/staging/Makefile
drivers/staging/altera-stapl/altera.c
drivers/staging/ath6kl/Kconfig [deleted file]
drivers/staging/ath6kl/Makefile [deleted file]
drivers/staging/ath6kl/TODO [deleted file]
drivers/staging/ath6kl/bmi/include/bmi_internal.h [deleted file]
drivers/staging/ath6kl/bmi/src/bmi.c [deleted file]
drivers/staging/ath6kl/hif/common/hif_sdio_common.h [deleted file]
drivers/staging/ath6kl/hif/sdio/linux_sdio/include/hif_internal.h [deleted file]
drivers/staging/ath6kl/hif/sdio/linux_sdio/src/hif.c [deleted file]
drivers/staging/ath6kl/hif/sdio/linux_sdio/src/hif_scatter.c [deleted file]
drivers/staging/ath6kl/htc2/AR6000/ar6k.c [deleted file]
drivers/staging/ath6kl/htc2/AR6000/ar6k.h [deleted file]
drivers/staging/ath6kl/htc2/AR6000/ar6k_events.c [deleted file]
drivers/staging/ath6kl/htc2/AR6000/ar6k_gmbox.c [deleted file]
drivers/staging/ath6kl/htc2/AR6000/ar6k_gmbox_hciuart.c [deleted file]
drivers/staging/ath6kl/htc2/htc.c [deleted file]
drivers/staging/ath6kl/htc2/htc_debug.h [deleted file]
drivers/staging/ath6kl/htc2/htc_internal.h [deleted file]
drivers/staging/ath6kl/htc2/htc_recv.c [deleted file]
drivers/staging/ath6kl/htc2/htc_send.c [deleted file]
drivers/staging/ath6kl/htc2/htc_services.c [deleted file]
drivers/staging/ath6kl/include/a_config.h [deleted file]
drivers/staging/ath6kl/include/a_debug.h [deleted file]
drivers/staging/ath6kl/include/a_drv.h [deleted file]
drivers/staging/ath6kl/include/a_drv_api.h [deleted file]
drivers/staging/ath6kl/include/a_osapi.h [deleted file]
drivers/staging/ath6kl/include/aggr_recv_api.h [deleted file]
drivers/staging/ath6kl/include/ar3kconfig.h [deleted file]
drivers/staging/ath6kl/include/ar6000_api.h [deleted file]
drivers/staging/ath6kl/include/ar6000_diag.h [deleted file]
drivers/staging/ath6kl/include/ar6kap_common.h [deleted file]
drivers/staging/ath6kl/include/athbtfilter.h [deleted file]
drivers/staging/ath6kl/include/bmi.h [deleted file]
drivers/staging/ath6kl/include/common/AR6002/AR6K_version.h [deleted file]
drivers/staging/ath6kl/include/common/AR6002/addrs.h [deleted file]
drivers/staging/ath6kl/include/common/AR6002/hw4.0/hw/apb_athr_wlan_map.h [deleted file]
drivers/staging/ath6kl/include/common/AR6002/hw4.0/hw/apb_map.h [deleted file]
drivers/staging/ath6kl/include/common/AR6002/hw4.0/hw/mbox_host_reg.h [deleted file]
drivers/staging/ath6kl/include/common/AR6002/hw4.0/hw/mbox_reg.h [deleted file]
drivers/staging/ath6kl/include/common/AR6002/hw4.0/hw/mbox_wlan_host_reg.h [deleted file]
drivers/staging/ath6kl/include/common/AR6002/hw4.0/hw/mbox_wlan_reg.h [deleted file]
drivers/staging/ath6kl/include/common/AR6002/hw4.0/hw/rtc_reg.h [deleted file]
drivers/staging/ath6kl/include/common/AR6002/hw4.0/hw/rtc_wlan_reg.h [deleted file]
drivers/staging/ath6kl/include/common/AR6002/hw4.0/hw/uart_reg.h [deleted file]
drivers/staging/ath6kl/include/common/athdefs.h [deleted file]
drivers/staging/ath6kl/include/common/bmi_msg.h [deleted file]
drivers/staging/ath6kl/include/common/cnxmgmt.h [deleted file]
drivers/staging/ath6kl/include/common/dbglog.h [deleted file]
drivers/staging/ath6kl/include/common/dbglog_id.h [deleted file]
drivers/staging/ath6kl/include/common/discovery.h [deleted file]
drivers/staging/ath6kl/include/common/epping_test.h [deleted file]
drivers/staging/ath6kl/include/common/gmboxif.h [deleted file]
drivers/staging/ath6kl/include/common/gpio_reg.h [deleted file]
drivers/staging/ath6kl/include/common/htc.h [deleted file]
drivers/staging/ath6kl/include/common/htc_services.h [deleted file]
drivers/staging/ath6kl/include/common/pkt_log.h [deleted file]
drivers/staging/ath6kl/include/common/roaming.h [deleted file]
drivers/staging/ath6kl/include/common/targaddrs.h [deleted file]
drivers/staging/ath6kl/include/common/testcmd.h [deleted file]
drivers/staging/ath6kl/include/common/tlpm.h [deleted file]
drivers/staging/ath6kl/include/common/wlan_defs.h [deleted file]
drivers/staging/ath6kl/include/common/wmi.h [deleted file]
drivers/staging/ath6kl/include/common/wmix.h [deleted file]
drivers/staging/ath6kl/include/common_drv.h [deleted file]
drivers/staging/ath6kl/include/dbglog_api.h [deleted file]
drivers/staging/ath6kl/include/dl_list.h [deleted file]
drivers/staging/ath6kl/include/dset_api.h [deleted file]
drivers/staging/ath6kl/include/hci_transport_api.h [deleted file]
drivers/staging/ath6kl/include/hif.h [deleted file]
drivers/staging/ath6kl/include/host_version.h [deleted file]
drivers/staging/ath6kl/include/htc_api.h [deleted file]
drivers/staging/ath6kl/include/htc_packet.h [deleted file]
drivers/staging/ath6kl/include/wlan_api.h [deleted file]
drivers/staging/ath6kl/include/wmi_api.h [deleted file]
drivers/staging/ath6kl/miscdrv/ar3kconfig.c [deleted file]
drivers/staging/ath6kl/miscdrv/ar3kps/ar3kpsconfig.c [deleted file]
drivers/staging/ath6kl/miscdrv/ar3kps/ar3kpsconfig.h [deleted file]
drivers/staging/ath6kl/miscdrv/ar3kps/ar3kpsparser.c [deleted file]
drivers/staging/ath6kl/miscdrv/ar3kps/ar3kpsparser.h [deleted file]
drivers/staging/ath6kl/miscdrv/common_drv.c [deleted file]
drivers/staging/ath6kl/miscdrv/credit_dist.c [deleted file]
drivers/staging/ath6kl/miscdrv/miscdrv.h [deleted file]
drivers/staging/ath6kl/os/linux/ar6000_drv.c [deleted file]
drivers/staging/ath6kl/os/linux/ar6000_pm.c [deleted file]
drivers/staging/ath6kl/os/linux/ar6000_raw_if.c [deleted file]
drivers/staging/ath6kl/os/linux/cfg80211.c [deleted file]
drivers/staging/ath6kl/os/linux/export_hci_transport.c [deleted file]
drivers/staging/ath6kl/os/linux/hci_bridge.c [deleted file]
drivers/staging/ath6kl/os/linux/include/ar6000_drv.h [deleted file]
drivers/staging/ath6kl/os/linux/include/ar6k_pal.h [deleted file]
drivers/staging/ath6kl/os/linux/include/ar6xapi_linux.h [deleted file]
drivers/staging/ath6kl/os/linux/include/athdrv_linux.h [deleted file]
drivers/staging/ath6kl/os/linux/include/cfg80211.h [deleted file]
drivers/staging/ath6kl/os/linux/include/config_linux.h [deleted file]
drivers/staging/ath6kl/os/linux/include/debug_linux.h [deleted file]
drivers/staging/ath6kl/os/linux/include/export_hci_transport.h [deleted file]
drivers/staging/ath6kl/os/linux/include/ieee80211_ioctl.h [deleted file]
drivers/staging/ath6kl/os/linux/include/osapi_linux.h [deleted file]
drivers/staging/ath6kl/os/linux/include/wlan_config.h [deleted file]
drivers/staging/ath6kl/os/linux/include/wmi_filter_linux.h [deleted file]
drivers/staging/ath6kl/os/linux/netbuf.c [deleted file]
drivers/staging/ath6kl/reorder/aggr_rx_internal.h [deleted file]
drivers/staging/ath6kl/reorder/rcv_aggr.c [deleted file]
drivers/staging/ath6kl/wlan/include/ieee80211.h [deleted file]
drivers/staging/ath6kl/wlan/include/ieee80211_node.h [deleted file]
drivers/staging/ath6kl/wlan/src/wlan_node.c [deleted file]
drivers/staging/ath6kl/wlan/src/wlan_recv_beacon.c [deleted file]
drivers/staging/ath6kl/wlan/src/wlan_utils.c [deleted file]
drivers/staging/ath6kl/wmi/wmi.c [deleted file]
drivers/staging/ath6kl/wmi/wmi_host.h [deleted file]
drivers/staging/bcm/Bcmchar.c
drivers/staging/bcm/InterfaceDld.c
drivers/staging/bcm/InterfaceInit.c
drivers/staging/bcm/InterfaceMisc.c
drivers/staging/bcm/Macros.h
drivers/staging/bcm/Misc.c
drivers/staging/bcm/headers.h
drivers/staging/bcm/nvm.c
drivers/staging/brcm80211/Kconfig [deleted file]
drivers/staging/brcm80211/Makefile [deleted file]
drivers/staging/brcm80211/README [deleted file]
drivers/staging/brcm80211/TODO [deleted file]
drivers/staging/brcm80211/brcmfmac/Makefile [deleted file]
drivers/staging/brcm80211/brcmfmac/bcmchip.h [deleted file]
drivers/staging/brcm80211/brcmfmac/bcmsdh.c [deleted file]
drivers/staging/brcm80211/brcmfmac/bcmsdh_sdmmc.c [deleted file]
drivers/staging/brcm80211/brcmfmac/dhd.h [deleted file]
drivers/staging/brcm80211/brcmfmac/dhd_bus.h [deleted file]
drivers/staging/brcm80211/brcmfmac/dhd_cdc.c [deleted file]
drivers/staging/brcm80211/brcmfmac/dhd_common.c [deleted file]
drivers/staging/brcm80211/brcmfmac/dhd_dbg.h [deleted file]
drivers/staging/brcm80211/brcmfmac/dhd_linux.c [deleted file]
drivers/staging/brcm80211/brcmfmac/dhd_proto.h [deleted file]
drivers/staging/brcm80211/brcmfmac/dhd_sdio.c [deleted file]
drivers/staging/brcm80211/brcmfmac/sdio_host.h [deleted file]
drivers/staging/brcm80211/brcmfmac/wl_cfg80211.c [deleted file]
drivers/staging/brcm80211/brcmfmac/wl_cfg80211.h [deleted file]
drivers/staging/brcm80211/brcmsmac/Makefile [deleted file]
drivers/staging/brcm80211/brcmsmac/aiutils.c [deleted file]
drivers/staging/brcm80211/brcmsmac/aiutils.h [deleted file]
drivers/staging/brcm80211/brcmsmac/alloc.c [deleted file]
drivers/staging/brcm80211/brcmsmac/alloc.h [deleted file]
drivers/staging/brcm80211/brcmsmac/ampdu.c [deleted file]
drivers/staging/brcm80211/brcmsmac/ampdu.h [deleted file]
drivers/staging/brcm80211/brcmsmac/antsel.c [deleted file]
drivers/staging/brcm80211/brcmsmac/antsel.h [deleted file]
drivers/staging/brcm80211/brcmsmac/bmac.c [deleted file]
drivers/staging/brcm80211/brcmsmac/bmac.h [deleted file]
drivers/staging/brcm80211/brcmsmac/channel.c [deleted file]
drivers/staging/brcm80211/brcmsmac/channel.h [deleted file]
drivers/staging/brcm80211/brcmsmac/d11.h [deleted file]
drivers/staging/brcm80211/brcmsmac/dma.c [deleted file]
drivers/staging/brcm80211/brcmsmac/dma.h [deleted file]
drivers/staging/brcm80211/brcmsmac/mac80211_if.c [deleted file]
drivers/staging/brcm80211/brcmsmac/mac80211_if.h [deleted file]
drivers/staging/brcm80211/brcmsmac/main.c [deleted file]
drivers/staging/brcm80211/brcmsmac/main.h [deleted file]
drivers/staging/brcm80211/brcmsmac/nicpci.c [deleted file]
drivers/staging/brcm80211/brcmsmac/nicpci.h [deleted file]
drivers/staging/brcm80211/brcmsmac/otp.c [deleted file]
drivers/staging/brcm80211/brcmsmac/otp.h [deleted file]
drivers/staging/brcm80211/brcmsmac/phy/phy_cmn.c [deleted file]
drivers/staging/brcm80211/brcmsmac/phy/phy_hal.h [deleted file]
drivers/staging/brcm80211/brcmsmac/phy/phy_int.h [deleted file]
drivers/staging/brcm80211/brcmsmac/phy/phy_lcn.c [deleted file]
drivers/staging/brcm80211/brcmsmac/phy/phy_lcn.h [deleted file]
drivers/staging/brcm80211/brcmsmac/phy/phy_n.c [deleted file]
drivers/staging/brcm80211/brcmsmac/phy/phy_qmath.c [deleted file]
drivers/staging/brcm80211/brcmsmac/phy/phy_qmath.h [deleted file]
drivers/staging/brcm80211/brcmsmac/phy/phy_radio.h [deleted file]
drivers/staging/brcm80211/brcmsmac/phy/phyreg_n.h [deleted file]
drivers/staging/brcm80211/brcmsmac/phy/phytbl_lcn.c [deleted file]
drivers/staging/brcm80211/brcmsmac/phy/phytbl_lcn.h [deleted file]
drivers/staging/brcm80211/brcmsmac/phy/phytbl_n.c [deleted file]
drivers/staging/brcm80211/brcmsmac/phy/phytbl_n.h [deleted file]
drivers/staging/brcm80211/brcmsmac/phy_shim.c [deleted file]
drivers/staging/brcm80211/brcmsmac/phy_shim.h [deleted file]
drivers/staging/brcm80211/brcmsmac/pmu.c [deleted file]
drivers/staging/brcm80211/brcmsmac/pmu.h [deleted file]
drivers/staging/brcm80211/brcmsmac/pub.h [deleted file]
drivers/staging/brcm80211/brcmsmac/rate.c [deleted file]
drivers/staging/brcm80211/brcmsmac/rate.h [deleted file]
drivers/staging/brcm80211/brcmsmac/scb.h [deleted file]
drivers/staging/brcm80211/brcmsmac/srom.c [deleted file]
drivers/staging/brcm80211/brcmsmac/srom.h [deleted file]
drivers/staging/brcm80211/brcmsmac/stf.c [deleted file]
drivers/staging/brcm80211/brcmsmac/stf.h [deleted file]
drivers/staging/brcm80211/brcmsmac/types.h [deleted file]
drivers/staging/brcm80211/brcmsmac/ucode_loader.c [deleted file]
drivers/staging/brcm80211/brcmsmac/ucode_loader.h [deleted file]
drivers/staging/brcm80211/brcmutil/Makefile [deleted file]
drivers/staging/brcm80211/brcmutil/utils.c [deleted file]
drivers/staging/brcm80211/brcmutil/wifi.c [deleted file]
drivers/staging/brcm80211/include/brcm_hw_ids.h [deleted file]
drivers/staging/brcm80211/include/brcmu_utils.h [deleted file]
drivers/staging/brcm80211/include/brcmu_wifi.h [deleted file]
drivers/staging/brcm80211/include/chipcommon.h [deleted file]
drivers/staging/brcm80211/include/defs.h [deleted file]
drivers/staging/brcm80211/include/soc.h [deleted file]
drivers/staging/comedi/Kconfig
drivers/staging/comedi/comedi_fops.c
drivers/staging/comedi/drivers/Makefile
drivers/staging/comedi/drivers/adv_pci_dio.c
drivers/staging/comedi/drivers/c6xdigio.c
drivers/staging/comedi/drivers/cb_das16_cs.c
drivers/staging/comedi/drivers/ni_atmio.c
drivers/staging/comedi/drivers/ni_labpc.c
drivers/staging/comedi/drivers/ni_pcidio.c
drivers/staging/comedi/drivers/pcmmio.c
drivers/staging/comedi/drivers/usbduxsigma.c [new file with mode: 0644]
drivers/staging/crystalhd/bc_dts_defs.h
drivers/staging/crystalhd/bc_dts_glob_lnx.h
drivers/staging/crystalhd/bc_dts_types.h
drivers/staging/crystalhd/crystalhd_cmds.h
drivers/staging/crystalhd/crystalhd_fw_if.h
drivers/staging/crystalhd/crystalhd_misc.h
drivers/staging/cx25821/cx25821-alsa.c
drivers/staging/cx25821/cx25821-audio-upstream.c
drivers/staging/cx25821/cx25821-audio-upstream.h
drivers/staging/cx25821/cx25821-audio.h
drivers/staging/cx25821/cx25821-cards.c
drivers/staging/cx25821/cx25821-core.c
drivers/staging/cx25821/cx25821-gpio.c
drivers/staging/cx25821/cx25821-gpio.h [deleted file]
drivers/staging/cx25821/cx25821-i2c.c
drivers/staging/cx25821/cx25821-video-upstream-ch2.c
drivers/staging/cx25821/cx25821-video-upstream-ch2.h
drivers/staging/cx25821/cx25821-video-upstream.c
drivers/staging/cx25821/cx25821-video-upstream.h
drivers/staging/cx25821/cx25821-video.c
drivers/staging/cx25821/cx25821-video.h
drivers/staging/cx25821/cx25821.h
drivers/staging/cxd2099/Makefile
drivers/staging/cxt1e1/linux.c
drivers/staging/cxt1e1/sbecom_inline_linux.h
drivers/staging/dt3155v4l/dt3155v4l.c
drivers/staging/dt3155v4l/dt3155v4l.h
drivers/staging/easycap/easycap.h
drivers/staging/easycap/easycap_ioctl.c
drivers/staging/easycap/easycap_main.c
drivers/staging/easycap/easycap_sound.c
drivers/staging/et131x/Kconfig
drivers/staging/et131x/Makefile
drivers/staging/et131x/README
drivers/staging/et131x/et1310_address_map.h [deleted file]
drivers/staging/et131x/et1310_eeprom.c [deleted file]
drivers/staging/et131x/et1310_mac.c [deleted file]
drivers/staging/et131x/et1310_phy.c [deleted file]
drivers/staging/et131x/et1310_phy.h [deleted file]
drivers/staging/et131x/et1310_pm.c [deleted file]
drivers/staging/et131x/et1310_rx.c [deleted file]
drivers/staging/et131x/et1310_rx.h [deleted file]
drivers/staging/et131x/et1310_tx.c [deleted file]
drivers/staging/et131x/et1310_tx.h [deleted file]
drivers/staging/et131x/et131x.c [new file with mode: 0644]
drivers/staging/et131x/et131x.h
drivers/staging/et131x/et131x_adapter.h [deleted file]
drivers/staging/et131x/et131x_defs.h [deleted file]
drivers/staging/et131x/et131x_initpci.c [deleted file]
drivers/staging/et131x/et131x_isr.c [deleted file]
drivers/staging/et131x/et131x_netdev.c [deleted file]
drivers/staging/et131x/et131x_version.h [deleted file]
drivers/staging/ft1000/ft1000-pcmcia/ft1000.h
drivers/staging/ft1000/ft1000-pcmcia/ft1000_cs.c
drivers/staging/ft1000/ft1000-pcmcia/ft1000_dnld.c
drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c
drivers/staging/ft1000/ft1000-pcmcia/ft1000_proc.c
drivers/staging/ft1000/ft1000-usb/ft1000_hw.c
drivers/staging/gma500/accel_2d.c
drivers/staging/gma500/cdv_device.c
drivers/staging/gma500/framebuffer.c
drivers/staging/gma500/gem.c
drivers/staging/gma500/gtt.c
drivers/staging/gma500/gtt.h
drivers/staging/gma500/intel_opregion.c
drivers/staging/gma500/mdfld_intel_display.c
drivers/staging/gma500/mrst_crtc.c
drivers/staging/gma500/power.c
drivers/staging/gma500/psb_device.c
drivers/staging/gma500/psb_drv.c
drivers/staging/gma500/psb_drv.h
drivers/staging/gma500/psb_intel_display.c
drivers/staging/gma500/psb_intel_lvds.c
drivers/staging/gma500/psb_irq.c
drivers/staging/gma500/psb_lid.c
drivers/staging/go7007/Makefile
drivers/staging/go7007/wis-tw2804.c
drivers/staging/hv/Kconfig
drivers/staging/hv/Makefile
drivers/staging/hv/TODO
drivers/staging/hv/blkvsc_drv.c [deleted file]
drivers/staging/hv/hv_mouse.c
drivers/staging/hv/hyperv_net.h
drivers/staging/hv/hyperv_storage.h [deleted file]
drivers/staging/hv/netvsc.c
drivers/staging/hv/netvsc_drv.c
drivers/staging/hv/rndis_filter.c
drivers/staging/hv/storvsc.c [deleted file]
drivers/staging/hv/storvsc_drv.c
drivers/staging/iio/Documentation/generic_buffer.c
drivers/staging/iio/Documentation/iio_utils.h
drivers/staging/iio/Documentation/sysfs-bus-iio
drivers/staging/iio/Documentation/sysfs-bus-iio-adc-ad7280a [new file with mode: 0644]
drivers/staging/iio/Documentation/sysfs-bus-iio-impedance-analyzer-ad5933 [new file with mode: 0644]
drivers/staging/iio/Kconfig
drivers/staging/iio/Makefile
drivers/staging/iio/accel/Kconfig
drivers/staging/iio/accel/Makefile
drivers/staging/iio/accel/accel.h [deleted file]
drivers/staging/iio/accel/adis16201.h
drivers/staging/iio/accel/adis16201_core.c
drivers/staging/iio/accel/adis16201_ring.c
drivers/staging/iio/accel/adis16201_trigger.c
drivers/staging/iio/accel/adis16203.h
drivers/staging/iio/accel/adis16203_core.c
drivers/staging/iio/accel/adis16203_ring.c
drivers/staging/iio/accel/adis16203_trigger.c
drivers/staging/iio/accel/adis16204.h
drivers/staging/iio/accel/adis16204_core.c
drivers/staging/iio/accel/adis16204_ring.c
drivers/staging/iio/accel/adis16204_trigger.c
drivers/staging/iio/accel/adis16209.h
drivers/staging/iio/accel/adis16209_core.c
drivers/staging/iio/accel/adis16209_ring.c
drivers/staging/iio/accel/adis16209_trigger.c
drivers/staging/iio/accel/adis16220_core.c
drivers/staging/iio/accel/adis16240.h
drivers/staging/iio/accel/adis16240_core.c
drivers/staging/iio/accel/adis16240_ring.c
drivers/staging/iio/accel/adis16240_trigger.c
drivers/staging/iio/accel/inclinometer.h [deleted file]
drivers/staging/iio/accel/kxsd9.c
drivers/staging/iio/accel/lis3l02dq.h
drivers/staging/iio/accel/lis3l02dq_core.c
drivers/staging/iio/accel/lis3l02dq_ring.c
drivers/staging/iio/accel/sca3000.h
drivers/staging/iio/accel/sca3000_core.c
drivers/staging/iio/accel/sca3000_ring.c
drivers/staging/iio/adc/Kconfig
drivers/staging/iio/adc/Makefile
drivers/staging/iio/adc/ad7150.c [deleted file]
drivers/staging/iio/adc/ad7152.c [deleted file]
drivers/staging/iio/adc/ad7192.c [new file with mode: 0644]
drivers/staging/iio/adc/ad7192.h [new file with mode: 0644]
drivers/staging/iio/adc/ad7280a.c [new file with mode: 0644]
drivers/staging/iio/adc/ad7280a.h [new file with mode: 0644]
drivers/staging/iio/adc/ad7291.c
drivers/staging/iio/adc/ad7298.h
drivers/staging/iio/adc/ad7298_core.c
drivers/staging/iio/adc/ad7298_ring.c
drivers/staging/iio/adc/ad7314.c [deleted file]
drivers/staging/iio/adc/ad7476.h
drivers/staging/iio/adc/ad7476_core.c
drivers/staging/iio/adc/ad7476_ring.c
drivers/staging/iio/adc/ad7606.h
drivers/staging/iio/adc/ad7606_core.c
drivers/staging/iio/adc/ad7606_par.c
drivers/staging/iio/adc/ad7606_ring.c
drivers/staging/iio/adc/ad7606_spi.c
drivers/staging/iio/adc/ad7745.c [deleted file]
drivers/staging/iio/adc/ad7780.c
drivers/staging/iio/adc/ad7793.c
drivers/staging/iio/adc/ad7816.c
drivers/staging/iio/adc/ad7887.h
drivers/staging/iio/adc/ad7887_core.c
drivers/staging/iio/adc/ad7887_ring.c
drivers/staging/iio/adc/ad799x.h
drivers/staging/iio/adc/ad799x_core.c
drivers/staging/iio/adc/ad799x_ring.c
drivers/staging/iio/adc/adc.h [deleted file]
drivers/staging/iio/adc/adt7310.c
drivers/staging/iio/adc/adt7410.c
drivers/staging/iio/adc/adt75.c [deleted file]
drivers/staging/iio/adc/max1363.h
drivers/staging/iio/adc/max1363_core.c
drivers/staging/iio/adc/max1363_ring.c
drivers/staging/iio/addac/Kconfig
drivers/staging/iio/addac/adt7316-i2c.c
drivers/staging/iio/addac/adt7316.c
drivers/staging/iio/buffer_generic.h [new file with mode: 0644]
drivers/staging/iio/cdc/Kconfig [new file with mode: 0644]
drivers/staging/iio/cdc/Makefile [new file with mode: 0644]
drivers/staging/iio/cdc/ad7150.c [new file with mode: 0644]
drivers/staging/iio/cdc/ad7152.c [new file with mode: 0644]
drivers/staging/iio/cdc/ad7746.c [new file with mode: 0644]
drivers/staging/iio/cdc/ad7746.h [new file with mode: 0644]
drivers/staging/iio/chrdev.h
drivers/staging/iio/dac/Kconfig
drivers/staging/iio/dac/Makefile
drivers/staging/iio/dac/ad5064.c [new file with mode: 0644]
drivers/staging/iio/dac/ad5360.c [new file with mode: 0644]
drivers/staging/iio/dac/ad5446.c
drivers/staging/iio/dac/ad5504.c
drivers/staging/iio/dac/ad5624r_spi.c
drivers/staging/iio/dac/ad5686.c
drivers/staging/iio/dac/ad5791.c
drivers/staging/iio/dac/ad5791.h
drivers/staging/iio/dac/dac.h
drivers/staging/iio/dac/max517.c
drivers/staging/iio/dds/Kconfig
drivers/staging/iio/dds/ad5930.c
drivers/staging/iio/dds/ad9832.c
drivers/staging/iio/dds/ad9834.c
drivers/staging/iio/dds/ad9850.c
drivers/staging/iio/dds/ad9852.c
drivers/staging/iio/dds/ad9910.c
drivers/staging/iio/dds/ad9951.c
drivers/staging/iio/gyro/Kconfig
drivers/staging/iio/gyro/Makefile
drivers/staging/iio/gyro/adis16060_core.c
drivers/staging/iio/gyro/adis16080_core.c
drivers/staging/iio/gyro/adis16130_core.c
drivers/staging/iio/gyro/adis16260.h
drivers/staging/iio/gyro/adis16260_core.c
drivers/staging/iio/gyro/adis16260_ring.c
drivers/staging/iio/gyro/adis16260_trigger.c
drivers/staging/iio/gyro/adxrs450_core.c
drivers/staging/iio/gyro/gyro.h [deleted file]
drivers/staging/iio/iio.h
drivers/staging/iio/iio_core.h [new file with mode: 0644]
drivers/staging/iio/iio_core_trigger.h [new file with mode: 0644]
drivers/staging/iio/iio_dummy_evgen.c [new file with mode: 0644]
drivers/staging/iio/iio_dummy_evgen.h [new file with mode: 0644]
drivers/staging/iio/iio_simple_dummy.c [new file with mode: 0644]
drivers/staging/iio/iio_simple_dummy.h [new file with mode: 0644]
drivers/staging/iio/iio_simple_dummy_buffer.c [new file with mode: 0644]
drivers/staging/iio/iio_simple_dummy_events.c [new file with mode: 0644]
drivers/staging/iio/impedance-analyzer/Kconfig [new file with mode: 0644]
drivers/staging/iio/impedance-analyzer/Makefile [new file with mode: 0644]
drivers/staging/iio/impedance-analyzer/ad5933.c [new file with mode: 0644]
drivers/staging/iio/impedance-analyzer/ad5933.h [new file with mode: 0644]
drivers/staging/iio/imu/Kconfig
drivers/staging/iio/imu/Makefile
drivers/staging/iio/imu/adis16400.h
drivers/staging/iio/imu/adis16400_core.c
drivers/staging/iio/imu/adis16400_ring.c
drivers/staging/iio/imu/adis16400_trigger.c
drivers/staging/iio/industrialio-buffer.c [new file with mode: 0644]
drivers/staging/iio/industrialio-core.c
drivers/staging/iio/industrialio-ring.c [deleted file]
drivers/staging/iio/industrialio-trigger.c
drivers/staging/iio/kfifo_buf.c
drivers/staging/iio/kfifo_buf.h
drivers/staging/iio/light/Kconfig
drivers/staging/iio/light/isl29018.c
drivers/staging/iio/light/tsl2563.c
drivers/staging/iio/light/tsl2583.c
drivers/staging/iio/magnetometer/Kconfig
drivers/staging/iio/magnetometer/ak8975.c
drivers/staging/iio/magnetometer/hmc5843.c
drivers/staging/iio/magnetometer/magnet.h [deleted file]
drivers/staging/iio/meter/Kconfig
drivers/staging/iio/meter/Makefile
drivers/staging/iio/meter/ade7753.c
drivers/staging/iio/meter/ade7754.c
drivers/staging/iio/meter/ade7758.h
drivers/staging/iio/meter/ade7758_core.c
drivers/staging/iio/meter/ade7758_ring.c
drivers/staging/iio/meter/ade7758_trigger.c
drivers/staging/iio/meter/ade7759.c
drivers/staging/iio/meter/ade7854-i2c.c
drivers/staging/iio/meter/ade7854-spi.c
drivers/staging/iio/meter/ade7854.c
drivers/staging/iio/resolver/Kconfig
drivers/staging/iio/resolver/Makefile
drivers/staging/iio/resolver/ad2s1200.c [new file with mode: 0644]
drivers/staging/iio/resolver/ad2s120x.c [deleted file]
drivers/staging/iio/resolver/ad2s1210.c
drivers/staging/iio/resolver/ad2s90.c
drivers/staging/iio/ring_generic.h [deleted file]
drivers/staging/iio/ring_hw.h
drivers/staging/iio/ring_sw.c
drivers/staging/iio/ring_sw.h
drivers/staging/iio/sysfs.h
drivers/staging/iio/trigger.h
drivers/staging/iio/trigger/iio-trig-bfin-timer.c
drivers/staging/iio/trigger/iio-trig-gpio.c
drivers/staging/iio/trigger/iio-trig-periodic-rtc.c
drivers/staging/iio/trigger/iio-trig-sysfs.c
drivers/staging/iio/trigger_consumer.h
drivers/staging/intel_sst/intel_sst.c
drivers/staging/intel_sst/intel_sst_dsp.c
drivers/staging/intel_sst/intelmid.c
drivers/staging/keucr/scsiglue.c
drivers/staging/keucr/smil.h
drivers/staging/keucr/smilsub.c
drivers/staging/keucr/smscsi.c
drivers/staging/lirc/lirc_imon.c
drivers/staging/lirc/lirc_sasem.c
drivers/staging/lirc/lirc_serial.c
drivers/staging/lirc/lirc_sir.c
drivers/staging/mei/Kconfig
drivers/staging/mei/TODO
drivers/staging/mei/init.c
drivers/staging/mei/interface.c
drivers/staging/mei/interface.h
drivers/staging/mei/interrupt.c
drivers/staging/mei/main.c
drivers/staging/mei/mei_dev.h
drivers/staging/mei/wd.c
drivers/staging/nvec/Kconfig
drivers/staging/nvec/Makefile
drivers/staging/nvec/TODO
drivers/staging/nvec/nvec-keytable.h
drivers/staging/nvec/nvec.c
drivers/staging/nvec/nvec.h
drivers/staging/nvec/nvec_kbd.c
drivers/staging/nvec/nvec_leds.c [new file with mode: 0644]
drivers/staging/nvec/nvec_power.c
drivers/staging/nvec/nvec_ps2.c
drivers/staging/olpc_dcon/olpc_dcon.c
drivers/staging/panel/panel.c
drivers/staging/pohmelfs/Kconfig
drivers/staging/pohmelfs/trans.c
drivers/staging/quatech_usb2/quatech_usb2.c
drivers/staging/rtl8187se/Makefile
drivers/staging/rtl8187se/ieee80211/ieee80211.h
drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c
drivers/staging/rtl8187se/r8180_rtl8225z2.c
drivers/staging/rtl8192e/Makefile
drivers/staging/rtl8192e/TODO [new file with mode: 0644]
drivers/staging/rtl8192e/dot11d.c [new file with mode: 0644]
drivers/staging/rtl8192e/dot11d.h
drivers/staging/rtl8192e/ieee80211/dot11d.c [deleted file]
drivers/staging/rtl8192e/ieee80211/dot11d.h [deleted file]
drivers/staging/rtl8192e/ieee80211/ieee80211.h [deleted file]
drivers/staging/rtl8192e/ieee80211/ieee80211_module.c [deleted file]
drivers/staging/rtl8192e/ieee80211/ieee80211_rx.c [deleted file]
drivers/staging/rtl8192e/ieee80211/ieee80211_softmac.c [deleted file]
drivers/staging/rtl8192e/ieee80211/ieee80211_tx.c [deleted file]
drivers/staging/rtl8192e/ieee80211/ieee80211_wx.c [deleted file]
drivers/staging/rtl8192e/ieee80211/rtl819x_BA.h [deleted file]
drivers/staging/rtl8192e/ieee80211/rtl819x_BAProc.c [deleted file]
drivers/staging/rtl8192e/ieee80211/rtl819x_HT.h [deleted file]
drivers/staging/rtl8192e/ieee80211/rtl819x_HTProc.c [deleted file]
drivers/staging/rtl8192e/ieee80211/rtl819x_Qos.h [deleted file]
drivers/staging/rtl8192e/ieee80211/rtl819x_TS.h [deleted file]
drivers/staging/rtl8192e/ieee80211/rtl819x_TSProc.c [deleted file]
drivers/staging/rtl8192e/license [new file with mode: 0644]
drivers/staging/rtl8192e/r8180_93cx6.c [deleted file]
drivers/staging/rtl8192e/r8180_93cx6.h [deleted file]
drivers/staging/rtl8192e/r8190P_def.h [new file with mode: 0644]
drivers/staging/rtl8192e/r8190P_rtl8256.c [new file with mode: 0644]
drivers/staging/rtl8192e/r8190P_rtl8256.h [new file with mode: 0644]
drivers/staging/rtl8192e/r8190_rtl8256.c [deleted file]
drivers/staging/rtl8192e/r8190_rtl8256.h [deleted file]
drivers/staging/rtl8192e/r8192E.h [deleted file]
drivers/staging/rtl8192e/r8192E_cmdpkt.c [new file with mode: 0644]
drivers/staging/rtl8192e/r8192E_cmdpkt.h [new file with mode: 0644]
drivers/staging/rtl8192e/r8192E_core.c [deleted file]
drivers/staging/rtl8192e/r8192E_dev.c [new file with mode: 0644]
drivers/staging/rtl8192e/r8192E_dev.h [new file with mode: 0644]
drivers/staging/rtl8192e/r8192E_dm.c [deleted file]
drivers/staging/rtl8192e/r8192E_dm.h [deleted file]
drivers/staging/rtl8192e/r8192E_firmware.c [new file with mode: 0644]
drivers/staging/rtl8192e/r8192E_firmware.h [new file with mode: 0644]
drivers/staging/rtl8192e/r8192E_hw.h
drivers/staging/rtl8192e/r8192E_hwimg.c [new file with mode: 0644]
drivers/staging/rtl8192e/r8192E_hwimg.h [new file with mode: 0644]
drivers/staging/rtl8192e/r8192E_phy.c [new file with mode: 0644]
drivers/staging/rtl8192e/r8192E_phy.h [new file with mode: 0644]
drivers/staging/rtl8192e/r8192E_phyreg.h [new file with mode: 0644]
drivers/staging/rtl8192e/r8192E_wx.c [deleted file]
drivers/staging/rtl8192e/r8192E_wx.h [deleted file]
drivers/staging/rtl8192e/r8192_pm.c [deleted file]
drivers/staging/rtl8192e/r8192_pm.h [deleted file]
drivers/staging/rtl8192e/r819xE_cmdpkt.c [deleted file]
drivers/staging/rtl8192e/r819xE_cmdpkt.h [deleted file]
drivers/staging/rtl8192e/r819xE_firmware.c [deleted file]
drivers/staging/rtl8192e/r819xE_phy.c [deleted file]
drivers/staging/rtl8192e/r819xE_phy.h [deleted file]
drivers/staging/rtl8192e/rtl819x_BA.h [new file with mode: 0644]
drivers/staging/rtl8192e/rtl819x_BAProc.c [new file with mode: 0644]
drivers/staging/rtl8192e/rtl819x_HT.h [new file with mode: 0644]
drivers/staging/rtl8192e/rtl819x_HTProc.c [new file with mode: 0644]
drivers/staging/rtl8192e/rtl819x_Qos.h [new file with mode: 0644]
drivers/staging/rtl8192e/rtl819x_TS.h [new file with mode: 0644]
drivers/staging/rtl8192e/rtl819x_TSProc.c [new file with mode: 0644]
drivers/staging/rtl8192e/rtl_cam.c [new file with mode: 0644]
drivers/staging/rtl8192e/rtl_cam.h [new file with mode: 0644]
drivers/staging/rtl8192e/rtl_core.c [new file with mode: 0644]
drivers/staging/rtl8192e/rtl_core.h [new file with mode: 0644]
drivers/staging/rtl8192e/rtl_crypto.h [moved from drivers/staging/rtl8192e/ieee80211/rtl_crypto.h with 74% similarity]
drivers/staging/rtl8192e/rtl_debug.c [new file with mode: 0644]
drivers/staging/rtl8192e/rtl_debug.h [new file with mode: 0644]
drivers/staging/rtl8192e/rtl_dm.c [new file with mode: 0644]
drivers/staging/rtl8192e/rtl_dm.h [new file with mode: 0644]
drivers/staging/rtl8192e/rtl_eeprom.c [new file with mode: 0644]
drivers/staging/rtl8192e/rtl_eeprom.h [new file with mode: 0644]
drivers/staging/rtl8192e/rtl_ethtool.c [new file with mode: 0644]
drivers/staging/rtl8192e/rtl_pci.c [new file with mode: 0644]
drivers/staging/rtl8192e/rtl_pci.h [new file with mode: 0644]
drivers/staging/rtl8192e/rtl_pm.c [new file with mode: 0644]
drivers/staging/rtl8192e/rtl_pm.h [new file with mode: 0644]
drivers/staging/rtl8192e/rtl_ps.c [new file with mode: 0644]
drivers/staging/rtl8192e/rtl_ps.h [new file with mode: 0644]
drivers/staging/rtl8192e/rtl_wx.c [new file with mode: 0644]
drivers/staging/rtl8192e/rtl_wx.h [new file with mode: 0644]
drivers/staging/rtl8192e/rtllib.h [new file with mode: 0644]
drivers/staging/rtl8192e/rtllib_crypt.c [moved from drivers/staging/rtl8192e/ieee80211/ieee80211_crypt.c with 63% similarity]
drivers/staging/rtl8192e/rtllib_crypt.h [moved from drivers/staging/rtl8192e/ieee80211/ieee80211_crypt.h with 74% similarity]
drivers/staging/rtl8192e/rtllib_crypt_ccmp.c [moved from drivers/staging/rtl8192e/ieee80211/ieee80211_crypt_ccmp.c with 67% similarity]
drivers/staging/rtl8192e/rtllib_crypt_tkip.c [moved from drivers/staging/rtl8192e/ieee80211/ieee80211_crypt_tkip.c with 71% similarity]
drivers/staging/rtl8192e/rtllib_crypt_wep.c [moved from drivers/staging/rtl8192e/ieee80211/ieee80211_crypt_wep.c with 71% similarity]
drivers/staging/rtl8192e/rtllib_endianfree.h [new file with mode: 0644]
drivers/staging/rtl8192e/rtllib_module.c [new file with mode: 0644]
drivers/staging/rtl8192e/rtllib_rx.c [new file with mode: 0644]
drivers/staging/rtl8192e/rtllib_softmac.c [new file with mode: 0644]
drivers/staging/rtl8192e/rtllib_softmac_wx.c [moved from drivers/staging/rtl8192e/ieee80211/ieee80211_softmac_wx.c with 50% similarity]
drivers/staging/rtl8192e/rtllib_tx.c [new file with mode: 0644]
drivers/staging/rtl8192e/rtllib_wx.c [new file with mode: 0644]
drivers/staging/rtl8192u/ieee80211/Makefile
drivers/staging/rtl8192u/ieee80211/compress.c
drivers/staging/rtl8192u/ieee80211/ieee80211.h
drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c
drivers/staging/rtl8712/Kconfig
drivers/staging/rtl8712/basic_types.h
drivers/staging/rtl8712/big_endian.h
drivers/staging/rtl8712/drv_types.h
drivers/staging/rtl8712/ethernet.h
drivers/staging/rtl8712/generic.h
drivers/staging/rtl8712/hal_init.c
drivers/staging/rtl8712/ieee80211.c
drivers/staging/rtl8712/ieee80211.h
drivers/staging/rtl8712/if_ether.h
drivers/staging/rtl8712/little_endian.h
drivers/staging/rtl8712/mlme_osdep.h
drivers/staging/rtl8712/mp_custom_oid.h
drivers/staging/rtl8712/os_intfs.c
drivers/staging/rtl8712/osdep_intf.h
drivers/staging/rtl8712/osdep_service.h
drivers/staging/rtl8712/recv_linux.c
drivers/staging/rtl8712/recv_osdep.h
drivers/staging/rtl8712/rtl8712_bitdef.h
drivers/staging/rtl8712/rtl8712_cmd.c
drivers/staging/rtl8712/rtl8712_cmd.h
drivers/staging/rtl8712/rtl8712_cmdctrl_bitdef.h
drivers/staging/rtl8712/rtl8712_cmdctrl_regdef.h
drivers/staging/rtl8712/rtl8712_debugctrl_bitdef.h
drivers/staging/rtl8712/rtl8712_debugctrl_regdef.h
drivers/staging/rtl8712/rtl8712_edcasetting_bitdef.h
drivers/staging/rtl8712/rtl8712_edcasetting_regdef.h
drivers/staging/rtl8712/rtl8712_efuse.c
drivers/staging/rtl8712/rtl8712_event.h
drivers/staging/rtl8712/rtl8712_fifoctrl_bitdef.h
drivers/staging/rtl8712/rtl8712_fifoctrl_regdef.h
drivers/staging/rtl8712/rtl8712_gp_bitdef.h
drivers/staging/rtl8712/rtl8712_gp_regdef.h
drivers/staging/rtl8712/rtl8712_hal.h
drivers/staging/rtl8712/rtl8712_interrupt_bitdef.h
drivers/staging/rtl8712/rtl8712_led.c
drivers/staging/rtl8712/rtl8712_macsetting_bitdef.h
drivers/staging/rtl8712/rtl8712_macsetting_regdef.h
drivers/staging/rtl8712/rtl8712_powersave_bitdef.h
drivers/staging/rtl8712/rtl8712_powersave_regdef.h
drivers/staging/rtl8712/rtl8712_ratectrl_bitdef.h
drivers/staging/rtl8712/rtl8712_ratectrl_regdef.h
drivers/staging/rtl8712/rtl8712_recv.c
drivers/staging/rtl8712/rtl8712_recv.h
drivers/staging/rtl8712/rtl8712_regdef.h
drivers/staging/rtl8712/rtl8712_security_bitdef.h
drivers/staging/rtl8712/rtl8712_spec.h
drivers/staging/rtl8712/rtl8712_syscfg_bitdef.h
drivers/staging/rtl8712/rtl8712_syscfg_regdef.h
drivers/staging/rtl8712/rtl8712_timectrl_bitdef.h
drivers/staging/rtl8712/rtl8712_timectrl_regdef.h
drivers/staging/rtl8712/rtl8712_wmac_bitdef.h
drivers/staging/rtl8712/rtl8712_wmac_regdef.h
drivers/staging/rtl8712/rtl8712_xmit.c
drivers/staging/rtl8712/rtl8712_xmit.h
drivers/staging/rtl8712/rtl871x_byteorder.h
drivers/staging/rtl8712/rtl871x_cmd.c
drivers/staging/rtl8712/rtl871x_cmd.h
drivers/staging/rtl8712/rtl871x_debug.h
drivers/staging/rtl8712/rtl871x_eeprom.h
drivers/staging/rtl8712/rtl871x_event.h
drivers/staging/rtl8712/rtl871x_ht.h
drivers/staging/rtl8712/rtl871x_io.h
drivers/staging/rtl8712/rtl871x_ioctl_linux.c
drivers/staging/rtl8712/rtl871x_ioctl_rtl.h
drivers/staging/rtl8712/rtl871x_ioctl_set.c
drivers/staging/rtl8712/rtl871x_ioctl_set.h
drivers/staging/rtl8712/rtl871x_led.h
drivers/staging/rtl8712/rtl871x_mlme.c
drivers/staging/rtl8712/rtl871x_mlme.h
drivers/staging/rtl8712/rtl871x_mp.c
drivers/staging/rtl8712/rtl871x_mp.h
drivers/staging/rtl8712/rtl871x_mp_ioctl.h
drivers/staging/rtl8712/rtl871x_pwrctrl.h
drivers/staging/rtl8712/rtl871x_recv.c
drivers/staging/rtl8712/rtl871x_rf.h
drivers/staging/rtl8712/rtl871x_security.c
drivers/staging/rtl8712/rtl871x_security.h
drivers/staging/rtl8712/rtl871x_wlan_sme.h
drivers/staging/rtl8712/rtl871x_xmit.c
drivers/staging/rtl8712/rtl871x_xmit.h
drivers/staging/rtl8712/sta_info.h
drivers/staging/rtl8712/swab.h
drivers/staging/rtl8712/usb_intf.c
drivers/staging/rtl8712/usb_ops.h
drivers/staging/rtl8712/usb_ops_linux.c
drivers/staging/rtl8712/usb_osintf.h
drivers/staging/rtl8712/usb_vendor_req.h
drivers/staging/rtl8712/wifi.h
drivers/staging/rtl8712/wlan_bssdef.h
drivers/staging/rtl8712/xmit_linux.c
drivers/staging/rtl8712/xmit_osdep.h
drivers/staging/rts5139/Kconfig [new file with mode: 0644]
drivers/staging/rts5139/Makefile [new file with mode: 0644]
drivers/staging/rts5139/TODO [new file with mode: 0644]
drivers/staging/rts5139/debug.h [new file with mode: 0644]
drivers/staging/rts5139/ms.c [new file with mode: 0644]
drivers/staging/rts5139/ms.h [new file with mode: 0644]
drivers/staging/rts5139/ms_mg.c [new file with mode: 0644]
drivers/staging/rts5139/ms_mg.h [new file with mode: 0644]
drivers/staging/rts5139/rts51x.c [new file with mode: 0644]
drivers/staging/rts5139/rts51x.h [new file with mode: 0644]
drivers/staging/rts5139/rts51x_card.c [new file with mode: 0644]
drivers/staging/rts5139/rts51x_card.h [new file with mode: 0644]
drivers/staging/rts5139/rts51x_chip.c [new file with mode: 0644]
drivers/staging/rts5139/rts51x_chip.h [new file with mode: 0644]
drivers/staging/rts5139/rts51x_fop.c [new file with mode: 0644]
drivers/staging/rts5139/rts51x_fop.h [new file with mode: 0644]
drivers/staging/rts5139/rts51x_scsi.c [new file with mode: 0644]
drivers/staging/rts5139/rts51x_scsi.h [new file with mode: 0644]
drivers/staging/rts5139/rts51x_sys.h [new file with mode: 0644]
drivers/staging/rts5139/rts51x_transport.c [new file with mode: 0644]
drivers/staging/rts5139/rts51x_transport.h [new file with mode: 0644]
drivers/staging/rts5139/sd.c [new file with mode: 0644]
drivers/staging/rts5139/sd.h [new file with mode: 0644]
drivers/staging/rts5139/sd_cprm.c [new file with mode: 0644]
drivers/staging/rts5139/sd_cprm.h [new file with mode: 0644]
drivers/staging/rts5139/trace.h [new file with mode: 0644]
drivers/staging/rts5139/xd.c [new file with mode: 0644]
drivers/staging/rts5139/xd.h [new file with mode: 0644]
drivers/staging/rts_pstor/Makefile
drivers/staging/rts_pstor/rtsx.c
drivers/staging/rts_pstor/rtsx.h
drivers/staging/rts_pstor/rtsx_scsi.c
drivers/staging/rts_pstor/sd.c
drivers/staging/rts_pstor/spi.c
drivers/staging/sep/sep_driver.c
drivers/staging/serqt_usb2/serqt_usb2.c
drivers/staging/sm7xx/smtcfb.c
drivers/staging/spectra/ffsport.c
drivers/staging/ste_rmi4/synaptics_i2c_rmi4.c
drivers/staging/tidspbridge/gen/gh.c
drivers/staging/tidspbridge/hw/hw_mmu.c
drivers/staging/usbip/stub.h
drivers/staging/usbip/stub_dev.c
drivers/staging/usbip/stub_main.c
drivers/staging/usbip/stub_rx.c
drivers/staging/usbip/usbip_common.h
drivers/staging/usbip/usbip_protocol.txt [new file with mode: 0644]
drivers/staging/usbip/userspace/libsrc/vhci_driver.c
drivers/staging/usbip/userspace/src/usbip_attach.c
drivers/staging/usbip/userspace/src/utils.h
drivers/staging/usbip/vhci.h
drivers/staging/vme/bridges/vme_ca91cx42.c
drivers/staging/vme/bridges/vme_tsi148.c
drivers/staging/vme/devices/vme_user.c
drivers/staging/vme/devices/vme_user.h
drivers/staging/vme/vme.c
drivers/staging/vme/vme.h
drivers/staging/vme/vme_api.txt
drivers/staging/vme/vme_bridge.h
drivers/staging/vt6655/IEEE11h.c
drivers/staging/vt6655/device_main.c
drivers/staging/vt6655/dpc.c
drivers/staging/vt6655/ioctl.c
drivers/staging/vt6655/wmgr.c
drivers/staging/vt6655/wpactl.c
drivers/staging/vt6656/dpc.c
drivers/staging/vt6656/ioctl.c
drivers/staging/vt6656/main_usb.c
drivers/staging/vt6656/wmgr.c
drivers/staging/vt6656/wpactl.c
drivers/staging/winbond/phy_calibration.c
drivers/staging/wlags49_h2/Makefile
drivers/staging/wlags49_h2/debug.h
drivers/staging/wlags49_h2/hcf.c
drivers/staging/wlags49_h2/hcf.h
drivers/staging/wlags49_h2/hcfcfg.h
drivers/staging/wlags49_h2/hcfdef.h
drivers/staging/wlags49_h2/mdd.h
drivers/staging/wlags49_h2/wl_cs.c
drivers/staging/wlags49_h2/wl_internal.h
drivers/staging/wlags49_h2/wl_main.c
drivers/staging/wlags49_h2/wl_netdev.c
drivers/staging/wlags49_h2/wl_sysfs.c
drivers/staging/wlags49_h2/wl_version.h
drivers/staging/wlags49_h2/wl_wext.c
drivers/staging/wlags49_h2/wl_wext.h
drivers/staging/wlags49_h25/Makefile
drivers/staging/xgifb/TODO
drivers/staging/xgifb/XGI_main.h
drivers/staging/xgifb/XGI_main_26.c
drivers/staging/xgifb/XGIfb.h
drivers/staging/xgifb/vb_def.h
drivers/staging/xgifb/vb_ext.h
drivers/staging/xgifb/vb_init.c
drivers/staging/xgifb/vb_init.h
drivers/staging/xgifb/vb_setmode.c
drivers/staging/xgifb/vb_struct.h
drivers/staging/xgifb/vb_table.h
drivers/staging/xgifb/vb_util.c
drivers/staging/xgifb/vgatypes.h
drivers/staging/zcache/zcache-main.c
drivers/staging/zram/zram_drv.c
drivers/staging/zram/zram_drv.h
drivers/staging/zram/zram_sysfs.c
include/linux/hyperv.h [moved from drivers/staging/hv/hyperv.h with 86% similarity]
include/linux/mod_devicetable.h
scripts/mod/file2alias.c
tools/hv/hv_kvp_daemon.c [moved from drivers/staging/hv/tools/hv_kvp_daemon.c with 97% similarity]

index 6185d05..6e3805c 100644 (file)
@@ -6134,7 +6134,7 @@ S:        Maintained
 
 STAGING SUBSYSTEM
 M:     Greg Kroah-Hartman <gregkh@suse.de>
-T:     git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6.git
+T:     git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
 L:     devel@driverdev.osuosl.org
 S:     Maintained
 F:     drivers/staging/
@@ -6181,6 +6181,11 @@ M:       David Rowe <david@rowetel.com>
 S:     Odd Fixes
 F:     drivers/staging/echo/
 
+STAGING - ET131X NETWORK DRIVER
+M:     Mark Einon <mark.einon@gmail.com>
+S:     Odd Fixes
+F:     drivers/staging/et131x/
+
 STAGING - FLARION FT1000 DRIVERS
 M:     Marek Belisko <marek.belisko@gmail.com>
 S:     Odd Fixes
@@ -6209,6 +6214,13 @@ W:       http://www.lirc.org/
 S:     Odd Fixes
 F:     drivers/staging/lirc/
 
+STAGING - NVIDIA COMPLIANT EMBEDDED CONTROLLER INTERFACE (nvec)
+M:     Julian Andres Klode <jak@jak-linux.org>
+M:     Marc Dietrich <marvin24@gmx.de>
+L:     ac100@lists.launchpad.net (moderated for non-subscribers)
+S:     Maintained
+F:     drivers/staging/nvec/
+
 STAGING - OLPC SECONDARY DISPLAY CONTROLLER (DCON)
 M:     Andres Salomon <dilinger@queued.net>
 M:     Chris Ball <cjb@laptop.org>
index 5df477a..b80420b 100644 (file)
 #define HV_STATUS_INVALID_HYPERCALL_CODE       2
 #define HV_STATUS_INVALID_HYPERCALL_INPUT      3
 #define HV_STATUS_INVALID_ALIGNMENT            4
+#define HV_STATUS_INSUFFICIENT_BUFFERS         19
 
 #endif
index 95b9e7e..ce3c35f 100644 (file)
@@ -130,4 +130,6 @@ source "drivers/iommu/Kconfig"
 
 source "drivers/virt/Kconfig"
 
+source "drivers/hv/Kconfig"
+
 endmenu
index 7fa433a..ef693cf 100644 (file)
@@ -127,3 +127,5 @@ obj-$(CONFIG_IOMMU_SUPPORT) += iommu/
 
 # Virtualization drivers
 obj-$(CONFIG_VIRT_DRIVERS)     += virt/
+obj-$(CONFIG_HYPERV)           += hv/
+
diff --git a/drivers/char/scc.h b/drivers/char/scc.h
deleted file mode 100644 (file)
index 341b114..0000000
+++ /dev/null
@@ -1,613 +0,0 @@
-/*
- * atari_SCC.h: Definitions for the Am8530 Serial Communications Controller
- *
- * Copyright 1994 Roman Hodek <Roman.Hodek@informatik.uni-erlangen.de>
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License.  See the file COPYING in the main directory of this archive
- * for more details.
- *
- */
-
-
-#ifndef _SCC_H
-#define _SCC_H
-
-#include <linux/delay.h>
-
-/* Special configuration ioctls for the Atari SCC5380 Serial
- * Communications Controller
- */
-
-/* ioctl command codes */
-
-#define TIOCGATSCC     0x54c0  /* get SCC configuration */
-#define TIOCSATSCC     0x54c1  /* set SCC configuration */
-#define TIOCDATSCC     0x54c2  /* reset configuration to defaults */
-
-/* Clock sources */
-
-#define CLK_RTxC       0
-#define CLK_TRxC       1
-#define CLK_PCLK       2
-
-/* baud_bases for the common clocks in the Atari. These are the real
- * frequencies divided by 16.
- */
-   
-#define SCC_BAUD_BASE_TIMC     19200   /* 0.3072 MHz from TT-MFP, Timer C */
-#define SCC_BAUD_BASE_BCLK     153600  /* 2.4576 MHz */
-#define SCC_BAUD_BASE_PCLK4    229500  /* 3.6720 MHz */
-#define SCC_BAUD_BASE_PCLK     503374  /* 8.0539763 MHz */
-#define SCC_BAUD_BASE_NONE     0       /* for not connected or unused
-                                        * clock sources */
-
-/* The SCC clock configuration structure */
-
-struct scc_clock_config {
-       unsigned        RTxC_base;      /* base_baud of RTxC */
-       unsigned        TRxC_base;      /* base_baud of TRxC */
-       unsigned        PCLK_base;      /* base_baud of PCLK, both channels! */
-       struct {
-               unsigned clksrc;        /* CLK_RTxC, CLK_TRxC or CLK_PCLK */
-               unsigned divisor;       /* divisor for base baud, valid values:
-                                        * see below */
-       } baud_table[17];               /* For 50, 75, 110, 135, 150, 200, 300,
-                                        * 600, 1200, 1800, 2400, 4800, 9600,
-                                        * 19200, 38400, 57600 and 115200 bps.
-                                        * The last two could be replaced by
-                                        * other rates > 38400 if they're not
-                                        * possible.
-                                        */
-};
-
-/* The following divisors are valid:
- *
- *   - CLK_RTxC: 1 or even (1, 2 and 4 are the direct modes, > 4 use
- *               the BRG)
- *
- *   - CLK_TRxC: 1, 2 or 4 (no BRG, only direct modes possible)
- *
- *   - CLK_PCLK: >= 4 and even (no direct modes, only BRG)
- *
- */
-
-struct scc_port {
-       struct gs_port          gs;
-       volatile unsigned char  *ctrlp;
-       volatile unsigned char  *datap;
-       int                     x_char;         /* xon/xoff character */
-       int                     c_dcd;
-       int                     channel;
-       struct scc_port         *port_a;        /* Reference to port A and B */
-       struct scc_port         *port_b;        /*   structs for reg access  */
-};
-
-#define SCC_MAGIC      0x52696368
-
-/***********************************************************************/
-/*                                                                     */
-/*                             Register Names                          */
-/*                                                                     */
-/***********************************************************************/
-
-/* The SCC documentation gives no explicit names to the registers,
- * they're just called WR0..15 and RR0..15. To make the source code
- * better readable and make the transparent write reg read access (see
- * below) possible, I christen them here with self-invented names.
- * Note that (real) read registers are assigned numbers 16..31. WR7'
- * has number 33.
- */
-
-#define        COMMAND_REG             0       /* wo */
-#define        INT_AND_DMA_REG         1       /* wo */
-#define        INT_VECTOR_REG          2       /* rw, common to both channels */
-#define        RX_CTRL_REG             3       /* rw */
-#define        AUX1_CTRL_REG           4       /* rw */
-#define        TX_CTRL_REG             5       /* rw */
-#define        SYNC_ADR_REG            6       /* wo */
-#define        SYNC_CHAR_REG           7       /* wo */
-#define        SDLC_OPTION_REG         33      /* wo */
-#define        TX_DATA_REG             8       /* wo */
-#define        MASTER_INT_CTRL         9       /* wo, common to both channels */
-#define        AUX2_CTRL_REG           10      /* rw */
-#define        CLK_CTRL_REG            11      /* wo */
-#define        TIMER_LOW_REG           12      /* rw */
-#define        TIMER_HIGH_REG          13      /* rw */
-#define        DPLL_CTRL_REG           14      /* wo */
-#define        INT_CTRL_REG            15      /* rw */
-
-#define        STATUS_REG              16      /* ro */
-#define        SPCOND_STATUS_REG       17      /* wo */
-/* RR2 is WR2 for Channel A, Channel B gives vector + current status: */
-#define        CURR_VECTOR_REG         18      /* Ch. B only, Ch. A for rw */
-#define        INT_PENDING_REG         19      /* Channel A only! */
-/* RR4 is WR4, if b6(MR7') == 1 */
-/* RR5 is WR5, if b6(MR7') == 1 */
-#define        FS_FIFO_LOW_REG         22      /* ro */
-#define        FS_FIFO_HIGH_REG        23      /* ro */
-#define        RX_DATA_REG             24      /* ro */
-/* RR9 is WR3, if b6(MR7') == 1 */
-#define        DPLL_STATUS_REG         26      /* ro */
-/* RR11 is WR10, if b6(MR7') == 1 */
-/* RR12 is WR12 */
-/* RR13 is WR13 */
-/* RR14 not present */
-/* RR15 is WR15 */
-
-
-/***********************************************************************/
-/*                                                                     */
-/*                             Register Values                         */
-/*                                                                     */
-/***********************************************************************/
-
-
-/* WR0: COMMAND_REG "CR" */
-
-#define        CR_RX_CRC_RESET         0x40
-#define        CR_TX_CRC_RESET         0x80
-#define        CR_TX_UNDERRUN_RESET    0xc0
-
-#define        CR_EXTSTAT_RESET        0x10
-#define        CR_SEND_ABORT           0x18
-#define        CR_ENAB_INT_NEXT_RX     0x20
-#define        CR_TX_PENDING_RESET     0x28
-#define        CR_ERROR_RESET          0x30
-#define        CR_HIGHEST_IUS_RESET    0x38
-
-
-/* WR1: INT_AND_DMA_REG "IDR" */
-
-#define        IDR_EXTSTAT_INT_ENAB    0x01
-#define        IDR_TX_INT_ENAB         0x02
-#define        IDR_PARERR_AS_SPCOND    0x04
-
-#define        IDR_RX_INT_DISAB        0x00
-#define        IDR_RX_INT_FIRST        0x08
-#define        IDR_RX_INT_ALL          0x10
-#define        IDR_RX_INT_SPCOND       0x18
-#define        IDR_RX_INT_MASK         0x18
-
-#define        IDR_WAITREQ_RX          0x20
-#define        IDR_WAITREQ_IS_REQ      0x40
-#define        IDR_WAITREQ_ENAB        0x80
-
-
-/* WR3: RX_CTRL_REG "RCR" */
-
-#define        RCR_RX_ENAB             0x01
-#define        RCR_DISCARD_SYNC_CHARS  0x02
-#define        RCR_ADDR_SEARCH         0x04
-#define        RCR_CRC_ENAB            0x08
-#define        RCR_SEARCH_MODE         0x10
-#define        RCR_AUTO_ENAB_MODE      0x20
-
-#define        RCR_CHSIZE_MASK         0xc0
-#define        RCR_CHSIZE_5            0x00
-#define        RCR_CHSIZE_6            0x40
-#define        RCR_CHSIZE_7            0x80
-#define        RCR_CHSIZE_8            0xc0
-
-
-/* WR4: AUX1_CTRL_REG "A1CR" */
-
-#define        A1CR_PARITY_MASK        0x03
-#define        A1CR_PARITY_NONE        0x00
-#define        A1CR_PARITY_ODD         0x01
-#define        A1CR_PARITY_EVEN        0x03
-
-#define        A1CR_MODE_MASK          0x0c
-#define        A1CR_MODE_SYNCR         0x00
-#define        A1CR_MODE_ASYNC_1       0x04
-#define        A1CR_MODE_ASYNC_15      0x08
-#define        A1CR_MODE_ASYNC_2       0x0c
-
-#define        A1CR_SYNCR_MODE_MASK    0x30
-#define        A1CR_SYNCR_MONOSYNC     0x00
-#define        A1CR_SYNCR_BISYNC       0x10
-#define        A1CR_SYNCR_SDLC         0x20
-#define        A1CR_SYNCR_EXTCSYNC     0x30
-
-#define        A1CR_CLKMODE_MASK       0xc0
-#define        A1CR_CLKMODE_x1         0x00
-#define        A1CR_CLKMODE_x16        0x40
-#define        A1CR_CLKMODE_x32        0x80
-#define        A1CR_CLKMODE_x64        0xc0
-
-
-/* WR5: TX_CTRL_REG "TCR" */
-
-#define        TCR_TX_CRC_ENAB         0x01
-#define        TCR_RTS                 0x02
-#define        TCR_USE_CRC_CCITT       0x00
-#define        TCR_USE_CRC_16          0x04
-#define        TCR_TX_ENAB             0x08
-#define        TCR_SEND_BREAK          0x10
-
-#define        TCR_CHSIZE_MASK         0x60
-#define        TCR_CHSIZE_5            0x00
-#define        TCR_CHSIZE_6            0x20
-#define        TCR_CHSIZE_7            0x40
-#define        TCR_CHSIZE_8            0x60
-
-#define        TCR_DTR                 0x80
-
-
-/* WR7': SLDC_OPTION_REG "SOR" */
-
-#define        SOR_AUTO_TX_ENAB        0x01
-#define        SOR_AUTO_EOM_RESET      0x02
-#define        SOR_AUTO_RTS_MODE       0x04
-#define        SOR_NRZI_DISAB_HIGH     0x08
-#define        SOR_ALT_DTRREQ_TIMING   0x10
-#define        SOR_READ_CRC_CHARS      0x20
-#define        SOR_EXTENDED_REG_ACCESS 0x40
-
-
-/* WR9: MASTER_INT_CTRL "MIC" */
-
-#define        MIC_VEC_INCL_STAT       0x01
-#define        MIC_NO_VECTOR           0x02
-#define        MIC_DISAB_LOWER_CHAIN   0x04
-#define        MIC_MASTER_INT_ENAB     0x08
-#define        MIC_STATUS_HIGH         0x10
-#define        MIC_IGN_INTACK          0x20
-
-#define        MIC_NO_RESET            0x00
-#define        MIC_CH_A_RESET          0x40
-#define        MIC_CH_B_RESET          0x80
-#define        MIC_HARD_RESET          0xc0
-
-
-/* WR10: AUX2_CTRL_REG "A2CR" */
-
-#define        A2CR_SYNC_6             0x01
-#define        A2CR_LOOP_MODE          0x02
-#define        A2CR_ABORT_ON_UNDERRUN  0x04
-#define        A2CR_MARK_IDLE          0x08
-#define        A2CR_GO_ACTIVE_ON_POLL  0x10
-
-#define        A2CR_CODING_MASK        0x60
-#define        A2CR_CODING_NRZ         0x00
-#define        A2CR_CODING_NRZI        0x20
-#define        A2CR_CODING_FM1         0x40
-#define        A2CR_CODING_FM0         0x60
-
-#define        A2CR_PRESET_CRC_1       0x80
-
-
-/* WR11: CLK_CTRL_REG "CCR" */
-
-#define        CCR_TRxCOUT_MASK        0x03
-#define        CCR_TRxCOUT_XTAL        0x00
-#define        CCR_TRxCOUT_TXCLK       0x01
-#define        CCR_TRxCOUT_BRG         0x02
-#define        CCR_TRxCOUT_DPLL        0x03
-
-#define        CCR_TRxC_OUTPUT         0x04
-
-#define        CCR_TXCLK_MASK          0x18
-#define        CCR_TXCLK_RTxC          0x00
-#define        CCR_TXCLK_TRxC          0x08
-#define        CCR_TXCLK_BRG           0x10
-#define        CCR_TXCLK_DPLL          0x18
-
-#define        CCR_RXCLK_MASK          0x60
-#define        CCR_RXCLK_RTxC          0x00
-#define        CCR_RXCLK_TRxC          0x20
-#define        CCR_RXCLK_BRG           0x40
-#define        CCR_RXCLK_DPLL          0x60
-
-#define        CCR_RTxC_XTAL           0x80
-
-
-/* WR14: DPLL_CTRL_REG "DCR" */
-
-#define        DCR_BRG_ENAB            0x01
-#define        DCR_BRG_USE_PCLK        0x02
-#define        DCR_DTRREQ_IS_REQ       0x04
-#define        DCR_AUTO_ECHO           0x08
-#define        DCR_LOCAL_LOOPBACK      0x10
-
-#define        DCR_DPLL_EDGE_SEARCH    0x20
-#define        DCR_DPLL_ERR_RESET      0x40
-#define        DCR_DPLL_DISAB          0x60
-#define        DCR_DPLL_CLK_BRG        0x80
-#define        DCR_DPLL_CLK_RTxC       0xa0
-#define        DCR_DPLL_FM             0xc0
-#define        DCR_DPLL_NRZI           0xe0
-
-
-/* WR15: INT_CTRL_REG "ICR" */
-
-#define        ICR_OPTIONREG_SELECT    0x01
-#define        ICR_ENAB_BRG_ZERO_INT   0x02
-#define        ICR_USE_FS_FIFO         0x04
-#define        ICR_ENAB_DCD_INT        0x08
-#define        ICR_ENAB_SYNC_INT       0x10
-#define        ICR_ENAB_CTS_INT        0x20
-#define        ICR_ENAB_UNDERRUN_INT   0x40
-#define        ICR_ENAB_BREAK_INT      0x80
-
-
-/* RR0: STATUS_REG "SR" */
-
-#define        SR_CHAR_AVAIL           0x01
-#define        SR_BRG_ZERO             0x02
-#define        SR_TX_BUF_EMPTY         0x04
-#define        SR_DCD                  0x08
-#define        SR_SYNC_ABORT           0x10
-#define        SR_CTS                  0x20
-#define        SR_TX_UNDERRUN          0x40
-#define        SR_BREAK                0x80
-
-
-/* RR1: SPCOND_STATUS_REG "SCSR" */
-
-#define        SCSR_ALL_SENT           0x01
-#define        SCSR_RESIDUAL_MASK      0x0e
-#define        SCSR_PARITY_ERR         0x10
-#define        SCSR_RX_OVERRUN         0x20
-#define        SCSR_CRC_FRAME_ERR      0x40
-#define        SCSR_END_OF_FRAME       0x80
-
-
-/* RR3: INT_PENDING_REG "IPR" */
-
-#define        IPR_B_EXTSTAT           0x01
-#define        IPR_B_TX                0x02
-#define        IPR_B_RX                0x04
-#define        IPR_A_EXTSTAT           0x08
-#define        IPR_A_TX                0x10
-#define        IPR_A_RX                0x20
-
-
-/* RR7: FS_FIFO_HIGH_REG "FFHR" */
-
-#define        FFHR_CNT_MASK           0x3f
-#define        FFHR_IS_FROM_FIFO       0x40
-#define        FFHR_FIFO_OVERRUN       0x80
-
-
-/* RR10: DPLL_STATUS_REG "DSR" */
-
-#define        DSR_ON_LOOP             0x02
-#define        DSR_ON_LOOP_SENDING     0x10
-#define        DSR_TWO_CLK_MISSING     0x40
-#define        DSR_ONE_CLK_MISSING     0x80
-
-/***********************************************************************/
-/*                                                                     */
-/*                             Register Access                         */
-/*                                                                     */
-/***********************************************************************/
-
-
-/* The SCC needs 3.5 PCLK cycles recovery time between to register
- * accesses. PCLK runs with 8 MHz on an Atari, so this delay is 3.5 *
- * 125 ns = 437.5 ns. This is too short for udelay().
- * 10/16/95: A tstb st_mfp.par_dt_reg takes 600ns (sure?) and thus should be
- * quite right
- */
-
-#define scc_reg_delay() \
-    do {                       \
-       if (MACH_IS_MVME16x || MACH_IS_BVME6000 || MACH_IS_MVME147)     \
-               __asm__ __volatile__ ( " nop; nop");                    \
-       else if (MACH_IS_ATARI)                                         \
-               __asm__ __volatile__ ( "tstb %0" : : "g" (*_scc_del) : "cc" );\
-    } while (0)
-
-static unsigned char scc_shadow[2][16];
-
-/* The following functions should relax the somehow complicated
- * register access of the SCC. _SCCwrite() stores all written values
- * (except for WR0 and WR8) in shadow registers for later recall. This
- * removes the burden of remembering written values as needed. The
- * extra work of storing the value doesn't count, since a delay is
- * needed after a SCC access anyway. Additionally, _SCCwrite() manages
- * writes to WR0 and WR8 differently, because these can be accessed
- * directly with less overhead. Another special case are WR7 and WR7'.
- * _SCCwrite automatically checks what of this registers is selected
- * and changes b0 of WR15 if needed.
- * 
- * _SCCread() for standard read registers is straightforward, except
- * for RR2 (split into two "virtual" registers: one for the value
- * written to WR2 (from the shadow) and one for the vector including
- * status from RR2, Ch. B) and RR3. The latter must be read from
- * Channel A, because it reads as all zeros on Ch. B. RR0 and RR8 can
- * be accessed directly as before.
- * 
- * The two inline function contain complicated switch statements. But
- * I rely on regno and final_delay being constants, so gcc can reduce
- * the whole stuff to just some assembler statements.
- * 
- * _SCCwrite and _SCCread aren't intended to be used directly under
- * normal circumstances. The macros SCCread[_ND] and SCCwrite[_ND] are
- * for that purpose. They assume that a local variable 'port' is
- * declared and pointing to the port's scc_struct entry. The
- * variants with "_NB" appended should be used if no other SCC
- * accesses follow immediately (within 0.5 usecs). They just skip the
- * final delay nops.
- * 
- * Please note that accesses to SCC registers should only take place
- * when interrupts are turned off (at least if SCC interrupts are
- * enabled). Otherwise, an interrupt could interfere with the
- * two-stage accessing process.
- *
- */
-
-
-static __inline__ void _SCCwrite(
-       struct scc_port *port,
-       unsigned char *shadow,
-       volatile unsigned char *_scc_del,
-       int regno,
-       unsigned char val, int final_delay )
-{
-       switch( regno ) {
-
-         case COMMAND_REG:
-               /* WR0 can be written directly without pointing */
-               *port->ctrlp = val;
-               break;
-
-         case SYNC_CHAR_REG:
-               /* For WR7, first set b0 of WR15 to 0, if needed */
-               if (shadow[INT_CTRL_REG] & ICR_OPTIONREG_SELECT) {
-                       *port->ctrlp = 15;
-                       shadow[INT_CTRL_REG] &= ~ICR_OPTIONREG_SELECT;
-                       scc_reg_delay();
-                       *port->ctrlp = shadow[INT_CTRL_REG];
-                       scc_reg_delay();
-               }
-               goto normal_case;
-               
-         case SDLC_OPTION_REG:
-               /* For WR7', first set b0 of WR15 to 1, if needed */
-               if (!(shadow[INT_CTRL_REG] & ICR_OPTIONREG_SELECT)) {
-                       *port->ctrlp = 15;
-                       shadow[INT_CTRL_REG] |= ICR_OPTIONREG_SELECT;
-                       scc_reg_delay();
-                       *port->ctrlp = shadow[INT_CTRL_REG];
-                       scc_reg_delay();
-               }
-               *port->ctrlp = 7;
-               shadow[8] = val;        /* WR7' shadowed at WR8 */
-               scc_reg_delay();
-               *port->ctrlp = val;
-               break;
-
-         case TX_DATA_REG:             /* WR8 */
-               /* TX_DATA_REG can be accessed directly on some h/w */
-               if (MACH_IS_MVME16x || MACH_IS_BVME6000 || MACH_IS_MVME147)
-               {
-                       *port->ctrlp = regno;
-                       scc_reg_delay();
-                       *port->ctrlp = val;
-               }
-               else
-                       *port->datap = val;
-               break;
-
-         case MASTER_INT_CTRL:
-               *port->ctrlp = regno;
-               val &= 0x3f;    /* bits 6..7 are the reset commands */
-               scc_shadow[0][regno] = val;
-               scc_reg_delay();
-               *port->ctrlp = val;
-               break;
-
-         case DPLL_CTRL_REG:
-               *port->ctrlp = regno;
-               val &= 0x1f;                    /* bits 5..7 are the DPLL commands */
-               shadow[regno] = val;
-               scc_reg_delay();
-               *port->ctrlp = val;
-               break;
-
-         case 1 ... 6: 
-         case 10 ... 13:
-         case 15:
-         normal_case:
-               *port->ctrlp = regno;
-               shadow[regno] = val;
-               scc_reg_delay();
-               *port->ctrlp = val;
-               break;
-               
-         default:
-               printk( "Bad SCC write access to WR%d\n", regno );
-               break;
-               
-       }
-
-       if (final_delay)
-               scc_reg_delay();
-}
-
-
-static __inline__ unsigned char _SCCread(
-       struct scc_port *port,
-       unsigned char *shadow,
-       volatile unsigned char *_scc_del,
-       int regno, int final_delay )
-{
-       unsigned char rv;
-
-       switch( regno ) {
-
-               /* --- real read registers --- */
-         case STATUS_REG:
-               rv = *port->ctrlp;
-               break;
-
-         case INT_PENDING_REG:
-               /* RR3: read only from Channel A! */
-               port = port->port_a;
-               goto normal_case;
-
-         case RX_DATA_REG:
-               /* RR8 can be accessed directly on some h/w */
-               if (MACH_IS_MVME16x || MACH_IS_BVME6000 || MACH_IS_MVME147)
-               {
-                       *port->ctrlp = 8;
-                       scc_reg_delay();
-                       rv = *port->ctrlp;
-               }
-               else
-                       rv = *port->datap;
-               break;
-
-         case CURR_VECTOR_REG:
-               /* RR2 (vector including status) from Ch. B */
-               port = port->port_b;
-               goto normal_case;
-               
-               /* --- reading write registers: access the shadow --- */
-         case 1 ... 7:
-         case 10 ... 15:
-               return shadow[regno]; /* no final delay! */
-
-               /* WR7' is special, because it is shadowed at the place of WR8 */
-         case SDLC_OPTION_REG:
-               return shadow[8]; /* no final delay! */
-
-               /* WR9 is special too, because it is common for both channels */
-         case MASTER_INT_CTRL:
-               return scc_shadow[0][9]; /* no final delay! */
-
-         default:
-               printk( "Bad SCC read access to %cR%d\n", (regno & 16) ? 'R' : 'W',
-                               regno & ~16 );
-               break;
-               
-         case SPCOND_STATUS_REG:
-         case FS_FIFO_LOW_REG:
-         case FS_FIFO_HIGH_REG:
-         case DPLL_STATUS_REG:
-         normal_case:
-               *port->ctrlp = regno & 0x0f;
-               scc_reg_delay();
-               rv = *port->ctrlp;
-               break;
-               
-       }
-
-       if (final_delay)
-               scc_reg_delay();
-       return rv;
-}
-
-#define SCC_ACCESS_INIT(port)                                          \
-       unsigned char *_scc_shadow = &scc_shadow[port->channel][0]
-
-#define        SCCwrite(reg,val)       _SCCwrite(port,_scc_shadow,scc_del,(reg),(val),1)
-#define        SCCwrite_NB(reg,val)    _SCCwrite(port,_scc_shadow,scc_del,(reg),(val),0)
-#define        SCCread(reg)            _SCCread(port,_scc_shadow,scc_del,(reg),1)
-#define        SCCread_NB(reg)         _SCCread(port,_scc_shadow,scc_del,(reg),0)
-
-#define SCCmod(reg,and,or)     SCCwrite((reg),(SCCread(reg)&(and))|(or))
-
-#endif /* _SCC_H */
diff --git a/drivers/hv/Kconfig b/drivers/hv/Kconfig
new file mode 100644 (file)
index 0000000..9fa09ac
--- /dev/null
@@ -0,0 +1,14 @@
+config HYPERV
+       tristate "Microsoft Hyper-V client drivers"
+       depends on X86 && ACPI && PCI
+       help
+         Select this option to run Linux as a Hyper-V client operating
+         system.
+
+config HYPERV_UTILS
+       tristate "Microsoft Hyper-V Utilities driver"
+       depends on HYPERV && CONNECTOR && NLS
+       help
+         Select this option to enable the Hyper-V Utilities.
+
+
diff --git a/drivers/hv/Makefile b/drivers/hv/Makefile
new file mode 100644 (file)
index 0000000..a23938b
--- /dev/null
@@ -0,0 +1,7 @@
+obj-$(CONFIG_HYPERV)           += hv_vmbus.o
+obj-$(CONFIG_HYPERV_UTILS)     += hv_utils.o
+
+hv_vmbus-y := vmbus_drv.o \
+                hv.o connection.o channel.o \
+                channel_mgmt.o ring_buffer.o
+hv_utils-y := hv_util.o hv_kvp.o
similarity index 88%
rename from drivers/staging/hv/channel.c
rename to drivers/hv/channel.c
index 455f47a..4065374 100644 (file)
@@ -26,8 +26,8 @@
 #include <linux/mm.h>
 #include <linux/slab.h>
 #include <linux/module.h>
+#include <linux/hyperv.h>
 
-#include "hyperv.h"
 #include "hyperv_vmbus.h"
 
 #define NUM_PAGES_SPANNED(addr, len) \
@@ -76,15 +76,14 @@ void vmbus_get_debug_info(struct vmbus_channel *channel,
        struct hv_monitor_page *monitorpage;
        u8 monitor_group = (u8)channel->offermsg.monitorid / 32;
        u8 monitor_offset = (u8)channel->offermsg.monitorid % 32;
-       /* u32 monitorBit       = 1 << monitorOffset; */
 
        debuginfo->relid = channel->offermsg.child_relid;
        debuginfo->state = channel->state;
        memcpy(&debuginfo->interfacetype,
-              &channel->offermsg.offer.if_type, sizeof(struct hv_guid));
+              &channel->offermsg.offer.if_type, sizeof(uuid_le));
        memcpy(&debuginfo->interface_instance,
               &channel->offermsg.offer.if_instance,
-              sizeof(struct hv_guid));
+              sizeof(uuid_le));
 
        monitorpage = (struct hv_monitor_page *)vmbus_connection.monitor_pages;
 
@@ -119,8 +118,8 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 send_ringbuffer_size,
                     u32 recv_ringbuffer_size, void *userdata, u32 userdatalen,
                     void (*onchannelcallback)(void *context), void *context)
 {
-       struct vmbus_channel_open_channel *openMsg;
-       struct vmbus_channel_msginfo *openInfo = NULL;
+       struct vmbus_channel_open_channel *open_msg;
+       struct vmbus_channel_msginfo *open_info = NULL;
        void *in, *out;
        unsigned long flags;
        int ret, t, err = 0;
@@ -173,24 +172,24 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 send_ringbuffer_size,
        }
 
        /* Create and init the channel open message */
-       openInfo = kmalloc(sizeof(*openInfo) +
+       open_info = kmalloc(sizeof(*open_info) +
                           sizeof(struct vmbus_channel_open_channel),
                           GFP_KERNEL);
-       if (!openInfo) {
+       if (!open_info) {
                err = -ENOMEM;
                goto errorout;
        }
 
-       init_completion(&openInfo->waitevent);
+       init_completion(&open_info->waitevent);
 
-       openMsg = (struct vmbus_channel_open_channel *)openInfo->msg;
-       openMsg->header.msgtype = CHANNELMSG_OPENCHANNEL;
-       openMsg->openid = newchannel->offermsg.child_relid;
-       openMsg->child_relid = newchannel->offermsg.child_relid;
-       openMsg->ringbuffer_gpadlhandle = newchannel->ringbuffer_gpadlhandle;
-       openMsg->downstream_ringbuffer_pageoffset = send_ringbuffer_size >>
+       open_msg = (struct vmbus_channel_open_channel *)open_info->msg;
+       open_msg->header.msgtype = CHANNELMSG_OPENCHANNEL;
+       open_msg->openid = newchannel->offermsg.child_relid;
+       open_msg->child_relid = newchannel->offermsg.child_relid;
+       open_msg->ringbuffer_gpadlhandle = newchannel->ringbuffer_gpadlhandle;
+       open_msg->downstream_ringbuffer_pageoffset = send_ringbuffer_size >>
                                                  PAGE_SHIFT;
-       openMsg->server_contextarea_gpadlhandle = 0;
+       open_msg->server_contextarea_gpadlhandle = 0;
 
        if (userdatalen > MAX_USER_DEFINED_BYTES) {
                err = -EINVAL;
@@ -198,35 +197,35 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 send_ringbuffer_size,
        }
 
        if (userdatalen)
-               memcpy(openMsg->userdata, userdata, userdatalen);
+               memcpy(open_msg->userdata, userdata, userdatalen);
 
        spin_lock_irqsave(&vmbus_connection.channelmsg_lock, flags);
-       list_add_tail(&openInfo->msglistentry,
+       list_add_tail(&open_info->msglistentry,
                      &vmbus_connection.chn_msg_list);
        spin_unlock_irqrestore(&vmbus_connection.channelmsg_lock, flags);
 
-       ret = vmbus_post_msg(openMsg,
+       ret = vmbus_post_msg(open_msg,
                               sizeof(struct vmbus_channel_open_channel));
 
        if (ret != 0)
                goto cleanup;
 
-       t = wait_for_completion_timeout(&openInfo->waitevent, 5*HZ);
+       t = wait_for_completion_timeout(&open_info->waitevent, 5*HZ);
        if (t == 0) {
                err = -ETIMEDOUT;
                goto errorout;
        }
 
 
-       if (openInfo->response.open_result.status)
-               err = openInfo->response.open_result.status;
+       if (open_info->response.open_result.status)
+               err = open_info->response.open_result.status;
 
 cleanup:
        spin_lock_irqsave(&vmbus_connection.channelmsg_lock, flags);
-       list_del(&openInfo->msglistentry);
+       list_del(&open_info->msglistentry);
        spin_unlock_irqrestore(&vmbus_connection.channelmsg_lock, flags);
 
-       kfree(openInfo);
+       kfree(open_info);
        return err;
 
 errorout:
@@ -234,56 +233,11 @@ errorout:
        hv_ringbuffer_cleanup(&newchannel->inbound);
        free_pages((unsigned long)out,
                get_order(send_ringbuffer_size + recv_ringbuffer_size));
-       kfree(openInfo);
+       kfree(open_info);
        return err;
 }
 EXPORT_SYMBOL_GPL(vmbus_open);
 
-/*
- * dump_gpadl_body - Dump the gpadl body message to the console for
- * debugging purposes.
- */
-static void dump_gpadl_body(struct vmbus_channel_gpadl_body *gpadl, u32 len)
-{
-       int i;
-       int pfncount;
-
-       pfncount = (len - sizeof(struct vmbus_channel_gpadl_body)) /
-                  sizeof(u64);
-
-       DPRINT_DBG(VMBUS, "gpadl body - len %d pfn count %d", len, pfncount);
-
-       for (i = 0; i < pfncount; i++)
-               DPRINT_DBG(VMBUS, "gpadl body  - %d) pfn %llu",
-                          i, gpadl->pfn[i]);
-}
-
-/*
- * dump_gpadl_header - Dump the gpadl header message to the console for
- * debugging purposes.
- */
-static void dump_gpadl_header(struct vmbus_channel_gpadl_header *gpadl)
-{
-       int i, j;
-       int pagecount;
-
-       DPRINT_DBG(VMBUS,
-                  "gpadl header - relid %d, range count %d, range buflen %d",
-                  gpadl->child_relid, gpadl->rangecount, gpadl->range_buflen);
-       for (i = 0; i < gpadl->rangecount; i++) {
-               pagecount = gpadl->range[i].byte_count >> PAGE_SHIFT;
-               pagecount = (pagecount > 26) ? 26 : pagecount;
-
-               DPRINT_DBG(VMBUS, "gpadl range %d - len %d offset %d "
-                          "page count %d", i, gpadl->range[i].byte_count,
-                          gpadl->range[i].byte_offset, pagecount);
-
-               for (j = 0; j < pagecount; j++)
-                       DPRINT_DBG(VMBUS, "%d) pfn %llu", j,
-                                  gpadl->range[i].pfn_array[j]);
-       }
-}
-
 /*
  * create_gpadl_header - Creates a gpadl for the specified buffer
  */
@@ -437,7 +391,6 @@ int vmbus_establish_gpadl(struct vmbus_channel *channel, void *kbuffer,
 {
        struct vmbus_channel_gpadl_header *gpadlmsg;
        struct vmbus_channel_gpadl_body *gpadl_body;
-       /* struct vmbus_channel_gpadl_created *gpadlCreated; */
        struct vmbus_channel_msginfo *msginfo = NULL;
        struct vmbus_channel_msginfo *submsginfo;
        u32 msgcount;
@@ -461,7 +414,6 @@ int vmbus_establish_gpadl(struct vmbus_channel *channel, void *kbuffer,
        gpadlmsg->child_relid = channel->offermsg.child_relid;
        gpadlmsg->gpadl = next_gpadl_handle;
 
-       dump_gpadl_header(gpadlmsg);
 
        spin_lock_irqsave(&vmbus_connection.channelmsg_lock, flags);
        list_add_tail(&msginfo->msglistentry,
@@ -485,8 +437,6 @@ int vmbus_establish_gpadl(struct vmbus_channel *channel, void *kbuffer,
                                CHANNELMSG_GPADL_BODY;
                        gpadl_body->gpadl = next_gpadl_handle;
 
-                       dump_gpadl_body(gpadl_body, submsginfo->msgsize -
-                                     sizeof(*submsginfo));
                        ret = vmbus_post_msg(gpadl_body,
                                               submsginfo->msgsize -
                                               sizeof(*submsginfo));
@@ -522,8 +472,6 @@ int vmbus_teardown_gpadl(struct vmbus_channel *channel, u32 gpadl_handle)
        unsigned long flags;
        int ret, t;
 
-       /* ASSERT(gpadl_handle != 0); */
-
        info = kmalloc(sizeof(*info) +
                       sizeof(struct vmbus_channel_gpadl_teardown), GFP_KERNEL);
        if (!info)
@@ -565,9 +513,12 @@ void vmbus_close(struct vmbus_channel *channel)
 {
        struct vmbus_channel_close_channel *msg;
        int ret;
+       unsigned long flags;
 
        /* Stop callback and cancel the timer asap */
+       spin_lock_irqsave(&channel->inbound_lock, flags);
        channel->onchannel_callback = NULL;
+       spin_unlock_irqrestore(&channel->inbound_lock, flags);
 
        /* Send a closing message */
 
@@ -787,19 +738,15 @@ int vmbus_recvpacket(struct vmbus_channel *channel, void *buffer,
        u32 packetlen;
        u32 userlen;
        int ret;
-       unsigned long flags;
 
        *buffer_actual_len = 0;
        *requestid = 0;
 
-       spin_lock_irqsave(&channel->inbound_lock, flags);
 
        ret = hv_ringbuffer_peek(&channel->inbound, &desc,
                             sizeof(struct vmpacket_descriptor));
-       if (ret != 0) {
-               spin_unlock_irqrestore(&channel->inbound_lock, flags);
+       if (ret != 0)
                return 0;
-       }
 
        packetlen = desc.len8 << 3;
        userlen = packetlen - (desc.offset8 << 3);
@@ -807,7 +754,6 @@ int vmbus_recvpacket(struct vmbus_channel *channel, void *buffer,
        *buffer_actual_len = userlen;
 
        if (userlen > bufferlen) {
-               spin_unlock_irqrestore(&channel->inbound_lock, flags);
 
                pr_err("Buffer too small - got %d needs %d\n",
                           bufferlen, userlen);
@@ -820,7 +766,6 @@ int vmbus_recvpacket(struct vmbus_channel *channel, void *buffer,
        ret = hv_ringbuffer_read(&channel->inbound, buffer, userlen,
                             (desc.offset8 << 3));
 
-       spin_unlock_irqrestore(&channel->inbound_lock, flags);
 
        return 0;
 }
@@ -837,19 +782,15 @@ int vmbus_recvpacket_raw(struct vmbus_channel *channel, void *buffer,
        u32 packetlen;
        u32 userlen;
        int ret;
-       unsigned long flags;
 
        *buffer_actual_len = 0;
        *requestid = 0;
 
-       spin_lock_irqsave(&channel->inbound_lock, flags);
 
        ret = hv_ringbuffer_peek(&channel->inbound, &desc,
                             sizeof(struct vmpacket_descriptor));
-       if (ret != 0) {
-               spin_unlock_irqrestore(&channel->inbound_lock, flags);
+       if (ret != 0)
                return 0;
-       }
 
 
        packetlen = desc.len8 << 3;
@@ -858,12 +799,10 @@ int vmbus_recvpacket_raw(struct vmbus_channel *channel, void *buffer,
        *buffer_actual_len = packetlen;
 
        if (packetlen > bufferlen) {
-               spin_unlock_irqrestore(&channel->inbound_lock, flags);
-
                pr_err("Buffer too small - needed %d bytes but "
                        "got space for only %d bytes\n",
                        packetlen, bufferlen);
-               return -2;
+               return -ENOBUFS;
        }
 
        *requestid = desc.trans_id;
@@ -871,7 +810,6 @@ int vmbus_recvpacket_raw(struct vmbus_channel *channel, void *buffer,
        /* Copy over the entire packet to the user buffer */
        ret = hv_ringbuffer_read(&channel->inbound, buffer, packetlen, 0);
 
-       spin_unlock_irqrestore(&channel->inbound_lock, flags);
        return 0;
 }
 EXPORT_SYMBOL_GPL(vmbus_recvpacket_raw);
similarity index 77%
rename from drivers/staging/hv/channel_mgmt.c
rename to drivers/hv/channel_mgmt.c
index bf011f3..12b85ff 100644 (file)
@@ -28,8 +28,8 @@
 #include <linux/list.h>
 #include <linux/module.h>
 #include <linux/completion.h>
+#include <linux/hyperv.h>
 
-#include "hyperv.h"
 #include "hyperv_vmbus.h"
 
 struct vmbus_channel_message_table_entry {
@@ -40,12 +40,12 @@ struct vmbus_channel_message_table_entry {
 #define MAX_MSG_TYPES                    4
 #define MAX_NUM_DEVICE_CLASSES_SUPPORTED 8
 
-static const struct hv_guid
+static const uuid_le
        supported_device_classes[MAX_NUM_DEVICE_CLASSES_SUPPORTED] = {
        /* {ba6163d9-04a1-4d29-b605-72e2ffb1dc7f} */
        /* Storage - SCSI */
        {
-               .data  = {
+               .b  = {
                        0xd9, 0x63, 0x61, 0xba, 0xa1, 0x04, 0x29, 0x4d,
                        0xb6, 0x05, 0x72, 0xe2, 0xff, 0xb1, 0xdc, 0x7f
                }
@@ -54,7 +54,7 @@ static const struct hv_guid
        /* {F8615163-DF3E-46c5-913F-F2D2F965ED0E} */
        /* Network */
        {
-               .data = {
+               .b = {
                        0x63, 0x51, 0x61, 0xF8, 0x3E, 0xDF, 0xc5, 0x46,
                        0x91, 0x3F, 0xF2, 0xD2, 0xF9, 0x65, 0xED, 0x0E
                }
@@ -63,7 +63,7 @@ static const struct hv_guid
        /* {CFA8B69E-5B4A-4cc0-B98B-8BA1A1F3F95A} */
        /* Input */
        {
-               .data = {
+               .b = {
                        0x9E, 0xB6, 0xA8, 0xCF, 0x4A, 0x5B, 0xc0, 0x4c,
                        0xB9, 0x8B, 0x8B, 0xA1, 0xA1, 0xF3, 0xF9, 0x5A
                }
@@ -72,7 +72,7 @@ static const struct hv_guid
        /* {32412632-86cb-44a2-9b5c-50d1417354f5} */
        /* IDE */
        {
-               .data = {
+               .b = {
                        0x32, 0x26, 0x41, 0x32, 0xcb, 0x86, 0xa2, 0x44,
                        0x9b, 0x5c, 0x50, 0xd1, 0x41, 0x73, 0x54, 0xf5
                }
@@ -80,7 +80,7 @@ static const struct hv_guid
        /* 0E0B6031-5213-4934-818B-38D90CED39DB */
        /* Shutdown */
        {
-               .data = {
+               .b = {
                        0x31, 0x60, 0x0B, 0X0E, 0x13, 0x52, 0x34, 0x49,
                        0x81, 0x8B, 0x38, 0XD9, 0x0C, 0xED, 0x39, 0xDB
                }
@@ -88,7 +88,7 @@ static const struct hv_guid
        /* {9527E630-D0AE-497b-ADCE-E80AB0175CAF} */
        /* TimeSync */
        {
-               .data = {
+               .b = {
                        0x30, 0xe6, 0x27, 0x95, 0xae, 0xd0, 0x7b, 0x49,
                        0xad, 0xce, 0xe8, 0x0a, 0xb0, 0x17, 0x5c, 0xaf
                }
@@ -96,7 +96,7 @@ static const struct hv_guid
        /* {57164f39-9115-4e78-ab55-382f3bd5422d} */
        /* Heartbeat */
        {
-               .data = {
+               .b = {
                        0x39, 0x4f, 0x16, 0x57, 0x15, 0x91, 0x78, 0x4e,
                        0xab, 0x55, 0x38, 0x2f, 0x3b, 0xd5, 0x42, 0x2d
                }
@@ -104,7 +104,7 @@ static const struct hv_guid
        /* {A9A0F4E7-5A45-4d96-B827-8A841E8C03E6} */
        /* KVP */
        {
-               .data = {
+               .b = {
                        0xe7, 0xf4, 0xa0, 0xa9, 0x45, 0x5a, 0x96, 0x4d,
                        0xb8, 0x27, 0x8a, 0x84, 0x1e, 0x8c, 0x3,  0xe6
        }
@@ -114,7 +114,7 @@ static const struct hv_guid
 
 
 /**
- * prep_negotiate_resp() - Create default response for Hyper-V Negotiate message
+ * vmbus_prep_negotiate_resp() - Create default response for Hyper-V Negotiate message
  * @icmsghdrp: Pointer to msg header structure
  * @icmsg_negotiate: Pointer to negotiate message structure
  * @buf: Raw buffer channel data
@@ -128,9 +128,8 @@ static const struct hv_guid
  *
  * Mainly used by Hyper-V drivers.
  */
-void prep_negotiate_resp(struct icmsg_hdr *icmsghdrp,
-                            struct icmsg_negotiate *negop,
-                            u8 *buf)
+void vmbus_prep_negotiate_resp(struct icmsg_hdr *icmsghdrp,
+                              struct icmsg_negotiate *negop, u8 *buf)
 {
        if (icmsghdrp->icmsgtype == ICMSGTYPE_NEGOTIATE) {
                icmsghdrp->icmsgsize = 0x10;
@@ -156,119 +155,7 @@ void prep_negotiate_resp(struct icmsg_hdr *icmsghdrp,
                negop->icmsg_vercnt = 1;
        }
 }
-EXPORT_SYMBOL(prep_negotiate_resp);
-
-/**
- * chn_cb_negotiate() - Default handler for non IDE/SCSI/NETWORK
- * Hyper-V requests
- * @context: Pointer to argument structure.
- *
- * Set up the default handler for non device driver specific requests
- * from Hyper-V. This stub responds to the default negotiate messages
- * that come in for every non IDE/SCSI/Network request.
- * This behavior is normally overwritten in the hv_utils driver. That
- * driver handles requests like graceful shutdown, heartbeats etc.
- *
- * Mainly used by Hyper-V drivers.
- */
-void chn_cb_negotiate(void *context)
-{
-       struct vmbus_channel *channel = context;
-       u8 *buf;
-       u32 buflen, recvlen;
-       u64 requestid;
-
-       struct icmsg_hdr *icmsghdrp;
-       struct icmsg_negotiate *negop = NULL;
-
-       if (channel->util_index >= 0) {
-               /*
-                * This is a properly initialized util channel.
-                * Route this callback appropriately and setup state
-                * so that we don't need to reroute again.
-                */
-               if (hv_cb_utils[channel->util_index].callback != NULL) {
-                       /*
-                        * The util driver has established a handler for
-                        * this service; do the magic.
-                        */
-                       channel->onchannel_callback =
-                       hv_cb_utils[channel->util_index].callback;
-                       (hv_cb_utils[channel->util_index].callback)(channel);
-                       return;
-               }
-       }
-
-       buflen = PAGE_SIZE;
-       buf = kmalloc(buflen, GFP_ATOMIC);
-
-       vmbus_recvpacket(channel, buf, buflen, &recvlen, &requestid);
-
-       if (recvlen > 0) {
-               icmsghdrp = (struct icmsg_hdr *)&buf[
-                       sizeof(struct vmbuspipe_hdr)];
-
-               prep_negotiate_resp(icmsghdrp, negop, buf);
-
-               icmsghdrp->icflags = ICMSGHDRFLAG_TRANSACTION
-                       | ICMSGHDRFLAG_RESPONSE;
-
-               vmbus_sendpacket(channel, buf,
-                                      recvlen, requestid,
-                                      VM_PKT_DATA_INBAND, 0);
-       }
-
-       kfree(buf);
-}
-EXPORT_SYMBOL(chn_cb_negotiate);
-
-/*
- * Function table used for message responses for non IDE/SCSI/Network type
- * messages. (Such as KVP/Shutdown etc)
- */
-struct hyperv_service_callback hv_cb_utils[MAX_MSG_TYPES] = {
-       /* 0E0B6031-5213-4934-818B-38D90CED39DB */
-       /* Shutdown */
-       {
-               .msg_type = HV_SHUTDOWN_MSG,
-               .data = {
-                       0x31, 0x60, 0x0B, 0X0E, 0x13, 0x52, 0x34, 0x49,
-                       0x81, 0x8B, 0x38, 0XD9, 0x0C, 0xED, 0x39, 0xDB
-               },
-               .log_msg = "Shutdown channel functionality initialized"
-       },
-
-       /* {9527E630-D0AE-497b-ADCE-E80AB0175CAF} */
-       /* TimeSync */
-       {
-               .msg_type = HV_TIMESYNC_MSG,
-               .data = {
-                       0x30, 0xe6, 0x27, 0x95, 0xae, 0xd0, 0x7b, 0x49,
-                       0xad, 0xce, 0xe8, 0x0a, 0xb0, 0x17, 0x5c, 0xaf
-               },
-               .log_msg = "Timesync channel functionality initialized"
-       },
-       /* {57164f39-9115-4e78-ab55-382f3bd5422d} */
-       /* Heartbeat */
-       {
-               .msg_type = HV_HEARTBEAT_MSG,
-               .data = {
-                       0x39, 0x4f, 0x16, 0x57, 0x15, 0x91, 0x78, 0x4e,
-                       0xab, 0x55, 0x38, 0x2f, 0x3b, 0xd5, 0x42, 0x2d
-               },
-               .log_msg = "Heartbeat channel functionality initialized"
-       },
-       /* {A9A0F4E7-5A45-4d96-B827-8A841E8C03E6} */
-       /* KVP */
-       {
-               .data = {
-                       0xe7, 0xf4, 0xa0, 0xa9, 0x45, 0x5a, 0x96, 0x4d,
-                       0xb8, 0x27, 0x8a, 0x84, 0x1e, 0x8c, 0x3,  0xe6
-               },
-               .log_msg = "KVP channel functionality initialized"
-       },
-};
-EXPORT_SYMBOL(hv_cb_utils);
+EXPORT_SYMBOL_GPL(vmbus_prep_negotiate_resp);
 
 /*
  * alloc_channel - Allocate and initialize a vmbus channel object
@@ -309,7 +196,7 @@ static void release_channel(struct work_struct *work)
 /*
  * free_channel - Release the resources used by the vmbus channel object
  */
-void free_channel(struct vmbus_channel *channel)
+static void free_channel(struct vmbus_channel *channel)
 {
 
        /*
@@ -333,7 +220,7 @@ static void vmbus_process_rescind_offer(struct work_struct *work)
                                                     struct vmbus_channel,
                                                     work);
 
-       vmbus_child_device_unregister(channel->device_obj);
+       vmbus_device_unregister(channel->device_obj);
 }
 
 /*
@@ -348,7 +235,6 @@ static void vmbus_process_offer(struct work_struct *work)
        struct vmbus_channel *channel;
        bool fnew = true;
        int ret;
-       int cnt;
        unsigned long flags;
 
        /* The next possible work is rescind handling */
@@ -358,12 +244,10 @@ static void vmbus_process_offer(struct work_struct *work)
        spin_lock_irqsave(&vmbus_connection.channel_lock, flags);
 
        list_for_each_entry(channel, &vmbus_connection.chn_list, listentry) {
-               if (!memcmp(&channel->offermsg.offer.if_type,
-                           &newchannel->offermsg.offer.if_type,
-                           sizeof(struct hv_guid)) &&
-                   !memcmp(&channel->offermsg.offer.if_instance,
-                           &newchannel->offermsg.offer.if_instance,
-                           sizeof(struct hv_guid))) {
+               if (!uuid_le_cmp(channel->offermsg.offer.if_type,
+                       newchannel->offermsg.offer.if_type) &&
+                       !uuid_le_cmp(channel->offermsg.offer.if_instance,
+                               newchannel->offermsg.offer.if_instance)) {
                        fnew = false;
                        break;
                }
@@ -385,7 +269,7 @@ static void vmbus_process_offer(struct work_struct *work)
         * We need to set the DeviceObject field before calling
         * vmbus_child_dev_add()
         */
-       newchannel->device_obj = vmbus_child_device_create(
+       newchannel->device_obj = vmbus_device_create(
                &newchannel->offermsg.offer.if_type,
                &newchannel->offermsg.offer.if_instance,
                newchannel);
@@ -395,7 +279,7 @@ static void vmbus_process_offer(struct work_struct *work)
         * binding which eventually invokes the device driver's AddDevice()
         * method.
         */
-       ret = vmbus_child_device_register(newchannel->device_obj);
+       ret = vmbus_device_register(newchannel->device_obj);
        if (ret != 0) {
                pr_err("unable to add child device object (relid %d)\n",
                           newchannel->offermsg.child_relid);
@@ -412,48 +296,26 @@ static void vmbus_process_offer(struct work_struct *work)
                 * can cleanup properly
                 */
                newchannel->state = CHANNEL_OPEN_STATE;
-               newchannel->util_index = -1; /* Invalid index */
-
-               /* Open IC channels */
-               for (cnt = 0; cnt < MAX_MSG_TYPES; cnt++) {
-                       if (memcmp(&newchannel->offermsg.offer.if_type,
-                                  &hv_cb_utils[cnt].data,
-                                  sizeof(struct hv_guid)) == 0 &&
-                               vmbus_open(newchannel, 2 * PAGE_SIZE,
-                                                2 * PAGE_SIZE, NULL, 0,
-                                                chn_cb_negotiate,
-                                                newchannel) == 0) {
-                               hv_cb_utils[cnt].channel = newchannel;
-                               newchannel->util_index = cnt;
-
-                               pr_info("%s\n", hv_cb_utils[cnt].log_msg);
-
-                       }
-               }
        }
 }
 
 /*
  * vmbus_onoffer - Handler for channel offers from vmbus in parent partition.
  *
- * We ignore all offers except network and storage offers. For each network and
- * storage offers, we create a channel object and queue a work item to the
- * channel object to process the offer synchronously
  */
 static void vmbus_onoffer(struct vmbus_channel_message_header *hdr)
 {
        struct vmbus_channel_offer_channel *offer;
        struct vmbus_channel *newchannel;
-       struct hv_guid *guidtype;
-       struct hv_guid *guidinstance;
+       uuid_le *guidtype;
+       uuid_le *guidinstance;
        int i;
        int fsupported = 0;
 
        offer = (struct vmbus_channel_offer_channel *)hdr;
        for (i = 0; i < MAX_NUM_DEVICE_CLASSES_SUPPORTED; i++) {
-               if (memcmp(&offer->offer.if_type,
-                       &supported_device_classes[i],
-                       sizeof(struct hv_guid)) == 0) {
+               if (!uuid_le_cmp(offer->offer.if_type,
+                               supported_device_classes[i])) {
                        fsupported = 1;
                        break;
                }
similarity index 86%
rename from drivers/staging/hv/connection.c
rename to drivers/hv/connection.c
index e6b4039..650c9f0 100644 (file)
 #include <linux/kernel.h>
 #include <linux/sched.h>
 #include <linux/wait.h>
+#include <linux/delay.h>
 #include <linux/mm.h>
 #include <linux/slab.h>
 #include <linux/vmalloc.h>
-
-#include "hyperv.h"
+#include <linux/hyperv.h>
+#include <asm/hyperv.h>
 #include "hyperv_vmbus.h"
 
 
@@ -49,10 +50,6 @@ int vmbus_connect(void)
        struct vmbus_channel_initiate_contact *msg;
        unsigned long flags;
 
-       /* Make sure we are not connecting or connected */
-       if (vmbus_connection.conn_state != DISCONNECTED)
-               return -EISCONN;
-
        /* Initialize the vmbus connection */
        vmbus_connection.conn_state = CONNECTING;
        vmbus_connection.work_queue = create_workqueue("hv_vmbus_con");
@@ -214,8 +211,7 @@ struct vmbus_channel *relid2channel(u32 relid)
 static void process_chn_event(u32 relid)
 {
        struct vmbus_channel *channel;
-
-       /* ASSERT(relId > 0); */
+       unsigned long flags;
 
        /*
         * Find the channel based on this relid and invokes the
@@ -223,11 +219,27 @@ static void process_chn_event(u32 relid)
         */
        channel = relid2channel(relid);
 
-       if (channel) {
-               channel->onchannel_callback(channel->channel_callback_context);
-       } else {
+       if (!channel) {
                pr_err("channel not found for relid - %u\n", relid);
+               return;
        }
+
+       /*
+        * A channel once created is persistent even when there
+        * is no driver handling the device. An unloading driver
+        * sets the onchannel_callback to NULL under the
+        * protection of the channel inbound_lock. Thus, checking
+        * and invoking the driver specific callback takes care of
+        * orderly unloading of the driver.
+        */
+
+       spin_lock_irqsave(&channel->inbound_lock, flags);
+       if (channel->onchannel_callback != NULL)
+               channel->onchannel_callback(channel->channel_callback_context);
+       else
+               pr_err("no channel callback for relid - %u\n", relid);
+
+       spin_unlock_irqrestore(&channel->inbound_lock, flags);
 }
 
 /*
@@ -248,16 +260,17 @@ void vmbus_on_event(unsigned long data)
                if (!recv_int_page[dword])
                        continue;
                for (bit = 0; bit < 32; bit++) {
-                       if (sync_test_and_clear_bit(bit, (unsigned long *)&recv_int_page[dword])) {
+                       if (sync_test_and_clear_bit(bit,
+                               (unsigned long *)&recv_int_page[dword])) {
                                relid = (dword << 5) + bit;
 
-                               if (relid == 0) {
+                               if (relid == 0)
                                        /*
                                         * Special case - vmbus
                                         * channel protocol msg
                                         */
                                        continue;
-                               }
+
                                process_chn_event(relid);
                        }
                }
@@ -270,10 +283,25 @@ void vmbus_on_event(unsigned long data)
 int vmbus_post_msg(void *buffer, size_t buflen)
 {
        union hv_connection_id conn_id;
+       int ret = 0;
+       int retries = 0;
 
        conn_id.asu32 = 0;
        conn_id.u.id = VMBUS_MESSAGE_CONNECTION_ID;
-       return hv_post_message(conn_id, 1, buffer, buflen);
+
+       /*
+        * hv_post_message() can have transient failures because of
+        * insufficient resources. Retry the operation a couple of
+        * times before giving up.
+        */
+       while (retries < 3) {
+               ret =  hv_post_message(conn_id, 1, buffer, buflen);
+               if (ret != HV_STATUS_INSUFFICIENT_BUFFERS)
+                       return ret;
+               retries++;
+               msleep(100);
+       }
+       return ret;
 }
 
 /*
similarity index 96%
rename from drivers/staging/hv/hv.c
rename to drivers/hv/hv.c
index 824f816..0fb100e 100644 (file)
@@ -25,8 +25,8 @@
 #include <linux/mm.h>
 #include <linux/slab.h>
 #include <linux/vmalloc.h>
-
-#include "hyperv.h"
+#include <linux/hyperv.h>
+#include <asm/hyperv.h>
 #include "hyperv_vmbus.h"
 
 /* The one and only */
@@ -111,7 +111,7 @@ static u64 do_hypercall(u64 control, void *input, void *output)
        u64 hv_status = 0;
        u64 input_address = (input) ? virt_to_phys(input) : 0;
        u64 output_address = (output) ? virt_to_phys(output) : 0;
-       volatile void *hypercall_page = hv_context.hypercall_page;
+       void *hypercall_page = hv_context.hypercall_page;
 
        __asm__ __volatile__("mov %0, %%r8" : : "r" (output_address) : "r8");
        __asm__ __volatile__("call *%3" : "=a" (hv_status) :
@@ -132,7 +132,7 @@ static u64 do_hypercall(u64 control, void *input, void *output)
        u64 output_address = (output) ? virt_to_phys(output) : 0;
        u32 output_address_hi = output_address >> 32;
        u32 output_address_lo = output_address & 0xFFFFFFFF;
-       volatile void *hypercall_page = hv_context.hypercall_page;
+       void *hypercall_page = hv_context.hypercall_page;
 
        __asm__ __volatile__ ("call *%8" : "=d"(hv_status_hi),
                              "=a"(hv_status_lo) : "d" (control_hi),
@@ -151,7 +151,6 @@ static u64 do_hypercall(u64 control, void *input, void *output)
  */
 int hv_init(void)
 {
-       int ret = 0;
        int max_leaf;
        union hv_x64_msr_hypercall_contents hypercall_msr;
        void *virtaddr = NULL;
@@ -164,11 +163,7 @@ int hv_init(void)
                goto cleanup;
 
        max_leaf = query_hypervisor_info();
-       /* HvQueryHypervisorFeatures(maxLeaf); */
 
-       /*
-        * We only support running on top of Hyper-V
-        */
        rdmsrl(HV_X64_MSR_GUEST_OS_ID, hv_context.guestid);
 
        if (hv_context.guestid != 0)
@@ -181,10 +176,6 @@ int hv_init(void)
        /* See if the hypercall page is already set */
        rdmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64);
 
-       /*
-       * Allocate the hypercall page memory
-       * virtaddr = osd_page_alloc(1);
-       */
        virtaddr = __vmalloc(PAGE_SIZE, GFP_KERNEL, PAGE_KERNEL_EXEC);
 
        if (!virtaddr)
@@ -222,7 +213,7 @@ int hv_init(void)
        hv_context.signal_event_param->flag_number = 0;
        hv_context.signal_event_param->rsvdz = 0;
 
-       return ret;
+       return 0;
 
 cleanup:
        if (virtaddr) {
@@ -233,8 +224,8 @@ cleanup:
 
                vfree(virtaddr);
        }
-       ret = -1;
-       return ret;
+
+       return -ENOTSUPP;
 }
 
 /*
@@ -378,7 +369,7 @@ void hv_synic_init(void *irqarg)
        shared_sint.as_uint64 = 0;
        shared_sint.vector = irq_vector; /* HV_SHARED_SINT_IDT_VECTOR + 0x20; */
        shared_sint.masked = false;
-       shared_sint.auto_eoi = true;
+       shared_sint.auto_eoi = false;
 
        wrmsrl(HV_X64_MSR_SINT0 + VMBUS_MESSAGE_SINT, shared_sint.as_uint64);
 
similarity index 91%
rename from drivers/staging/hv/hv_kvp.c
rename to drivers/hv/hv_kvp.c
index 13b0ecf..89f5244 100644 (file)
@@ -26,8 +26,8 @@
 #include <linux/nls.h>
 #include <linux/connector.h>
 #include <linux/workqueue.h>
+#include <linux/hyperv.h>
 
-#include "hyperv.h"
 #include "hv_kvp.h"
 
 
 static struct {
        bool active; /* transaction status - active or not */
        int recv_len; /* number of bytes received. */
+       int index; /* current index */
        struct vmbus_channel *recv_channel; /* chn we got the request */
        u64 recv_req_id; /* request ID. */
 } kvp_transaction;
 
-static int kvp_send_key(int index);
+static void kvp_send_key(struct work_struct *dummy);
+
+#define TIMEOUT_FIRED 1
 
 static void kvp_respond_to_host(char *key, char *value, int error);
 static void kvp_work_func(struct work_struct *dummy);
 static void kvp_register(void);
 
 static DECLARE_DELAYED_WORK(kvp_work, kvp_work_func);
+static DECLARE_WORK(kvp_sendkey_work, kvp_send_key);
 
 static struct cb_id kvp_id = { CN_KVP_IDX, CN_KVP_VAL };
 static const char kvp_name[] = "kvp_kernel_module";
-static int timeout_fired;
 static u8 *recv_buffer;
 /*
  * Register the kernel component with the user-level daemon.
@@ -90,8 +93,7 @@ kvp_work_func(struct work_struct *dummy)
         * If the timer fires, the user-mode component has not responded;
         * process the pending transaction.
         */
-       kvp_respond_to_host("Unknown key", "Guest timed out", timeout_fired);
-       timeout_fired = 1;
+       kvp_respond_to_host("Unknown key", "Guest timed out", TIMEOUT_FIRED);
 }
 
 /*
@@ -121,10 +123,11 @@ kvp_cn_callback(struct cn_msg *msg, struct netlink_skb_parms *nsp)
        }
 }
 
-static int
-kvp_send_key(int index)
+static void
+kvp_send_key(struct work_struct *dummy)
 {
        struct cn_msg *msg;
+       int index = kvp_transaction.index;
 
        msg = kzalloc(sizeof(*msg) + sizeof(struct hv_kvp_msg) , GFP_ATOMIC);
 
@@ -136,9 +139,8 @@ kvp_send_key(int index)
                msg->len = sizeof(struct hv_ku_msg);
                cn_netlink_send(msg, 0, GFP_ATOMIC);
                kfree(msg);
-               return 0;
        }
-       return 1;
+       return;
 }
 
 /*
@@ -177,6 +179,15 @@ kvp_respond_to_host(char *key, char *value, int error)
        channel = kvp_transaction.recv_channel;
        req_id = kvp_transaction.recv_req_id;
 
+       kvp_transaction.active = false;
+
+       if (channel->onchannel_callback == NULL)
+               /*
+                * We have raced with util driver being unloaded;
+                * silently return.
+                */
+               return;
+
        icmsghdrp = (struct icmsg_hdr *)
                        &recv_buffer[sizeof(struct vmbuspipe_hdr)];
        kvp_msg = (struct hv_kvp_msg *)
@@ -217,7 +228,6 @@ response_done:
        vmbus_sendpacket(channel, recv_buffer, buf_len, req_id,
                                VM_PKT_DATA_INBAND, 0);
 
-       kvp_transaction.active = false;
 }
 
 /*
@@ -243,10 +253,6 @@ void hv_kvp_onchannelcallback(void *context)
        struct icmsg_negotiate *negop = NULL;
 
 
-       if (kvp_transaction.active)
-               return;
-
-
        vmbus_recvpacket(channel, recv_buffer, PAGE_SIZE, &recvlen, &requestid);
 
        if (recvlen > 0) {
@@ -254,7 +260,7 @@ void hv_kvp_onchannelcallback(void *context)
                        sizeof(struct vmbuspipe_hdr)];
 
                if (icmsghdrp->icmsgtype == ICMSGTYPE_NEGOTIATE) {
-                       prep_negotiate_resp(icmsghdrp, negop, recv_buffer);
+                       vmbus_prep_negotiate_resp(icmsghdrp, negop, recv_buffer);
                } else {
                        kvp_msg = (struct hv_kvp_msg *)&recv_buffer[
                                sizeof(struct vmbuspipe_hdr) +
@@ -282,6 +288,7 @@ void hv_kvp_onchannelcallback(void *context)
                        kvp_transaction.recv_channel = channel;
                        kvp_transaction.recv_req_id = requestid;
                        kvp_transaction.active = true;
+                       kvp_transaction.index = kvp_data->index;
 
                        /*
                         * Get the information from the
@@ -292,8 +299,8 @@ void hv_kvp_onchannelcallback(void *context)
                         * Set a timeout to deal with
                         * user-mode not responding.
                         */
-                       kvp_send_key(kvp_data->index);
-                       schedule_delayed_work(&kvp_work, 100);
+                       schedule_work(&kvp_sendkey_work);
+                       schedule_delayed_work(&kvp_work, 5*HZ);
 
                        return;
 
@@ -312,16 +319,14 @@ callback_done:
 }
 
 int
-hv_kvp_init(void)
+hv_kvp_init(struct hv_util_service *srv)
 {
        int err;
 
        err = cn_add_callback(&kvp_id, kvp_name, kvp_cn_callback);
        if (err)
                return err;
-       recv_buffer = kmalloc(PAGE_SIZE, GFP_KERNEL);
-       if (!recv_buffer)
-               return -ENOMEM;
+       recv_buffer = srv->recv_buffer;
 
        return 0;
 }
@@ -330,5 +335,5 @@ void hv_kvp_deinit(void)
 {
        cn_del_callback(&kvp_id);
        cancel_delayed_work_sync(&kvp_work);
-       kfree(recv_buffer);
+       cancel_work_sync(&kvp_sendkey_work);
 }
similarity index 99%
rename from drivers/staging/hv/hv_kvp.h
rename to drivers/hv/hv_kvp.h
index 8c402f3..9b765d7 100644 (file)
@@ -175,7 +175,7 @@ struct hv_kvp_msg {
        struct hv_kvp_msg_enumerate     kvp_data;
 };
 
-int hv_kvp_init(void);
+int hv_kvp_init(struct hv_util_service *);
 void hv_kvp_deinit(void);
 void hv_kvp_onchannelcallback(void *);
 
similarity index 61%
rename from drivers/staging/hv/hv_util.c
rename to drivers/hv/hv_util.c
index c164b54..55d58f2 100644 (file)
 #include <linux/slab.h>
 #include <linux/sysctl.h>
 #include <linux/reboot.h>
-#include <linux/dmi.h>
-#include <linux/pci.h>
+#include <linux/hyperv.h>
 
-#include "hyperv.h"
 #include "hv_kvp.h"
 
-static u8 *shut_txf_buf;
-static u8 *time_txf_buf;
-static u8 *hbeat_txf_buf;
+
+static void shutdown_onchannelcallback(void *context);
+static struct hv_util_service util_shutdown = {
+       .util_cb = shutdown_onchannelcallback,
+};
+
+static void timesync_onchannelcallback(void *context);
+static struct hv_util_service util_timesynch = {
+       .util_cb = timesync_onchannelcallback,
+};
+
+static void heartbeat_onchannelcallback(void *context);
+static struct hv_util_service util_heartbeat = {
+       .util_cb = heartbeat_onchannelcallback,
+};
+
+static struct hv_util_service util_kvp = {
+       .util_cb = hv_kvp_onchannelcallback,
+       .util_init = hv_kvp_init,
+       .util_deinit = hv_kvp_deinit,
+};
 
 static void shutdown_onchannelcallback(void *context)
 {
@@ -42,6 +58,7 @@ static void shutdown_onchannelcallback(void *context)
        u32 recvlen;
        u64 requestid;
        u8  execute_shutdown = false;
+       u8  *shut_txf_buf = util_shutdown.recv_buffer;
 
        struct shutdown_msg_data *shutdown_msg;
 
@@ -56,7 +73,7 @@ static void shutdown_onchannelcallback(void *context)
                        sizeof(struct vmbuspipe_hdr)];
 
                if (icmsghdrp->icmsgtype == ICMSGTYPE_NEGOTIATE) {
-                       prep_negotiate_resp(icmsghdrp, negop, shut_txf_buf);
+                       vmbus_prep_negotiate_resp(icmsghdrp, negop, shut_txf_buf);
                } else {
                        shutdown_msg =
                                (struct shutdown_msg_data *)&shut_txf_buf[
@@ -91,7 +108,7 @@ static void shutdown_onchannelcallback(void *context)
        }
 
        if (execute_shutdown == true)
-               orderly_poweroff(false);
+               orderly_poweroff(true);
 }
 
 /*
@@ -108,6 +125,24 @@ static inline void do_adj_guesttime(u64 hosttime)
        do_settimeofday(&host_ts);
 }
 
+/*
+ * Set the host time in a process context.
+ */
+
+struct adj_time_work {
+       struct work_struct work;
+       u64     host_time;
+};
+
+static void hv_set_host_time(struct work_struct *work)
+{
+       struct adj_time_work    *wrk;
+
+       wrk = container_of(work, struct adj_time_work, work);
+       do_adj_guesttime(wrk->host_time);
+       kfree(wrk);
+}
+
 /*
  * Synchronize time with host after reboot, restore, etc.
  *
@@ -121,17 +156,26 @@ static inline void do_adj_guesttime(u64 hosttime)
  */
 static inline void adj_guesttime(u64 hosttime, u8 flags)
 {
+       struct adj_time_work    *wrk;
        static s32 scnt = 50;
 
+       wrk = kmalloc(sizeof(struct adj_time_work), GFP_ATOMIC);
+       if (wrk == NULL)
+               return;
+
+       wrk->host_time = hosttime;
        if ((flags & ICTIMESYNCFLAG_SYNC) != 0) {
-               do_adj_guesttime(hosttime);
+               INIT_WORK(&wrk->work, hv_set_host_time);
+               schedule_work(&wrk->work);
                return;
        }
 
        if ((flags & ICTIMESYNCFLAG_SAMPLE) != 0 && scnt > 0) {
                scnt--;
-               do_adj_guesttime(hosttime);
-       }
+               INIT_WORK(&wrk->work, hv_set_host_time);
+               schedule_work(&wrk->work);
+       } else
+               kfree(wrk);
 }
 
 /*
@@ -144,6 +188,7 @@ static void timesync_onchannelcallback(void *context)
        u64 requestid;
        struct icmsg_hdr *icmsghdrp;
        struct ictimesync_data *timedatap;
+       u8 *time_txf_buf = util_timesynch.recv_buffer;
 
        vmbus_recvpacket(channel, time_txf_buf,
                         PAGE_SIZE, &recvlen, &requestid);
@@ -153,7 +198,7 @@ static void timesync_onchannelcallback(void *context)
                                sizeof(struct vmbuspipe_hdr)];
 
                if (icmsghdrp->icmsgtype == ICMSGTYPE_NEGOTIATE) {
-                       prep_negotiate_resp(icmsghdrp, NULL, time_txf_buf);
+                       vmbus_prep_negotiate_resp(icmsghdrp, NULL, time_txf_buf);
                } else {
                        timedatap = (struct ictimesync_data *)&time_txf_buf[
                                sizeof(struct vmbuspipe_hdr) +
@@ -182,6 +227,7 @@ static void heartbeat_onchannelcallback(void *context)
        u64 requestid;
        struct icmsg_hdr *icmsghdrp;
        struct heartbeat_msg_data *heartbeat_msg;
+       u8 *hbeat_txf_buf = util_heartbeat.recv_buffer;
 
        vmbus_recvpacket(channel, hbeat_txf_buf,
                         PAGE_SIZE, &recvlen, &requestid);
@@ -191,7 +237,7 @@ static void heartbeat_onchannelcallback(void *context)
                                sizeof(struct vmbuspipe_hdr)];
 
                if (icmsghdrp->icmsgtype == ICMSGTYPE_NEGOTIATE) {
-                       prep_negotiate_resp(icmsghdrp, NULL, hbeat_txf_buf);
+                       vmbus_prep_negotiate_resp(icmsghdrp, NULL, hbeat_txf_buf);
                } else {
                        heartbeat_msg =
                                (struct heartbeat_msg_data *)&hbeat_txf_buf[
@@ -210,92 +256,94 @@ static void heartbeat_onchannelcallback(void *context)
        }
 }
 
-static const struct pci_device_id __initconst
-hv_utils_pci_table[] __maybe_unused = {
-       { PCI_DEVICE(0x1414, 0x5353) }, /* Hyper-V emulated VGA controller */
-       { 0 }
-};
-MODULE_DEVICE_TABLE(pci, hv_utils_pci_table);
-
-
-static const struct dmi_system_id __initconst
-hv_utils_dmi_table[] __maybe_unused  = {
-       {
-               .ident = "Hyper-V",
-               .matches = {
-                       DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
-                       DMI_MATCH(DMI_PRODUCT_NAME, "Virtual Machine"),
-                       DMI_MATCH(DMI_BOARD_NAME, "Virtual Machine"),
-               },
-       },
-       { },
-};
-MODULE_DEVICE_TABLE(dmi, hv_utils_dmi_table);
-
-
-static int __init init_hyperv_utils(void)
+static int util_probe(struct hv_device *dev,
+                       const struct hv_vmbus_device_id *dev_id)
 {
-       pr_info("Registering HyperV Utility Driver\n");
-
-       if (hv_kvp_init())
-               return -ENODEV;
-
-
-       if (!dmi_check_system(hv_utils_dmi_table))
-               return -ENODEV;
-
-       shut_txf_buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
-       time_txf_buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
-       hbeat_txf_buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
+       struct hv_util_service *srv =
+               (struct hv_util_service *)dev_id->driver_data;
+       int ret;
 
-       if (!shut_txf_buf || !time_txf_buf || !hbeat_txf_buf) {
-               pr_info("Unable to allocate memory for receive buffer\n");
-               kfree(shut_txf_buf);
-               kfree(time_txf_buf);
-               kfree(hbeat_txf_buf);
+       srv->recv_buffer = kmalloc(PAGE_SIZE, GFP_KERNEL);
+       if (!srv->recv_buffer)
                return -ENOMEM;
+       if (srv->util_init) {
+               ret = srv->util_init(srv);
+               if (ret) {
+                       ret = -ENODEV;
+                       goto error1;
+               }
        }
 
-       hv_cb_utils[HV_SHUTDOWN_MSG].callback = &shutdown_onchannelcallback;
+       ret = vmbus_open(dev->channel, 2 * PAGE_SIZE, 2 * PAGE_SIZE, NULL, 0,
+                       srv->util_cb, dev->channel);
+       if (ret)
+               goto error;
+
+       hv_set_drvdata(dev, srv);
+       return 0;
 
-       hv_cb_utils[HV_TIMESYNC_MSG].callback = &timesync_onchannelcallback;
+error:
+       if (srv->util_deinit)
+               srv->util_deinit();
+error1:
+       kfree(srv->recv_buffer);
+       return ret;
+}
 
-       hv_cb_utils[HV_HEARTBEAT_MSG].callback = &heartbeat_onchannelcallback;
+static int util_remove(struct hv_device *dev)
+{
+       struct hv_util_service *srv = hv_get_drvdata(dev);
 
-       hv_cb_utils[HV_KVP_MSG].callback = &hv_kvp_onchannelcallback;
+       vmbus_close(dev->channel);
+       if (srv->util_deinit)
+               srv->util_deinit();
+       kfree(srv->recv_buffer);
 
        return 0;
 }
 
-static void exit_hyperv_utils(void)
-{
-       pr_info("De-Registered HyperV Utility Driver\n");
+static const struct hv_vmbus_device_id id_table[] = {
+       /* Shutdown guid */
+       { VMBUS_DEVICE(0x31, 0x60, 0x0B, 0X0E, 0x13, 0x52, 0x34, 0x49,
+                      0x81, 0x8B, 0x38, 0XD9, 0x0C, 0xED, 0x39, 0xDB)
+         .driver_data = (unsigned long)&util_shutdown },
+       /* Time synch guid */
+       { VMBUS_DEVICE(0x30, 0xe6, 0x27, 0x95, 0xae, 0xd0, 0x7b, 0x49,
+                      0xad, 0xce, 0xe8, 0x0a, 0xb0, 0x17, 0x5c, 0xaf)
+         .driver_data = (unsigned long)&util_timesynch },
+       /* Heartbeat guid */
+       { VMBUS_DEVICE(0x39, 0x4f, 0x16, 0x57, 0x15, 0x91, 0x78, 0x4e,
+                      0xab, 0x55, 0x38, 0x2f, 0x3b, 0xd5, 0x42, 0x2d)
+         .driver_data = (unsigned long)&util_heartbeat },
+       /* KVP guid */
+       { VMBUS_DEVICE(0xe7, 0xf4, 0xa0, 0xa9, 0x45, 0x5a, 0x96, 0x4d,
+                      0xb8, 0x27, 0x8a, 0x84, 0x1e, 0x8c, 0x3,  0xe6)
+         .driver_data = (unsigned long)&util_kvp },
+       { },
+};
 
-       if (hv_cb_utils[HV_SHUTDOWN_MSG].channel != NULL)
-               hv_cb_utils[HV_SHUTDOWN_MSG].channel->onchannel_callback =
-                       &chn_cb_negotiate;
-       hv_cb_utils[HV_SHUTDOWN_MSG].callback = NULL;
+MODULE_DEVICE_TABLE(vmbus, id_table);
 
-       if (hv_cb_utils[HV_TIMESYNC_MSG].channel != NULL)
-               hv_cb_utils[HV_TIMESYNC_MSG].channel->onchannel_callback =
-                       &chn_cb_negotiate;
-       hv_cb_utils[HV_TIMESYNC_MSG].callback = NULL;
+/* The one and only one */
+static  struct hv_driver util_drv = {
+       .name = "hv_util",
+       .id_table = id_table,
+       .probe =  util_probe,
+       .remove =  util_remove,
+};
 
-       if (hv_cb_utils[HV_HEARTBEAT_MSG].channel != NULL)
-               hv_cb_utils[HV_HEARTBEAT_MSG].channel->onchannel_callback =
-                       &chn_cb_negotiate;
-       hv_cb_utils[HV_HEARTBEAT_MSG].callback = NULL;
+static int __init init_hyperv_utils(void)
+{
+       pr_info("Registering HyperV Utility Driver\n");
 
-       if (hv_cb_utils[HV_KVP_MSG].channel != NULL)
-               hv_cb_utils[HV_KVP_MSG].channel->onchannel_callback =
-                       &chn_cb_negotiate;
-       hv_cb_utils[HV_KVP_MSG].callback = NULL;
+       return vmbus_driver_register(&util_drv);
+}
 
-       hv_kvp_deinit();
+static void exit_hyperv_utils(void)
+{
+       pr_info("De-Registered HyperV Utility Driver\n");
 
-       kfree(shut_txf_buf);
-       kfree(time_txf_buf);
-       kfree(hbeat_txf_buf);
+       vmbus_driver_unregister(&util_drv);
 }
 
 module_init(init_hyperv_utils);
similarity index 97%
rename from drivers/staging/hv/hyperv_vmbus.h
rename to drivers/hv/hyperv_vmbus.h
index 349ad80..0aee112 100644 (file)
@@ -28,8 +28,7 @@
 #include <linux/list.h>
 #include <asm/sync_bitops.h>
 #include <linux/atomic.h>
-
-#include "hyperv.h"
+#include <linux/hyperv.h>
 
 /*
  * The below CPUID leaves are present if VersionAndFeatures.HypervisorPresent
@@ -451,8 +450,8 @@ enum {
 /* #define VMBUS_PORT_ID               11 */
 
 /* 628180B8-308D-4c5e-B7DB-1BEB62E62EF4 */
-static const struct hv_guid VMBUS_SERVICE_ID = {
-       .data = {
+static const uuid_le VMBUS_SERVICE_ID = {
+       .b = {
                0xb8, 0x80, 0x81, 0x62, 0x8d, 0x30, 0x5e, 0x4c,
                0xb7, 0xdb, 0x1b, 0xeb, 0x62, 0xe6, 0x2e, 0xf4
        },
@@ -530,8 +529,6 @@ int hv_ringbuffer_read(struct hv_ring_buffer_info *ring_info,
 
 u32 hv_get_ringbuffer_interrupt_mask(struct hv_ring_buffer_info *ring_info);
 
-void hv_dump_ring_info(struct hv_ring_buffer_info *ring_info, char *prefix);
-
 void hv_ringbuffer_get_debuginfo(struct hv_ring_buffer_info *ring_info,
                            struct hv_ring_buffer_debug_info *debug_info);
 
@@ -601,12 +598,12 @@ extern struct vmbus_connection vmbus_connection;
 
 /* General vmbus interface */
 
-struct hv_device *vmbus_child_device_create(struct hv_guid *type,
-                                        struct hv_guid *instance,
+struct hv_device *vmbus_device_create(uuid_le *type,
+                                        uuid_le *instance,
                                         struct vmbus_channel *channel);
 
-int vmbus_child_device_register(struct hv_device *child_device_obj);
-void vmbus_child_device_unregister(struct hv_device *device_obj);
+int vmbus_device_register(struct hv_device *child_device_obj);
+void vmbus_device_unregister(struct hv_device *device_obj);
 
 /* static void */
 /* VmbusChildDeviceDestroy( */
similarity index 93%
rename from drivers/staging/hv/ring_buffer.c
rename to drivers/hv/ring_buffer.c
index 42f7672..8af25a0 100644 (file)
@@ -25,8 +25,8 @@
 
 #include <linux/kernel.h>
 #include <linux/mm.h>
+#include <linux/hyperv.h>
 
-#include "hyperv.h"
 #include "hyperv_vmbus.h"
 
 
@@ -34,7 +34,8 @@
 
 
 /* Amount of space to write to */
-#define BYTES_AVAIL_TO_WRITE(r, w, z) ((w) >= (r)) ? ((z) - ((w) - (r))) : ((r) - (w))
+#define BYTES_AVAIL_TO_WRITE(r, w, z) \
+       ((w) >= (r)) ? ((z) - ((w) - (r))) : ((r) - (w))
 
 
 /*
@@ -171,37 +172,6 @@ hv_get_ring_bufferindices(struct hv_ring_buffer_info *ring_info)
        return (u64)ring_info->ring_buffer->write_index << 32;
 }
 
-
-/*
- *
- * hv_dump_ring_info()
- *
- * Dump out to console the ring buffer info
- *
- */
-void hv_dump_ring_info(struct hv_ring_buffer_info *ring_info, char *prefix)
-{
-       u32 bytes_avail_towrite;
-       u32 bytes_avail_toread;
-
-       hv_get_ringbuffer_availbytes(ring_info,
-       &bytes_avail_toread,
-       &bytes_avail_towrite);
-
-       DPRINT(VMBUS,
-               DEBUG_RING_LVL,
-               "%s <<ringinfo %p buffer %p avail write %u "
-               "avail read %u read idx %u write idx %u>>",
-               prefix,
-               ring_info,
-               ring_info->ring_buffer->buffer,
-               bytes_avail_towrite,
-               bytes_avail_toread,
-               ring_info->ring_buffer->read_index,
-               ring_info->ring_buffer->write_index);
-}
-
-
 /*
  *
  * hv_copyfrom_ringbuffer()
@@ -390,7 +360,7 @@ int hv_ringbuffer_write(struct hv_ring_buffer_info *outring_info,
        /* is empty since the read index == write index */
        if (bytes_avail_towrite <= totalbytes_towrite) {
                spin_unlock_irqrestore(&outring_info->ring_lock, flags);
-               return -1;
+               return -EAGAIN;
        }
 
        /* Write to the ring buffer */
@@ -450,7 +420,7 @@ int hv_ringbuffer_peek(struct hv_ring_buffer_info *Inring_info,
 
                spin_unlock_irqrestore(&Inring_info->ring_lock, flags);
 
-               return -1;
+               return -EAGAIN;
        }
 
        /* Convert to byte offset */
@@ -496,7 +466,7 @@ int hv_ringbuffer_read(struct hv_ring_buffer_info *inring_info, void *buffer,
        if (bytes_avail_toread < buflen) {
                spin_unlock_irqrestore(&inring_info->ring_lock, flags);
 
-               return -1;
+               return -EAGAIN;
        }
 
        next_read_location =
similarity index 63%
rename from drivers/staging/hv/vmbus_drv.c
rename to drivers/hv/vmbus_drv.c
index 1c949f5..0c048dd 100644 (file)
 #include <linux/irq.h>
 #include <linux/interrupt.h>
 #include <linux/sysctl.h>
-#include <linux/pci.h>
-#include <linux/dmi.h>
 #include <linux/slab.h>
 #include <linux/acpi.h>
 #include <acpi/acpi_bus.h>
 #include <linux/completion.h>
-
-#include "hyperv.h"
+#include <linux/hyperv.h>
+#include <asm/hyperv.h>
 #include "hyperv_vmbus.h"
 
 
@@ -43,15 +41,28 @@ static struct acpi_device  *hv_acpi_dev;
 
 static struct tasklet_struct msg_dpc;
 static struct tasklet_struct event_dpc;
-
-unsigned int vmbus_loglevel = (ALL_MODULES << 16 | INFO_LVL);
-EXPORT_SYMBOL(vmbus_loglevel);
-       /* (ALL_MODULES << 16 | DEBUG_LVL_ENTEREXIT); */
-       /* (((VMBUS | VMBUS_DRV)<<16) | DEBUG_LVL_ENTEREXIT); */
-
 static struct completion probe_event;
 static int irq;
 
+struct hv_device_info {
+       u32 chn_id;
+       u32 chn_state;
+       uuid_le chn_type;
+       uuid_le chn_instance;
+
+       u32 monitor_id;
+       u32 server_monitor_pending;
+       u32 server_monitor_latency;
+       u32 server_monitor_conn_id;
+       u32 client_monitor_pending;
+       u32 client_monitor_latency;
+       u32 client_monitor_conn_id;
+
+       struct hv_dev_port_info inbound;
+       struct hv_dev_port_info outbound;
+};
+
+
 static void get_channel_info(struct hv_device *device,
                             struct hv_device_info *info)
 {
@@