aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2012-09-05 10:22:45 -0400
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2012-09-05 10:22:45 -0400
commit593d0a3e9f813db910dc50574532914db21d09ff (patch)
tree12d8413ee57b4383ca8c906996ffe02be6d377a5 /include
parent50e900417b8096939d12a46848f965e27a905e36 (diff)
parent4cb38750d49010ae72e718d46605ac9ba5a851b4 (diff)
Merge commit '4cb38750d49010ae72e718d46605ac9ba5a851b4' into stable/for-linus-3.6
* commit '4cb38750d49010ae72e718d46605ac9ba5a851b4': (6849 commits) bcma: fix invalid PMU chip control masks [libata] pata_cmd64x: whitespace cleanup libata-acpi: fix up for acpi_pm_device_sleep_state API sata_dwc_460ex: device tree may specify dma_channel ahci, trivial: fixed coding style issues related to braces ahci_platform: add hibernation callbacks libata-eh.c: local functions should not be exposed globally libata-transport.c: local functions should not be exposed globally sata_dwc_460ex: support hardreset ata: use module_pci_driver drivers/ata/pata_pcmcia.c: adjust suspicious bit operation pata_imx: Convert to clk_prepare_enable/clk_disable_unprepare ahci: Enable SB600 64bit DMA on MSI K9AGM2 (MS-7327) v2 [libata] Prevent interface errors with Seagate FreeAgent GoFlex drivers/acpi/glue: revert accidental license-related 6b66d95895c bits libata-acpi: add missing inlines in libata.h i2c-omap: Add support for I2C_M_STOP message flag i2c: Fall back to emulated SMBus if the operation isn't supported natively i2c: Add SCCB support i2c-tiny-usb: Add support for the Robofuzz OSIF USB/I2C converter ...
Diffstat (limited to 'include')
-rw-r--r--include/acpi/acnames.h1
-rw-r--r--include/acpi/acpi_bus.h12
-rw-r--r--include/acpi/processor.h7
-rw-r--r--include/asm-generic/bug.h19
-rw-r--r--include/asm-generic/dma-contiguous.h2
-rw-r--r--include/asm-generic/pgtable.h10
-rw-r--r--include/asm-generic/tlb.h5
-rw-r--r--include/drm/drm_pciids.h4
-rw-r--r--include/linux/Kbuild2
-rw-r--r--include/linux/ac97_codec.h362
-rw-r--r--include/linux/aio.h1
-rw-r--r--include/linux/amba/pl022.h9
-rw-r--r--include/linux/async.h36
-rw-r--r--include/linux/ata.h1
-rw-r--r--include/linux/bcma/bcma.h39
-rw-r--r--include/linux/bcma/bcma_driver_chipcommon.h88
-rw-r--r--include/linux/bcma/bcma_driver_gmac_cmn.h100
-rw-r--r--include/linux/blkdev.h1
-rw-r--r--include/linux/bootmem.h5
-rw-r--r--include/linux/can.h70
-rw-r--r--include/linux/can/core.h4
-rw-r--r--include/linux/can/dev.h35
-rw-r--r--include/linux/can/error.h4
-rw-r--r--include/linux/can/raw.h3
-rw-r--r--include/linux/capability.h6
-rw-r--r--include/linux/ceph/messenger.h12
-rw-r--r--include/linux/cgroup.h17
-rw-r--r--include/linux/clk-private.h22
-rw-r--r--include/linux/clk-provider.h31
-rw-r--r--include/linux/clk.h24
-rw-r--r--include/linux/compiler-gcc.h6
-rw-r--r--include/linux/cpu.h5
-rw-r--r--include/linux/cpu_rmap.h4
-rw-r--r--include/linux/cpuidle.h20
-rw-r--r--include/linux/cpuset.h4
-rw-r--r--include/linux/dcache.h4
-rw-r--r--include/linux/device.h9
-rw-r--r--include/linux/dmaengine.h10
-rw-r--r--include/linux/dw_apb_timer.h1
-rw-r--r--include/linux/efi.h2
-rw-r--r--include/linux/etherdevice.h25
-rw-r--r--include/linux/ethtool.h43
-rw-r--r--include/linux/eventpoll.h2
-rw-r--r--include/linux/extcon/extcon_gpio.h2
-rw-r--r--include/linux/file.h3
-rw-r--r--include/linux/fs.h33
-rw-r--r--include/linux/ftrace_event.h5
-rw-r--r--include/linux/genetlink.h2
-rw-r--r--include/linux/genhd.h1
-rw-r--r--include/linux/gfs2_ondisk.h14
-rw-r--r--include/linux/gpio.h4
-rw-r--r--include/linux/hid.h1
-rw-r--r--include/linux/hrtimer.h10
-rw-r--r--include/linux/i2c.h3
-rw-r--r--include/linux/i2c/mms114.h24
-rw-r--r--include/linux/i2c/twl.h1
-rw-r--r--include/linux/ieee80211.h212
-rw-r--r--include/linux/if.h2
-rw-r--r--include/linux/if_ether.h3
-rw-r--r--include/linux/if_link.h2
-rw-r--r--include/linux/if_strip.h27
-rw-r--r--include/linux/if_team.h74
-rw-r--r--include/linux/if_tunnel.h14
-rw-r--r--include/linux/iio/buffer.h22
-rw-r--r--include/linux/iio/consumer.h34
-rw-r--r--include/linux/iio/dac/ad5421.h28
-rw-r--r--include/linux/iio/dac/ad5504.h16
-rw-r--r--include/linux/iio/dac/ad5791.h25
-rw-r--r--include/linux/iio/dac/max517.h15
-rw-r--r--include/linux/iio/dac/mcp4725.h16
-rw-r--r--include/linux/iio/events.h6
-rw-r--r--include/linux/iio/frequency/ad9523.h195
-rw-r--r--include/linux/iio/frequency/adf4350.h126
-rw-r--r--include/linux/iio/iio.h108
-rw-r--r--include/linux/iio/machine.h2
-rw-r--r--include/linux/iio/sysfs.h2
-rw-r--r--include/linux/iio/triggered_buffer.h15
-rw-r--r--include/linux/iio/types.h8
-rw-r--r--include/linux/inetdevice.h2
-rw-r--r--include/linux/init_task.h16
-rw-r--r--include/linux/input.h9
-rw-r--r--include/linux/intel-iommu.h2
-rw-r--r--include/linux/io.h9
-rw-r--r--include/linux/iommu.h140
-rw-r--r--include/linux/ipv6.h36
-rw-r--r--include/linux/irq.h4
-rw-r--r--include/linux/jump_label.h17
-rw-r--r--include/linux/kernel.h1
-rw-r--r--include/linux/key.h4
-rw-r--r--include/linux/kmsg_dump.h61
-rw-r--r--include/linux/ks8851_mll.h33
-rw-r--r--include/linux/kthread.h8
-rw-r--r--include/linux/kvm.h3
-rw-r--r--include/linux/kvm_host.h31
-rw-r--r--include/linux/libata.h13
-rw-r--r--include/linux/mdio.h28
-rw-r--r--include/linux/memblock.h4
-rw-r--r--include/linux/mfd/abx500/ab8500-codec.h52
-rw-r--r--include/linux/mfd/abx500/ab8500.h2
-rw-r--r--include/linux/mfd/s5m87xx/s5m-core.h5
-rw-r--r--include/linux/mfd/tmio.h4
-rw-r--r--include/linux/mfd/tps65217.h13
-rw-r--r--include/linux/mfd/tps65910.h6
-rw-r--r--include/linux/mii.h9
-rw-r--r--include/linux/mlx4/cmd.h4
-rw-r--r--include/linux/mlx4/device.h258
-rw-r--r--include/linux/mlx4/driver.h5
-rw-r--r--include/linux/mm.h1
-rw-r--r--include/linux/mm_types.h10
-rw-r--r--include/linux/mmc/card.h1
-rw-r--r--include/linux/mmc/cd-gpio.h18
-rw-r--r--include/linux/mmc/host.h48
-rw-r--r--include/linux/mmc/sdhci-spear.h2
-rw-r--r--include/linux/mmc/sdhci.h4
-rw-r--r--include/linux/mmc/sdio.h2
-rw-r--r--include/linux/mmc/sh_mmcif.h10
-rw-r--r--include/linux/mmc/sh_mobile_sdhi.h1
-rw-r--r--include/linux/mmc/slot-gpio.h24
-rw-r--r--include/linux/mmzone.h4
-rw-r--r--include/linux/mod_devicetable.h10
-rw-r--r--include/linux/mxsfb.h49
-rw-r--r--include/linux/namei.h18
-rw-r--r--include/linux/net.h2
-rw-r--r--include/linux/netdevice.h18
-rw-r--r--include/linux/netfilter.h26
-rw-r--r--include/linux/netfilter/Kbuild1
-rw-r--r--include/linux/netfilter/nf_conntrack_sip.h2
-rw-r--r--include/linux/netfilter/nfnetlink.h3
-rw-r--r--include/linux/netfilter/nfnetlink_conntrack.h39
-rw-r--r--include/linux/netfilter/nfnetlink_cthelper.h55
-rw-r--r--include/linux/netfilter/nfnetlink_queue.h9
-rw-r--r--include/linux/netfilter/xt_connlimit.h9
-rw-r--r--include/linux/netfilter/xt_recent.h10
-rw-r--r--include/linux/netfilter_ipv4.h1
-rw-r--r--include/linux/netfilter_ipv4/Kbuild1
-rw-r--r--include/linux/netfilter_ipv4/ipt_addrtype.h27
-rw-r--r--include/linux/netfilter_ipv6.h1
-rw-r--r--include/linux/netlink.h24
-rw-r--r--include/linux/netpoll.h2
-rw-r--r--include/linux/nfc.h26
-rw-r--r--include/linux/nfs_fs_sb.h1
-rw-r--r--include/linux/nfs_xdr.h2
-rw-r--r--include/linux/nl80211.h234
-rw-r--r--include/linux/nl802154.h14
-rw-r--r--include/linux/of.h13
-rw-r--r--include/linux/of_iommu.h21
-rw-r--r--include/linux/of_mtd.h2
-rw-r--r--include/linux/pata_arasan_cf_data.h2
-rw-r--r--include/linux/pci-acpi.h1
-rw-r--r--include/linux/pci.h84
-rw-r--r--include/linux/pci_ids.h12
-rw-r--r--include/linux/pci_regs.h122
-rw-r--r--include/linux/perf_event.h3
-rw-r--r--include/linux/phy.h31
-rw-r--r--include/linux/pinctrl/pinctrl.h5
-rw-r--r--include/linux/pkt_cls.h6
-rw-r--r--include/linux/platform_data/ad7266.h54
-rw-r--r--include/linux/platform_data/atmel-aes.h22
-rw-r--r--include/linux/platform_data/clk-integrator.h1
-rw-r--r--include/linux/platform_data/clk-nomadik.h2
-rw-r--r--include/linux/platform_data/clk-u300.h1
-rw-r--r--include/linux/platform_data/mmp_audio.h22
-rw-r--r--include/linux/platform_data/omap_drm.h52
-rw-r--r--include/linux/platform_data/s3c-hsotg.h5
-rw-r--r--include/linux/pm_domain.h18
-rw-r--r--include/linux/pm_qos.h2
-rw-r--r--include/linux/power/smartreflex.h308
-rw-r--r--include/linux/prctl.h2
-rw-r--r--include/linux/pstore.h20
-rw-r--r--include/linux/pstore_ram.h35
-rw-r--r--include/linux/pxa2xx_ssp.h2
-rw-r--r--include/linux/quota.h2
-rw-r--r--include/linux/quotaops.h8
-rw-r--r--include/linux/rcupdate.h54
-rw-r--r--include/linux/rcutiny.h6
-rw-r--r--include/linux/regmap.h69
-rw-r--r--include/linux/regulator/consumer.h6
-rw-r--r--include/linux/regulator/driver.h30
-rw-r--r--include/linux/regulator/fixed.h13
-rw-r--r--include/linux/regulator/lp872x.h90
-rw-r--r--include/linux/regulator/machine.h3
-rw-r--r--include/linux/rpmsg.h6
-rw-r--r--include/linux/rtnetlink.h132
-rw-r--r--include/linux/sched.h28
-rw-r--r--include/linux/seq_file.h1
-rw-r--r--include/linux/sfi_acpi.h4
-rw-r--r--include/linux/sh_clk.h21
-rw-r--r--include/linux/sh_dma.h41
-rw-r--r--include/linux/sh_pfc.h65
-rw-r--r--include/linux/shdma-base.h124
-rw-r--r--include/linux/skbuff.h23
-rw-r--r--include/linux/smp.h5
-rw-r--r--include/linux/snmp.h9
-rw-r--r--include/linux/sock_diag.h2
-rw-r--r--include/linux/socket.h1
-rw-r--r--include/linux/spi/ad7879.h2
-rw-r--r--include/linux/spi/at86rf230.h31
-rw-r--r--include/linux/spi/pxa2xx_spi.h2
-rw-r--r--include/linux/splice.h8
-rw-r--r--include/linux/ssb/ssb.h1
-rw-r--r--include/linux/suspend.h6
-rw-r--r--include/linux/task_work.h18
-rw-r--r--include/linux/tcp.h36
-rw-r--r--include/linux/tick.h8
-rw-r--r--include/linux/time-armada-370-xp.h18
-rw-r--r--include/linux/tipc_config.h4
-rw-r--r--include/linux/tracehook.h2
-rw-r--r--include/linux/tracepoint.h2
-rw-r--r--include/linux/types.h9
-rw-r--r--include/linux/uhid.h104
-rw-r--r--include/linux/usb.h59
-rw-r--r--include/linux/usb/chipidea.h14
-rw-r--r--include/linux/usb/ehci_def.h28
-rw-r--r--include/linux/usb/hcd.h6
-rw-r--r--include/linux/usb/musb-omap.h30
-rw-r--r--include/linux/usb/otg.h67
-rw-r--r--include/linux/usb/renesas_usbhs.h8
-rw-r--r--include/linux/usb/tilegx.h34
-rw-r--r--include/linux/usb/uas.h40
-rw-r--r--include/linux/usb/usbnet.h5
-rw-r--r--include/linux/usb_usual.h4
-rw-r--r--include/linux/usbdevice_fs.h8
-rw-r--r--include/linux/vga_switcheroo.h6
-rw-r--r--include/linux/videodev2.h6
-rw-r--r--include/linux/virtio.h1
-rw-r--r--include/linux/virtio_scsi.h9
-rw-r--r--include/net/addrconf.h3
-rw-r--r--include/net/af_unix.h3
-rw-r--r--include/net/arp.h25
-rw-r--r--include/net/bluetooth/a2mp.h126
-rw-r--r--include/net/bluetooth/bluetooth.h39
-rw-r--r--include/net/bluetooth/hci.h116
-rw-r--r--include/net/bluetooth/hci_core.h37
-rw-r--r--include/net/bluetooth/l2cap.h210
-rw-r--r--include/net/bluetooth/mgmt.h2
-rw-r--r--include/net/caif/caif_hsi.h71
-rw-r--r--include/net/cfg80211.h278
-rw-r--r--include/net/dn_route.h2
-rw-r--r--include/net/dst.h92
-rw-r--r--include/net/dst_ops.h10
-rw-r--r--include/net/fib_rules.h1
-rw-r--r--include/net/flow.h3
-rw-r--r--include/net/genetlink.h2
-rw-r--r--include/net/inet6_connection_sock.h3
-rw-r--r--include/net/inet_common.h6
-rw-r--r--include/net/inet_connection_sock.h3
-rw-r--r--include/net/inet_hashtables.h4
-rw-r--r--include/net/inet_sock.h3
-rw-r--r--include/net/inetpeer.h90
-rw-r--r--include/net/ip.h8
-rw-r--r--include/net/ip6_fib.h35
-rw-r--r--include/net/ip6_route.h41
-rw-r--r--include/net/ip6_tunnel.h2
-rw-r--r--include/net/ip_fib.h83
-rw-r--r--include/net/ip_vs.h2
-rw-r--r--include/net/ipv6.h39
-rw-r--r--include/net/mac80211.h115
-rw-r--r--include/net/mac802154.h8
-rw-r--r--include/net/ndisc.h50
-rw-r--r--include/net/neighbour.h26
-rw-r--r--include/net/net_namespace.h1
-rw-r--r--include/net/netevent.h4
-rw-r--r--include/net/netfilter/nf_conntrack.h35
-rw-r--r--include/net/netfilter/nf_conntrack_core.h4
-rw-r--r--include/net/netfilter/nf_conntrack_ecache.h2
-rw-r--r--include/net/netfilter/nf_conntrack_expect.h4
-rw-r--r--include/net/netfilter/nf_conntrack_extend.h9
-rw-r--r--include/net/netfilter/nf_conntrack_helper.h29
-rw-r--r--include/net/netfilter/nf_conntrack_l3proto.h11
-rw-r--r--include/net/netfilter/nf_conntrack_l4proto.h33
-rw-r--r--include/net/netfilter/nf_nat_helper.h4
-rw-r--r--include/net/netfilter/nfnetlink_queue.h43
-rw-r--r--include/net/netns/conntrack.h55
-rw-r--r--include/net/netns/ipv4.h14
-rw-r--r--include/net/netns/ipv6.h1
-rw-r--r--include/net/netprio_cgroup.h4
-rw-r--r--include/net/nfc/hci.h22
-rw-r--r--include/net/nfc/nfc.h16
-rw-r--r--include/net/nfc/shdlc.h3
-rw-r--r--include/net/phonet/gprs.h2
-rw-r--r--include/net/protocol.h8
-rw-r--r--include/net/regulatory.h5
-rw-r--r--include/net/route.h76
-rw-r--r--include/net/rtnetlink.h10
-rw-r--r--include/net/sch_generic.h2
-rw-r--r--include/net/scm.h1
-rw-r--r--include/net/sctp/constants.h1
-rw-r--r--include/net/sctp/sctp.h6
-rw-r--r--include/net/sctp/structs.h28
-rw-r--r--include/net/sctp/tsnmap.h3
-rw-r--r--include/net/sctp/user.h11
-rw-r--r--include/net/sock.h8
-rw-r--r--include/net/tcp.h48
-rw-r--r--include/net/timewait_sock.h8
-rw-r--r--include/net/xfrm.h12
-rw-r--r--include/rdma/ib_cm.h12
-rw-r--r--include/rdma/ib_sa.h33
-rw-r--r--include/rdma/rdma_cm.h10
-rw-r--r--include/rdma/rdma_user_cm.h1
-rw-r--r--include/scsi/libfc.h24
-rw-r--r--include/scsi/libsas.h36
-rw-r--r--include/scsi/sas_ata.h5
-rw-r--r--include/scsi/scsi.h12
-rw-r--r--include/scsi/scsi_cmnd.h8
-rw-r--r--include/scsi/scsi_device.h7
-rw-r--r--include/scsi/scsi_dh.h6
-rw-r--r--include/scsi/scsi_scan.h11
-rw-r--r--include/scsi/scsi_transport_fc.h12
-rw-r--r--include/sound/cs46xx.h1745
-rw-r--r--include/sound/cs46xx_dsp_scb_types.h1213
-rw-r--r--include/sound/cs46xx_dsp_spos.h234
-rw-r--r--include/sound/cs46xx_dsp_task_types.h252
-rw-r--r--include/sound/designware_i2s.h69
-rw-r--r--include/sound/dmaengine_pcm.h1
-rw-r--r--include/sound/pcm.h14
-rw-r--r--include/sound/pcm_params.h2
-rw-r--r--include/sound/soc-dapm.h12
-rw-r--r--include/sound/soc.h77
-rw-r--r--include/sound/spear_dma.h35
-rw-r--r--include/sound/spear_spdif.h29
-rw-r--r--include/sound/tea575x-tuner.h3
-rw-r--r--include/sound/tlv.h29
-rw-r--r--include/sound/trident.h445
-rw-r--r--include/sound/vx_core.h2
-rw-r--r--include/sound/ymfpci.h390
-rw-r--r--include/target/target_core_backend.h17
-rw-r--r--include/target/target_core_base.h56
-rw-r--r--include/target/target_core_fabric.h15
-rw-r--r--include/trace/events/kvm.h7
-rw-r--r--include/trace/events/rcu.h45
-rw-r--r--include/trace/events/workqueue.h2
-rw-r--r--include/trace/events/xen.h12
-rw-r--r--include/trace/ftrace.h1
333 files changed, 6434 insertions, 6288 deletions
diff --git a/include/acpi/acnames.h b/include/acpi/acnames.h
index 38f508816e4a..b177f97f53b6 100644
--- a/include/acpi/acnames.h
+++ b/include/acpi/acnames.h
@@ -62,6 +62,7 @@
62#define METHOD_NAME__AEI "_AEI" 62#define METHOD_NAME__AEI "_AEI"
63#define METHOD_NAME__PRW "_PRW" 63#define METHOD_NAME__PRW "_PRW"
64#define METHOD_NAME__SRS "_SRS" 64#define METHOD_NAME__SRS "_SRS"
65#define METHOD_NAME__CBA "_CBA"
65 66
66/* Method names - these methods must appear at the namespace root */ 67/* Method names - these methods must appear at the namespace root */
67 68
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
index 9e6e1c6eb60a..01e2925523ea 100644
--- a/include/acpi/acpi_bus.h
+++ b/include/acpi/acpi_bus.h
@@ -117,9 +117,6 @@ struct acpi_device;
117typedef int (*acpi_op_add) (struct acpi_device * device); 117typedef int (*acpi_op_add) (struct acpi_device * device);
118typedef int (*acpi_op_remove) (struct acpi_device * device, int type); 118typedef int (*acpi_op_remove) (struct acpi_device * device, int type);
119typedef int (*acpi_op_start) (struct acpi_device * device); 119typedef int (*acpi_op_start) (struct acpi_device * device);
120typedef int (*acpi_op_suspend) (struct acpi_device * device,
121 pm_message_t state);
122typedef int (*acpi_op_resume) (struct acpi_device * device);
123typedef int (*acpi_op_bind) (struct acpi_device * device); 120typedef int (*acpi_op_bind) (struct acpi_device * device);
124typedef int (*acpi_op_unbind) (struct acpi_device * device); 121typedef int (*acpi_op_unbind) (struct acpi_device * device);
125typedef void (*acpi_op_notify) (struct acpi_device * device, u32 event); 122typedef void (*acpi_op_notify) (struct acpi_device * device, u32 event);
@@ -133,8 +130,6 @@ struct acpi_device_ops {
133 acpi_op_add add; 130 acpi_op_add add;
134 acpi_op_remove remove; 131 acpi_op_remove remove;
135 acpi_op_start start; 132 acpi_op_start start;
136 acpi_op_suspend suspend;
137 acpi_op_resume resume;
138 acpi_op_bind bind; 133 acpi_op_bind bind;
139 acpi_op_unbind unbind; 134 acpi_op_unbind unbind;
140 acpi_op_notify notify; 135 acpi_op_notify notify;
@@ -401,6 +396,7 @@ struct acpi_pci_root {
401 396
402 u32 osc_support_set; /* _OSC state of support bits */ 397 u32 osc_support_set; /* _OSC state of support bits */
403 u32 osc_control_set; /* _OSC state of control bits */ 398 u32 osc_control_set; /* _OSC state of control bits */
399 phys_addr_t mcfg_addr;
404}; 400};
405 401
406/* helper */ 402/* helper */
@@ -414,13 +410,13 @@ int acpi_enable_wakeup_device_power(struct acpi_device *dev, int state);
414int acpi_disable_wakeup_device_power(struct acpi_device *dev); 410int acpi_disable_wakeup_device_power(struct acpi_device *dev);
415 411
416#ifdef CONFIG_PM 412#ifdef CONFIG_PM
417int acpi_pm_device_sleep_state(struct device *, int *); 413int acpi_pm_device_sleep_state(struct device *, int *, int);
418#else 414#else
419static inline int acpi_pm_device_sleep_state(struct device *d, int *p) 415static inline int acpi_pm_device_sleep_state(struct device *d, int *p, int m)
420{ 416{
421 if (p) 417 if (p)
422 *p = ACPI_STATE_D0; 418 *p = ACPI_STATE_D0;
423 return ACPI_STATE_D3; 419 return (m >= ACPI_STATE_D0 && m <= ACPI_STATE_D3) ? m : ACPI_STATE_D0;
424} 420}
425#endif 421#endif
426 422
diff --git a/include/acpi/processor.h b/include/acpi/processor.h
index 9d650476d5dc..64ec644808bc 100644
--- a/include/acpi/processor.h
+++ b/include/acpi/processor.h
@@ -59,10 +59,7 @@ struct acpi_processor_cx {
59 u8 entry_method; 59 u8 entry_method;
60 u8 index; 60 u8 index;
61 u32 latency; 61 u32 latency;
62 u32 latency_ticks;
63 u32 power; 62 u32 power;
64 u32 usage;
65 u64 time;
66 u8 bm_sts_skip; 63 u8 bm_sts_skip;
67 char desc[ACPI_CX_DESC_LEN]; 64 char desc[ACPI_CX_DESC_LEN];
68}; 65};
@@ -334,8 +331,8 @@ int acpi_processor_cst_has_changed(struct acpi_processor *pr);
334int acpi_processor_hotplug(struct acpi_processor *pr); 331int acpi_processor_hotplug(struct acpi_processor *pr);
335int acpi_processor_power_exit(struct acpi_processor *pr, 332int acpi_processor_power_exit(struct acpi_processor *pr,
336 struct acpi_device *device); 333 struct acpi_device *device);
337int acpi_processor_suspend(struct acpi_device * device, pm_message_t state); 334int acpi_processor_suspend(struct device *dev);
338int acpi_processor_resume(struct acpi_device * device); 335int acpi_processor_resume(struct device *dev);
339extern struct cpuidle_driver acpi_idle_driver; 336extern struct cpuidle_driver acpi_idle_driver;
340 337
341/* in processor_thermal.c */ 338/* in processor_thermal.c */
diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h
index 9f02005f217a..7d10f962aa13 100644
--- a/include/asm-generic/bug.h
+++ b/include/asm-generic/bug.h
@@ -2,12 +2,19 @@
2#define _ASM_GENERIC_BUG_H 2#define _ASM_GENERIC_BUG_H
3 3
4#include <linux/compiler.h> 4#include <linux/compiler.h>
5
6#ifdef CONFIG_GENERIC_BUG
7#define BUGFLAG_WARNING (1 << 0)
8#define BUGFLAG_TAINT(taint) (BUGFLAG_WARNING | ((taint) << 8))
9#define BUG_GET_TAINT(bug) ((bug)->flags >> 8)
10#endif
11
12#ifndef __ASSEMBLY__
5#include <linux/kernel.h> 13#include <linux/kernel.h>
6 14
7#ifdef CONFIG_BUG 15#ifdef CONFIG_BUG
8 16
9#ifdef CONFIG_GENERIC_BUG 17#ifdef CONFIG_GENERIC_BUG
10#ifndef __ASSEMBLY__
11struct bug_entry { 18struct bug_entry {
12#ifndef CONFIG_GENERIC_BUG_RELATIVE_POINTERS 19#ifndef CONFIG_GENERIC_BUG_RELATIVE_POINTERS
13 unsigned long bug_addr; 20 unsigned long bug_addr;
@@ -24,12 +31,6 @@ struct bug_entry {
24#endif 31#endif
25 unsigned short flags; 32 unsigned short flags;
26}; 33};
27#endif /* __ASSEMBLY__ */
28
29#define BUGFLAG_WARNING (1 << 0)
30#define BUGFLAG_TAINT(taint) (BUGFLAG_WARNING | ((taint) << 8))
31#define BUG_GET_TAINT(bug) ((bug)->flags >> 8)
32
33#endif /* CONFIG_GENERIC_BUG */ 34#endif /* CONFIG_GENERIC_BUG */
34 35
35/* 36/*
@@ -61,7 +62,6 @@ struct bug_entry {
61 * to provide better diagnostics. 62 * to provide better diagnostics.
62 */ 63 */
63#ifndef __WARN_TAINT 64#ifndef __WARN_TAINT
64#ifndef __ASSEMBLY__
65extern __printf(3, 4) 65extern __printf(3, 4)
66void warn_slowpath_fmt(const char *file, const int line, 66void warn_slowpath_fmt(const char *file, const int line,
67 const char *fmt, ...); 67 const char *fmt, ...);
@@ -70,7 +70,6 @@ void warn_slowpath_fmt_taint(const char *file, const int line, unsigned taint,
70 const char *fmt, ...); 70 const char *fmt, ...);
71extern void warn_slowpath_null(const char *file, const int line); 71extern void warn_slowpath_null(const char *file, const int line);
72#define WANT_WARN_ON_SLOWPATH 72#define WANT_WARN_ON_SLOWPATH
73#endif
74#define __WARN() warn_slowpath_null(__FILE__, __LINE__) 73#define __WARN() warn_slowpath_null(__FILE__, __LINE__)
75#define __WARN_printf(arg...) warn_slowpath_fmt(__FILE__, __LINE__, arg) 74#define __WARN_printf(arg...) warn_slowpath_fmt(__FILE__, __LINE__, arg)
76#define __WARN_printf_taint(taint, arg...) \ 75#define __WARN_printf_taint(taint, arg...) \
@@ -203,4 +202,6 @@ extern void warn_slowpath_null(const char *file, const int line);
203# define WARN_ON_SMP(x) ({0;}) 202# define WARN_ON_SMP(x) ({0;})
204#endif 203#endif
205 204
205#endif /* __ASSEMBLY__ */
206
206#endif 207#endif
diff --git a/include/asm-generic/dma-contiguous.h b/include/asm-generic/dma-contiguous.h
index c544356b374b..294b1e755ab2 100644
--- a/include/asm-generic/dma-contiguous.h
+++ b/include/asm-generic/dma-contiguous.h
@@ -18,7 +18,7 @@ static inline void dev_set_cma_area(struct device *dev, struct cma *cma)
18{ 18{
19 if (dev) 19 if (dev)
20 dev->cma_area = cma; 20 dev->cma_area = cma;
21 if (!dev || !dma_contiguous_default_area) 21 if (!dev && !dma_contiguous_default_area)
22 dma_contiguous_default_area = cma; 22 dma_contiguous_default_area = cma;
23} 23}
24 24
diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h
index 6f2b45a9b6bc..ff4947b7a976 100644
--- a/include/asm-generic/pgtable.h
+++ b/include/asm-generic/pgtable.h
@@ -484,6 +484,16 @@ static inline int pmd_none_or_trans_huge_or_clear_bad(pmd_t *pmd)
484 /* 484 /*
485 * The barrier will stabilize the pmdval in a register or on 485 * The barrier will stabilize the pmdval in a register or on
486 * the stack so that it will stop changing under the code. 486 * the stack so that it will stop changing under the code.
487 *
488 * When CONFIG_TRANSPARENT_HUGEPAGE=y on x86 32bit PAE,
489 * pmd_read_atomic is allowed to return a not atomic pmdval
490 * (for example pointing to an hugepage that has never been
491 * mapped in the pmd). The below checks will only care about
492 * the low part of the pmd with 32bit PAE x86 anyway, with the
493 * exception of pmd_none(). So the important thing is that if
494 * the low part of the pmd is found null, the high part will
495 * be also null or the pmd_none() check below would be
496 * confused.
487 */ 497 */
488#ifdef CONFIG_TRANSPARENT_HUGEPAGE 498#ifdef CONFIG_TRANSPARENT_HUGEPAGE
489 barrier(); 499 barrier();
diff --git a/include/asm-generic/tlb.h b/include/asm-generic/tlb.h
index f96a5b58a975..ed6642ad03e0 100644
--- a/include/asm-generic/tlb.h
+++ b/include/asm-generic/tlb.h
@@ -86,6 +86,8 @@ struct mmu_gather {
86#ifdef CONFIG_HAVE_RCU_TABLE_FREE 86#ifdef CONFIG_HAVE_RCU_TABLE_FREE
87 struct mmu_table_batch *batch; 87 struct mmu_table_batch *batch;
88#endif 88#endif
89 unsigned long start;
90 unsigned long end;
89 unsigned int need_flush : 1, /* Did free PTEs */ 91 unsigned int need_flush : 1, /* Did free PTEs */
90 fast_mode : 1; /* No batching */ 92 fast_mode : 1; /* No batching */
91 93
@@ -113,7 +115,8 @@ static inline int tlb_fast_mode(struct mmu_gather *tlb)
113 115
114void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, bool fullmm); 116void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, bool fullmm);
115void tlb_flush_mmu(struct mmu_gather *tlb); 117void tlb_flush_mmu(struct mmu_gather *tlb);
116void tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end); 118void tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start,
119 unsigned long end);
117int __tlb_remove_page(struct mmu_gather *tlb, struct page *page); 120int __tlb_remove_page(struct mmu_gather *tlb, struct page *page);
118 121
119/* tlb_remove_page 122/* tlb_remove_page
diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h
index 81368ab6c611..a7aec391b7b7 100644
--- a/include/drm/drm_pciids.h
+++ b/include/drm/drm_pciids.h
@@ -1,7 +1,3 @@
1/*
2 This file is auto-generated from the drm_pciids.txt in the DRM CVS
3 Please contact dri-devel@lists.sf.net to add new cards to this list
4*/
5#define radeon_PCI_IDS \ 1#define radeon_PCI_IDS \
6 {0x1002, 0x3150, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \ 2 {0x1002, 0x3150, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \
7 {0x1002, 0x3151, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ 3 {0x1002, 0x3151, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
diff --git a/include/linux/Kbuild b/include/linux/Kbuild
index 8760be30b375..9547daddf813 100644
--- a/include/linux/Kbuild
+++ b/include/linux/Kbuild
@@ -183,7 +183,6 @@ header-y += if_ppp.h
183header-y += if_pppol2tp.h 183header-y += if_pppol2tp.h
184header-y += if_pppox.h 184header-y += if_pppox.h
185header-y += if_slip.h 185header-y += if_slip.h
186header-y += if_strip.h
187header-y += if_team.h 186header-y += if_team.h
188header-y += if_tun.h 187header-y += if_tun.h
189header-y += if_tunnel.h 188header-y += if_tunnel.h
@@ -376,6 +375,7 @@ header-y += tty.h
376header-y += types.h 375header-y += types.h
377header-y += udf_fs_i.h 376header-y += udf_fs_i.h
378header-y += udp.h 377header-y += udp.h
378header-y += uhid.h
379header-y += uinput.h 379header-y += uinput.h
380header-y += uio.h 380header-y += uio.h
381header-y += ultrasound.h 381header-y += ultrasound.h
diff --git a/include/linux/ac97_codec.h b/include/linux/ac97_codec.h
deleted file mode 100644
index 0260c3e79fdd..000000000000
--- a/include/linux/ac97_codec.h
+++ /dev/null
@@ -1,362 +0,0 @@
1#ifndef _AC97_CODEC_H_
2#define _AC97_CODEC_H_
3
4#include <linux/types.h>
5#include <linux/soundcard.h>
6
7/* AC97 1.0 */
8#define AC97_RESET 0x0000 //
9#define AC97_MASTER_VOL_STEREO 0x0002 // Line Out
10#define AC97_HEADPHONE_VOL 0x0004 //
11#define AC97_MASTER_VOL_MONO 0x0006 // TAD Output
12#define AC97_MASTER_TONE 0x0008 //
13#define AC97_PCBEEP_VOL 0x000a // none
14#define AC97_PHONE_VOL 0x000c // TAD Input (mono)
15#define AC97_MIC_VOL 0x000e // MIC Input (mono)
16#define AC97_LINEIN_VOL 0x0010 // Line Input (stereo)
17#define AC97_CD_VOL 0x0012 // CD Input (stereo)
18#define AC97_VIDEO_VOL 0x0014 // none
19#define AC97_AUX_VOL 0x0016 // Aux Input (stereo)
20#define AC97_PCMOUT_VOL 0x0018 // Wave Output (stereo)
21#define AC97_RECORD_SELECT 0x001a //
22#define AC97_RECORD_GAIN 0x001c
23#define AC97_RECORD_GAIN_MIC 0x001e
24#define AC97_GENERAL_PURPOSE 0x0020
25#define AC97_3D_CONTROL 0x0022
26#define AC97_MODEM_RATE 0x0024
27#define AC97_POWER_CONTROL 0x0026
28
29/* AC'97 2.0 */
30#define AC97_EXTENDED_ID 0x0028 /* Extended Audio ID */
31#define AC97_EXTENDED_STATUS 0x002A /* Extended Audio Status */
32#define AC97_PCM_FRONT_DAC_RATE 0x002C /* PCM Front DAC Rate */
33#define AC97_PCM_SURR_DAC_RATE 0x002E /* PCM Surround DAC Rate */
34#define AC97_PCM_LFE_DAC_RATE 0x0030 /* PCM LFE DAC Rate */
35#define AC97_PCM_LR_ADC_RATE 0x0032 /* PCM LR ADC Rate */
36#define AC97_PCM_MIC_ADC_RATE 0x0034 /* PCM MIC ADC Rate */
37#define AC97_CENTER_LFE_MASTER 0x0036 /* Center + LFE Master Volume */
38#define AC97_SURROUND_MASTER 0x0038 /* Surround (Rear) Master Volume */
39#define AC97_RESERVED_3A 0x003A /* Reserved in AC '97 < 2.2 */
40
41/* AC'97 2.2 */
42#define AC97_SPDIF_CONTROL 0x003A /* S/PDIF Control */
43
44/* range 0x3c-0x58 - MODEM */
45#define AC97_EXTENDED_MODEM_ID 0x003C
46#define AC97_EXTEND_MODEM_STAT 0x003E
47#define AC97_LINE1_RATE 0x0040
48#define AC97_LINE2_RATE 0x0042
49#define AC97_HANDSET_RATE 0x0044
50#define AC97_LINE1_LEVEL 0x0046
51#define AC97_LINE2_LEVEL 0x0048
52#define AC97_HANDSET_LEVEL 0x004A
53#define AC97_GPIO_CONFIG 0x004C
54#define AC97_GPIO_POLARITY 0x004E
55#define AC97_GPIO_STICKY 0x0050
56#define AC97_GPIO_WAKE_UP 0x0052
57#define AC97_GPIO_STATUS 0x0054
58#define AC97_MISC_MODEM_STAT 0x0056
59#define AC97_RESERVED_58 0x0058
60
61/* registers 0x005a - 0x007a are vendor reserved */
62
63#define AC97_VENDOR_ID1 0x007c
64#define AC97_VENDOR_ID2 0x007e
65
66/* volume control bit defines */
67#define AC97_MUTE 0x8000
68#define AC97_MICBOOST 0x0040
69#define AC97_LEFTVOL 0x3f00
70#define AC97_RIGHTVOL 0x003f
71
72/* record mux defines */
73#define AC97_RECMUX_MIC 0x0000
74#define AC97_RECMUX_CD 0x0101
75#define AC97_RECMUX_VIDEO 0x0202
76#define AC97_RECMUX_AUX 0x0303
77#define AC97_RECMUX_LINE 0x0404
78#define AC97_RECMUX_STEREO_MIX 0x0505
79#define AC97_RECMUX_MONO_MIX 0x0606
80#define AC97_RECMUX_PHONE 0x0707
81
82/* general purpose register bit defines */
83#define AC97_GP_LPBK 0x0080 /* Loopback mode */
84#define AC97_GP_MS 0x0100 /* Mic Select 0=Mic1, 1=Mic2 */
85#define AC97_GP_MIX 0x0200 /* Mono output select 0=Mix, 1=Mic */
86#define AC97_GP_RLBK 0x0400 /* Remote Loopback - Modem line codec */
87#define AC97_GP_LLBK 0x0800 /* Local Loopback - Modem Line codec */
88#define AC97_GP_LD 0x1000 /* Loudness 1=on */
89#define AC97_GP_3D 0x2000 /* 3D Enhancement 1=on */
90#define AC97_GP_ST 0x4000 /* Stereo Enhancement 1=on */
91#define AC97_GP_POP 0x8000 /* Pcm Out Path, 0=pre 3D, 1=post 3D */
92
93/* extended audio status and control bit defines */
94#define AC97_EA_VRA 0x0001 /* Variable bit rate enable bit */
95#define AC97_EA_DRA 0x0002 /* Double-rate audio enable bit */
96#define AC97_EA_SPDIF 0x0004 /* S/PDIF Enable bit */
97#define AC97_EA_VRM 0x0008 /* Variable bit rate for MIC enable bit */
98#define AC97_EA_CDAC 0x0040 /* PCM Center DAC is ready (Read only) */
99#define AC97_EA_SDAC 0x0040 /* PCM Surround DACs are ready (Read only) */
100#define AC97_EA_LDAC 0x0080 /* PCM LFE DAC is ready (Read only) */
101#define AC97_EA_MDAC 0x0100 /* MIC ADC is ready (Read only) */
102#define AC97_EA_SPCV 0x0400 /* S/PDIF configuration valid (Read only) */
103#define AC97_EA_PRI 0x0800 /* Turns the PCM Center DAC off */
104#define AC97_EA_PRJ 0x1000 /* Turns the PCM Surround DACs off */
105#define AC97_EA_PRK 0x2000 /* Turns the PCM LFE DAC off */
106#define AC97_EA_PRL 0x4000 /* Turns the MIC ADC off */
107#define AC97_EA_SLOT_MASK 0xffcf /* Mask for slot assignment bits */
108#define AC97_EA_SPSA_3_4 0x0000 /* Slot assigned to 3 & 4 */
109#define AC97_EA_SPSA_7_8 0x0010 /* Slot assigned to 7 & 8 */
110#define AC97_EA_SPSA_6_9 0x0020 /* Slot assigned to 6 & 9 */
111#define AC97_EA_SPSA_10_11 0x0030 /* Slot assigned to 10 & 11 */
112
113/* S/PDIF control bit defines */
114#define AC97_SC_PRO 0x0001 /* Professional status */
115#define AC97_SC_NAUDIO 0x0002 /* Non audio stream */
116#define AC97_SC_COPY 0x0004 /* Copyright status */
117#define AC97_SC_PRE 0x0008 /* Preemphasis status */
118#define AC97_SC_CC_MASK 0x07f0 /* Category Code mask */
119#define AC97_SC_L 0x0800 /* Generation Level status */
120#define AC97_SC_SPSR_MASK 0xcfff /* S/PDIF Sample Rate bits */
121#define AC97_SC_SPSR_44K 0x0000 /* Use 44.1kHz Sample rate */
122#define AC97_SC_SPSR_48K 0x2000 /* Use 48kHz Sample rate */
123#define AC97_SC_SPSR_32K 0x3000 /* Use 32kHz Sample rate */
124#define AC97_SC_DRS 0x4000 /* Double Rate S/PDIF */
125#define AC97_SC_V 0x8000 /* Validity status */
126
127/* powerdown control and status bit defines */
128
129/* status */
130#define AC97_PWR_MDM 0x0010 /* Modem section ready */
131#define AC97_PWR_REF 0x0008 /* Vref nominal */
132#define AC97_PWR_ANL 0x0004 /* Analog section ready */
133#define AC97_PWR_DAC 0x0002 /* DAC section ready */
134#define AC97_PWR_ADC 0x0001 /* ADC section ready */
135
136/* control */
137#define AC97_PWR_PR0 0x0100 /* ADC and Mux powerdown */
138#define AC97_PWR_PR1 0x0200 /* DAC powerdown */
139#define AC97_PWR_PR2 0x0400 /* Output mixer powerdown (Vref on) */
140#define AC97_PWR_PR3 0x0800 /* Output mixer powerdown (Vref off) */
141#define AC97_PWR_PR4 0x1000 /* AC-link powerdown */
142#define AC97_PWR_PR5 0x2000 /* Internal Clk disable */
143#define AC97_PWR_PR6 0x4000 /* HP amp powerdown */
144#define AC97_PWR_PR7 0x8000 /* Modem off - if supported */
145
146/* extended audio ID register bit defines */
147#define AC97_EXTID_VRA 0x0001
148#define AC97_EXTID_DRA 0x0002
149#define AC97_EXTID_SPDIF 0x0004
150#define AC97_EXTID_VRM 0x0008
151#define AC97_EXTID_DSA0 0x0010
152#define AC97_EXTID_DSA1 0x0020
153#define AC97_EXTID_CDAC 0x0040
154#define AC97_EXTID_SDAC 0x0080
155#define AC97_EXTID_LDAC 0x0100
156#define AC97_EXTID_AMAP 0x0200
157#define AC97_EXTID_REV0 0x0400
158#define AC97_EXTID_REV1 0x0800
159#define AC97_EXTID_ID0 0x4000
160#define AC97_EXTID_ID1 0x8000
161
162/* extended status register bit defines */
163#define AC97_EXTSTAT_VRA 0x0001
164#define AC97_EXTSTAT_DRA 0x0002
165#define AC97_EXTSTAT_SPDIF 0x0004
166#define AC97_EXTSTAT_VRM 0x0008
167#define AC97_EXTSTAT_SPSA0 0x0010
168#define AC97_EXTSTAT_SPSA1 0x0020
169#define AC97_EXTSTAT_CDAC 0x0040
170#define AC97_EXTSTAT_SDAC 0x0080
171#define AC97_EXTSTAT_LDAC 0x0100
172#define AC97_EXTSTAT_MADC 0x0200
173#define AC97_EXTSTAT_SPCV 0x0400
174#define AC97_EXTSTAT_PRI 0x0800
175#define AC97_EXTSTAT_PRJ 0x1000
176#define AC97_EXTSTAT_PRK 0x2000
177#define AC97_EXTSTAT_PRL 0x4000
178
179/* extended audio ID register bit defines */
180#define AC97_EXTID_VRA 0x0001
181#define AC97_EXTID_DRA 0x0002
182#define AC97_EXTID_SPDIF 0x0004
183#define AC97_EXTID_VRM 0x0008
184#define AC97_EXTID_DSA0 0x0010
185#define AC97_EXTID_DSA1 0x0020
186#define AC97_EXTID_CDAC 0x0040
187#define AC97_EXTID_SDAC 0x0080
188#define AC97_EXTID_LDAC 0x0100
189#define AC97_EXTID_AMAP 0x0200
190#define AC97_EXTID_REV0 0x0400
191#define AC97_EXTID_REV1 0x0800
192#define AC97_EXTID_ID0 0x4000
193#define AC97_EXTID_ID1 0x8000
194
195/* extended status register bit defines */
196#define AC97_EXTSTAT_VRA 0x0001
197#define AC97_EXTSTAT_DRA 0x0002
198#define AC97_EXTSTAT_SPDIF 0x0004
199#define AC97_EXTSTAT_VRM 0x0008
200#define AC97_EXTSTAT_SPSA0 0x0010
201#define AC97_EXTSTAT_SPSA1 0x0020
202#define AC97_EXTSTAT_CDAC 0x0040
203#define AC97_EXTSTAT_SDAC 0x0080
204#define AC97_EXTSTAT_LDAC 0x0100
205#define AC97_EXTSTAT_MADC 0x0200
206#define AC97_EXTSTAT_SPCV 0x0400
207#define AC97_EXTSTAT_PRI 0x0800
208#define AC97_EXTSTAT_PRJ 0x1000
209#define AC97_EXTSTAT_PRK 0x2000
210#define AC97_EXTSTAT_PRL 0x4000
211
212/* useful power states */
213#define AC97_PWR_D0 0x0000 /* everything on */
214#define AC97_PWR_D1 AC97_PWR_PR0|AC97_PWR_PR1|AC97_PWR_PR4
215#define AC97_PWR_D2 AC97_PWR_PR0|AC97_PWR_PR1|AC97_PWR_PR2|AC97_PWR_PR3|AC97_PWR_PR4
216#define AC97_PWR_D3 AC97_PWR_PR0|AC97_PWR_PR1|AC97_PWR_PR2|AC97_PWR_PR3|AC97_PWR_PR4
217#define AC97_PWR_ANLOFF AC97_PWR_PR2|AC97_PWR_PR3 /* analog section off */
218
219/* Total number of defined registers. */
220#define AC97_REG_CNT 64
221
222
223/* OSS interface to the ac97s.. */
224#define AC97_STEREO_MASK (SOUND_MASK_VOLUME|SOUND_MASK_PCM|\
225 SOUND_MASK_LINE|SOUND_MASK_CD|\
226 SOUND_MASK_ALTPCM|SOUND_MASK_IGAIN|\
227 SOUND_MASK_LINE1|SOUND_MASK_VIDEO)
228
229#define AC97_SUPPORTED_MASK (AC97_STEREO_MASK | \
230 SOUND_MASK_BASS|SOUND_MASK_TREBLE|\
231 SOUND_MASK_SPEAKER|SOUND_MASK_MIC|\
232 SOUND_MASK_PHONEIN|SOUND_MASK_PHONEOUT)
233
234#define AC97_RECORD_MASK (SOUND_MASK_MIC|\
235 SOUND_MASK_CD|SOUND_MASK_IGAIN|SOUND_MASK_VIDEO|\
236 SOUND_MASK_LINE1| SOUND_MASK_LINE|\
237 SOUND_MASK_PHONEIN)
238
239/* original check is not good enough in case FOO is greater than
240 * SOUND_MIXER_NRDEVICES because the supported_mixers has exactly
241 * SOUND_MIXER_NRDEVICES elements.
242 * before matching the given mixer against the bitmask in supported_mixers we
243 * check if mixer number exceeds maximum allowed size which is as mentioned
244 * above SOUND_MIXER_NRDEVICES */
245#define supported_mixer(CODEC,FOO) ((FOO >= 0) && \
246 (FOO < SOUND_MIXER_NRDEVICES) && \
247 (CODEC)->supported_mixers & (1<<FOO) )
248
249struct ac97_codec {
250 /* Linked list of codecs */
251 struct list_head list;
252
253 /* AC97 controller connected with */
254 void *private_data;
255
256 char *name;
257 int id;
258 int dev_mixer;
259 int type;
260 u32 model;
261
262 unsigned int modem:1;
263
264 struct ac97_ops *codec_ops;
265
266 /* controller specific lower leverl ac97 accessing routines.
267 must be re-entrant safe */
268 u16 (*codec_read) (struct ac97_codec *codec, u8 reg);
269 void (*codec_write) (struct ac97_codec *codec, u8 reg, u16 val);
270
271 /* Wait for codec-ready. Ok to sleep here. */
272 void (*codec_wait) (struct ac97_codec *codec);
273
274 /* callback used by helper drivers for interesting ac97 setups */
275 void (*codec_unregister) (struct ac97_codec *codec);
276
277 struct ac97_driver *driver;
278 void *driver_private; /* Private data for the driver */
279
280 spinlock_t lock;
281
282 /* OSS mixer masks */
283 int modcnt;
284 int supported_mixers;
285 int stereo_mixers;
286 int record_sources;
287
288 /* Property flags */
289 int flags;
290
291 int bit_resolution;
292
293 /* OSS mixer interface */
294 int (*read_mixer) (struct ac97_codec *codec, int oss_channel);
295 void (*write_mixer)(struct ac97_codec *codec, int oss_channel,
296 unsigned int left, unsigned int right);
297 int (*recmask_io) (struct ac97_codec *codec, int rw, int mask);
298 int (*mixer_ioctl)(struct ac97_codec *codec, unsigned int cmd, unsigned long arg);
299
300 /* saved OSS mixer states */
301 unsigned int mixer_state[SOUND_MIXER_NRDEVICES];
302
303 /* Software Modem interface */
304 int (*modem_ioctl)(struct ac97_codec *codec, unsigned int cmd, unsigned long arg);
305};
306
307/*
308 * Operation structures for each known AC97 chip
309 */
310
311struct ac97_ops
312{
313 /* Initialise */
314 int (*init)(struct ac97_codec *c);
315 /* Amplifier control */
316 int (*amplifier)(struct ac97_codec *codec, int on);
317 /* Digital mode control */
318 int (*digital)(struct ac97_codec *codec, int slots, int rate, int mode);
319#define AUDIO_DIGITAL 0x8000
320#define AUDIO_PRO 0x4000
321#define AUDIO_DRS 0x2000
322#define AUDIO_CCMASK 0x003F
323
324#define AC97_DELUDED_MODEM 1 /* Audio codec reports its a modem */
325#define AC97_NO_PCM_VOLUME 2 /* Volume control is missing */
326#define AC97_DEFAULT_POWER_OFF 4 /* Needs warm reset to power up */
327};
328
329extern int ac97_probe_codec(struct ac97_codec *);
330
331extern struct ac97_codec *ac97_alloc_codec(void);
332extern void ac97_release_codec(struct ac97_codec *codec);
333
334struct ac97_driver {
335 struct list_head list;
336 char *name;
337 u32 codec_id;
338 u32 codec_mask;
339 int (*probe) (struct ac97_codec *codec, struct ac97_driver *driver);
340 void (*remove) (struct ac97_codec *codec, struct ac97_driver *driver);
341};
342
343/* quirk types */
344enum {
345 AC97_TUNE_DEFAULT = -1, /* use default from quirk list (not valid in list) */
346 AC97_TUNE_NONE = 0, /* nothing extra to do */
347 AC97_TUNE_HP_ONLY, /* headphone (true line-out) control as master only */
348 AC97_TUNE_SWAP_HP, /* swap headphone and master controls */
349 AC97_TUNE_SWAP_SURROUND, /* swap master and surround controls */
350 AC97_TUNE_AD_SHARING, /* for AD1985, turn on OMS bit and use headphone */
351 AC97_TUNE_ALC_JACK, /* for Realtek, enable JACK detection */
352};
353
354struct ac97_quirk {
355 unsigned short vendor; /* PCI vendor id */
356 unsigned short device; /* PCI device id */
357 unsigned short mask; /* device id bit mask, 0 = accept all */
358 const char *name; /* name shown as info */
359 int type; /* quirk type above */
360};
361
362#endif /* _AC97_CODEC_H_ */
diff --git a/include/linux/aio.h b/include/linux/aio.h
index 2314ad8b3c9c..b1a520ec8b59 100644
--- a/include/linux/aio.h
+++ b/include/linux/aio.h
@@ -140,6 +140,7 @@ struct kiocb {
140 (x)->ki_dtor = NULL; \ 140 (x)->ki_dtor = NULL; \
141 (x)->ki_obj.tsk = tsk; \ 141 (x)->ki_obj.tsk = tsk; \
142 (x)->ki_user_data = 0; \ 142 (x)->ki_user_data = 0; \
143 (x)->private = NULL; \
143 } while (0) 144 } while (0)
144 145
145#define AIO_RING_MAGIC 0xa10a10a1 146#define AIO_RING_MAGIC 0xa10a10a1
diff --git a/include/linux/amba/pl022.h b/include/linux/amba/pl022.h
index 76dd1b199a1b..fe1d7b283cb6 100644
--- a/include/linux/amba/pl022.h
+++ b/include/linux/amba/pl022.h
@@ -231,6 +231,7 @@ enum ssp_chip_select {
231struct dma_chan; 231struct dma_chan;
232/** 232/**
233 * struct pl022_ssp_master - device.platform_data for SPI controller devices. 233 * struct pl022_ssp_master - device.platform_data for SPI controller devices.
234 * @bus_id: identifier for this bus
234 * @num_chipselect: chipselects are used to distinguish individual 235 * @num_chipselect: chipselects are used to distinguish individual
235 * SPI slaves, and are numbered from zero to num_chipselects - 1. 236 * SPI slaves, and are numbered from zero to num_chipselects - 1.
236 * each slave has a chipselect signal, but it's common that not 237 * each slave has a chipselect signal, but it's common that not
@@ -259,19 +260,13 @@ struct pl022_ssp_controller {
259 * struct ssp_config_chip - spi_board_info.controller_data for SPI 260 * struct ssp_config_chip - spi_board_info.controller_data for SPI
260 * slave devices, copied to spi_device.controller_data. 261 * slave devices, copied to spi_device.controller_data.
261 * 262 *
262 * @lbm: used for test purpose to internally connect RX and TX
263 * @iface: Interface type(Motorola, TI, Microwire, Universal) 263 * @iface: Interface type(Motorola, TI, Microwire, Universal)
264 * @hierarchy: sets whether interface is master or slave 264 * @hierarchy: sets whether interface is master or slave
265 * @slave_tx_disable: SSPTXD is disconnected (in slave mode only) 265 * @slave_tx_disable: SSPTXD is disconnected (in slave mode only)
266 * @clk_freq: Tune freq parameters of SSP(when in master mode) 266 * @clk_freq: Tune freq parameters of SSP(when in master mode)
267 * @endian_rx: Endianess of Data in Rx FIFO
268 * @endian_tx: Endianess of Data in Tx FIFO
269 * @data_size: Width of data element(4 to 32 bits)
270 * @com_mode: communication mode: polling, Interrupt or DMA 267 * @com_mode: communication mode: polling, Interrupt or DMA
271 * @rx_lev_trig: Rx FIFO watermark level (for IT & DMA mode) 268 * @rx_lev_trig: Rx FIFO watermark level (for IT & DMA mode)
272 * @tx_lev_trig: Tx FIFO watermark level (for IT & DMA mode) 269 * @tx_lev_trig: Tx FIFO watermark level (for IT & DMA mode)
273 * @clk_phase: Motorola SPI interface Clock phase
274 * @clk_pol: Motorola SPI interface Clock polarity
275 * @ctrl_len: Microwire interface: Control length 270 * @ctrl_len: Microwire interface: Control length
276 * @wait_state: Microwire interface: Wait state 271 * @wait_state: Microwire interface: Wait state
277 * @duplex: Microwire interface: Full/Half duplex 272 * @duplex: Microwire interface: Full/Half duplex
@@ -279,8 +274,6 @@ struct pl022_ssp_controller {
279 * before sampling the incoming line 274 * before sampling the incoming line
280 * @cs_control: function pointer to board-specific function to 275 * @cs_control: function pointer to board-specific function to
281 * assert/deassert I/O port to control HW generation of devices chip-select. 276 * assert/deassert I/O port to control HW generation of devices chip-select.
282 * @dma_xfer_type: Type of DMA xfer (Mem-to-periph or Periph-to-Periph)
283 * @dma_config: DMA configuration for SSP controller and peripheral
284 */ 277 */
285struct pl022_config_chip { 278struct pl022_config_chip {
286 enum ssp_interface iface; 279 enum ssp_interface iface;
diff --git a/include/linux/async.h b/include/linux/async.h
index 68a9530196f2..7a24fe9b44b4 100644
--- a/include/linux/async.h
+++ b/include/linux/async.h
@@ -9,19 +9,47 @@
9 * as published by the Free Software Foundation; version 2 9 * as published by the Free Software Foundation; version 2
10 * of the License. 10 * of the License.
11 */ 11 */
12#ifndef __ASYNC_H__
13#define __ASYNC_H__
12 14
13#include <linux/types.h> 15#include <linux/types.h>
14#include <linux/list.h> 16#include <linux/list.h>
15 17
16typedef u64 async_cookie_t; 18typedef u64 async_cookie_t;
17typedef void (async_func_ptr) (void *data, async_cookie_t cookie); 19typedef void (async_func_ptr) (void *data, async_cookie_t cookie);
20struct async_domain {
21 struct list_head node;
22 struct list_head domain;
23 int count;
24 unsigned registered:1;
25};
26
27/*
28 * domain participates in global async_synchronize_full
29 */
30#define ASYNC_DOMAIN(_name) \
31 struct async_domain _name = { .node = LIST_HEAD_INIT(_name.node), \
32 .domain = LIST_HEAD_INIT(_name.domain), \
33 .count = 0, \
34 .registered = 1 }
35
36/*
37 * domain is free to go out of scope as soon as all pending work is
38 * complete, this domain does not participate in async_synchronize_full
39 */
40#define ASYNC_DOMAIN_EXCLUSIVE(_name) \
41 struct async_domain _name = { .node = LIST_HEAD_INIT(_name.node), \
42 .domain = LIST_HEAD_INIT(_name.domain), \
43 .count = 0, \
44 .registered = 0 }
18 45
19extern async_cookie_t async_schedule(async_func_ptr *ptr, void *data); 46extern async_cookie_t async_schedule(async_func_ptr *ptr, void *data);
20extern async_cookie_t async_schedule_domain(async_func_ptr *ptr, void *data, 47extern async_cookie_t async_schedule_domain(async_func_ptr *ptr, void *data,
21 struct list_head *list); 48 struct async_domain *domain);
49void async_unregister_domain(struct async_domain *domain);
22extern void async_synchronize_full(void); 50extern void async_synchronize_full(void);
23extern void async_synchronize_full_domain(struct list_head *list); 51extern void async_synchronize_full_domain(struct async_domain *domain);
24extern void async_synchronize_cookie(async_cookie_t cookie); 52extern void async_synchronize_cookie(async_cookie_t cookie);
25extern void async_synchronize_cookie_domain(async_cookie_t cookie, 53extern void async_synchronize_cookie_domain(async_cookie_t cookie,
26 struct list_head *list); 54 struct async_domain *domain);
27 55#endif
diff --git a/include/linux/ata.h b/include/linux/ata.h
index 32df2b6ef0e0..5713d3ac381a 100644
--- a/include/linux/ata.h
+++ b/include/linux/ata.h
@@ -578,6 +578,7 @@ static inline int ata_is_data(u8 prot)
578 ((u64) (id)[(n) + 0]) ) 578 ((u64) (id)[(n) + 0]) )
579 579
580#define ata_id_cdb_intr(id) (((id)[ATA_ID_CONFIG] & 0x60) == 0x20) 580#define ata_id_cdb_intr(id) (((id)[ATA_ID_CONFIG] & 0x60) == 0x20)
581#define ata_id_has_da(id) ((id)[77] & (1 << 4))
581 582
582static inline bool ata_id_has_hipm(const u16 *id) 583static inline bool ata_id_has_hipm(const u16 *id)
583{ 584{
diff --git a/include/linux/bcma/bcma.h b/include/linux/bcma/bcma.h
index 8deaf6d050c3..1954a4e305a3 100644
--- a/include/linux/bcma/bcma.h
+++ b/include/linux/bcma/bcma.h
@@ -7,6 +7,7 @@
7#include <linux/bcma/bcma_driver_chipcommon.h> 7#include <linux/bcma/bcma_driver_chipcommon.h>
8#include <linux/bcma/bcma_driver_pci.h> 8#include <linux/bcma/bcma_driver_pci.h>
9#include <linux/bcma/bcma_driver_mips.h> 9#include <linux/bcma/bcma_driver_mips.h>
10#include <linux/bcma/bcma_driver_gmac_cmn.h>
10#include <linux/ssb/ssb.h> /* SPROM sharing */ 11#include <linux/ssb/ssb.h> /* SPROM sharing */
11 12
12#include "bcma_regs.h" 13#include "bcma_regs.h"
@@ -70,6 +71,13 @@ struct bcma_host_ops {
70 71
71/* Core-ID values. */ 72/* Core-ID values. */
72#define BCMA_CORE_OOB_ROUTER 0x367 /* Out of band */ 73#define BCMA_CORE_OOB_ROUTER 0x367 /* Out of band */
74#define BCMA_CORE_4706_CHIPCOMMON 0x500
75#define BCMA_CORE_4706_SOC_RAM 0x50E
76#define BCMA_CORE_4706_MAC_GBIT 0x52D
77#define BCMA_CORE_AMEMC 0x52E /* DDR1/2 memory controller core */
78#define BCMA_CORE_ALTA 0x534 /* I2S core */
79#define BCMA_CORE_4706_MAC_GBIT_COMMON 0x5DC
80#define BCMA_CORE_DDR23_PHY 0x5DD
73#define BCMA_CORE_INVALID 0x700 81#define BCMA_CORE_INVALID 0x700
74#define BCMA_CORE_CHIPCOMMON 0x800 82#define BCMA_CORE_CHIPCOMMON 0x800
75#define BCMA_CORE_ILINE20 0x801 83#define BCMA_CORE_ILINE20 0x801
@@ -130,6 +138,36 @@ struct bcma_host_ops {
130 138
131#define BCMA_MAX_NR_CORES 16 139#define BCMA_MAX_NR_CORES 16
132 140
141/* Chip IDs of PCIe devices */
142#define BCMA_CHIP_ID_BCM4313 0x4313
143#define BCMA_CHIP_ID_BCM43224 43224
144#define BCMA_PKG_ID_BCM43224_FAB_CSM 0x8
145#define BCMA_PKG_ID_BCM43224_FAB_SMIC 0xa
146#define BCMA_CHIP_ID_BCM43225 43225
147#define BCMA_CHIP_ID_BCM43227 43227
148#define BCMA_CHIP_ID_BCM43228 43228
149#define BCMA_CHIP_ID_BCM43421 43421
150#define BCMA_CHIP_ID_BCM43428 43428
151#define BCMA_CHIP_ID_BCM43431 43431
152#define BCMA_CHIP_ID_BCM43460 43460
153#define BCMA_CHIP_ID_BCM4331 0x4331
154#define BCMA_CHIP_ID_BCM6362 0x6362
155#define BCMA_CHIP_ID_BCM4360 0x4360
156#define BCMA_CHIP_ID_BCM4352 0x4352
157
158/* Chip IDs of SoCs */
159#define BCMA_CHIP_ID_BCM4706 0x5300
160#define BCMA_CHIP_ID_BCM4716 0x4716
161#define BCMA_PKG_ID_BCM4716 8
162#define BCMA_PKG_ID_BCM4717 9
163#define BCMA_PKG_ID_BCM4718 10
164#define BCMA_CHIP_ID_BCM47162 47162
165#define BCMA_CHIP_ID_BCM4748 0x4748
166#define BCMA_CHIP_ID_BCM4749 0x4749
167#define BCMA_CHIP_ID_BCM5356 0x5356
168#define BCMA_CHIP_ID_BCM5357 0x5357
169#define BCMA_CHIP_ID_BCM53572 53572
170
133struct bcma_device { 171struct bcma_device {
134 struct bcma_bus *bus; 172 struct bcma_bus *bus;
135 struct bcma_device_id id; 173 struct bcma_device_id id;
@@ -215,6 +253,7 @@ struct bcma_bus {
215 struct bcma_drv_cc drv_cc; 253 struct bcma_drv_cc drv_cc;
216 struct bcma_drv_pci drv_pci; 254 struct bcma_drv_pci drv_pci;
217 struct bcma_drv_mips drv_mips; 255 struct bcma_drv_mips drv_mips;
256 struct bcma_drv_gmac_cmn drv_gmac_cmn;
218 257
219 /* We decided to share SPROM struct with SSB as long as we do not need 258 /* We decided to share SPROM struct with SSB as long as we do not need
220 * any hacks for BCMA. This simplifies drivers code. */ 259 * any hacks for BCMA. This simplifies drivers code. */
diff --git a/include/linux/bcma/bcma_driver_chipcommon.h b/include/linux/bcma/bcma_driver_chipcommon.h
index 8bbfe31fbac8..3c80885fa829 100644
--- a/include/linux/bcma/bcma_driver_chipcommon.h
+++ b/include/linux/bcma/bcma_driver_chipcommon.h
@@ -24,7 +24,7 @@
24#define BCMA_CC_FLASHT_NONE 0x00000000 /* No flash */ 24#define BCMA_CC_FLASHT_NONE 0x00000000 /* No flash */
25#define BCMA_CC_FLASHT_STSER 0x00000100 /* ST serial flash */ 25#define BCMA_CC_FLASHT_STSER 0x00000100 /* ST serial flash */
26#define BCMA_CC_FLASHT_ATSER 0x00000200 /* Atmel serial flash */ 26#define BCMA_CC_FLASHT_ATSER 0x00000200 /* Atmel serial flash */
27#define BCMA_CC_FLASHT_NFLASH 0x00000200 27#define BCMA_CC_FLASHT_NFLASH 0x00000200 /* NAND flash */
28#define BCMA_CC_FLASHT_PARA 0x00000700 /* Parallel flash */ 28#define BCMA_CC_FLASHT_PARA 0x00000700 /* Parallel flash */
29#define BCMA_CC_CAP_PLLT 0x00038000 /* PLL Type */ 29#define BCMA_CC_CAP_PLLT 0x00038000 /* PLL Type */
30#define BCMA_PLLTYPE_NONE 0x00000000 30#define BCMA_PLLTYPE_NONE 0x00000000
@@ -45,6 +45,7 @@
45#define BCMA_CC_CAP_PMU 0x10000000 /* PMU available (rev >= 20) */ 45#define BCMA_CC_CAP_PMU 0x10000000 /* PMU available (rev >= 20) */
46#define BCMA_CC_CAP_ECI 0x20000000 /* ECI available (rev >= 20) */ 46#define BCMA_CC_CAP_ECI 0x20000000 /* ECI available (rev >= 20) */
47#define BCMA_CC_CAP_SPROM 0x40000000 /* SPROM present */ 47#define BCMA_CC_CAP_SPROM 0x40000000 /* SPROM present */
48#define BCMA_CC_CAP_NFLASH 0x80000000 /* NAND flash present (rev >= 35 or BCM4706?) */
48#define BCMA_CC_CORECTL 0x0008 49#define BCMA_CC_CORECTL 0x0008
49#define BCMA_CC_CORECTL_UARTCLK0 0x00000001 /* Drive UART with internal clock */ 50#define BCMA_CC_CORECTL_UARTCLK0 0x00000001 /* Drive UART with internal clock */
50#define BCMA_CC_CORECTL_SE 0x00000002 /* sync clk out enable (corerev >= 3) */ 51#define BCMA_CC_CORECTL_SE 0x00000002 /* sync clk out enable (corerev >= 3) */
@@ -88,6 +89,11 @@
88#define BCMA_CC_CHIPST_4313_OTP_PRESENT 2 89#define BCMA_CC_CHIPST_4313_OTP_PRESENT 2
89#define BCMA_CC_CHIPST_4331_SPROM_PRESENT 2 90#define BCMA_CC_CHIPST_4331_SPROM_PRESENT 2
90#define BCMA_CC_CHIPST_4331_OTP_PRESENT 4 91#define BCMA_CC_CHIPST_4331_OTP_PRESENT 4
92#define BCMA_CC_CHIPST_4706_PKG_OPTION BIT(0) /* 0: full-featured package 1: low-cost package */
93#define BCMA_CC_CHIPST_4706_SFLASH_PRESENT BIT(1) /* 0: parallel, 1: serial flash is present */
94#define BCMA_CC_CHIPST_4706_SFLASH_TYPE BIT(2) /* 0: 8b-p/ST-s flash, 1: 16b-p/Atmal-s flash */
95#define BCMA_CC_CHIPST_4706_MIPS_BENDIAN BIT(3) /* 0: little, 1: big endian */
96#define BCMA_CC_CHIPST_4706_PCIE1_DISABLE BIT(5) /* PCIE1 enable strap pin */
91#define BCMA_CC_JCMD 0x0030 /* Rev >= 10 only */ 97#define BCMA_CC_JCMD 0x0030 /* Rev >= 10 only */
92#define BCMA_CC_JCMD_START 0x80000000 98#define BCMA_CC_JCMD_START 0x80000000
93#define BCMA_CC_JCMD_BUSY 0x80000000 99#define BCMA_CC_JCMD_BUSY 0x80000000
@@ -117,10 +123,58 @@
117#define BCMA_CC_JCTL_EXT_EN 2 /* Enable external targets */ 123#define BCMA_CC_JCTL_EXT_EN 2 /* Enable external targets */
118#define BCMA_CC_JCTL_EN 1 /* Enable Jtag master */ 124#define BCMA_CC_JCTL_EN 1 /* Enable Jtag master */
119#define BCMA_CC_FLASHCTL 0x0040 125#define BCMA_CC_FLASHCTL 0x0040
126/* Start/busy bit in flashcontrol */
127#define BCMA_CC_FLASHCTL_OPCODE 0x000000ff
128#define BCMA_CC_FLASHCTL_ACTION 0x00000700
129#define BCMA_CC_FLASHCTL_CS_ACTIVE 0x00001000 /* Chip Select Active, rev >= 20 */
120#define BCMA_CC_FLASHCTL_START 0x80000000 130#define BCMA_CC_FLASHCTL_START 0x80000000
121#define BCMA_CC_FLASHCTL_BUSY BCMA_CC_FLASHCTL_START 131#define BCMA_CC_FLASHCTL_BUSY BCMA_CC_FLASHCTL_START
132/* Flashcontrol action + opcodes for ST flashes */
133#define BCMA_CC_FLASHCTL_ST_WREN 0x0006 /* Write Enable */
134#define BCMA_CC_FLASHCTL_ST_WRDIS 0x0004 /* Write Disable */
135#define BCMA_CC_FLASHCTL_ST_RDSR 0x0105 /* Read Status Register */
136#define BCMA_CC_FLASHCTL_ST_WRSR 0x0101 /* Write Status Register */
137#define BCMA_CC_FLASHCTL_ST_READ 0x0303 /* Read Data Bytes */
138#define BCMA_CC_FLASHCTL_ST_PP 0x0302 /* Page Program */
139#define BCMA_CC_FLASHCTL_ST_SE 0x02d8 /* Sector Erase */
140#define BCMA_CC_FLASHCTL_ST_BE 0x00c7 /* Bulk Erase */
141#define BCMA_CC_FLASHCTL_ST_DP 0x00b9 /* Deep Power-down */
142#define BCMA_CC_FLASHCTL_ST_RES 0x03ab /* Read Electronic Signature */
143#define BCMA_CC_FLASHCTL_ST_CSA 0x1000 /* Keep chip select asserted */
144#define BCMA_CC_FLASHCTL_ST_SSE 0x0220 /* Sub-sector Erase */
145/* Flashcontrol action + opcodes for Atmel flashes */
146#define BCMA_CC_FLASHCTL_AT_READ 0x07e8
147#define BCMA_CC_FLASHCTL_AT_PAGE_READ 0x07d2
148#define BCMA_CC_FLASHCTL_AT_STATUS 0x01d7
149#define BCMA_CC_FLASHCTL_AT_BUF1_WRITE 0x0384
150#define BCMA_CC_FLASHCTL_AT_BUF2_WRITE 0x0387
151#define BCMA_CC_FLASHCTL_AT_BUF1_ERASE_PROGRAM 0x0283
152#define BCMA_CC_FLASHCTL_AT_BUF2_ERASE_PROGRAM 0x0286
153#define BCMA_CC_FLASHCTL_AT_BUF1_PROGRAM 0x0288
154#define BCMA_CC_FLASHCTL_AT_BUF2_PROGRAM 0x0289
155#define BCMA_CC_FLASHCTL_AT_PAGE_ERASE 0x0281
156#define BCMA_CC_FLASHCTL_AT_BLOCK_ERASE 0x0250
157#define BCMA_CC_FLASHCTL_AT_BUF1_WRITE_ERASE_PROGRAM 0x0382
158#define BCMA_CC_FLASHCTL_AT_BUF2_WRITE_ERASE_PROGRAM 0x0385
159#define BCMA_CC_FLASHCTL_AT_BUF1_LOAD 0x0253
160#define BCMA_CC_FLASHCTL_AT_BUF2_LOAD 0x0255
161#define BCMA_CC_FLASHCTL_AT_BUF1_COMPARE 0x0260
162#define BCMA_CC_FLASHCTL_AT_BUF2_COMPARE 0x0261
163#define BCMA_CC_FLASHCTL_AT_BUF1_REPROGRAM 0x0258
164#define BCMA_CC_FLASHCTL_AT_BUF2_REPROGRAM 0x0259
122#define BCMA_CC_FLASHADDR 0x0044 165#define BCMA_CC_FLASHADDR 0x0044
123#define BCMA_CC_FLASHDATA 0x0048 166#define BCMA_CC_FLASHDATA 0x0048
167/* Status register bits for ST flashes */
168#define BCMA_CC_FLASHDATA_ST_WIP 0x01 /* Write In Progress */
169#define BCMA_CC_FLASHDATA_ST_WEL 0x02 /* Write Enable Latch */
170#define BCMA_CC_FLASHDATA_ST_BP_MASK 0x1c /* Block Protect */
171#define BCMA_CC_FLASHDATA_ST_BP_SHIFT 2
172#define BCMA_CC_FLASHDATA_ST_SRWD 0x80 /* Status Register Write Disable */
173/* Status register bits for Atmel flashes */
174#define BCMA_CC_FLASHDATA_AT_READY 0x80
175#define BCMA_CC_FLASHDATA_AT_MISMATCH 0x40
176#define BCMA_CC_FLASHDATA_AT_ID_MASK 0x38
177#define BCMA_CC_FLASHDATA_AT_ID_SHIFT 3
124#define BCMA_CC_BCAST_ADDR 0x0050 178#define BCMA_CC_BCAST_ADDR 0x0050
125#define BCMA_CC_BCAST_DATA 0x0054 179#define BCMA_CC_BCAST_DATA 0x0054
126#define BCMA_CC_GPIOPULLUP 0x0058 /* Rev >= 20 only */ 180#define BCMA_CC_GPIOPULLUP 0x0058 /* Rev >= 20 only */
@@ -280,6 +334,15 @@
280 334
281/* 4706 PMU */ 335/* 4706 PMU */
282#define BCMA_CC_PMU4706_MAINPLL_PLL0 0 336#define BCMA_CC_PMU4706_MAINPLL_PLL0 0
337#define BCMA_CC_PMU6_4706_PROCPLL_OFF 4 /* The CPU PLL */
338#define BCMA_CC_PMU6_4706_PROC_P2DIV_MASK 0x000f0000
339#define BCMA_CC_PMU6_4706_PROC_P2DIV_SHIFT 16
340#define BCMA_CC_PMU6_4706_PROC_P1DIV_MASK 0x0000f000
341#define BCMA_CC_PMU6_4706_PROC_P1DIV_SHIFT 12
342#define BCMA_CC_PMU6_4706_PROC_NDIV_INT_MASK 0x00000ff8
343#define BCMA_CC_PMU6_4706_PROC_NDIV_INT_SHIFT 3
344#define BCMA_CC_PMU6_4706_PROC_NDIV_MODE_MASK 0x00000007
345#define BCMA_CC_PMU6_4706_PROC_NDIV_MODE_SHIFT 0
283 346
284/* ALP clock on pre-PMU chips */ 347/* ALP clock on pre-PMU chips */
285#define BCMA_CC_PMU_ALP_CLOCK 20000000 348#define BCMA_CC_PMU_ALP_CLOCK 20000000
@@ -308,6 +371,19 @@
308#define BCMA_CC_PPL_PCHI_OFF 5 371#define BCMA_CC_PPL_PCHI_OFF 5
309#define BCMA_CC_PPL_PCHI_MASK 0x0000003f 372#define BCMA_CC_PPL_PCHI_MASK 0x0000003f
310 373
374#define BCMA_CC_PMU_PLL_CTL0 0
375#define BCMA_CC_PMU_PLL_CTL1 1
376#define BCMA_CC_PMU_PLL_CTL2 2
377#define BCMA_CC_PMU_PLL_CTL3 3
378#define BCMA_CC_PMU_PLL_CTL4 4
379#define BCMA_CC_PMU_PLL_CTL5 5
380
381#define BCMA_CC_PMU1_PLL0_PC0_P1DIV_MASK 0x00f00000
382#define BCMA_CC_PMU1_PLL0_PC0_P1DIV_SHIFT 20
383
384#define BCMA_CC_PMU1_PLL0_PC2_NDIV_INT_MASK 0x1ff00000
385#define BCMA_CC_PMU1_PLL0_PC2_NDIV_INT_SHIFT 20
386
311/* BCM4331 ChipControl numbers. */ 387/* BCM4331 ChipControl numbers. */
312#define BCMA_CHIPCTL_4331_BT_COEXIST BIT(0) /* 0 disable */ 388#define BCMA_CHIPCTL_4331_BT_COEXIST BIT(0) /* 0 disable */
313#define BCMA_CHIPCTL_4331_SECI BIT(1) /* 0 SECI is disabled (JATG functional) */ 389#define BCMA_CHIPCTL_4331_SECI BIT(1) /* 0 SECI is disabled (JATG functional) */
@@ -321,9 +397,18 @@
321#define BCMA_CHIPCTL_4331_OVR_PIPEAUXPWRDOWN BIT(9) /* override core control on pipe_AuxPowerDown */ 397#define BCMA_CHIPCTL_4331_OVR_PIPEAUXPWRDOWN BIT(9) /* override core control on pipe_AuxPowerDown */
322#define BCMA_CHIPCTL_4331_PCIE_AUXCLKEN BIT(10) /* pcie_auxclkenable */ 398#define BCMA_CHIPCTL_4331_PCIE_AUXCLKEN BIT(10) /* pcie_auxclkenable */
323#define BCMA_CHIPCTL_4331_PCIE_PIPE_PLLDOWN BIT(11) /* pcie_pipe_pllpowerdown */ 399#define BCMA_CHIPCTL_4331_PCIE_PIPE_PLLDOWN BIT(11) /* pcie_pipe_pllpowerdown */
400#define BCMA_CHIPCTL_4331_EXTPA_EN2 BIT(12) /* 0 ext pa disable, 1 ext pa enabled */
324#define BCMA_CHIPCTL_4331_BT_SHD0_ON_GPIO4 BIT(16) /* enable bt_shd0 at gpio4 */ 401#define BCMA_CHIPCTL_4331_BT_SHD0_ON_GPIO4 BIT(16) /* enable bt_shd0 at gpio4 */
325#define BCMA_CHIPCTL_4331_BT_SHD1_ON_GPIO5 BIT(17) /* enable bt_shd1 at gpio5 */ 402#define BCMA_CHIPCTL_4331_BT_SHD1_ON_GPIO5 BIT(17) /* enable bt_shd1 at gpio5 */
326 403
404/* 43224 chip-specific ChipControl register bits */
405#define BCMA_CCTRL_43224_GPIO_TOGGLE 0x8000 /* gpio[3:0] pins as btcoex or s/w gpio */
406#define BCMA_CCTRL_43224A0_12MA_LED_DRIVE 0x00F000F0 /* 12 mA drive strength */
407#define BCMA_CCTRL_43224B0_12MA_LED_DRIVE 0xF0 /* 12 mA drive strength for later 43224s */
408
409/* 4313 Chip specific ChipControl register bits */
410#define BCMA_CCTRL_4313_12MA_LED_DRIVE 0x00000007 /* 12 mA drive strengh for later 4313 */
411
327/* Data for the PMU, if available. 412/* Data for the PMU, if available.
328 * Check availability with ((struct bcma_chipcommon)->capabilities & BCMA_CC_CAP_PMU) 413 * Check availability with ((struct bcma_chipcommon)->capabilities & BCMA_CC_CAP_PMU)
329 */ 414 */
@@ -411,5 +496,6 @@ extern void bcma_chipco_chipctl_maskset(struct bcma_drv_cc *cc,
411 u32 offset, u32 mask, u32 set); 496 u32 offset, u32 mask, u32 set);
412extern void bcma_chipco_regctl_maskset(struct bcma_drv_cc *cc, 497extern void bcma_chipco_regctl_maskset(struct bcma_drv_cc *cc,
413 u32 offset, u32 mask, u32 set); 498 u32 offset, u32 mask, u32 set);
499extern void bcma_pmu_spuravoid_pllupdate(struct bcma_drv_cc *cc, int spuravoid);
414 500
415#endif /* LINUX_BCMA_DRIVER_CC_H_ */ 501#endif /* LINUX_BCMA_DRIVER_CC_H_ */
diff --git a/include/linux/bcma/bcma_driver_gmac_cmn.h b/include/linux/bcma/bcma_driver_gmac_cmn.h
new file mode 100644
index 000000000000..def894b83b0d
--- /dev/null
+++ b/include/linux/bcma/bcma_driver_gmac_cmn.h
@@ -0,0 +1,100 @@
1#ifndef LINUX_BCMA_DRIVER_GMAC_CMN_H_
2#define LINUX_BCMA_DRIVER_GMAC_CMN_H_
3
4#include <linux/types.h>
5
6#define BCMA_GMAC_CMN_STAG0 0x000
7#define BCMA_GMAC_CMN_STAG1 0x004
8#define BCMA_GMAC_CMN_STAG2 0x008
9#define BCMA_GMAC_CMN_STAG3 0x00C
10#define BCMA_GMAC_CMN_PARSER_CTL 0x020
11#define BCMA_GMAC_CMN_MIB_MAX_LEN 0x024
12#define BCMA_GMAC_CMN_PHY_ACCESS 0x100
13#define BCMA_GMAC_CMN_PA_DATA_MASK 0x0000ffff
14#define BCMA_GMAC_CMN_PA_ADDR_MASK 0x001f0000
15#define BCMA_GMAC_CMN_PA_ADDR_SHIFT 16
16#define BCMA_GMAC_CMN_PA_REG_MASK 0x1f000000
17#define BCMA_GMAC_CMN_PA_REG_SHIFT 24
18#define BCMA_GMAC_CMN_PA_WRITE 0x20000000
19#define BCMA_GMAC_CMN_PA_START 0x40000000
20#define BCMA_GMAC_CMN_PHY_CTL 0x104
21#define BCMA_GMAC_CMN_PC_EPA_MASK 0x0000001f
22#define BCMA_GMAC_CMN_PC_MCT_MASK 0x007f0000
23#define BCMA_GMAC_CMN_PC_MCT_SHIFT 16
24#define BCMA_GMAC_CMN_PC_MTE 0x00800000
25#define BCMA_GMAC_CMN_GMAC0_RGMII_CTL 0x110
26#define BCMA_GMAC_CMN_CFP_ACCESS 0x200
27#define BCMA_GMAC_CMN_CFP_TCAM_DATA0 0x210
28#define BCMA_GMAC_CMN_CFP_TCAM_DATA1 0x214
29#define BCMA_GMAC_CMN_CFP_TCAM_DATA2 0x218
30#define BCMA_GMAC_CMN_CFP_TCAM_DATA3 0x21C
31#define BCMA_GMAC_CMN_CFP_TCAM_DATA4 0x220
32#define BCMA_GMAC_CMN_CFP_TCAM_DATA5 0x224
33#define BCMA_GMAC_CMN_CFP_TCAM_DATA6 0x228
34#define BCMA_GMAC_CMN_CFP_TCAM_DATA7 0x22C
35#define BCMA_GMAC_CMN_CFP_TCAM_MASK0 0x230
36#define BCMA_GMAC_CMN_CFP_TCAM_MASK1 0x234
37#define BCMA_GMAC_CMN_CFP_TCAM_MASK2 0x238
38#define BCMA_GMAC_CMN_CFP_TCAM_MASK3 0x23C
39#define BCMA_GMAC_CMN_CFP_TCAM_MASK4 0x240
40#define BCMA_GMAC_CMN_CFP_TCAM_MASK5 0x244
41#define BCMA_GMAC_CMN_CFP_TCAM_MASK6 0x248
42#define BCMA_GMAC_CMN_CFP_TCAM_MASK7 0x24C
43#define BCMA_GMAC_CMN_CFP_ACTION_DATA 0x250
44#define BCMA_GMAC_CMN_TCAM_BIST_CTL 0x2A0
45#define BCMA_GMAC_CMN_TCAM_BIST_STATUS 0x2A4
46#define BCMA_GMAC_CMN_TCAM_CMP_STATUS 0x2A8
47#define BCMA_GMAC_CMN_TCAM_DISABLE 0x2AC
48#define BCMA_GMAC_CMN_TCAM_TEST_CTL 0x2F0
49#define BCMA_GMAC_CMN_UDF_0_A3_A0 0x300
50#define BCMA_GMAC_CMN_UDF_0_A7_A4 0x304
51#define BCMA_GMAC_CMN_UDF_0_A8 0x308
52#define BCMA_GMAC_CMN_UDF_1_A3_A0 0x310
53#define BCMA_GMAC_CMN_UDF_1_A7_A4 0x314
54#define BCMA_GMAC_CMN_UDF_1_A8 0x318
55#define BCMA_GMAC_CMN_UDF_2_A3_A0 0x320
56#define BCMA_GMAC_CMN_UDF_2_A7_A4 0x324
57#define BCMA_GMAC_CMN_UDF_2_A8 0x328
58#define BCMA_GMAC_CMN_UDF_0_B3_B0 0x330
59#define BCMA_GMAC_CMN_UDF_0_B7_B4 0x334
60#define BCMA_GMAC_CMN_UDF_0_B8 0x338
61#define BCMA_GMAC_CMN_UDF_1_B3_B0 0x340
62#define BCMA_GMAC_CMN_UDF_1_B7_B4 0x344
63#define BCMA_GMAC_CMN_UDF_1_B8 0x348
64#define BCMA_GMAC_CMN_UDF_2_B3_B0 0x350
65#define BCMA_GMAC_CMN_UDF_2_B7_B4 0x354
66#define BCMA_GMAC_CMN_UDF_2_B8 0x358
67#define BCMA_GMAC_CMN_UDF_0_C3_C0 0x360
68#define BCMA_GMAC_CMN_UDF_0_C7_C4 0x364
69#define BCMA_GMAC_CMN_UDF_0_C8 0x368
70#define BCMA_GMAC_CMN_UDF_1_C3_C0 0x370
71#define BCMA_GMAC_CMN_UDF_1_C7_C4 0x374
72#define BCMA_GMAC_CMN_UDF_1_C8 0x378
73#define BCMA_GMAC_CMN_UDF_2_C3_C0 0x380
74#define BCMA_GMAC_CMN_UDF_2_C7_C4 0x384
75#define BCMA_GMAC_CMN_UDF_2_C8 0x388
76#define BCMA_GMAC_CMN_UDF_0_D3_D0 0x390
77#define BCMA_GMAC_CMN_UDF_0_D7_D4 0x394
78#define BCMA_GMAC_CMN_UDF_0_D11_D8 0x394
79
80struct bcma_drv_gmac_cmn {
81 struct bcma_device *core;
82
83 /* Drivers accessing BCMA_GMAC_CMN_PHY_ACCESS and
84 * BCMA_GMAC_CMN_PHY_CTL need to take that mutex first. */
85 struct mutex phy_mutex;
86};
87
88/* Register access */
89#define gmac_cmn_read16(gc, offset) bcma_read16((gc)->core, offset)
90#define gmac_cmn_read32(gc, offset) bcma_read32((gc)->core, offset)
91#define gmac_cmn_write16(gc, offset, val) bcma_write16((gc)->core, offset, val)
92#define gmac_cmn_write32(gc, offset, val) bcma_write32((gc)->core, offset, val)
93
94#ifdef CONFIG_BCMA_DRIVER_GMAC_CMN
95extern void __devinit bcma_core_gmac_cmn_init(struct bcma_drv_gmac_cmn *gc);
96#else
97static inline void bcma_core_gmac_cmn_init(struct bcma_drv_gmac_cmn *gc) { }
98#endif
99
100#endif /* LINUX_BCMA_DRIVER_GMAC_CMN_H_ */
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index ba43f408baa3..07954b05b86c 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -827,7 +827,6 @@ extern bool __blk_end_request_err(struct request *rq, int error);
827extern void blk_complete_request(struct request *); 827extern void blk_complete_request(struct request *);
828extern void __blk_complete_request(struct request *); 828extern void __blk_complete_request(struct request *);
829extern void blk_abort_request(struct request *); 829extern void blk_abort_request(struct request *);
830extern void blk_abort_queue(struct request_queue *);
831extern void blk_unprep_request(struct request *); 830extern void blk_unprep_request(struct request *);
832 831
833/* 832/*
diff --git a/include/linux/bootmem.h b/include/linux/bootmem.h
index 324fe08ea3b1..6d6795d46a75 100644
--- a/include/linux/bootmem.h
+++ b/include/linux/bootmem.h
@@ -91,6 +91,11 @@ extern void *__alloc_bootmem_node_nopanic(pg_data_t *pgdat,
91 unsigned long size, 91 unsigned long size,
92 unsigned long align, 92 unsigned long align,
93 unsigned long goal); 93 unsigned long goal);
94void *___alloc_bootmem_node_nopanic(pg_data_t *pgdat,
95 unsigned long size,
96 unsigned long align,
97 unsigned long goal,
98 unsigned long limit);
94extern void *__alloc_bootmem_low(unsigned long size, 99extern void *__alloc_bootmem_low(unsigned long size,
95 unsigned long align, 100 unsigned long align,
96 unsigned long goal); 101 unsigned long goal);
diff --git a/include/linux/can.h b/include/linux/can.h
index 9a19bcb3eeaf..018055efc034 100644
--- a/include/linux/can.h
+++ b/include/linux/can.h
@@ -21,7 +21,7 @@
21/* special address description flags for the CAN_ID */ 21/* special address description flags for the CAN_ID */
22#define CAN_EFF_FLAG 0x80000000U /* EFF/SFF is set in the MSB */ 22#define CAN_EFF_FLAG 0x80000000U /* EFF/SFF is set in the MSB */
23#define CAN_RTR_FLAG 0x40000000U /* remote transmission request */ 23#define CAN_RTR_FLAG 0x40000000U /* remote transmission request */
24#define CAN_ERR_FLAG 0x20000000U /* error frame */ 24#define CAN_ERR_FLAG 0x20000000U /* error message frame */
25 25
26/* valid bits in CAN ID for frame formats */ 26/* valid bits in CAN ID for frame formats */
27#define CAN_SFF_MASK 0x000007FFU /* standard frame format (SFF) */ 27#define CAN_SFF_MASK 0x000007FFU /* standard frame format (SFF) */
@@ -32,32 +32,84 @@
32 * Controller Area Network Identifier structure 32 * Controller Area Network Identifier structure
33 * 33 *
34 * bit 0-28 : CAN identifier (11/29 bit) 34 * bit 0-28 : CAN identifier (11/29 bit)
35 * bit 29 : error frame flag (0 = data frame, 1 = error frame) 35 * bit 29 : error message frame flag (0 = data frame, 1 = error message)
36 * bit 30 : remote transmission request flag (1 = rtr frame) 36 * bit 30 : remote transmission request flag (1 = rtr frame)
37 * bit 31 : frame format flag (0 = standard 11 bit, 1 = extended 29 bit) 37 * bit 31 : frame format flag (0 = standard 11 bit, 1 = extended 29 bit)
38 */ 38 */
39typedef __u32 canid_t; 39typedef __u32 canid_t;
40 40
41#define CAN_SFF_ID_BITS 11
42#define CAN_EFF_ID_BITS 29
43
41/* 44/*
42 * Controller Area Network Error Frame Mask structure 45 * Controller Area Network Error Message Frame Mask structure
43 * 46 *
44 * bit 0-28 : error class mask (see include/linux/can/error.h) 47 * bit 0-28 : error class mask (see include/linux/can/error.h)
45 * bit 29-31 : set to zero 48 * bit 29-31 : set to zero
46 */ 49 */
47typedef __u32 can_err_mask_t; 50typedef __u32 can_err_mask_t;
48 51
52/* CAN payload length and DLC definitions according to ISO 11898-1 */
53#define CAN_MAX_DLC 8
54#define CAN_MAX_DLEN 8
55
56/* CAN FD payload length and DLC definitions according to ISO 11898-7 */
57#define CANFD_MAX_DLC 15
58#define CANFD_MAX_DLEN 64
59
49/** 60/**
50 * struct can_frame - basic CAN frame structure 61 * struct can_frame - basic CAN frame structure
51 * @can_id: the CAN ID of the frame and CAN_*_FLAG flags, see above. 62 * @can_id: CAN ID of the frame and CAN_*_FLAG flags, see canid_t definition
52 * @can_dlc: the data length field of the CAN frame 63 * @can_dlc: frame payload length in byte (0 .. 8) aka data length code
53 * @data: the CAN frame payload. 64 * N.B. the DLC field from ISO 11898-1 Chapter 8.4.2.3 has a 1:1
65 * mapping of the 'data length code' to the real payload length
66 * @data: CAN frame payload (up to 8 byte)
54 */ 67 */
55struct can_frame { 68struct can_frame {
56 canid_t can_id; /* 32 bit CAN_ID + EFF/RTR/ERR flags */ 69 canid_t can_id; /* 32 bit CAN_ID + EFF/RTR/ERR flags */
57 __u8 can_dlc; /* data length code: 0 .. 8 */ 70 __u8 can_dlc; /* frame payload length in byte (0 .. CAN_MAX_DLEN) */
58 __u8 data[8] __attribute__((aligned(8))); 71 __u8 data[CAN_MAX_DLEN] __attribute__((aligned(8)));
72};
73
74/*
75 * defined bits for canfd_frame.flags
76 *
77 * As the default for CAN FD should be to support the high data rate in the
78 * payload section of the frame (HDR) and to support up to 64 byte in the
79 * data section (EDL) the bits are only set in the non-default case.
80 * Btw. as long as there's no real implementation for CAN FD network driver
81 * these bits are only preliminary.
82 *
83 * RX: NOHDR/NOEDL - info about received CAN FD frame
84 * ESI - bit from originating CAN controller
85 * TX: NOHDR/NOEDL - control per-frame settings if supported by CAN controller
86 * ESI - bit is set by local CAN controller
87 */
88#define CANFD_NOHDR 0x01 /* frame without high data rate */
89#define CANFD_NOEDL 0x02 /* frame without extended data length */
90#define CANFD_ESI 0x04 /* error state indicator */
91
92/**
93 * struct canfd_frame - CAN flexible data rate frame structure
94 * @can_id: CAN ID of the frame and CAN_*_FLAG flags, see canid_t definition
95 * @len: frame payload length in byte (0 .. CANFD_MAX_DLEN)
96 * @flags: additional flags for CAN FD
97 * @__res0: reserved / padding
98 * @__res1: reserved / padding
99 * @data: CAN FD frame payload (up to CANFD_MAX_DLEN byte)
100 */
101struct canfd_frame {
102 canid_t can_id; /* 32 bit CAN_ID + EFF/RTR/ERR flags */
103 __u8 len; /* frame payload length in byte */
104 __u8 flags; /* additional flags for CAN FD */
105 __u8 __res0; /* reserved / padding */
106 __u8 __res1; /* reserved / padding */
107 __u8 data[CANFD_MAX_DLEN] __attribute__((aligned(8)));
59}; 108};
60 109
110#define CAN_MTU (sizeof(struct can_frame))
111#define CANFD_MTU (sizeof(struct canfd_frame))
112
61/* particular protocols of the protocol family PF_CAN */ 113/* particular protocols of the protocol family PF_CAN */
62#define CAN_RAW 1 /* RAW sockets */ 114#define CAN_RAW 1 /* RAW sockets */
63#define CAN_BCM 2 /* Broadcast Manager */ 115#define CAN_BCM 2 /* Broadcast Manager */
@@ -97,7 +149,7 @@ struct sockaddr_can {
97 * <received_can_id> & mask == can_id & mask 149 * <received_can_id> & mask == can_id & mask
98 * 150 *
99 * The filter can be inverted (CAN_INV_FILTER bit set in can_id) or it can 151 * The filter can be inverted (CAN_INV_FILTER bit set in can_id) or it can
100 * filter for error frames (CAN_ERR_FLAG bit set in mask). 152 * filter for error message frames (CAN_ERR_FLAG bit set in mask).
101 */ 153 */
102struct can_filter { 154struct can_filter {
103 canid_t can_id; 155 canid_t can_id;
diff --git a/include/linux/can/core.h b/include/linux/can/core.h
index 0ccc1cd28b95..78c6c52073ad 100644
--- a/include/linux/can/core.h
+++ b/include/linux/can/core.h
@@ -17,10 +17,10 @@
17#include <linux/skbuff.h> 17#include <linux/skbuff.h>
18#include <linux/netdevice.h> 18#include <linux/netdevice.h>
19 19
20#define CAN_VERSION "20090105" 20#define CAN_VERSION "20120528"
21 21
22/* increment this number each time you change some user-space interface */ 22/* increment this number each time you change some user-space interface */
23#define CAN_ABI_VERSION "8" 23#define CAN_ABI_VERSION "9"
24 24
25#define CAN_VERSION_STRING "rev " CAN_VERSION " abi " CAN_ABI_VERSION 25#define CAN_VERSION_STRING "rev " CAN_VERSION " abi " CAN_ABI_VERSION
26 26
diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h
index 5d2efe7e3f1b..2b2fc345afca 100644
--- a/include/linux/can/dev.h
+++ b/include/linux/can/dev.h
@@ -33,7 +33,7 @@ struct can_priv {
33 struct can_device_stats can_stats; 33 struct can_device_stats can_stats;
34 34
35 struct can_bittiming bittiming; 35 struct can_bittiming bittiming;
36 struct can_bittiming_const *bittiming_const; 36 const struct can_bittiming_const *bittiming_const;
37 struct can_clock clock; 37 struct can_clock clock;
38 38
39 enum can_state state; 39 enum can_state state;
@@ -61,23 +61,40 @@ struct can_priv {
61 * To be used in the CAN netdriver receive path to ensure conformance with 61 * To be used in the CAN netdriver receive path to ensure conformance with
62 * ISO 11898-1 Chapter 8.4.2.3 (DLC field) 62 * ISO 11898-1 Chapter 8.4.2.3 (DLC field)
63 */ 63 */
64#define get_can_dlc(i) (min_t(__u8, (i), 8)) 64#define get_can_dlc(i) (min_t(__u8, (i), CAN_MAX_DLC))
65#define get_canfd_dlc(i) (min_t(__u8, (i), CANFD_MAX_DLC))
65 66
66/* Drop a given socketbuffer if it does not contain a valid CAN frame. */ 67/* Drop a given socketbuffer if it does not contain a valid CAN frame. */
67static inline int can_dropped_invalid_skb(struct net_device *dev, 68static inline int can_dropped_invalid_skb(struct net_device *dev,
68 struct sk_buff *skb) 69 struct sk_buff *skb)
69{ 70{
70 const struct can_frame *cf = (struct can_frame *)skb->data; 71 const struct canfd_frame *cfd = (struct canfd_frame *)skb->data;
71 72
72 if (unlikely(skb->len != sizeof(*cf) || cf->can_dlc > 8)) { 73 if (skb->protocol == htons(ETH_P_CAN)) {
73 kfree_skb(skb); 74 if (unlikely(skb->len != CAN_MTU ||
74 dev->stats.tx_dropped++; 75 cfd->len > CAN_MAX_DLEN))
75 return 1; 76 goto inval_skb;
76 } 77 } else if (skb->protocol == htons(ETH_P_CANFD)) {
78 if (unlikely(skb->len != CANFD_MTU ||
79 cfd->len > CANFD_MAX_DLEN))
80 goto inval_skb;
81 } else
82 goto inval_skb;
77 83
78 return 0; 84 return 0;
85
86inval_skb:
87 kfree_skb(skb);
88 dev->stats.tx_dropped++;
89 return 1;
79} 90}
80 91
92/* get data length from can_dlc with sanitized can_dlc */
93u8 can_dlc2len(u8 can_dlc);
94
95/* map the sanitized data length to an appropriate data length code */
96u8 can_len2dlc(u8 len);
97
81struct net_device *alloc_candev(int sizeof_priv, unsigned int echo_skb_max); 98struct net_device *alloc_candev(int sizeof_priv, unsigned int echo_skb_max);
82void free_candev(struct net_device *dev); 99void free_candev(struct net_device *dev);
83 100
diff --git a/include/linux/can/error.h b/include/linux/can/error.h
index 63e855ea6b84..7b7148bded71 100644
--- a/include/linux/can/error.h
+++ b/include/linux/can/error.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * linux/can/error.h 2 * linux/can/error.h
3 * 3 *
4 * Definitions of the CAN error frame to be filtered and passed to the user. 4 * Definitions of the CAN error messages to be filtered and passed to the user.
5 * 5 *
6 * Author: Oliver Hartkopp <oliver.hartkopp@volkswagen.de> 6 * Author: Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
7 * Copyright (c) 2002-2007 Volkswagen Group Electronic Research 7 * Copyright (c) 2002-2007 Volkswagen Group Electronic Research
@@ -12,7 +12,7 @@
12#ifndef CAN_ERROR_H 12#ifndef CAN_ERROR_H
13#define CAN_ERROR_H 13#define CAN_ERROR_H
14 14
15#define CAN_ERR_DLC 8 /* dlc for error frames */ 15#define CAN_ERR_DLC 8 /* dlc for error message frames */
16 16
17/* error class (mask) in can_id */ 17/* error class (mask) in can_id */
18#define CAN_ERR_TX_TIMEOUT 0x00000001U /* TX timeout (by netdevice driver) */ 18#define CAN_ERR_TX_TIMEOUT 0x00000001U /* TX timeout (by netdevice driver) */
diff --git a/include/linux/can/raw.h b/include/linux/can/raw.h
index 781f3a3701be..a814062b0719 100644
--- a/include/linux/can/raw.h
+++ b/include/linux/can/raw.h
@@ -23,7 +23,8 @@ enum {
23 CAN_RAW_FILTER = 1, /* set 0 .. n can_filter(s) */ 23 CAN_RAW_FILTER = 1, /* set 0 .. n can_filter(s) */
24 CAN_RAW_ERR_FILTER, /* set filter for error frames */ 24 CAN_RAW_ERR_FILTER, /* set filter for error frames */
25 CAN_RAW_LOOPBACK, /* local loopback (default:on) */ 25 CAN_RAW_LOOPBACK, /* local loopback (default:on) */
26 CAN_RAW_RECV_OWN_MSGS /* receive my own msgs (default:off) */ 26 CAN_RAW_RECV_OWN_MSGS, /* receive my own msgs (default:off) */
27 CAN_RAW_FD_FRAMES, /* allow CAN FD frames (default:off) */
27}; 28};
28 29
29#endif 30#endif
diff --git a/include/linux/capability.h b/include/linux/capability.h
index 68d56effc328..d10b7ed595b1 100644
--- a/include/linux/capability.h
+++ b/include/linux/capability.h
@@ -360,11 +360,11 @@ struct cpu_vfs_cap_data {
360 360
361#define CAP_WAKE_ALARM 35 361#define CAP_WAKE_ALARM 35
362 362
363/* Allow preventing system suspends while epoll events are pending */ 363/* Allow preventing system suspends */
364 364
365#define CAP_EPOLLWAKEUP 36 365#define CAP_BLOCK_SUSPEND 36
366 366
367#define CAP_LAST_CAP CAP_EPOLLWAKEUP 367#define CAP_LAST_CAP CAP_BLOCK_SUSPEND
368 368
369#define cap_valid(x) ((x) >= 0 && (x) <= CAP_LAST_CAP) 369#define cap_valid(x) ((x) >= 0 && (x) <= CAP_LAST_CAP)
370 370
diff --git a/include/linux/ceph/messenger.h b/include/linux/ceph/messenger.h
index 2521a95fa6d9..44c87e731e9d 100644
--- a/include/linux/ceph/messenger.h
+++ b/include/linux/ceph/messenger.h
@@ -163,16 +163,8 @@ struct ceph_connection {
163 163
164 /* connection negotiation temps */ 164 /* connection negotiation temps */
165 char in_banner[CEPH_BANNER_MAX_LEN]; 165 char in_banner[CEPH_BANNER_MAX_LEN];
166 union { 166 struct ceph_msg_connect out_connect;
167 struct { /* outgoing connection */ 167 struct ceph_msg_connect_reply in_reply;
168 struct ceph_msg_connect out_connect;
169 struct ceph_msg_connect_reply in_reply;
170 };
171 struct { /* incoming */
172 struct ceph_msg_connect in_connect;
173 struct ceph_msg_connect_reply out_reply;
174 };
175 };
176 struct ceph_entity_addr actual_peer_addr; 168 struct ceph_entity_addr actual_peer_addr;
177 169
178 /* message out temps */ 170 /* message out temps */
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
index d3f5fba2c159..c90eaa803440 100644
--- a/include/linux/cgroup.h
+++ b/include/linux/cgroup.h
@@ -500,21 +500,8 @@ struct cgroup_subsys {
500 const char *name; 500 const char *name;
501 501
502 /* 502 /*
503 * Protects sibling/children links of cgroups in this
504 * hierarchy, plus protects which hierarchy (or none) the
505 * subsystem is a part of (i.e. root/sibling). To avoid
506 * potential deadlocks, the following operations should not be
507 * undertaken while holding any hierarchy_mutex:
508 *
509 * - allocating memory
510 * - initiating hotplug events
511 */
512 struct mutex hierarchy_mutex;
513 struct lock_class_key subsys_key;
514
515 /*
516 * Link to parent, and list entry in parent's children. 503 * Link to parent, and list entry in parent's children.
517 * Protected by this->hierarchy_mutex and cgroup_lock() 504 * Protected by cgroup_lock()
518 */ 505 */
519 struct cgroupfs_root *root; 506 struct cgroupfs_root *root;
520 struct list_head sibling; 507 struct list_head sibling;
@@ -602,7 +589,7 @@ int cgroup_attach_task_all(struct task_struct *from, struct task_struct *);
602 * the lifetime of cgroup_subsys_state is subsys's matter. 589 * the lifetime of cgroup_subsys_state is subsys's matter.
603 * 590 *
604 * Looking up and scanning function should be called under rcu_read_lock(). 591 * Looking up and scanning function should be called under rcu_read_lock().
605 * Taking cgroup_mutex()/hierarchy_mutex() is not necessary for following calls. 592 * Taking cgroup_mutex is not necessary for following calls.
606 * But the css returned by this routine can be "not populated yet" or "being 593 * But the css returned by this routine can be "not populated yet" or "being
607 * destroyed". The caller should check css and cgroup's status. 594 * destroyed". The caller should check css and cgroup's status.
608 */ 595 */
diff --git a/include/linux/clk-private.h b/include/linux/clk-private.h
index eb3f84bc5325..9c7f5807824b 100644
--- a/include/linux/clk-private.h
+++ b/include/linux/clk-private.h
@@ -64,7 +64,7 @@ struct clk {
64 .parent_names = _parent_names, \ 64 .parent_names = _parent_names, \
65 .num_parents = ARRAY_SIZE(_parent_names), \ 65 .num_parents = ARRAY_SIZE(_parent_names), \
66 .parents = _parents, \ 66 .parents = _parents, \
67 .flags = _flags, \ 67 .flags = _flags | CLK_IS_BASIC, \
68 } 68 }
69 69
70#define DEFINE_CLK_FIXED_RATE(_name, _flags, _rate, \ 70#define DEFINE_CLK_FIXED_RATE(_name, _flags, _rate, \
@@ -103,9 +103,9 @@ struct clk {
103 DEFINE_CLK(_name, clk_gate_ops, _flags, \ 103 DEFINE_CLK(_name, clk_gate_ops, _flags, \
104 _name##_parent_names, _name##_parents); 104 _name##_parent_names, _name##_parents);
105 105
106#define DEFINE_CLK_DIVIDER(_name, _parent_name, _parent_ptr, \ 106#define _DEFINE_CLK_DIVIDER(_name, _parent_name, _parent_ptr, \
107 _flags, _reg, _shift, _width, \ 107 _flags, _reg, _shift, _width, \
108 _divider_flags, _lock) \ 108 _divider_flags, _table, _lock) \
109 static struct clk _name; \ 109 static struct clk _name; \
110 static const char *_name##_parent_names[] = { \ 110 static const char *_name##_parent_names[] = { \
111 _parent_name, \ 111 _parent_name, \
@@ -121,11 +121,27 @@ struct clk {
121 .shift = _shift, \ 121 .shift = _shift, \
122 .width = _width, \ 122 .width = _width, \
123 .flags = _divider_flags, \ 123 .flags = _divider_flags, \
124 .table = _table, \
124 .lock = _lock, \ 125 .lock = _lock, \
125 }; \ 126 }; \
126 DEFINE_CLK(_name, clk_divider_ops, _flags, \ 127 DEFINE_CLK(_name, clk_divider_ops, _flags, \
127 _name##_parent_names, _name##_parents); 128 _name##_parent_names, _name##_parents);
128 129
130#define DEFINE_CLK_DIVIDER(_name, _parent_name, _parent_ptr, \
131 _flags, _reg, _shift, _width, \
132 _divider_flags, _lock) \
133 _DEFINE_CLK_DIVIDER(_name, _parent_name, _parent_ptr, \
134 _flags, _reg, _shift, _width, \
135 _divider_flags, NULL, _lock)
136
137#define DEFINE_CLK_DIVIDER_TABLE(_name, _parent_name, \
138 _parent_ptr, _flags, _reg, \
139 _shift, _width, _divider_flags, \
140 _table, _lock) \
141 _DEFINE_CLK_DIVIDER(_name, _parent_name, _parent_ptr, \
142 _flags, _reg, _shift, _width, \
143 _divider_flags, _table, _lock) \
144
129#define DEFINE_CLK_MUX(_name, _parent_names, _parents, _flags, \ 145#define DEFINE_CLK_MUX(_name, _parent_names, _parents, _flags, \
130 _reg, _shift, _width, \ 146 _reg, _shift, _width, \
131 _mux_flags, _lock) \ 147 _mux_flags, _lock) \
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h
index 4a0b483986c3..77335fac943e 100644
--- a/include/linux/clk-provider.h
+++ b/include/linux/clk-provider.h
@@ -25,6 +25,7 @@
25#define CLK_SET_RATE_PARENT BIT(2) /* propagate rate change up one level */ 25#define CLK_SET_RATE_PARENT BIT(2) /* propagate rate change up one level */
26#define CLK_IGNORE_UNUSED BIT(3) /* do not gate even if unused */ 26#define CLK_IGNORE_UNUSED BIT(3) /* do not gate even if unused */
27#define CLK_IS_ROOT BIT(4) /* root clk, has no parent */ 27#define CLK_IS_ROOT BIT(4) /* root clk, has no parent */
28#define CLK_IS_BASIC BIT(5) /* Basic clk, can't do a to_clk_foo() */
28 29
29struct clk_hw; 30struct clk_hw;
30 31
@@ -143,7 +144,7 @@ struct clk_init_data {
143 */ 144 */
144struct clk_hw { 145struct clk_hw {
145 struct clk *clk; 146 struct clk *clk;
146 struct clk_init_data *init; 147 const struct clk_init_data *init;
147}; 148};
148 149
149/* 150/*
@@ -171,6 +172,8 @@ struct clk *clk_register_fixed_rate(struct device *dev, const char *name,
171 const char *parent_name, unsigned long flags, 172 const char *parent_name, unsigned long flags,
172 unsigned long fixed_rate); 173 unsigned long fixed_rate);
173 174
175void of_fixed_clk_setup(struct device_node *np);
176
174/** 177/**
175 * struct clk_gate - gating clock 178 * struct clk_gate - gating clock
176 * 179 *
@@ -203,6 +206,11 @@ struct clk *clk_register_gate(struct device *dev, const char *name,
203 void __iomem *reg, u8 bit_idx, 206 void __iomem *reg, u8 bit_idx,
204 u8 clk_gate_flags, spinlock_t *lock); 207 u8 clk_gate_flags, spinlock_t *lock);
205 208
209struct clk_div_table {
210 unsigned int val;
211 unsigned int div;
212};
213
206/** 214/**
207 * struct clk_divider - adjustable divider clock 215 * struct clk_divider - adjustable divider clock
208 * 216 *
@@ -210,6 +218,7 @@ struct clk *clk_register_gate(struct device *dev, const char *name,
210 * @reg: register containing the divider 218 * @reg: register containing the divider
211 * @shift: shift to the divider bit field 219 * @shift: shift to the divider bit field
212 * @width: width of the divider bit field 220 * @width: width of the divider bit field
221 * @table: array of value/divider pairs, last entry should have div = 0
213 * @lock: register lock 222 * @lock: register lock
214 * 223 *
215 * Clock with an adjustable divider affecting its output frequency. Implements 224 * Clock with an adjustable divider affecting its output frequency. Implements
@@ -229,6 +238,7 @@ struct clk_divider {
229 u8 shift; 238 u8 shift;
230 u8 width; 239 u8 width;
231 u8 flags; 240 u8 flags;
241 const struct clk_div_table *table;
232 spinlock_t *lock; 242 spinlock_t *lock;
233}; 243};
234 244
@@ -240,6 +250,11 @@ struct clk *clk_register_divider(struct device *dev, const char *name,
240 const char *parent_name, unsigned long flags, 250 const char *parent_name, unsigned long flags,
241 void __iomem *reg, u8 shift, u8 width, 251 void __iomem *reg, u8 shift, u8 width,
242 u8 clk_divider_flags, spinlock_t *lock); 252 u8 clk_divider_flags, spinlock_t *lock);
253struct clk *clk_register_divider_table(struct device *dev, const char *name,
254 const char *parent_name, unsigned long flags,
255 void __iomem *reg, u8 shift, u8 width,
256 u8 clk_divider_flags, const struct clk_div_table *table,
257 spinlock_t *lock);
243 258
244/** 259/**
245 * struct clk_mux - multiplexer clock 260 * struct clk_mux - multiplexer clock
@@ -334,5 +349,19 @@ void __clk_unprepare(struct clk *clk);
334void __clk_reparent(struct clk *clk, struct clk *new_parent); 349void __clk_reparent(struct clk *clk, struct clk *new_parent);
335unsigned long __clk_round_rate(struct clk *clk, unsigned long rate); 350unsigned long __clk_round_rate(struct clk *clk, unsigned long rate);
336 351
352struct of_device_id;
353
354typedef void (*of_clk_init_cb_t)(struct device_node *);
355
356int of_clk_add_provider(struct device_node *np,
357 struct clk *(*clk_src_get)(struct of_phandle_args *args,
358 void *data),
359 void *data);
360void of_clk_del_provider(struct device_node *np);
361struct clk *of_clk_src_simple_get(struct of_phandle_args *clkspec,
362 void *data);
363const char *of_clk_get_parent_name(struct device_node *np, int index);
364void of_clk_init(const struct of_device_id *matches);
365
337#endif /* CONFIG_COMMON_CLK */ 366#endif /* CONFIG_COMMON_CLK */
338#endif /* CLK_PROVIDER_H */ 367#endif /* CLK_PROVIDER_H */
diff --git a/include/linux/clk.h b/include/linux/clk.h
index ad5c43e8ae8a..2fd6a4234531 100644
--- a/include/linux/clk.h
+++ b/include/linux/clk.h
@@ -12,6 +12,7 @@
12#ifndef __LINUX_CLK_H 12#ifndef __LINUX_CLK_H
13#define __LINUX_CLK_H 13#define __LINUX_CLK_H
14 14
15#include <linux/err.h>
15#include <linux/kernel.h> 16#include <linux/kernel.h>
16#include <linux/notifier.h> 17#include <linux/notifier.h>
17 18
@@ -86,7 +87,7 @@ int clk_notifier_unregister(struct clk *clk, struct notifier_block *nb);
86/** 87/**
87 * clk_get - lookup and obtain a reference to a clock producer. 88 * clk_get - lookup and obtain a reference to a clock producer.
88 * @dev: device for clock "consumer" 89 * @dev: device for clock "consumer"
89 * @id: clock comsumer ID 90 * @id: clock consumer ID
90 * 91 *
91 * Returns a struct clk corresponding to the clock producer, or 92 * Returns a struct clk corresponding to the clock producer, or
92 * valid IS_ERR() condition containing errno. The implementation 93 * valid IS_ERR() condition containing errno. The implementation
@@ -103,7 +104,7 @@ struct clk *clk_get(struct device *dev, const char *id);
103/** 104/**
104 * devm_clk_get - lookup and obtain a managed reference to a clock producer. 105 * devm_clk_get - lookup and obtain a managed reference to a clock producer.
105 * @dev: device for clock "consumer" 106 * @dev: device for clock "consumer"
106 * @id: clock comsumer ID 107 * @id: clock consumer ID
107 * 108 *
108 * Returns a struct clk corresponding to the clock producer, or 109 * Returns a struct clk corresponding to the clock producer, or
109 * valid IS_ERR() condition containing errno. The implementation 110 * valid IS_ERR() condition containing errno. The implementation
@@ -310,4 +311,23 @@ struct clk *clk_get_sys(const char *dev_id, const char *con_id);
310int clk_add_alias(const char *alias, const char *alias_dev_name, char *id, 311int clk_add_alias(const char *alias, const char *alias_dev_name, char *id,
311 struct device *dev); 312 struct device *dev);
312 313
314struct device_node;
315struct of_phandle_args;
316
317#if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK)
318struct clk *of_clk_get(struct device_node *np, int index);
319struct clk *of_clk_get_by_name(struct device_node *np, const char *name);
320struct clk *of_clk_get_from_provider(struct of_phandle_args *clkspec);
321#else
322static inline struct clk *of_clk_get(struct device_node *np, int index)
323{
324 return ERR_PTR(-ENOENT);
325}
326static inline struct clk *of_clk_get_by_name(struct device_node *np,
327 const char *name)
328{
329 return ERR_PTR(-ENOENT);
330}
331#endif
332
313#endif 333#endif
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
index e5834aa24b9e..6a6d7aefe12d 100644
--- a/include/linux/compiler-gcc.h
+++ b/include/linux/compiler-gcc.h
@@ -47,9 +47,9 @@
47 */ 47 */
48#if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) || \ 48#if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) || \
49 !defined(CONFIG_OPTIMIZE_INLINING) || (__GNUC__ < 4) 49 !defined(CONFIG_OPTIMIZE_INLINING) || (__GNUC__ < 4)
50# define inline inline __attribute__((always_inline)) 50# define inline inline __attribute__((always_inline)) notrace
51# define __inline__ __inline__ __attribute__((always_inline)) 51# define __inline__ __inline__ __attribute__((always_inline)) notrace
52# define __inline __inline __attribute__((always_inline)) 52# define __inline __inline __attribute__((always_inline)) notrace
53#else 53#else
54/* A lot of inline functions can cause havoc with function tracing */ 54/* A lot of inline functions can cause havoc with function tracing */
55# define inline inline notrace 55# define inline inline notrace
diff --git a/include/linux/cpu.h b/include/linux/cpu.h
index 2e9b9ebbeb78..ce7a074f2519 100644
--- a/include/linux/cpu.h
+++ b/include/linux/cpu.h
@@ -73,8 +73,9 @@ enum {
73 /* migration should happen before other stuff but after perf */ 73 /* migration should happen before other stuff but after perf */
74 CPU_PRI_PERF = 20, 74 CPU_PRI_PERF = 20,
75 CPU_PRI_MIGRATION = 10, 75 CPU_PRI_MIGRATION = 10,
76 /* prepare workqueues for other notifiers */ 76 /* bring up workqueues before normal notifiers and down after */
77 CPU_PRI_WORKQUEUE = 5, 77 CPU_PRI_WORKQUEUE_UP = 5,
78 CPU_PRI_WORKQUEUE_DOWN = -5,
78}; 79};
79 80
80#define CPU_ONLINE 0x0002 /* CPU (unsigned)v is up */ 81#define CPU_ONLINE 0x0002 /* CPU (unsigned)v is up */
diff --git a/include/linux/cpu_rmap.h b/include/linux/cpu_rmap.h
index 473771a528c0..ac3bbb5b9502 100644
--- a/include/linux/cpu_rmap.h
+++ b/include/linux/cpu_rmap.h
@@ -1,3 +1,6 @@
1#ifndef __LINUX_CPU_RMAP_H
2#define __LINUX_CPU_RMAP_H
3
1/* 4/*
2 * cpu_rmap.c: CPU affinity reverse-map support 5 * cpu_rmap.c: CPU affinity reverse-map support
3 * Copyright 2011 Solarflare Communications Inc. 6 * Copyright 2011 Solarflare Communications Inc.
@@ -71,3 +74,4 @@ extern void free_irq_cpu_rmap(struct cpu_rmap *rmap);
71extern int irq_cpu_rmap_add(struct cpu_rmap *rmap, int irq); 74extern int irq_cpu_rmap_add(struct cpu_rmap *rmap, int irq);
72 75
73#endif 76#endif
77#endif /* __LINUX_CPU_RMAP_H */
diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h
index 6c26a3da0e03..89dcd30ac8ea 100644
--- a/include/linux/cpuidle.h
+++ b/include/linux/cpuidle.h
@@ -34,6 +34,7 @@ struct cpuidle_driver;
34struct cpuidle_state_usage { 34struct cpuidle_state_usage {
35 void *driver_data; 35 void *driver_data;
36 36
37 unsigned long long disable;
37 unsigned long long usage; 38 unsigned long long usage;
38 unsigned long long time; /* in US */ 39 unsigned long long time; /* in US */
39}; 40};
@@ -46,7 +47,7 @@ struct cpuidle_state {
46 unsigned int exit_latency; /* in US */ 47 unsigned int exit_latency; /* in US */
47 int power_usage; /* in mW */ 48 int power_usage; /* in mW */
48 unsigned int target_residency; /* in US */ 49 unsigned int target_residency; /* in US */
49 unsigned int disable; 50 bool disabled; /* disabled on all CPUs */
50 51
51 int (*enter) (struct cpuidle_device *dev, 52 int (*enter) (struct cpuidle_device *dev,
52 struct cpuidle_driver *drv, 53 struct cpuidle_driver *drv,
@@ -136,13 +137,17 @@ struct cpuidle_driver {
136extern void disable_cpuidle(void); 137extern void disable_cpuidle(void);
137extern int cpuidle_idle_call(void); 138extern int cpuidle_idle_call(void);
138extern int cpuidle_register_driver(struct cpuidle_driver *drv); 139extern int cpuidle_register_driver(struct cpuidle_driver *drv);
139struct cpuidle_driver *cpuidle_get_driver(void); 140extern struct cpuidle_driver *cpuidle_get_driver(void);
141extern struct cpuidle_driver *cpuidle_driver_ref(void);
142extern void cpuidle_driver_unref(void);
140extern void cpuidle_unregister_driver(struct cpuidle_driver *drv); 143extern void cpuidle_unregister_driver(struct cpuidle_driver *drv);
141extern int cpuidle_register_device(struct cpuidle_device *dev); 144extern int cpuidle_register_device(struct cpuidle_device *dev);
142extern void cpuidle_unregister_device(struct cpuidle_device *dev); 145extern void cpuidle_unregister_device(struct cpuidle_device *dev);
143 146
144extern void cpuidle_pause_and_lock(void); 147extern void cpuidle_pause_and_lock(void);
145extern void cpuidle_resume_and_unlock(void); 148extern void cpuidle_resume_and_unlock(void);
149extern void cpuidle_pause(void);
150extern void cpuidle_resume(void);
146extern int cpuidle_enable_device(struct cpuidle_device *dev); 151extern int cpuidle_enable_device(struct cpuidle_device *dev);
147extern void cpuidle_disable_device(struct cpuidle_device *dev); 152extern void cpuidle_disable_device(struct cpuidle_device *dev);
148extern int cpuidle_wrap_enter(struct cpuidle_device *dev, 153extern int cpuidle_wrap_enter(struct cpuidle_device *dev,
@@ -157,6 +162,8 @@ static inline int cpuidle_idle_call(void) { return -ENODEV; }
157static inline int cpuidle_register_driver(struct cpuidle_driver *drv) 162static inline int cpuidle_register_driver(struct cpuidle_driver *drv)
158{return -ENODEV; } 163{return -ENODEV; }
159static inline struct cpuidle_driver *cpuidle_get_driver(void) {return NULL; } 164static inline struct cpuidle_driver *cpuidle_get_driver(void) {return NULL; }
165static inline struct cpuidle_driver *cpuidle_driver_ref(void) {return NULL; }
166static inline void cpuidle_driver_unref(void) {}
160static inline void cpuidle_unregister_driver(struct cpuidle_driver *drv) { } 167static inline void cpuidle_unregister_driver(struct cpuidle_driver *drv) { }
161static inline int cpuidle_register_device(struct cpuidle_device *dev) 168static inline int cpuidle_register_device(struct cpuidle_device *dev)
162{return -ENODEV; } 169{return -ENODEV; }
@@ -164,6 +171,8 @@ static inline void cpuidle_unregister_device(struct cpuidle_device *dev) { }
164 171
165static inline void cpuidle_pause_and_lock(void) { } 172static inline void cpuidle_pause_and_lock(void) { }
166static inline void cpuidle_resume_and_unlock(void) { } 173static inline void cpuidle_resume_and_unlock(void) { }
174static inline void cpuidle_pause(void) { }
175static inline void cpuidle_resume(void) { }
167static inline int cpuidle_enable_device(struct cpuidle_device *dev) 176static inline int cpuidle_enable_device(struct cpuidle_device *dev)
168{return -ENODEV; } 177{return -ENODEV; }
169static inline void cpuidle_disable_device(struct cpuidle_device *dev) { } 178static inline void cpuidle_disable_device(struct cpuidle_device *dev) { }
@@ -202,14 +211,7 @@ struct cpuidle_governor {
202extern int cpuidle_register_governor(struct cpuidle_governor *gov); 211extern int cpuidle_register_governor(struct cpuidle_governor *gov);
203extern void cpuidle_unregister_governor(struct cpuidle_governor *gov); 212extern void cpuidle_unregister_governor(struct cpuidle_governor *gov);
204 213
205#ifdef CONFIG_INTEL_IDLE
206extern int intel_idle_cpu_init(int cpu);
207#else 214#else
208static inline int intel_idle_cpu_init(int cpu) { return -1; }
209#endif
210
211#else
212static inline int intel_idle_cpu_init(int cpu) { return -1; }
213 215
214static inline int cpuidle_register_governor(struct cpuidle_governor *gov) 216static inline int cpuidle_register_governor(struct cpuidle_governor *gov)
215{return 0;} 217{return 0;}
diff --git a/include/linux/cpuset.h b/include/linux/cpuset.h
index 668f66baac7b..838320fc3d1d 100644
--- a/include/linux/cpuset.h
+++ b/include/linux/cpuset.h
@@ -20,7 +20,7 @@ extern int number_of_cpusets; /* How many cpusets are defined in system? */
20 20
21extern int cpuset_init(void); 21extern int cpuset_init(void);
22extern void cpuset_init_smp(void); 22extern void cpuset_init_smp(void);
23extern void cpuset_update_active_cpus(void); 23extern void cpuset_update_active_cpus(bool cpu_online);
24extern void cpuset_cpus_allowed(struct task_struct *p, struct cpumask *mask); 24extern void cpuset_cpus_allowed(struct task_struct *p, struct cpumask *mask);
25extern void cpuset_cpus_allowed_fallback(struct task_struct *p); 25extern void cpuset_cpus_allowed_fallback(struct task_struct *p);
26extern nodemask_t cpuset_mems_allowed(struct task_struct *p); 26extern nodemask_t cpuset_mems_allowed(struct task_struct *p);
@@ -124,7 +124,7 @@ static inline void set_mems_allowed(nodemask_t nodemask)
124static inline int cpuset_init(void) { return 0; } 124static inline int cpuset_init(void) { return 0; }
125static inline void cpuset_init_smp(void) {} 125static inline void cpuset_init_smp(void) {}
126 126
127static inline void cpuset_update_active_cpus(void) 127static inline void cpuset_update_active_cpus(bool cpu_online)
128{ 128{
129 partition_sched_domains(1, NULL, NULL); 129 partition_sched_domains(1, NULL, NULL);
130} 130}
diff --git a/include/linux/dcache.h b/include/linux/dcache.h
index 094789ff3e9f..caa34e50537e 100644
--- a/include/linux/dcache.h
+++ b/include/linux/dcache.h
@@ -128,7 +128,7 @@ struct dentry {
128 struct rcu_head d_rcu; 128 struct rcu_head d_rcu;
129 } d_u; 129 } d_u;
130 struct list_head d_subdirs; /* our children */ 130 struct list_head d_subdirs; /* our children */
131 struct list_head d_alias; /* inode alias list */ 131 struct hlist_node d_alias; /* inode alias list */
132}; 132};
133 133
134/* 134/*
@@ -144,7 +144,7 @@ enum dentry_d_lock_class
144}; 144};
145 145
146struct dentry_operations { 146struct dentry_operations {
147 int (*d_revalidate)(struct dentry *, struct nameidata *); 147 int (*d_revalidate)(struct dentry *, unsigned int);
148 int (*d_hash)(const struct dentry *, const struct inode *, 148 int (*d_hash)(const struct dentry *, const struct inode *,
149 struct qstr *); 149 struct qstr *);
150 int (*d_compare)(const struct dentry *, const struct inode *, 150 int (*d_compare)(const struct dentry *, const struct inode *,
diff --git a/include/linux/device.h b/include/linux/device.h
index 161d96241b1b..52a5f15a2223 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -36,6 +36,7 @@ struct subsys_private;
36struct bus_type; 36struct bus_type;
37struct device_node; 37struct device_node;
38struct iommu_ops; 38struct iommu_ops;
39struct iommu_group;
39 40
40struct bus_attribute { 41struct bus_attribute {
41 struct attribute attr; 42 struct attribute attr;
@@ -687,8 +688,14 @@ struct device {
687 const struct attribute_group **groups; /* optional groups */ 688 const struct attribute_group **groups; /* optional groups */
688 689
689 void (*release)(struct device *dev); 690 void (*release)(struct device *dev);
691 struct iommu_group *iommu_group;
690}; 692};
691 693
694static inline struct device *kobj_to_dev(struct kobject *kobj)
695{
696 return container_of(kobj, struct device, kobj);
697}
698
692/* Get the wakeup routines, which depend on struct device */ 699/* Get the wakeup routines, which depend on struct device */
693#include <linux/pm_wakeup.h> 700#include <linux/pm_wakeup.h>
694 701
@@ -865,8 +872,6 @@ extern int (*platform_notify_remove)(struct device *dev);
865extern struct device *get_device(struct device *dev); 872extern struct device *get_device(struct device *dev);
866extern void put_device(struct device *dev); 873extern void put_device(struct device *dev);
867 874
868extern void wait_for_device_probe(void);
869
870#ifdef CONFIG_DEVTMPFS 875#ifdef CONFIG_DEVTMPFS
871extern int devtmpfs_create_node(struct device *dev); 876extern int devtmpfs_create_node(struct device *dev);
872extern int devtmpfs_delete_node(struct device *dev); 877extern int devtmpfs_delete_node(struct device *dev);
diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
index 56377df39124..9c02a4508b25 100644
--- a/include/linux/dmaengine.h
+++ b/include/linux/dmaengine.h
@@ -338,6 +338,9 @@ enum dma_slave_buswidth {
338 * @device_fc: Flow Controller Settings. Only valid for slave channels. Fill 338 * @device_fc: Flow Controller Settings. Only valid for slave channels. Fill
339 * with 'true' if peripheral should be flow controller. Direction will be 339 * with 'true' if peripheral should be flow controller. Direction will be
340 * selected at Runtime. 340 * selected at Runtime.
341 * @slave_id: Slave requester id. Only valid for slave channels. The dma
342 * slave peripheral will have unique id as dma requester which need to be
343 * pass as slave config.
341 * 344 *
342 * This struct is passed in as configuration data to a DMA engine 345 * This struct is passed in as configuration data to a DMA engine
343 * in order to set up a certain channel for DMA transport at runtime. 346 * in order to set up a certain channel for DMA transport at runtime.
@@ -365,6 +368,7 @@ struct dma_slave_config {
365 u32 src_maxburst; 368 u32 src_maxburst;
366 u32 dst_maxburst; 369 u32 dst_maxburst;
367 bool device_fc; 370 bool device_fc;
371 unsigned int slave_id;
368}; 372};
369 373
370static inline const char *dma_chan_name(struct dma_chan *chan) 374static inline const char *dma_chan_name(struct dma_chan *chan)
@@ -670,6 +674,12 @@ static inline int dmaengine_resume(struct dma_chan *chan)
670 return dmaengine_device_control(chan, DMA_RESUME, 0); 674 return dmaengine_device_control(chan, DMA_RESUME, 0);
671} 675}
672 676
677static inline enum dma_status dmaengine_tx_status(struct dma_chan *chan,
678 dma_cookie_t cookie, struct dma_tx_state *state)
679{
680 return chan->device->device_tx_status(chan, cookie, state);
681}
682
673static inline dma_cookie_t dmaengine_submit(struct dma_async_tx_descriptor *desc) 683static inline dma_cookie_t dmaengine_submit(struct dma_async_tx_descriptor *desc)
674{ 684{
675 return desc->tx_submit(desc); 685 return desc->tx_submit(desc);
diff --git a/include/linux/dw_apb_timer.h b/include/linux/dw_apb_timer.h
index 07261d52a6df..1148575fd134 100644
--- a/include/linux/dw_apb_timer.h
+++ b/include/linux/dw_apb_timer.h
@@ -53,4 +53,5 @@ void dw_apb_clocksource_start(struct dw_apb_clocksource *dw_cs);
53cycle_t dw_apb_clocksource_read(struct dw_apb_clocksource *dw_cs); 53cycle_t dw_apb_clocksource_read(struct dw_apb_clocksource *dw_cs);
54void dw_apb_clocksource_unregister(struct dw_apb_clocksource *dw_cs); 54void dw_apb_clocksource_unregister(struct dw_apb_clocksource *dw_cs);
55 55
56extern struct sys_timer dw_apb_timer;
56#endif /* __DW_APB_TIMER_H__ */ 57#endif /* __DW_APB_TIMER_H__ */
diff --git a/include/linux/efi.h b/include/linux/efi.h
index ec45ccd8708a..103adc6d7e3a 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
@@ -503,8 +503,6 @@ extern u64 efi_mem_attribute (unsigned long phys_addr, unsigned long size);
503extern int __init efi_uart_console_only (void); 503extern int __init efi_uart_console_only (void);
504extern void efi_initialize_iomem_resources(struct resource *code_resource, 504extern void efi_initialize_iomem_resources(struct resource *code_resource,
505 struct resource *data_resource, struct resource *bss_resource); 505 struct resource *data_resource, struct resource *bss_resource);
506extern unsigned long efi_get_time(void);
507extern int efi_set_rtc_mmss(unsigned long nowtime);
508extern void efi_reserve_boot_services(void); 506extern void efi_reserve_boot_services(void);
509extern struct efi_memory_map memmap; 507extern struct efi_memory_map memmap;
510 508
diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h
index 3d406e0ede6d..d426336d92d9 100644
--- a/include/linux/etherdevice.h
+++ b/include/linux/etherdevice.h
@@ -124,17 +124,30 @@ static inline bool is_valid_ether_addr(const u8 *addr)
124} 124}
125 125
126/** 126/**
127 * random_ether_addr - Generate software assigned random Ethernet address 127 * eth_random_addr - Generate software assigned random Ethernet address
128 * @addr: Pointer to a six-byte array containing the Ethernet address 128 * @addr: Pointer to a six-byte array containing the Ethernet address
129 * 129 *
130 * Generate a random Ethernet address (MAC) that is not multicast 130 * Generate a random Ethernet address (MAC) that is not multicast
131 * and has the local assigned bit set. 131 * and has the local assigned bit set.
132 */ 132 */
133static inline void random_ether_addr(u8 *addr) 133static inline void eth_random_addr(u8 *addr)
134{ 134{
135 get_random_bytes (addr, ETH_ALEN); 135 get_random_bytes(addr, ETH_ALEN);
136 addr [0] &= 0xfe; /* clear multicast bit */ 136 addr[0] &= 0xfe; /* clear multicast bit */
137 addr [0] |= 0x02; /* set local assignment bit (IEEE802) */ 137 addr[0] |= 0x02; /* set local assignment bit (IEEE802) */
138}
139
140#define random_ether_addr(addr) eth_random_addr(addr)
141
142/**
143 * eth_broadcast_addr - Assign broadcast address
144 * @addr: Pointer to a six-byte array containing the Ethernet address
145 *
146 * Assign the broadcast address to the given address array.
147 */
148static inline void eth_broadcast_addr(u8 *addr)
149{
150 memset(addr, 0xff, ETH_ALEN);
138} 151}
139 152
140/** 153/**
@@ -149,7 +162,7 @@ static inline void random_ether_addr(u8 *addr)
149static inline void eth_hw_addr_random(struct net_device *dev) 162static inline void eth_hw_addr_random(struct net_device *dev)
150{ 163{
151 dev->addr_assign_type |= NET_ADDR_RANDOM; 164 dev->addr_assign_type |= NET_ADDR_RANDOM;
152 random_ether_addr(dev->dev_addr); 165 eth_random_addr(dev->dev_addr);
153} 166}
154 167
155/** 168/**
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h
index e17fa7140588..21eff418091b 100644
--- a/include/linux/ethtool.h
+++ b/include/linux/ethtool.h
@@ -137,6 +137,35 @@ struct ethtool_eeprom {
137}; 137};
138 138
139/** 139/**
140 * struct ethtool_eee - Energy Efficient Ethernet information
141 * @cmd: ETHTOOL_{G,S}EEE
142 * @supported: Mask of %SUPPORTED_* flags for the speed/duplex combinations
143 * for which there is EEE support.
144 * @advertised: Mask of %ADVERTISED_* flags for the speed/duplex combinations
145 * advertised as eee capable.
146 * @lp_advertised: Mask of %ADVERTISED_* flags for the speed/duplex
147 * combinations advertised by the link partner as eee capable.
148 * @eee_active: Result of the eee auto negotiation.
149 * @eee_enabled: EEE configured mode (enabled/disabled).
150 * @tx_lpi_enabled: Whether the interface should assert its tx lpi, given
151 * that eee was negotiated.
152 * @tx_lpi_timer: Time in microseconds the interface delays prior to asserting
153 * its tx lpi (after reaching 'idle' state). Effective only when eee
154 * was negotiated and tx_lpi_enabled was set.
155 */
156struct ethtool_eee {
157 __u32 cmd;
158 __u32 supported;
159 __u32 advertised;
160 __u32 lp_advertised;
161 __u32 eee_active;
162 __u32 eee_enabled;
163 __u32 tx_lpi_enabled;
164 __u32 tx_lpi_timer;
165 __u32 reserved[2];
166};
167
168/**
140 * struct ethtool_modinfo - plugin module eeprom information 169 * struct ethtool_modinfo - plugin module eeprom information
141 * @cmd: %ETHTOOL_GMODULEINFO 170 * @cmd: %ETHTOOL_GMODULEINFO
142 * @type: Standard the module information conforms to %ETH_MODULE_SFF_xxxx 171 * @type: Standard the module information conforms to %ETH_MODULE_SFF_xxxx
@@ -945,6 +974,8 @@ static inline u32 ethtool_rxfh_indir_default(u32 index, u32 n_rx_rings)
945 * @get_module_info: Get the size and type of the eeprom contained within 974 * @get_module_info: Get the size and type of the eeprom contained within
946 * a plug-in module. 975 * a plug-in module.
947 * @get_module_eeprom: Get the eeprom information from the plug-in module 976 * @get_module_eeprom: Get the eeprom information from the plug-in module
977 * @get_eee: Get Energy-Efficient (EEE) supported and status.
978 * @set_eee: Set EEE status (enable/disable) as well as LPI timers.
948 * 979 *
949 * All operations are optional (i.e. the function pointer may be set 980 * All operations are optional (i.e. the function pointer may be set
950 * to %NULL) and callers must take this into account. Callers must 981 * to %NULL) and callers must take this into account. Callers must
@@ -1011,6 +1042,8 @@ struct ethtool_ops {
1011 struct ethtool_modinfo *); 1042 struct ethtool_modinfo *);
1012 int (*get_module_eeprom)(struct net_device *, 1043 int (*get_module_eeprom)(struct net_device *,
1013 struct ethtool_eeprom *, u8 *); 1044 struct ethtool_eeprom *, u8 *);
1045 int (*get_eee)(struct net_device *, struct ethtool_eee *);
1046 int (*set_eee)(struct net_device *, struct ethtool_eee *);
1014 1047
1015 1048
1016}; 1049};
@@ -1089,6 +1122,8 @@ struct ethtool_ops {
1089#define ETHTOOL_GET_TS_INFO 0x00000041 /* Get time stamping and PHC info */ 1122#define ETHTOOL_GET_TS_INFO 0x00000041 /* Get time stamping and PHC info */
1090#define ETHTOOL_GMODULEINFO 0x00000042 /* Get plug-in module information */ 1123#define ETHTOOL_GMODULEINFO 0x00000042 /* Get plug-in module information */
1091#define ETHTOOL_GMODULEEEPROM 0x00000043 /* Get plug-in module eeprom */ 1124#define ETHTOOL_GMODULEEEPROM 0x00000043 /* Get plug-in module eeprom */
1125#define ETHTOOL_GEEE 0x00000044 /* Get EEE settings */
1126#define ETHTOOL_SEEE 0x00000045 /* Set EEE settings */
1092 1127
1093/* compatibility with older code */ 1128/* compatibility with older code */
1094#define SPARC_ETH_GSET ETHTOOL_GSET 1129#define SPARC_ETH_GSET ETHTOOL_GSET
@@ -1118,6 +1153,10 @@ struct ethtool_ops {
1118#define SUPPORTED_10000baseR_FEC (1 << 20) 1153#define SUPPORTED_10000baseR_FEC (1 << 20)
1119#define SUPPORTED_20000baseMLD2_Full (1 << 21) 1154#define SUPPORTED_20000baseMLD2_Full (1 << 21)
1120#define SUPPORTED_20000baseKR2_Full (1 << 22) 1155#define SUPPORTED_20000baseKR2_Full (1 << 22)
1156#define SUPPORTED_40000baseKR4_Full (1 << 23)
1157#define SUPPORTED_40000baseCR4_Full (1 << 24)
1158#define SUPPORTED_40000baseSR4_Full (1 << 25)
1159#define SUPPORTED_40000baseLR4_Full (1 << 26)
1121 1160
1122/* Indicates what features are advertised by the interface. */ 1161/* Indicates what features are advertised by the interface. */
1123#define ADVERTISED_10baseT_Half (1 << 0) 1162#define ADVERTISED_10baseT_Half (1 << 0)
@@ -1143,6 +1182,10 @@ struct ethtool_ops {
1143#define ADVERTISED_10000baseR_FEC (1 << 20) 1182#define ADVERTISED_10000baseR_FEC (1 << 20)
1144#define ADVERTISED_20000baseMLD2_Full (1 << 21) 1183#define ADVERTISED_20000baseMLD2_Full (1 << 21)
1145#define ADVERTISED_20000baseKR2_Full (1 << 22) 1184#define ADVERTISED_20000baseKR2_Full (1 << 22)
1185#define ADVERTISED_40000baseKR4_Full (1 << 23)
1186#define ADVERTISED_40000baseCR4_Full (1 << 24)
1187#define ADVERTISED_40000baseSR4_Full (1 << 25)
1188#define ADVERTISED_40000baseLR4_Full (1 << 26)
1146 1189
1147/* The following are all involved in forcing a particular link 1190/* The following are all involved in forcing a particular link
1148 * mode for the device for setting things. When getting the 1191 * mode for the device for setting things. When getting the
diff --git a/include/linux/eventpoll.h b/include/linux/eventpoll.h
index 6f8be328770a..f4bb378ccf6a 100644
--- a/include/linux/eventpoll.h
+++ b/include/linux/eventpoll.h
@@ -34,7 +34,7 @@
34 * re-allowed until epoll_wait is called again after consuming the wakeup 34 * re-allowed until epoll_wait is called again after consuming the wakeup
35 * event(s). 35 * event(s).
36 * 36 *
37 * Requires CAP_EPOLLWAKEUP 37 * Requires CAP_BLOCK_SUSPEND
38 */ 38 */
39#define EPOLLWAKEUP (1 << 29) 39#define EPOLLWAKEUP (1 << 29)
40 40
diff --git a/include/linux/extcon/extcon_gpio.h b/include/linux/extcon/extcon_gpio.h
index a2129b73dcb1..2d8307f7d67d 100644
--- a/include/linux/extcon/extcon_gpio.h
+++ b/include/linux/extcon/extcon_gpio.h
@@ -31,7 +31,7 @@
31 * @irq_flags IRQ Flags (e.g., IRQF_TRIGGER_LOW). 31 * @irq_flags IRQ Flags (e.g., IRQF_TRIGGER_LOW).
32 * @state_on print_state is overriden with state_on if attached. If Null, 32 * @state_on print_state is overriden with state_on if attached. If Null,
33 * default method of extcon class is used. 33 * default method of extcon class is used.
34 * @state_off print_state is overriden with state_on if dettached. If Null, 34 * @state_off print_state is overriden with state_on if detached. If Null,
35 * default method of extcon class is used. 35 * default method of extcon class is used.
36 * 36 *
37 * Note that in order for state_on or state_off to be valid, both state_on 37 * Note that in order for state_on or state_off to be valid, both state_on
diff --git a/include/linux/file.h b/include/linux/file.h
index 58bf158c53d9..a22408bac0d0 100644
--- a/include/linux/file.h
+++ b/include/linux/file.h
@@ -39,4 +39,7 @@ extern void put_unused_fd(unsigned int fd);
39 39
40extern void fd_install(unsigned int fd, struct file *file); 40extern void fd_install(unsigned int fd, struct file *file);
41 41
42extern void flush_delayed_fput(void);
43extern void __fput_sync(struct file *);
44
42#endif /* __LINUX_FILE_H */ 45#endif /* __LINUX_FILE_H */
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 17fd887c798f..8fabb037a48d 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -826,7 +826,7 @@ struct inode {
826 struct list_head i_lru; /* inode LRU list */ 826 struct list_head i_lru; /* inode LRU list */
827 struct list_head i_sb_list; 827 struct list_head i_sb_list;
828 union { 828 union {
829 struct list_head i_dentry; 829 struct hlist_head i_dentry;
830 struct rcu_head i_rcu; 830 struct rcu_head i_rcu;
831 }; 831 };
832 u64 i_version; 832 u64 i_version;
@@ -1571,7 +1571,7 @@ extern void unlock_super(struct super_block *);
1571/* 1571/*
1572 * VFS helper functions.. 1572 * VFS helper functions..
1573 */ 1573 */
1574extern int vfs_create(struct inode *, struct dentry *, umode_t, struct nameidata *); 1574extern int vfs_create(struct inode *, struct dentry *, umode_t, bool);
1575extern int vfs_mkdir(struct inode *, struct dentry *, umode_t); 1575extern int vfs_mkdir(struct inode *, struct dentry *, umode_t);
1576extern int vfs_mknod(struct inode *, struct dentry *, umode_t, dev_t); 1576extern int vfs_mknod(struct inode *, struct dentry *, umode_t, dev_t);
1577extern int vfs_symlink(struct inode *, struct dentry *, const char *); 1577extern int vfs_symlink(struct inode *, struct dentry *, const char *);
@@ -1666,7 +1666,7 @@ struct file_operations {
1666}; 1666};
1667 1667
1668struct inode_operations { 1668struct inode_operations {
1669 struct dentry * (*lookup) (struct inode *,struct dentry *, struct nameidata *); 1669 struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int);
1670 void * (*follow_link) (struct dentry *, struct nameidata *); 1670 void * (*follow_link) (struct dentry *, struct nameidata *);
1671 int (*permission) (struct inode *, int); 1671 int (*permission) (struct inode *, int);
1672 struct posix_acl * (*get_acl)(struct inode *, int); 1672 struct posix_acl * (*get_acl)(struct inode *, int);
@@ -1674,7 +1674,7 @@ struct inode_operations {
1674 int (*readlink) (struct dentry *, char __user *,int); 1674 int (*readlink) (struct dentry *, char __user *,int);
1675 void (*put_link) (struct dentry *, struct nameidata *, void *); 1675 void (*put_link) (struct dentry *, struct nameidata *, void *);
1676 1676
1677 int (*create) (struct inode *,struct dentry *,umode_t,struct nameidata *); 1677 int (*create) (struct inode *,struct dentry *, umode_t, bool);
1678 int (*link) (struct dentry *,struct inode *,struct dentry *); 1678 int (*link) (struct dentry *,struct inode *,struct dentry *);
1679 int (*unlink) (struct inode *,struct dentry *); 1679 int (*unlink) (struct inode *,struct dentry *);
1680 int (*symlink) (struct inode *,struct dentry *,const char *); 1680 int (*symlink) (struct inode *,struct dentry *,const char *);
@@ -1693,6 +1693,9 @@ struct inode_operations {
1693 int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, 1693 int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start,
1694 u64 len); 1694 u64 len);
1695 int (*update_time)(struct inode *, struct timespec *, int); 1695 int (*update_time)(struct inode *, struct timespec *, int);
1696 int (*atomic_open)(struct inode *, struct dentry *,
1697 struct file *, unsigned open_flag,
1698 umode_t create_mode, int *opened);
1696} ____cacheline_aligned; 1699} ____cacheline_aligned;
1697 1700
1698struct seq_file; 1701struct seq_file;
@@ -1911,7 +1914,7 @@ void free_anon_bdev(dev_t);
1911struct super_block *sget(struct file_system_type *type, 1914struct super_block *sget(struct file_system_type *type,
1912 int (*test)(struct super_block *,void *), 1915 int (*test)(struct super_block *,void *),
1913 int (*set)(struct super_block *,void *), 1916 int (*set)(struct super_block *,void *),
1914 void *data); 1917 int flags, void *data);
1915extern struct dentry *mount_pseudo(struct file_system_type *, char *, 1918extern struct dentry *mount_pseudo(struct file_system_type *, char *,
1916 const struct super_operations *ops, 1919 const struct super_operations *ops,
1917 const struct dentry_operations *dops, 1920 const struct dentry_operations *dops,
@@ -2057,10 +2060,17 @@ extern long do_sys_open(int dfd, const char __user *filename, int flags,
2057extern struct file *filp_open(const char *, int, umode_t); 2060extern struct file *filp_open(const char *, int, umode_t);
2058extern struct file *file_open_root(struct dentry *, struct vfsmount *, 2061extern struct file *file_open_root(struct dentry *, struct vfsmount *,
2059 const char *, int); 2062 const char *, int);
2060extern struct file * dentry_open(struct dentry *, struct vfsmount *, int, 2063extern struct file * dentry_open(const struct path *, int, const struct cred *);
2061 const struct cred *);
2062extern int filp_close(struct file *, fl_owner_t id); 2064extern int filp_close(struct file *, fl_owner_t id);
2063extern char * getname(const char __user *); 2065extern char * getname(const char __user *);
2066enum {
2067 FILE_CREATED = 1,
2068 FILE_OPENED = 2
2069};
2070extern int finish_open(struct file *file, struct dentry *dentry,
2071 int (*open)(struct inode *, struct file *),
2072 int *opened);
2073extern int finish_no_open(struct file *file, struct dentry *dentry);
2064 2074
2065/* fs/ioctl.c */ 2075/* fs/ioctl.c */
2066 2076
@@ -2091,6 +2101,7 @@ extern sector_t blkdev_max_block(struct block_device *bdev);
2091extern void bd_forget(struct inode *inode); 2101extern void bd_forget(struct inode *inode);
2092extern void bdput(struct block_device *); 2102extern void bdput(struct block_device *);
2093extern void invalidate_bdev(struct block_device *); 2103extern void invalidate_bdev(struct block_device *);
2104extern void iterate_bdevs(void (*)(struct block_device *, void *), void *);
2094extern int sync_blockdev(struct block_device *bdev); 2105extern int sync_blockdev(struct block_device *bdev);
2095extern void kill_bdev(struct block_device *); 2106extern void kill_bdev(struct block_device *);
2096extern struct super_block *freeze_bdev(struct block_device *); 2107extern struct super_block *freeze_bdev(struct block_device *);
@@ -2112,6 +2123,10 @@ static inline int thaw_bdev(struct block_device *bdev, struct super_block *sb)
2112{ 2123{
2113 return 0; 2124 return 0;
2114} 2125}
2126
2127static inline void iterate_bdevs(void (*f)(struct block_device *, void *), void *arg)
2128{
2129}
2115#endif 2130#endif
2116extern int sync_filesystem(struct super_block *); 2131extern int sync_filesystem(struct super_block *);
2117extern const struct file_operations def_blk_fops; 2132extern const struct file_operations def_blk_fops;
@@ -2438,7 +2453,7 @@ extern loff_t noop_llseek(struct file *file, loff_t offset, int origin);
2438extern loff_t no_llseek(struct file *file, loff_t offset, int origin); 2453extern loff_t no_llseek(struct file *file, loff_t offset, int origin);
2439extern loff_t generic_file_llseek(struct file *file, loff_t offset, int origin); 2454extern loff_t generic_file_llseek(struct file *file, loff_t offset, int origin);
2440extern loff_t generic_file_llseek_size(struct file *file, loff_t offset, 2455extern loff_t generic_file_llseek_size(struct file *file, loff_t offset,
2441 int origin, loff_t maxsize); 2456 int origin, loff_t maxsize, loff_t eof);
2442extern int generic_file_open(struct inode * inode, struct file * filp); 2457extern int generic_file_open(struct inode * inode, struct file * filp);
2443extern int nonseekable_open(struct inode * inode, struct file * filp); 2458extern int nonseekable_open(struct inode * inode, struct file * filp);
2444 2459
@@ -2560,7 +2575,7 @@ extern int simple_write_end(struct file *file, struct address_space *mapping,
2560 loff_t pos, unsigned len, unsigned copied, 2575 loff_t pos, unsigned len, unsigned copied,
2561 struct page *page, void *fsdata); 2576 struct page *page, void *fsdata);
2562 2577
2563extern struct dentry *simple_lookup(struct inode *, struct dentry *, struct nameidata *); 2578extern struct dentry *simple_lookup(struct inode *, struct dentry *, unsigned int flags);
2564extern ssize_t generic_read_dir(struct file *, char __user *, size_t, loff_t *); 2579extern ssize_t generic_read_dir(struct file *, char __user *, size_t, loff_t *);
2565extern const struct file_operations simple_dir_operations; 2580extern const struct file_operations simple_dir_operations;
2566extern const struct inode_operations simple_dir_inode_operations; 2581extern const struct inode_operations simple_dir_inode_operations;
diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h
index 176a939d1547..af961d6f7ab1 100644
--- a/include/linux/ftrace_event.h
+++ b/include/linux/ftrace_event.h
@@ -65,7 +65,7 @@ struct trace_iterator {
65 void *private; 65 void *private;
66 int cpu_file; 66 int cpu_file;
67 struct mutex mutex; 67 struct mutex mutex;
68 struct ring_buffer_iter *buffer_iter[NR_CPUS]; 68 struct ring_buffer_iter **buffer_iter;
69 unsigned long iter_flags; 69 unsigned long iter_flags;
70 70
71 /* trace_seq for __print_flags() and __print_symbolic() etc. */ 71 /* trace_seq for __print_flags() and __print_symbolic() etc. */
@@ -207,6 +207,9 @@ struct ftrace_event_call {
207 * bit 1: enabled 207 * bit 1: enabled
208 * bit 2: filter_active 208 * bit 2: filter_active
209 * bit 3: enabled cmd record 209 * bit 3: enabled cmd record
210 * bit 4: allow trace by non root (cap any)
211 * bit 5: failed to apply filter
212 * bit 6: ftrace internal event (do not enable)
210 * 213 *
211 * Changes to flags must hold the event_mutex. 214 * Changes to flags must hold the event_mutex.
212 * 215 *
diff --git a/include/linux/genetlink.h b/include/linux/genetlink.h
index 7a114016ac7d..5ab61c1eb6bf 100644
--- a/include/linux/genetlink.h
+++ b/include/linux/genetlink.h
@@ -85,7 +85,7 @@ enum {
85/* All generic netlink requests are serialized by a global lock. */ 85/* All generic netlink requests are serialized by a global lock. */
86extern void genl_lock(void); 86extern void genl_lock(void);
87extern void genl_unlock(void); 87extern void genl_unlock(void);
88#ifdef CONFIG_PROVE_LOCKING 88#ifdef CONFIG_LOCKDEP
89extern int lockdep_genl_is_held(void); 89extern int lockdep_genl_is_held(void);
90#endif 90#endif
91 91
diff --git a/include/linux/genhd.h b/include/linux/genhd.h
index 017a7fb5a1fc..ae0aaa9d42fa 100644
--- a/include/linux/genhd.h
+++ b/include/linux/genhd.h
@@ -16,7 +16,6 @@
16 16
17#ifdef CONFIG_BLOCK 17#ifdef CONFIG_BLOCK
18 18
19#define kobj_to_dev(k) container_of((k), struct device, kobj)
20#define dev_to_disk(device) container_of((device), struct gendisk, part0.__dev) 19#define dev_to_disk(device) container_of((device), struct gendisk, part0.__dev)
21#define dev_to_part(device) container_of((device), struct hd_struct, __dev) 20#define dev_to_part(device) container_of((device), struct hd_struct, __dev)
22#define disk_to_dev(disk) (&(disk)->part0.__dev) 21#define disk_to_dev(disk) (&(disk)->part0.__dev)
diff --git a/include/linux/gfs2_ondisk.h b/include/linux/gfs2_ondisk.h
index fa98bdb073b9..b2de1f9a88d6 100644
--- a/include/linux/gfs2_ondisk.h
+++ b/include/linux/gfs2_ondisk.h
@@ -170,6 +170,16 @@ struct gfs2_rindex {
170#define GFS2_RGF_NOALLOC 0x00000008 170#define GFS2_RGF_NOALLOC 0x00000008
171#define GFS2_RGF_TRIMMED 0x00000010 171#define GFS2_RGF_TRIMMED 0x00000010
172 172
173struct gfs2_rgrp_lvb {
174 __be32 rl_magic;
175 __be32 rl_flags;
176 __be32 rl_free;
177 __be32 rl_dinodes;
178 __be64 rl_igeneration;
179 __be32 rl_unlinked;
180 __be32 __pad;
181};
182
173struct gfs2_rgrp { 183struct gfs2_rgrp {
174 struct gfs2_meta_header rg_header; 184 struct gfs2_meta_header rg_header;
175 185
@@ -214,6 +224,7 @@ enum {
214 gfs2fl_NoAtime = 7, 224 gfs2fl_NoAtime = 7,
215 gfs2fl_Sync = 8, 225 gfs2fl_Sync = 8,
216 gfs2fl_System = 9, 226 gfs2fl_System = 9,
227 gfs2fl_TopLevel = 10,
217 gfs2fl_TruncInProg = 29, 228 gfs2fl_TruncInProg = 29,
218 gfs2fl_InheritDirectio = 30, 229 gfs2fl_InheritDirectio = 30,
219 gfs2fl_InheritJdata = 31, 230 gfs2fl_InheritJdata = 31,
@@ -230,8 +241,9 @@ enum {
230#define GFS2_DIF_NOATIME 0x00000080 241#define GFS2_DIF_NOATIME 0x00000080
231#define GFS2_DIF_SYNC 0x00000100 242#define GFS2_DIF_SYNC 0x00000100
232#define GFS2_DIF_SYSTEM 0x00000200 /* New in gfs2 */ 243#define GFS2_DIF_SYSTEM 0x00000200 /* New in gfs2 */
244#define GFS2_DIF_TOPDIR 0x00000400 /* New in gfs2 */
233#define GFS2_DIF_TRUNC_IN_PROG 0x20000000 /* New in gfs2 */ 245#define GFS2_DIF_TRUNC_IN_PROG 0x20000000 /* New in gfs2 */
234#define GFS2_DIF_INHERIT_DIRECTIO 0x40000000 246#define GFS2_DIF_INHERIT_DIRECTIO 0x40000000 /* only in gfs1 */
235#define GFS2_DIF_INHERIT_JDATA 0x80000000 247#define GFS2_DIF_INHERIT_JDATA 0x80000000
236 248
237struct gfs2_dinode { 249struct gfs2_dinode {
diff --git a/include/linux/gpio.h b/include/linux/gpio.h
index f07fc2d08159..2e31e8b3a190 100644
--- a/include/linux/gpio.h
+++ b/include/linux/gpio.h
@@ -22,8 +22,8 @@
22/* Gpio pin is open source */ 22/* Gpio pin is open source */
23#define GPIOF_OPEN_SOURCE (1 << 3) 23#define GPIOF_OPEN_SOURCE (1 << 3)
24 24
25#define GPIOF_EXPORT (1 << 2) 25#define GPIOF_EXPORT (1 << 4)
26#define GPIOF_EXPORT_CHANGEABLE (1 << 3) 26#define GPIOF_EXPORT_CHANGEABLE (1 << 5)
27#define GPIOF_EXPORT_DIR_FIXED (GPIOF_EXPORT) 27#define GPIOF_EXPORT_DIR_FIXED (GPIOF_EXPORT)
28#define GPIOF_EXPORT_DIR_CHANGEABLE (GPIOF_EXPORT | GPIOF_EXPORT_CHANGEABLE) 28#define GPIOF_EXPORT_DIR_CHANGEABLE (GPIOF_EXPORT | GPIOF_EXPORT_CHANGEABLE)
29 29
diff --git a/include/linux/hid.h b/include/linux/hid.h
index 449fa385703d..42970de1b40c 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
@@ -200,6 +200,7 @@ struct hid_item {
200#define HID_UP_DIGITIZER 0x000d0000 200#define HID_UP_DIGITIZER 0x000d0000
201#define HID_UP_PID 0x000f0000 201#define HID_UP_PID 0x000f0000
202#define HID_UP_HPVENDOR 0xff7f0000 202#define HID_UP_HPVENDOR 0xff7f0000
203#define HID_UP_HPVENDOR2 0xff010000
203#define HID_UP_MSVENDOR 0xff000000 204#define HID_UP_MSVENDOR 0xff000000
204#define HID_UP_CUSTOM 0x00ff0000 205#define HID_UP_CUSTOM 0x00ff0000
205#define HID_UP_LOGIVENDOR 0xffbc0000 206#define HID_UP_LOGIVENDOR 0xffbc0000
diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h
index fd0dc30c9f15..cc07d2777bbe 100644
--- a/include/linux/hrtimer.h
+++ b/include/linux/hrtimer.h
@@ -165,6 +165,7 @@ enum hrtimer_base_type {
165 * @lock: lock protecting the base and associated clock bases 165 * @lock: lock protecting the base and associated clock bases
166 * and timers 166 * and timers
167 * @active_bases: Bitfield to mark bases with active timers 167 * @active_bases: Bitfield to mark bases with active timers
168 * @clock_was_set: Indicates that clock was set from irq context.
168 * @expires_next: absolute time of the next event which was scheduled 169 * @expires_next: absolute time of the next event which was scheduled
169 * via clock_set_next_event() 170 * via clock_set_next_event()
170 * @hres_active: State of high resolution mode 171 * @hres_active: State of high resolution mode
@@ -177,7 +178,8 @@ enum hrtimer_base_type {
177 */ 178 */
178struct hrtimer_cpu_base { 179struct hrtimer_cpu_base {
179 raw_spinlock_t lock; 180 raw_spinlock_t lock;
180 unsigned long active_bases; 181 unsigned int active_bases;
182 unsigned int clock_was_set;
181#ifdef CONFIG_HIGH_RES_TIMERS 183#ifdef CONFIG_HIGH_RES_TIMERS
182 ktime_t expires_next; 184 ktime_t expires_next;
183 int hres_active; 185 int hres_active;
@@ -286,6 +288,8 @@ extern void hrtimer_peek_ahead_timers(void);
286# define MONOTONIC_RES_NSEC HIGH_RES_NSEC 288# define MONOTONIC_RES_NSEC HIGH_RES_NSEC
287# define KTIME_MONOTONIC_RES KTIME_HIGH_RES 289# define KTIME_MONOTONIC_RES KTIME_HIGH_RES
288 290
291extern void clock_was_set_delayed(void);
292
289#else 293#else
290 294
291# define MONOTONIC_RES_NSEC LOW_RES_NSEC 295# define MONOTONIC_RES_NSEC LOW_RES_NSEC
@@ -306,6 +310,9 @@ static inline int hrtimer_is_hres_active(struct hrtimer *timer)
306{ 310{
307 return 0; 311 return 0;
308} 312}
313
314static inline void clock_was_set_delayed(void) { }
315
309#endif 316#endif
310 317
311extern void clock_was_set(void); 318extern void clock_was_set(void);
@@ -320,6 +327,7 @@ extern ktime_t ktime_get(void);
320extern ktime_t ktime_get_real(void); 327extern ktime_t ktime_get_real(void);
321extern ktime_t ktime_get_boottime(void); 328extern ktime_t ktime_get_boottime(void);
322extern ktime_t ktime_get_monotonic_offset(void); 329extern ktime_t ktime_get_monotonic_offset(void);
330extern ktime_t ktime_get_update_offsets(ktime_t *offs_real, ktime_t *offs_boot);
323 331
324DECLARE_PER_CPU(struct tick_device, tick_cpu_device); 332DECLARE_PER_CPU(struct tick_device, tick_cpu_device);
325 333
diff --git a/include/linux/i2c.h b/include/linux/i2c.h
index ddfa04108baf..1d0fe4877b1f 100644
--- a/include/linux/i2c.h
+++ b/include/linux/i2c.h
@@ -425,6 +425,8 @@ void i2c_unlock_adapter(struct i2c_adapter *);
425#define I2C_CLIENT_TEN 0x10 /* we have a ten bit chip address */ 425#define I2C_CLIENT_TEN 0x10 /* we have a ten bit chip address */
426 /* Must equal I2C_M_TEN below */ 426 /* Must equal I2C_M_TEN below */
427#define I2C_CLIENT_WAKE 0x80 /* for board_info; true iff can wake */ 427#define I2C_CLIENT_WAKE 0x80 /* for board_info; true iff can wake */
428#define I2C_CLIENT_SCCB 0x9000 /* Use Omnivision SCCB protocol */
429 /* Must match I2C_M_STOP|IGNORE_NAK */
428 430
429/* i2c adapter classes (bitmask) */ 431/* i2c adapter classes (bitmask) */
430#define I2C_CLASS_HWMON (1<<0) /* lm_sensors, ... */ 432#define I2C_CLASS_HWMON (1<<0) /* lm_sensors, ... */
@@ -541,6 +543,7 @@ struct i2c_msg {
541 __u16 flags; 543 __u16 flags;
542#define I2C_M_TEN 0x0010 /* this is a ten bit chip address */ 544#define I2C_M_TEN 0x0010 /* this is a ten bit chip address */
543#define I2C_M_RD 0x0001 /* read data, from slave to master */ 545#define I2C_M_RD 0x0001 /* read data, from slave to master */
546#define I2C_M_STOP 0x8000 /* if I2C_FUNC_PROTOCOL_MANGLING */
544#define I2C_M_NOSTART 0x4000 /* if I2C_FUNC_NOSTART */ 547#define I2C_M_NOSTART 0x4000 /* if I2C_FUNC_NOSTART */
545#define I2C_M_REV_DIR_ADDR 0x2000 /* if I2C_FUNC_PROTOCOL_MANGLING */ 548#define I2C_M_REV_DIR_ADDR 0x2000 /* if I2C_FUNC_PROTOCOL_MANGLING */
546#define I2C_M_IGNORE_NAK 0x1000 /* if I2C_FUNC_PROTOCOL_MANGLING */ 549#define I2C_M_IGNORE_NAK 0x1000 /* if I2C_FUNC_PROTOCOL_MANGLING */
diff --git a/include/linux/i2c/mms114.h b/include/linux/i2c/mms114.h
new file mode 100644
index 000000000000..5722ebfb2738
--- /dev/null
+++ b/include/linux/i2c/mms114.h
@@ -0,0 +1,24 @@
1/*
2 * Copyright (C) 2012 Samsung Electronics Co.Ltd
3 * Author: Joonyoung Shim <jy0922.shim@samsung.com>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundationr
8 */
9
10#ifndef __LINUX_MMS114_H
11#define __LINUX_MMS114_H
12
13struct mms114_platform_data {
14 unsigned int x_size;
15 unsigned int y_size;
16 unsigned int contact_threshold;
17 unsigned int moving_threshold;
18 bool x_invert;
19 bool y_invert;
20
21 void (*cfg_pin)(bool);
22};
23
24#endif /* __LINUX_MMS114_H */
diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h
index 3993477103a5..555382660bc4 100644
--- a/include/linux/i2c/twl.h
+++ b/include/linux/i2c/twl.h
@@ -683,7 +683,6 @@ struct twl4030_audio_data {
683}; 683};
684 684
685struct twl4030_platform_data { 685struct twl4030_platform_data {
686 unsigned irq_base, irq_end;
687 struct twl4030_clock_init_data *clock; 686 struct twl4030_clock_init_data *clock;
688 struct twl4030_bci_platform_data *bci; 687 struct twl4030_bci_platform_data *bci;
689 struct twl4030_gpio_platform_data *gpio; 688 struct twl4030_gpio_platform_data *gpio;
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h
index ce9af8918514..e02fc682bb68 100644
--- a/include/linux/ieee80211.h
+++ b/include/linux/ieee80211.h
@@ -47,6 +47,7 @@
47#define IEEE80211_FCTL_MOREDATA 0x2000 47#define IEEE80211_FCTL_MOREDATA 0x2000
48#define IEEE80211_FCTL_PROTECTED 0x4000 48#define IEEE80211_FCTL_PROTECTED 0x4000
49#define IEEE80211_FCTL_ORDER 0x8000 49#define IEEE80211_FCTL_ORDER 0x8000
50#define IEEE80211_FCTL_CTL_EXT 0x0f00
50 51
51#define IEEE80211_SCTL_FRAG 0x000F 52#define IEEE80211_SCTL_FRAG 0x000F
52#define IEEE80211_SCTL_SEQ 0xFFF0 53#define IEEE80211_SCTL_SEQ 0xFFF0
@@ -54,6 +55,7 @@
54#define IEEE80211_FTYPE_MGMT 0x0000 55#define IEEE80211_FTYPE_MGMT 0x0000
55#define IEEE80211_FTYPE_CTL 0x0004 56#define IEEE80211_FTYPE_CTL 0x0004
56#define IEEE80211_FTYPE_DATA 0x0008 57#define IEEE80211_FTYPE_DATA 0x0008
58#define IEEE80211_FTYPE_EXT 0x000c
57 59
58/* management */ 60/* management */
59#define IEEE80211_STYPE_ASSOC_REQ 0x0000 61#define IEEE80211_STYPE_ASSOC_REQ 0x0000
@@ -70,6 +72,7 @@
70#define IEEE80211_STYPE_ACTION 0x00D0 72#define IEEE80211_STYPE_ACTION 0x00D0
71 73
72/* control */ 74/* control */
75#define IEEE80211_STYPE_CTL_EXT 0x0060
73#define IEEE80211_STYPE_BACK_REQ 0x0080 76#define IEEE80211_STYPE_BACK_REQ 0x0080
74#define IEEE80211_STYPE_BACK 0x0090 77#define IEEE80211_STYPE_BACK 0x0090
75#define IEEE80211_STYPE_PSPOLL 0x00A0 78#define IEEE80211_STYPE_PSPOLL 0x00A0
@@ -97,6 +100,18 @@
97#define IEEE80211_STYPE_QOS_CFPOLL 0x00E0 100#define IEEE80211_STYPE_QOS_CFPOLL 0x00E0
98#define IEEE80211_STYPE_QOS_CFACKPOLL 0x00F0 101#define IEEE80211_STYPE_QOS_CFACKPOLL 0x00F0
99 102
103/* extension, added by 802.11ad */
104#define IEEE80211_STYPE_DMG_BEACON 0x0000
105
106/* control extension - for IEEE80211_FTYPE_CTL | IEEE80211_STYPE_CTL_EXT */
107#define IEEE80211_CTL_EXT_POLL 0x2000
108#define IEEE80211_CTL_EXT_SPR 0x3000
109#define IEEE80211_CTL_EXT_GRANT 0x4000
110#define IEEE80211_CTL_EXT_DMG_CTS 0x5000
111#define IEEE80211_CTL_EXT_DMG_DTS 0x6000
112#define IEEE80211_CTL_EXT_SSW 0x8000
113#define IEEE80211_CTL_EXT_SSW_FBACK 0x9000
114#define IEEE80211_CTL_EXT_SSW_ACK 0xa000
100 115
101/* miscellaneous IEEE 802.11 constants */ 116/* miscellaneous IEEE 802.11 constants */
102#define IEEE80211_MAX_FRAG_THRESHOLD 2352 117#define IEEE80211_MAX_FRAG_THRESHOLD 2352
@@ -568,6 +583,26 @@ struct ieee80211s_hdr {
568#define MESH_FLAGS_PS_DEEP 0x4 583#define MESH_FLAGS_PS_DEEP 0x4
569 584
570/** 585/**
586 * enum ieee80211_preq_flags - mesh PREQ element flags
587 *
588 * @IEEE80211_PREQ_PROACTIVE_PREP_FLAG: proactive PREP subfield
589 */
590enum ieee80211_preq_flags {
591 IEEE80211_PREQ_PROACTIVE_PREP_FLAG = 1<<2,
592};
593
594/**
595 * enum ieee80211_preq_target_flags - mesh PREQ element per target flags
596 *
597 * @IEEE80211_PREQ_TO_FLAG: target only subfield
598 * @IEEE80211_PREQ_USN_FLAG: unknown target HWMP sequence number subfield
599 */
600enum ieee80211_preq_target_flags {
601 IEEE80211_PREQ_TO_FLAG = 1<<0,
602 IEEE80211_PREQ_USN_FLAG = 1<<2,
603};
604
605/**
571 * struct ieee80211_quiet_ie 606 * struct ieee80211_quiet_ie
572 * 607 *
573 * This structure refers to "Quiet information element" 608 * This structure refers to "Quiet information element"
@@ -1072,6 +1107,73 @@ struct ieee80211_ht_operation {
1072#define WLAN_HT_SMPS_CONTROL_STATIC 1 1107#define WLAN_HT_SMPS_CONTROL_STATIC 1
1073#define WLAN_HT_SMPS_CONTROL_DYNAMIC 3 1108#define WLAN_HT_SMPS_CONTROL_DYNAMIC 3
1074 1109
1110#define VHT_MCS_SUPPORTED_SET_SIZE 8
1111
1112struct ieee80211_vht_capabilities {
1113 __le32 vht_capabilities_info;
1114 u8 vht_supported_mcs_set[VHT_MCS_SUPPORTED_SET_SIZE];
1115} __packed;
1116
1117struct ieee80211_vht_operation {
1118 u8 vht_op_info_chwidth;
1119 u8 vht_op_info_chan_center_freq_seg1_idx;
1120 u8 vht_op_info_chan_center_freq_seg2_idx;
1121 __le16 vht_basic_mcs_set;
1122} __packed;
1123
1124/**
1125 * struct ieee80211_vht_mcs_info - VHT MCS information
1126 * @rx_mcs_map: RX MCS map 2 bits for each stream, total 8 streams
1127 * @rx_highest: Indicates highest long GI VHT PPDU data rate
1128 * STA can receive. Rate expressed in units of 1 Mbps.
1129 * If this field is 0 this value should not be used to
1130 * consider the highest RX data rate supported.
1131 * @tx_mcs_map: TX MCS map 2 bits for each stream, total 8 streams
1132 * @tx_highest: Indicates highest long GI VHT PPDU data rate
1133 * STA can transmit. Rate expressed in units of 1 Mbps.
1134 * If this field is 0 this value should not be used to
1135 * consider the highest TX data rate supported.
1136 */
1137struct ieee80211_vht_mcs_info {
1138 __le16 rx_mcs_map;
1139 __le16 rx_highest;
1140 __le16 tx_mcs_map;
1141 __le16 tx_highest;
1142} __packed;
1143
1144#define IEEE80211_VHT_MCS_ZERO_TO_SEVEN_SUPPORT 0
1145#define IEEE80211_VHT_MCS_ZERO_TO_EIGHT_SUPPORT 1
1146#define IEEE80211_VHT_MCS_ZERO_TO_NINE_SUPPORT 2
1147#define IEEE80211_VHT_MCS_NOT_SUPPORTED 3
1148
1149/* 802.11ac VHT Capabilities */
1150#define IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_3895 0x00000000
1151#define IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_7991 0x00000001
1152#define IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454 0x00000002
1153#define IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ 0x00000004
1154#define IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ 0x00000008
1155#define IEEE80211_VHT_CAP_RXLDPC 0x00000010
1156#define IEEE80211_VHT_CAP_SHORT_GI_80 0x00000020
1157#define IEEE80211_VHT_CAP_SHORT_GI_160 0x00000040
1158#define IEEE80211_VHT_CAP_TXSTBC 0x00000080
1159#define IEEE80211_VHT_CAP_RXSTBC_1 0x00000100
1160#define IEEE80211_VHT_CAP_RXSTBC_2 0x00000200
1161#define IEEE80211_VHT_CAP_RXSTBC_3 0x00000300
1162#define IEEE80211_VHT_CAP_RXSTBC_4 0x00000400
1163#define IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE 0x00000800
1164#define IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE 0x00001000
1165#define IEEE80211_VHT_CAP_BEAMFORMER_ANTENNAS_MAX 0x00006000
1166#define IEEE80211_VHT_CAP_SOUNDING_DIMENTION_MAX 0x00030000
1167#define IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE 0x00080000
1168#define IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE 0x00100000
1169#define IEEE80211_VHT_CAP_VHT_TXOP_PS 0x00200000
1170#define IEEE80211_VHT_CAP_HTC_VHT 0x00400000
1171#define IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT 0x00800000
1172#define IEEE80211_VHT_CAP_VHT_LINK_ADAPTATION_VHT_UNSOL_MFB 0x08000000
1173#define IEEE80211_VHT_CAP_VHT_LINK_ADAPTATION_VHT_MRQ_MFB 0x0c000000
1174#define IEEE80211_VHT_CAP_RX_ANTENNA_PATTERN 0x10000000
1175#define IEEE80211_VHT_CAP_TX_ANTENNA_PATTERN 0x20000000
1176
1075/* Authentication algorithms */ 1177/* Authentication algorithms */
1076#define WLAN_AUTH_OPEN 0 1178#define WLAN_AUTH_OPEN 0
1077#define WLAN_AUTH_SHARED_KEY 1 1179#define WLAN_AUTH_SHARED_KEY 1
@@ -1104,6 +1206,21 @@ struct ieee80211_ht_operation {
1104#define WLAN_CAPABILITY_QOS (1<<9) 1206#define WLAN_CAPABILITY_QOS (1<<9)
1105#define WLAN_CAPABILITY_SHORT_SLOT_TIME (1<<10) 1207#define WLAN_CAPABILITY_SHORT_SLOT_TIME (1<<10)
1106#define WLAN_CAPABILITY_DSSS_OFDM (1<<13) 1208#define WLAN_CAPABILITY_DSSS_OFDM (1<<13)
1209
1210/* DMG (60gHz) 802.11ad */
1211/* type - bits 0..1 */
1212#define WLAN_CAPABILITY_DMG_TYPE_IBSS (1<<0) /* Tx by: STA */
1213#define WLAN_CAPABILITY_DMG_TYPE_PBSS (2<<0) /* Tx by: PCP */
1214#define WLAN_CAPABILITY_DMG_TYPE_AP (3<<0) /* Tx by: AP */
1215
1216#define WLAN_CAPABILITY_DMG_CBAP_ONLY (1<<2)
1217#define WLAN_CAPABILITY_DMG_CBAP_SOURCE (1<<3)
1218#define WLAN_CAPABILITY_DMG_PRIVACY (1<<4)
1219#define WLAN_CAPABILITY_DMG_ECPAC (1<<5)
1220
1221#define WLAN_CAPABILITY_DMG_SPECTRUM_MGMT (1<<8)
1222#define WLAN_CAPABILITY_DMG_RADIO_MEASURE (1<<12)
1223
1107/* measurement */ 1224/* measurement */
1108#define IEEE80211_SPCT_MSR_RPRT_MODE_LATE (1<<0) 1225#define IEEE80211_SPCT_MSR_RPRT_MODE_LATE (1<<0)
1109#define IEEE80211_SPCT_MSR_RPRT_MODE_INCAPABLE (1<<1) 1226#define IEEE80211_SPCT_MSR_RPRT_MODE_INCAPABLE (1<<1)
@@ -1113,7 +1230,6 @@ struct ieee80211_ht_operation {
1113#define IEEE80211_SPCT_MSR_RPRT_TYPE_CCA 1 1230#define IEEE80211_SPCT_MSR_RPRT_TYPE_CCA 1
1114#define IEEE80211_SPCT_MSR_RPRT_TYPE_RPI 2 1231#define IEEE80211_SPCT_MSR_RPRT_TYPE_RPI 2
1115 1232
1116
1117/* 802.11g ERP information element */ 1233/* 802.11g ERP information element */
1118#define WLAN_ERP_NON_ERP_PRESENT (1<<0) 1234#define WLAN_ERP_NON_ERP_PRESENT (1<<0)
1119#define WLAN_ERP_USE_PROTECTION (1<<1) 1235#define WLAN_ERP_USE_PROTECTION (1<<1)
@@ -1125,6 +1241,16 @@ enum {
1125 WLAN_ERP_PREAMBLE_LONG = 1, 1241 WLAN_ERP_PREAMBLE_LONG = 1,
1126}; 1242};
1127 1243
1244/* Band ID, 802.11ad #8.4.1.45 */
1245enum {
1246 IEEE80211_BANDID_TV_WS = 0, /* TV white spaces */
1247 IEEE80211_BANDID_SUB1 = 1, /* Sub-1 GHz (excluding TV white spaces) */
1248 IEEE80211_BANDID_2G = 2, /* 2.4 GHz */
1249 IEEE80211_BANDID_3G = 3, /* 3.6 GHz */
1250 IEEE80211_BANDID_5G = 4, /* 4.9 and 5 GHz */
1251 IEEE80211_BANDID_60G = 5, /* 60 GHz */
1252};
1253
1128/* Status codes */ 1254/* Status codes */
1129enum ieee80211_statuscode { 1255enum ieee80211_statuscode {
1130 WLAN_STATUS_SUCCESS = 0, 1256 WLAN_STATUS_SUCCESS = 0,
@@ -1176,6 +1302,17 @@ enum ieee80211_statuscode {
1176 WLAN_STATUS_ANTI_CLOG_REQUIRED = 76, 1302 WLAN_STATUS_ANTI_CLOG_REQUIRED = 76,
1177 WLAN_STATUS_FCG_NOT_SUPP = 78, 1303 WLAN_STATUS_FCG_NOT_SUPP = 78,
1178 WLAN_STATUS_STA_NO_TBTT = 78, 1304 WLAN_STATUS_STA_NO_TBTT = 78,
1305 /* 802.11ad */
1306 WLAN_STATUS_REJECTED_WITH_SUGGESTED_CHANGES = 39,
1307 WLAN_STATUS_REJECTED_FOR_DELAY_PERIOD = 47,
1308 WLAN_STATUS_REJECT_WITH_SCHEDULE = 83,
1309 WLAN_STATUS_PENDING_ADMITTING_FST_SESSION = 86,
1310 WLAN_STATUS_PERFORMING_FST_NOW = 87,
1311 WLAN_STATUS_PENDING_GAP_IN_BA_WINDOW = 88,
1312 WLAN_STATUS_REJECT_U_PID_SETTING = 89,
1313 WLAN_STATUS_REJECT_DSE_BAND = 96,
1314 WLAN_STATUS_DENIED_WITH_SUGGESTED_BAND_AND_CHANNEL = 99,
1315 WLAN_STATUS_DENIED_DUE_TO_SPECTRUM_MANAGEMENT = 103,
1179}; 1316};
1180 1317
1181 1318
@@ -1332,6 +1469,43 @@ enum ieee80211_eid {
1332 WLAN_EID_DSE_REGISTERED_LOCATION = 58, 1469 WLAN_EID_DSE_REGISTERED_LOCATION = 58,
1333 WLAN_EID_SUPPORTED_REGULATORY_CLASSES = 59, 1470 WLAN_EID_SUPPORTED_REGULATORY_CLASSES = 59,
1334 WLAN_EID_EXT_CHANSWITCH_ANN = 60, 1471 WLAN_EID_EXT_CHANSWITCH_ANN = 60,
1472
1473 WLAN_EID_VHT_CAPABILITY = 191,
1474 WLAN_EID_VHT_OPERATION = 192,
1475
1476 /* 802.11ad */
1477 WLAN_EID_NON_TX_BSSID_CAP = 83,
1478 WLAN_EID_WAKEUP_SCHEDULE = 143,
1479 WLAN_EID_EXT_SCHEDULE = 144,
1480 WLAN_EID_STA_AVAILABILITY = 145,
1481 WLAN_EID_DMG_TSPEC = 146,
1482 WLAN_EID_DMG_AT = 147,
1483 WLAN_EID_DMG_CAP = 148,
1484 WLAN_EID_DMG_OPERATION = 151,
1485 WLAN_EID_DMG_BSS_PARAM_CHANGE = 152,
1486 WLAN_EID_DMG_BEAM_REFINEMENT = 153,
1487 WLAN_EID_CHANNEL_MEASURE_FEEDBACK = 154,
1488 WLAN_EID_AWAKE_WINDOW = 157,
1489 WLAN_EID_MULTI_BAND = 158,
1490 WLAN_EID_ADDBA_EXT = 159,
1491 WLAN_EID_NEXT_PCP_LIST = 160,
1492 WLAN_EID_PCP_HANDOVER = 161,
1493 WLAN_EID_DMG_LINK_MARGIN = 162,
1494 WLAN_EID_SWITCHING_STREAM = 163,
1495 WLAN_EID_SESSION_TRANSITION = 164,
1496 WLAN_EID_DYN_TONE_PAIRING_REPORT = 165,
1497 WLAN_EID_CLUSTER_REPORT = 166,
1498 WLAN_EID_RELAY_CAP = 167,
1499 WLAN_EID_RELAY_XFER_PARAM_SET = 168,
1500 WLAN_EID_BEAM_LINK_MAINT = 169,
1501 WLAN_EID_MULTIPLE_MAC_ADDR = 170,
1502 WLAN_EID_U_PID = 171,
1503 WLAN_EID_DMG_LINK_ADAPT_ACK = 172,
1504 WLAN_EID_QUIET_PERIOD_REQ = 175,
1505 WLAN_EID_QUIET_PERIOD_RESP = 177,
1506 WLAN_EID_EPAC_POLICY = 182,
1507 WLAN_EID_CLISTER_TIME_OFF = 183,
1508 WLAN_EID_ANTENNA_SECTOR_ID_PATTERN = 190,
1335}; 1509};
1336 1510
1337/* Action category code */ 1511/* Action category code */
@@ -1348,7 +1522,10 @@ enum ieee80211_category {
1348 WLAN_CATEGORY_MESH_ACTION = 13, 1522 WLAN_CATEGORY_MESH_ACTION = 13,
1349 WLAN_CATEGORY_MULTIHOP_ACTION = 14, 1523 WLAN_CATEGORY_MULTIHOP_ACTION = 14,
1350 WLAN_CATEGORY_SELF_PROTECTED = 15, 1524 WLAN_CATEGORY_SELF_PROTECTED = 15,
1525 WLAN_CATEGORY_DMG = 16,
1351 WLAN_CATEGORY_WMM = 17, 1526 WLAN_CATEGORY_WMM = 17,
1527 WLAN_CATEGORY_FST = 18,
1528 WLAN_CATEGORY_UNPROT_DMG = 20,
1352 WLAN_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126, 1529 WLAN_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126,
1353 WLAN_CATEGORY_VENDOR_SPECIFIC = 127, 1530 WLAN_CATEGORY_VENDOR_SPECIFIC = 127,
1354}; 1531};
@@ -1443,7 +1620,7 @@ enum ieee80211_tdls_actioncode {
1443 * 1620 *
1444 * @IEEE80211_SYNC_METHOD_NEIGHBOR_OFFSET: the default synchronization method 1621 * @IEEE80211_SYNC_METHOD_NEIGHBOR_OFFSET: the default synchronization method
1445 * @IEEE80211_SYNC_METHOD_VENDOR: a vendor specific synchronization method 1622 * @IEEE80211_SYNC_METHOD_VENDOR: a vendor specific synchronization method
1446 * that will be specified in a vendor specific information element 1623 * that will be specified in a vendor specific information element
1447 */ 1624 */
1448enum { 1625enum {
1449 IEEE80211_SYNC_METHOD_NEIGHBOR_OFFSET = 1, 1626 IEEE80211_SYNC_METHOD_NEIGHBOR_OFFSET = 1,
@@ -1455,7 +1632,7 @@ enum {
1455 * 1632 *
1456 * @IEEE80211_PATH_PROTOCOL_HWMP: the default path selection protocol 1633 * @IEEE80211_PATH_PROTOCOL_HWMP: the default path selection protocol
1457 * @IEEE80211_PATH_PROTOCOL_VENDOR: a vendor specific protocol that will 1634 * @IEEE80211_PATH_PROTOCOL_VENDOR: a vendor specific protocol that will
1458 * be specified in a vendor specific information element 1635 * be specified in a vendor specific information element
1459 */ 1636 */
1460enum { 1637enum {
1461 IEEE80211_PATH_PROTOCOL_HWMP = 1, 1638 IEEE80211_PATH_PROTOCOL_HWMP = 1,
@@ -1467,13 +1644,35 @@ enum {
1467 * 1644 *
1468 * @IEEE80211_PATH_METRIC_AIRTIME: the default path selection metric 1645 * @IEEE80211_PATH_METRIC_AIRTIME: the default path selection metric
1469 * @IEEE80211_PATH_METRIC_VENDOR: a vendor specific metric that will be 1646 * @IEEE80211_PATH_METRIC_VENDOR: a vendor specific metric that will be
1470 * specified in a vendor specific information element 1647 * specified in a vendor specific information element
1471 */ 1648 */
1472enum { 1649enum {
1473 IEEE80211_PATH_METRIC_AIRTIME = 1, 1650 IEEE80211_PATH_METRIC_AIRTIME = 1,
1474 IEEE80211_PATH_METRIC_VENDOR = 255, 1651 IEEE80211_PATH_METRIC_VENDOR = 255,
1475}; 1652};
1476 1653
1654/**
1655 * enum ieee80211_root_mode_identifier - root mesh STA mode identifier
1656 *
1657 * These attribute are used by dot11MeshHWMPRootMode to set root mesh STA mode
1658 *
1659 * @IEEE80211_ROOTMODE_NO_ROOT: the mesh STA is not a root mesh STA (default)
1660 * @IEEE80211_ROOTMODE_ROOT: the mesh STA is a root mesh STA if greater than
1661 * this value
1662 * @IEEE80211_PROACTIVE_PREQ_NO_PREP: the mesh STA is a root mesh STA supports
1663 * the proactive PREQ with proactive PREP subfield set to 0
1664 * @IEEE80211_PROACTIVE_PREQ_WITH_PREP: the mesh STA is a root mesh STA
1665 * supports the proactive PREQ with proactive PREP subfield set to 1
1666 * @IEEE80211_PROACTIVE_RANN: the mesh STA is a root mesh STA supports
1667 * the proactive RANN
1668 */
1669enum ieee80211_root_mode_identifier {
1670 IEEE80211_ROOTMODE_NO_ROOT = 0,
1671 IEEE80211_ROOTMODE_ROOT = 1,
1672 IEEE80211_PROACTIVE_PREQ_NO_PREP = 2,
1673 IEEE80211_PROACTIVE_PREQ_WITH_PREP = 3,
1674 IEEE80211_PROACTIVE_RANN = 4,
1675};
1477 1676
1478/* 1677/*
1479 * IEEE 802.11-2007 7.3.2.9 Country information element 1678 * IEEE 802.11-2007 7.3.2.9 Country information element
@@ -1574,6 +1773,7 @@ enum ieee80211_sa_query_action {
1574#define WLAN_CIPHER_SUITE_CCMP 0x000FAC04 1773#define WLAN_CIPHER_SUITE_CCMP 0x000FAC04
1575#define WLAN_CIPHER_SUITE_WEP104 0x000FAC05 1774#define WLAN_CIPHER_SUITE_WEP104 0x000FAC05
1576#define WLAN_CIPHER_SUITE_AES_CMAC 0x000FAC06 1775#define WLAN_CIPHER_SUITE_AES_CMAC 0x000FAC06
1776#define WLAN_CIPHER_SUITE_GCMP 0x000FAC08
1577 1777
1578#define WLAN_CIPHER_SUITE_SMS4 0x00147201 1778#define WLAN_CIPHER_SUITE_SMS4 0x00147201
1579 1779
@@ -1589,6 +1789,10 @@ enum ieee80211_sa_query_action {
1589 1789
1590#define WLAN_OUI_WFA 0x506f9a 1790#define WLAN_OUI_WFA 0x506f9a
1591#define WLAN_OUI_TYPE_WFA_P2P 9 1791#define WLAN_OUI_TYPE_WFA_P2P 9
1792#define WLAN_OUI_MICROSOFT 0x0050f2
1793#define WLAN_OUI_TYPE_MICROSOFT_WPA 1
1794#define WLAN_OUI_TYPE_MICROSOFT_WMM 2
1795#define WLAN_OUI_TYPE_MICROSOFT_WPS 4
1592 1796
1593/* 1797/*
1594 * WMM/802.11e Tspec Element 1798 * WMM/802.11e Tspec Element
diff --git a/include/linux/if.h b/include/linux/if.h
index f995c663c493..1ec407b01e46 100644
--- a/include/linux/if.h
+++ b/include/linux/if.h
@@ -81,6 +81,8 @@
81#define IFF_UNICAST_FLT 0x20000 /* Supports unicast filtering */ 81#define IFF_UNICAST_FLT 0x20000 /* Supports unicast filtering */
82#define IFF_TEAM_PORT 0x40000 /* device used as team port */ 82#define IFF_TEAM_PORT 0x40000 /* device used as team port */
83#define IFF_SUPP_NOFCS 0x80000 /* device supports sending custom FCS */ 83#define IFF_SUPP_NOFCS 0x80000 /* device supports sending custom FCS */
84#define IFF_LIVE_ADDR_CHANGE 0x100000 /* device supports hardware address
85 * change when it's running */
84 86
85 87
86#define IF_GET_IFACE 0x0001 /* for querying only */ 88#define IF_GET_IFACE 0x0001 /* for querying only */
diff --git a/include/linux/if_ether.h b/include/linux/if_ether.h
index 56d907a2c804..167ce5b363d2 100644
--- a/include/linux/if_ether.h
+++ b/include/linux/if_ether.h
@@ -105,7 +105,8 @@
105#define ETH_P_WAN_PPP 0x0007 /* Dummy type for WAN PPP frames*/ 105#define ETH_P_WAN_PPP 0x0007 /* Dummy type for WAN PPP frames*/
106#define ETH_P_PPP_MP 0x0008 /* Dummy type for PPP MP frames */ 106#define ETH_P_PPP_MP 0x0008 /* Dummy type for PPP MP frames */
107#define ETH_P_LOCALTALK 0x0009 /* Localtalk pseudo type */ 107#define ETH_P_LOCALTALK 0x0009 /* Localtalk pseudo type */
108#define ETH_P_CAN 0x000C /* Controller Area Network */ 108#define ETH_P_CAN 0x000C /* CAN: Controller Area Network */
109#define ETH_P_CANFD 0x000D /* CANFD: CAN flexible data rate*/
109#define ETH_P_PPPTALK 0x0010 /* Dummy type for Atalk over PPP*/ 110#define ETH_P_PPPTALK 0x0010 /* Dummy type for Atalk over PPP*/
110#define ETH_P_TR_802_2 0x0011 /* 802.2 frames */ 111#define ETH_P_TR_802_2 0x0011 /* 802.2 frames */
111#define ETH_P_MOBITEX 0x0015 /* Mobitex (kaz@cafe.net) */ 112#define ETH_P_MOBITEX 0x0015 /* Mobitex (kaz@cafe.net) */
diff --git a/include/linux/if_link.h b/include/linux/if_link.h
index f715750d0b87..ac173bd2ab65 100644
--- a/include/linux/if_link.h
+++ b/include/linux/if_link.h
@@ -140,6 +140,8 @@ enum {
140 IFLA_EXT_MASK, /* Extended info mask, VFs, etc */ 140 IFLA_EXT_MASK, /* Extended info mask, VFs, etc */
141 IFLA_PROMISCUITY, /* Promiscuity count: > 0 means acts PROMISC */ 141 IFLA_PROMISCUITY, /* Promiscuity count: > 0 means acts PROMISC */
142#define IFLA_PROMISCUITY IFLA_PROMISCUITY 142#define IFLA_PROMISCUITY IFLA_PROMISCUITY
143 IFLA_NUM_TX_QUEUES,
144 IFLA_NUM_RX_QUEUES,
143 __IFLA_MAX 145 __IFLA_MAX
144}; 146};
145 147
diff --git a/include/linux/if_strip.h b/include/linux/if_strip.h
deleted file mode 100644
index 6526a6235832..000000000000
--- a/include/linux/if_strip.h
+++ /dev/null
@@ -1,27 +0,0 @@
1/*
2 * if_strip.h --
3 *
4 * Definitions for the STRIP interface
5 *
6 * Copyright 1996 The Board of Trustees of The Leland Stanford
7 * Junior University. All Rights Reserved.
8 *
9 * Permission to use, copy, modify, and distribute this
10 * software and its documentation for any purpose and without
11 * fee is hereby granted, provided that the above copyright
12 * notice appear in all copies. Stanford University
13 * makes no representations about the suitability of this
14 * software for any purpose. It is provided "as is" without
15 * express or implied warranty.
16 */
17
18#ifndef __LINUX_STRIP_H
19#define __LINUX_STRIP_H
20
21#include <linux/types.h>
22
23typedef struct {
24 __u8 c[6];
25} MetricomAddress;
26
27#endif
diff --git a/include/linux/if_team.h b/include/linux/if_team.h
index 8185f57a9c7f..6960fc1841a7 100644
--- a/include/linux/if_team.h
+++ b/include/linux/if_team.h
@@ -13,6 +13,9 @@
13 13
14#ifdef __KERNEL__ 14#ifdef __KERNEL__
15 15
16#include <linux/netpoll.h>
17#include <net/sch_generic.h>
18
16struct team_pcpu_stats { 19struct team_pcpu_stats {
17 u64 rx_packets; 20 u64 rx_packets;
18 u64 rx_bytes; 21 u64 rx_bytes;
@@ -60,9 +63,54 @@ struct team_port {
60 unsigned int mtu; 63 unsigned int mtu;
61 } orig; 64 } orig;
62 65
63 struct rcu_head rcu; 66#ifdef CONFIG_NET_POLL_CONTROLLER
67 struct netpoll *np;
68#endif
69
70 long mode_priv[0];
64}; 71};
65 72
73static inline bool team_port_enabled(struct team_port *port)
74{
75 return port->index != -1;
76}
77
78static inline bool team_port_txable(struct team_port *port)
79{
80 return port->linkup && team_port_enabled(port);
81}
82
83#ifdef CONFIG_NET_POLL_CONTROLLER
84static inline void team_netpoll_send_skb(struct team_port *port,
85 struct sk_buff *skb)
86{
87 struct netpoll *np = port->np;
88
89 if (np)
90 netpoll_send_skb(np, skb);
91}
92#else
93static inline void team_netpoll_send_skb(struct team_port *port,
94 struct sk_buff *skb)
95{
96}
97#endif
98
99static inline int team_dev_queue_xmit(struct team *team, struct team_port *port,
100 struct sk_buff *skb)
101{
102 BUILD_BUG_ON(sizeof(skb->queue_mapping) !=
103 sizeof(qdisc_skb_cb(skb)->slave_dev_queue_mapping));
104 skb_set_queue_mapping(skb, qdisc_skb_cb(skb)->slave_dev_queue_mapping);
105
106 skb->dev = port->dev;
107 if (unlikely(netpoll_tx_running(port->dev))) {
108 team_netpoll_send_skb(port, skb);
109 return 0;
110 }
111 return dev_queue_xmit(skb);
112}
113
66struct team_mode_ops { 114struct team_mode_ops {
67 int (*init)(struct team *team); 115 int (*init)(struct team *team);
68 void (*exit)(struct team *team); 116 void (*exit)(struct team *team);
@@ -73,6 +121,8 @@ struct team_mode_ops {
73 int (*port_enter)(struct team *team, struct team_port *port); 121 int (*port_enter)(struct team *team, struct team_port *port);
74 void (*port_leave)(struct team *team, struct team_port *port); 122 void (*port_leave)(struct team *team, struct team_port *port);
75 void (*port_change_mac)(struct team *team, struct team_port *port); 123 void (*port_change_mac)(struct team *team, struct team_port *port);
124 void (*port_enabled)(struct team *team, struct team_port *port);
125 void (*port_disabled)(struct team *team, struct team_port *port);
76}; 126};
77 127
78enum team_option_type { 128enum team_option_type {
@@ -82,6 +132,11 @@ enum team_option_type {
82 TEAM_OPTION_TYPE_BOOL, 132 TEAM_OPTION_TYPE_BOOL,
83}; 133};
84 134
135struct team_option_inst_info {
136 u32 array_index;
137 struct team_port *port; /* != NULL if per-port */
138};
139
85struct team_gsetter_ctx { 140struct team_gsetter_ctx {
86 union { 141 union {
87 u32 u32_val; 142 u32 u32_val;
@@ -92,23 +147,28 @@ struct team_gsetter_ctx {
92 } bin_val; 147 } bin_val;
93 bool bool_val; 148 bool bool_val;
94 } data; 149 } data;
95 struct team_port *port; 150 struct team_option_inst_info *info;
96}; 151};
97 152
98struct team_option { 153struct team_option {
99 struct list_head list; 154 struct list_head list;
100 const char *name; 155 const char *name;
101 bool per_port; 156 bool per_port;
157 unsigned int array_size; /* != 0 means the option is array */
102 enum team_option_type type; 158 enum team_option_type type;
159 int (*init)(struct team *team, struct team_option_inst_info *info);
103 int (*getter)(struct team *team, struct team_gsetter_ctx *ctx); 160 int (*getter)(struct team *team, struct team_gsetter_ctx *ctx);
104 int (*setter)(struct team *team, struct team_gsetter_ctx *ctx); 161 int (*setter)(struct team *team, struct team_gsetter_ctx *ctx);
105}; 162};
106 163
164extern void team_option_inst_set_change(struct team_option_inst_info *opt_inst_info);
165extern void team_options_change_check(struct team *team);
166
107struct team_mode { 167struct team_mode {
108 struct list_head list;
109 const char *kind; 168 const char *kind;
110 struct module *owner; 169 struct module *owner;
111 size_t priv_size; 170 size_t priv_size;
171 size_t port_priv_size;
112 const struct team_mode_ops *ops; 172 const struct team_mode_ops *ops;
113}; 173};
114 174
@@ -178,8 +238,11 @@ extern int team_options_register(struct team *team,
178extern void team_options_unregister(struct team *team, 238extern void team_options_unregister(struct team *team,
179 const struct team_option *option, 239 const struct team_option *option,
180 size_t option_count); 240 size_t option_count);
181extern int team_mode_register(struct team_mode *mode); 241extern int team_mode_register(const struct team_mode *mode);
182extern int team_mode_unregister(struct team_mode *mode); 242extern void team_mode_unregister(const struct team_mode *mode);
243
244#define TEAM_DEFAULT_NUM_TX_QUEUES 16
245#define TEAM_DEFAULT_NUM_RX_QUEUES 16
183 246
184#endif /* __KERNEL__ */ 247#endif /* __KERNEL__ */
185 248
@@ -241,6 +304,7 @@ enum {
241 TEAM_ATTR_OPTION_DATA, /* dynamic */ 304 TEAM_ATTR_OPTION_DATA, /* dynamic */
242 TEAM_ATTR_OPTION_REMOVED, /* flag */ 305 TEAM_ATTR_OPTION_REMOVED, /* flag */
243 TEAM_ATTR_OPTION_PORT_IFINDEX, /* u32 */ /* for per-port options */ 306 TEAM_ATTR_OPTION_PORT_IFINDEX, /* u32 */ /* for per-port options */
307 TEAM_ATTR_OPTION_ARRAY_INDEX, /* u32 */ /* for array options */
244 308
245 __TEAM_ATTR_OPTION_MAX, 309 __TEAM_ATTR_OPTION_MAX,
246 TEAM_ATTR_OPTION_MAX = __TEAM_ATTR_OPTION_MAX - 1, 310 TEAM_ATTR_OPTION_MAX = __TEAM_ATTR_OPTION_MAX - 1,
diff --git a/include/linux/if_tunnel.h b/include/linux/if_tunnel.h
index 16b92d008bed..5efff60b6f56 100644
--- a/include/linux/if_tunnel.h
+++ b/include/linux/if_tunnel.h
@@ -80,4 +80,18 @@ enum {
80 80
81#define IFLA_GRE_MAX (__IFLA_GRE_MAX - 1) 81#define IFLA_GRE_MAX (__IFLA_GRE_MAX - 1)
82 82
83/* VTI-mode i_flags */
84#define VTI_ISVTI 0x0001
85
86enum {
87 IFLA_VTI_UNSPEC,
88 IFLA_VTI_LINK,
89 IFLA_VTI_IKEY,
90 IFLA_VTI_OKEY,
91 IFLA_VTI_LOCAL,
92 IFLA_VTI_REMOTE,
93 __IFLA_VTI_MAX,
94};
95
96#define IFLA_VTI_MAX (__IFLA_VTI_MAX - 1)
83#endif /* _IF_TUNNEL_H_ */ 97#endif /* _IF_TUNNEL_H_ */
diff --git a/include/linux/iio/buffer.h b/include/linux/iio/buffer.h
index fb0fe46fd659..8ba516fc2ec6 100644
--- a/include/linux/iio/buffer.h
+++ b/include/linux/iio/buffer.h
@@ -85,7 +85,7 @@ struct iio_buffer {
85 85
86/** 86/**
87 * iio_buffer_init() - Initialize the buffer structure 87 * iio_buffer_init() - Initialize the buffer structure
88 * @buffer: buffer to be initialized 88 * @buffer: buffer to be initialized
89 **/ 89 **/
90void iio_buffer_init(struct iio_buffer *buffer); 90void iio_buffer_init(struct iio_buffer *buffer);
91 91
@@ -107,8 +107,9 @@ int iio_scan_mask_query(struct iio_dev *indio_dev,
107 107
108/** 108/**
109 * iio_scan_mask_set() - set particular bit in the scan mask 109 * iio_scan_mask_set() - set particular bit in the scan mask
110 * @buffer: the buffer whose scan mask we are interested in 110 * @indio_dev IIO device structure
111 * @bit: the bit to be set. 111 * @buffer: the buffer whose scan mask we are interested in
112 * @bit: the bit to be set.
112 **/ 113 **/
113int iio_scan_mask_set(struct iio_dev *indio_dev, 114int iio_scan_mask_set(struct iio_dev *indio_dev,
114 struct iio_buffer *buffer, int bit); 115 struct iio_buffer *buffer, int bit);
@@ -116,8 +117,8 @@ int iio_scan_mask_set(struct iio_dev *indio_dev,
116/** 117/**
117 * iio_push_to_buffer() - push to a registered buffer. 118 * iio_push_to_buffer() - push to a registered buffer.
118 * @buffer: IIO buffer structure for device 119 * @buffer: IIO buffer structure for device
119 * @scan: Full scan. 120 * @data: the data to push to the buffer
120 * @timestamp: 121 * @timestamp: timestamp to associate with the data
121 */ 122 */
122int iio_push_to_buffer(struct iio_buffer *buffer, unsigned char *data, 123int iio_push_to_buffer(struct iio_buffer *buffer, unsigned char *data,
123 s64 timestamp); 124 s64 timestamp);
@@ -126,7 +127,9 @@ int iio_update_demux(struct iio_dev *indio_dev);
126 127
127/** 128/**
128 * iio_buffer_register() - register the buffer with IIO core 129 * iio_buffer_register() - register the buffer with IIO core
129 * @indio_dev: device with the buffer to be registered 130 * @indio_dev: device with the buffer to be registered
131 * @channels: the channel descriptions used to construct buffer
132 * @num_channels: the number of channels
130 **/ 133 **/
131int iio_buffer_register(struct iio_dev *indio_dev, 134int iio_buffer_register(struct iio_dev *indio_dev,
132 const struct iio_chan_spec *channels, 135 const struct iio_chan_spec *channels,
@@ -134,7 +137,7 @@ int iio_buffer_register(struct iio_dev *indio_dev,
134 137
135/** 138/**
136 * iio_buffer_unregister() - unregister the buffer from IIO core 139 * iio_buffer_unregister() - unregister the buffer from IIO core
137 * @indio_dev: the device with the buffer to be unregistered 140 * @indio_dev: the device with the buffer to be unregistered
138 **/ 141 **/
139void iio_buffer_unregister(struct iio_dev *indio_dev); 142void iio_buffer_unregister(struct iio_dev *indio_dev);
140 143
@@ -174,6 +177,9 @@ ssize_t iio_buffer_show_enable(struct device *dev,
174 177
175int iio_sw_buffer_preenable(struct iio_dev *indio_dev); 178int iio_sw_buffer_preenable(struct iio_dev *indio_dev);
176 179
180bool iio_validate_scan_mask_onehot(struct iio_dev *indio_dev,
181 const unsigned long *mask);
182
177#else /* CONFIG_IIO_BUFFER */ 183#else /* CONFIG_IIO_BUFFER */
178 184
179static inline int iio_buffer_register(struct iio_dev *indio_dev, 185static inline int iio_buffer_register(struct iio_dev *indio_dev,
@@ -184,7 +190,7 @@ static inline int iio_buffer_register(struct iio_dev *indio_dev,
184} 190}
185 191
186static inline void iio_buffer_unregister(struct iio_dev *indio_dev) 192static inline void iio_buffer_unregister(struct iio_dev *indio_dev)
187{}; 193{}
188 194
189#endif /* CONFIG_IIO_BUFFER */ 195#endif /* CONFIG_IIO_BUFFER */
190 196
diff --git a/include/linux/iio/consumer.h b/include/linux/iio/consumer.h
index 1a15e560a5a1..e2657e6d4d26 100644
--- a/include/linux/iio/consumer.h
+++ b/include/linux/iio/consumer.h
@@ -33,17 +33,17 @@ struct iio_channel {
33 * side. This typically describes the channels use within 33 * side. This typically describes the channels use within
34 * the consumer. E.g. 'battery_voltage' 34 * the consumer. E.g. 'battery_voltage'
35 */ 35 */
36struct iio_channel *iio_st_channel_get(const char *name, 36struct iio_channel *iio_channel_get(const char *name,
37 const char *consumer_channel); 37 const char *consumer_channel);
38 38
39/** 39/**
40 * iio_st_channel_release() - release channels obtained via iio_st_channel_get 40 * iio_channel_release() - release channels obtained via iio_channel_get
41 * @chan: The channel to be released. 41 * @chan: The channel to be released.
42 */ 42 */
43void iio_st_channel_release(struct iio_channel *chan); 43void iio_channel_release(struct iio_channel *chan);
44 44
45/** 45/**
46 * iio_st_channel_get_all() - get all channels associated with a client 46 * iio_channel_get_all() - get all channels associated with a client
47 * @name: name of consumer device. 47 * @name: name of consumer device.
48 * 48 *
49 * Returns an array of iio_channel structures terminated with one with 49 * Returns an array of iio_channel structures terminated with one with
@@ -51,37 +51,37 @@ void iio_st_channel_release(struct iio_channel *chan);
51 * This function is used by fairly generic consumers to get all the 51 * This function is used by fairly generic consumers to get all the
52 * channels registered as having this consumer. 52 * channels registered as having this consumer.
53 */ 53 */
54struct iio_channel *iio_st_channel_get_all(const char *name); 54struct iio_channel *iio_channel_get_all(const char *name);
55 55
56/** 56/**
57 * iio_st_channel_release_all() - reverse iio_st_get_all 57 * iio_channel_release_all() - reverse iio_channel_get_all
58 * @chan: Array of channels to be released. 58 * @chan: Array of channels to be released.
59 */ 59 */
60void iio_st_channel_release_all(struct iio_channel *chan); 60void iio_channel_release_all(struct iio_channel *chan);
61 61
62/** 62/**
63 * iio_st_read_channel_raw() - read from a given channel 63 * iio_read_channel_raw() - read from a given channel
64 * @channel: The channel being queried. 64 * @channel: The channel being queried.
65 * @val: Value read back. 65 * @val: Value read back.
66 * 66 *
67 * Note raw reads from iio channels are in adc counts and hence 67 * Note raw reads from iio channels are in adc counts and hence
68 * scale will need to be applied if standard units required. 68 * scale will need to be applied if standard units required.
69 */ 69 */
70int iio_st_read_channel_raw(struct iio_channel *chan, 70int iio_read_channel_raw(struct iio_channel *chan,
71 int *val); 71 int *val);
72 72
73/** 73/**
74 * iio_st_get_channel_type() - get the type of a channel 74 * iio_get_channel_type() - get the type of a channel
75 * @channel: The channel being queried. 75 * @channel: The channel being queried.
76 * @type: The type of the channel. 76 * @type: The type of the channel.
77 * 77 *
78 * returns the enum iio_chan_type of the channel 78 * returns the enum iio_chan_type of the channel
79 */ 79 */
80int iio_st_get_channel_type(struct iio_channel *channel, 80int iio_get_channel_type(struct iio_channel *channel,
81 enum iio_chan_type *type); 81 enum iio_chan_type *type);
82 82
83/** 83/**
84 * iio_st_read_channel_scale() - read the scale value for a channel 84 * iio_read_channel_scale() - read the scale value for a channel
85 * @channel: The channel being queried. 85 * @channel: The channel being queried.
86 * @val: First part of value read back. 86 * @val: First part of value read back.
87 * @val2: Second part of value read back. 87 * @val2: Second part of value read back.
@@ -90,7 +90,7 @@ int iio_st_get_channel_type(struct iio_channel *channel,
90 * as IIO_VAL_INT_PLUS_MICRO telling us we have a value of val 90 * as IIO_VAL_INT_PLUS_MICRO telling us we have a value of val
91 * + val2/1e6 91 * + val2/1e6
92 */ 92 */
93int iio_st_read_channel_scale(struct iio_channel *chan, int *val, 93int iio_read_channel_scale(struct iio_channel *chan, int *val,
94 int *val2); 94 int *val2);
95 95
96#endif 96#endif
diff --git a/include/linux/iio/dac/ad5421.h b/include/linux/iio/dac/ad5421.h
new file mode 100644
index 000000000000..8fd8f057a890
--- /dev/null
+++ b/include/linux/iio/dac/ad5421.h
@@ -0,0 +1,28 @@
1#ifndef __IIO_DAC_AD5421_H__
2#define __IIO_DAC_AD5421_H__
3
4/**
5 * enum ad5421_current_range - Current range the AD5421 is configured for.
6 * @AD5421_CURRENT_RANGE_4mA_20mA: 4 mA to 20 mA (RANGE1,0 pins = 00)
7 * @AD5421_CURRENT_RANGE_3mA8_21mA: 3.8 mA to 21 mA (RANGE1,0 pins = x1)
8 * @AD5421_CURRENT_RANGE_3mA2_24mA: 3.2 mA to 24 mA (RANGE1,0 pins = 10)
9 */
10
11enum ad5421_current_range {
12 AD5421_CURRENT_RANGE_4mA_20mA,
13 AD5421_CURRENT_RANGE_3mA8_21mA,
14 AD5421_CURRENT_RANGE_3mA2_24mA,
15};
16
17/**
18 * struct ad5421_platform_data - AD5421 DAC driver platform data
19 * @external_vref: whether an external reference voltage is used or not
20 * @current_range: Current range the AD5421 is configured for
21 */
22
23struct ad5421_platform_data {
24 bool external_vref;
25 enum ad5421_current_range current_range;
26};
27
28#endif
diff --git a/include/linux/iio/dac/ad5504.h b/include/linux/iio/dac/ad5504.h
new file mode 100644
index 000000000000..43895376a9ca
--- /dev/null
+++ b/include/linux/iio/dac/ad5504.h
@@ -0,0 +1,16 @@
1/*
2 * AD5504 SPI DAC driver
3 *
4 * Copyright 2011 Analog Devices Inc.
5 *
6 * Licensed under the GPL-2.
7 */
8
9#ifndef SPI_AD5504_H_
10#define SPI_AD5504_H_
11
12struct ad5504_platform_data {
13 u16 vref_mv;
14};
15
16#endif /* SPI_AD5504_H_ */
diff --git a/include/linux/iio/dac/ad5791.h b/include/linux/iio/dac/ad5791.h
new file mode 100644
index 000000000000..45ee281c6660
--- /dev/null
+++ b/include/linux/iio/dac/ad5791.h
@@ -0,0 +1,25 @@
1/*
2 * AD5791 SPI DAC driver
3 *
4 * Copyright 2011 Analog Devices Inc.
5 *
6 * Licensed under the GPL-2.
7 */
8
9#ifndef SPI_AD5791_H_
10#define SPI_AD5791_H_
11
12/**
13 * struct ad5791_platform_data - platform specific information
14 * @vref_pos_mv: Vdd Positive Analog Supply Volatge (mV)
15 * @vref_neg_mv: Vdd Negative Analog Supply Volatge (mV)
16 * @use_rbuf_gain2: ext. amplifier connected in gain of two configuration
17 */
18
19struct ad5791_platform_data {
20 u16 vref_pos_mv;
21 u16 vref_neg_mv;
22 bool use_rbuf_gain2;
23};
24
25#endif /* SPI_AD5791_H_ */
diff --git a/include/linux/iio/dac/max517.h b/include/linux/iio/dac/max517.h
new file mode 100644
index 000000000000..f6d1d252f08d
--- /dev/null
+++ b/include/linux/iio/dac/max517.h
@@ -0,0 +1,15 @@
1/*
2 * MAX517 DAC driver
3 *
4 * Copyright 2011 Roland Stigge <stigge@antcom.de>
5 *
6 * Licensed under the GPL-2 or later.
7 */
8#ifndef IIO_DAC_MAX517_H_
9#define IIO_DAC_MAX517_H_
10
11struct max517_platform_data {
12 u16 vref_mv[2];
13};
14
15#endif /* IIO_DAC_MAX517_H_ */
diff --git a/include/linux/iio/dac/mcp4725.h b/include/linux/iio/dac/mcp4725.h
new file mode 100644
index 000000000000..91530e6611e9
--- /dev/null
+++ b/include/linux/iio/dac/mcp4725.h
@@ -0,0 +1,16 @@
1/*
2 * MCP4725 DAC driver
3 *
4 * Copyright (C) 2012 Peter Meerwald <pmeerw@pmeerw.net>
5 *
6 * Licensed under the GPL-2 or later.
7 */
8
9#ifndef IIO_DAC_MCP4725_H_
10#define IIO_DAC_MCP4725_H_
11
12struct mcp4725_platform_data {
13 u16 vref_mv;
14};
15
16#endif /* IIO_DAC_MCP4725_H_ */
diff --git a/include/linux/iio/events.h b/include/linux/iio/events.h
index b5acbf93c5da..13ce220c7003 100644
--- a/include/linux/iio/events.h
+++ b/include/linux/iio/events.h
@@ -46,7 +46,7 @@ enum iio_event_direction {
46 * @diff: Whether the event is for an differential channel or not. 46 * @diff: Whether the event is for an differential channel or not.
47 * @modifier: Modifier for the channel. Should be one of enum iio_modifier. 47 * @modifier: Modifier for the channel. Should be one of enum iio_modifier.
48 * @direction: Direction of the event. One of enum iio_event_direction. 48 * @direction: Direction of the event. One of enum iio_event_direction.
49 * @type: Type of the event. Should be one enum iio_event_type. 49 * @type: Type of the event. Should be one of enum iio_event_type.
50 * @chan: Channel number for non-differential channels. 50 * @chan: Channel number for non-differential channels.
51 * @chan1: First channel number for differential channels. 51 * @chan1: First channel number for differential channels.
52 * @chan2: Second channel number for differential channels. 52 * @chan2: Second channel number for differential channels.
@@ -69,7 +69,7 @@ enum iio_event_direction {
69 * @chan_type: Type of the channel. Should be one of enum iio_chan_type. 69 * @chan_type: Type of the channel. Should be one of enum iio_chan_type.
70 * @number: Channel number. 70 * @number: Channel number.
71 * @modifier: Modifier for the channel. Should be one of enum iio_modifier. 71 * @modifier: Modifier for the channel. Should be one of enum iio_modifier.
72 * @type: Type of the event. Should be one enum iio_event_type. 72 * @type: Type of the event. Should be one of enum iio_event_type.
73 * @direction: Direction of the event. One of enum iio_event_direction. 73 * @direction: Direction of the event. One of enum iio_event_direction.
74 */ 74 */
75 75
@@ -81,7 +81,7 @@ enum iio_event_direction {
81 * IIO_UNMOD_EVENT_CODE() - create event identifier for unmodified channels 81 * IIO_UNMOD_EVENT_CODE() - create event identifier for unmodified channels
82 * @chan_type: Type of the channel. Should be one of enum iio_chan_type. 82 * @chan_type: Type of the channel. Should be one of enum iio_chan_type.
83 * @number: Channel number. 83 * @number: Channel number.
84 * @type: Type of the event. Should be one enum iio_event_type. 84 * @type: Type of the event. Should be one of enum iio_event_type.
85 * @direction: Direction of the event. One of enum iio_event_direction. 85 * @direction: Direction of the event. One of enum iio_event_direction.
86 */ 86 */
87 87
diff --git a/include/linux/iio/frequency/ad9523.h b/include/linux/iio/frequency/ad9523.h
new file mode 100644
index 000000000000..12ce3ee427fd
--- /dev/null
+++ b/include/linux/iio/frequency/ad9523.h
@@ -0,0 +1,195 @@
1/*
2 * AD9523 SPI Low Jitter Clock Generator
3 *
4 * Copyright 2012 Analog Devices Inc.
5 *
6 * Licensed under the GPL-2.
7 */
8
9#ifndef IIO_FREQUENCY_AD9523_H_
10#define IIO_FREQUENCY_AD9523_H_
11
12enum outp_drv_mode {
13 TRISTATE,
14 LVPECL_8mA,
15 LVDS_4mA,
16 LVDS_7mA,
17 HSTL0_16mA,
18 HSTL1_8mA,
19 CMOS_CONF1,
20 CMOS_CONF2,
21 CMOS_CONF3,
22 CMOS_CONF4,
23 CMOS_CONF5,
24 CMOS_CONF6,
25 CMOS_CONF7,
26 CMOS_CONF8,
27 CMOS_CONF9
28};
29
30enum ref_sel_mode {
31 NONEREVERTIVE_STAY_ON_REFB,
32 REVERT_TO_REFA,
33 SELECT_REFA,
34 SELECT_REFB,
35 EXT_REF_SEL
36};
37
38/**
39 * struct ad9523_channel_spec - Output channel configuration
40 *
41 * @channel_num: Output channel number.
42 * @divider_output_invert_en: Invert the polarity of the output clock.
43 * @sync_ignore_en: Ignore chip-level SYNC signal.
44 * @low_power_mode_en: Reduce power used in the differential output modes.
45 * @use_alt_clock_src: Channel divider uses alternative clk source.
46 * @output_dis: Disables, powers down the entire channel.
47 * @driver_mode: Output driver mode (logic level family).
48 * @divider_phase: Divider initial phase after a SYNC. Range 0..63
49 LSB = 1/2 of a period of the divider input clock.
50 * @channel_divider: 10-bit channel divider.
51 * @extended_name: Optional descriptive channel name.
52 */
53
54struct ad9523_channel_spec {
55 unsigned channel_num;
56 bool divider_output_invert_en;
57 bool sync_ignore_en;
58 bool low_power_mode_en;
59 /* CH0..CH3 VCXO, CH4..CH9 VCO2 */
60 bool use_alt_clock_src;
61 bool output_dis;
62 enum outp_drv_mode driver_mode;
63 unsigned char divider_phase;
64 unsigned short channel_divider;
65 char extended_name[16];
66};
67
68enum pll1_rzero_resistor {
69 RZERO_883_OHM,
70 RZERO_677_OHM,
71 RZERO_341_OHM,
72 RZERO_135_OHM,
73 RZERO_10_OHM,
74 RZERO_USE_EXT_RES = 8,
75};
76
77enum rpole2_resistor {
78 RPOLE2_900_OHM,
79 RPOLE2_450_OHM,
80 RPOLE2_300_OHM,
81 RPOLE2_225_OHM,
82};
83
84enum rzero_resistor {
85 RZERO_3250_OHM,
86 RZERO_2750_OHM,
87 RZERO_2250_OHM,
88 RZERO_2100_OHM,
89 RZERO_3000_OHM,
90 RZERO_2500_OHM,
91 RZERO_2000_OHM,
92 RZERO_1850_OHM,
93};
94
95enum cpole1_capacitor {
96 CPOLE1_0_PF,
97 CPOLE1_8_PF,
98 CPOLE1_16_PF,
99 CPOLE1_24_PF,
100 _CPOLE1_24_PF, /* place holder */
101 CPOLE1_32_PF,
102 CPOLE1_40_PF,
103 CPOLE1_48_PF,
104};
105
106/**
107 * struct ad9523_platform_data - platform specific information
108 *
109 * @vcxo_freq: External VCXO frequency in Hz
110 * @refa_diff_rcv_en: REFA differential/single-ended input selection.
111 * @refb_diff_rcv_en: REFB differential/single-ended input selection.
112 * @zd_in_diff_en: Zero Delay differential/single-ended input selection.
113 * @osc_in_diff_en: OSC differential/ single-ended input selection.
114 * @refa_cmos_neg_inp_en: REFA single-ended neg./pos. input enable.
115 * @refb_cmos_neg_inp_en: REFB single-ended neg./pos. input enable.
116 * @zd_in_cmos_neg_inp_en: Zero Delay single-ended neg./pos. input enable.
117 * @osc_in_cmos_neg_inp_en: OSC single-ended neg./pos. input enable.
118 * @refa_r_div: PLL1 10-bit REFA R divider.
119 * @refb_r_div: PLL1 10-bit REFB R divider.
120 * @pll1_feedback_div: PLL1 10-bit Feedback N divider.
121 * @pll1_charge_pump_current_nA: Magnitude of PLL1 charge pump current (nA).
122 * @zero_delay_mode_internal_en: Internal, external Zero Delay mode selection.
123 * @osc_in_feedback_en: PLL1 feedback path, local feedback from
124 * the OSC_IN receiver or zero delay mode
125 * @pll1_loop_filter_rzero: PLL1 Loop Filter Zero Resistor selection.
126 * @ref_mode: Reference selection mode.
127 * @pll2_charge_pump_current_nA: Magnitude of PLL2 charge pump current (nA).
128 * @pll2_ndiv_a_cnt: PLL2 Feedback N-divider, A Counter, range 0..4.
129 * @pll2_ndiv_b_cnt: PLL2 Feedback N-divider, B Counter, range 0..63.
130 * @pll2_freq_doubler_en: PLL2 frequency doubler enable.
131 * @pll2_r2_div: PLL2 R2 divider, range 0..31.
132 * @pll2_vco_diff_m1: VCO1 divider, range 3..5.
133 * @pll2_vco_diff_m2: VCO2 divider, range 3..5.
134 * @rpole2: PLL2 loop filter Rpole resistor value.
135 * @rzero: PLL2 loop filter Rzero resistor value.
136 * @cpole1: PLL2 loop filter Cpole capacitor value.
137 * @rzero_bypass_en: PLL2 loop filter Rzero bypass enable.
138 * @num_channels: Array size of struct ad9523_channel_spec.
139 * @channels: Pointer to channel array.
140 * @name: Optional alternative iio device name.
141 */
142
143struct ad9523_platform_data {
144 unsigned long vcxo_freq;
145
146 /* Differential/ Single-Ended Input Configuration */
147 bool refa_diff_rcv_en;
148 bool refb_diff_rcv_en;
149 bool zd_in_diff_en;
150 bool osc_in_diff_en;
151
152 /*
153 * Valid if differential input disabled
154 * if false defaults to pos input
155 */
156 bool refa_cmos_neg_inp_en;
157 bool refb_cmos_neg_inp_en;
158 bool zd_in_cmos_neg_inp_en;
159 bool osc_in_cmos_neg_inp_en;
160
161 /* PLL1 Setting */
162 unsigned short refa_r_div;
163 unsigned short refb_r_div;
164 unsigned short pll1_feedback_div;
165 unsigned short pll1_charge_pump_current_nA;
166 bool zero_delay_mode_internal_en;
167 bool osc_in_feedback_en;
168 enum pll1_rzero_resistor pll1_loop_filter_rzero;
169
170 /* Reference */
171 enum ref_sel_mode ref_mode;
172
173 /* PLL2 Setting */
174 unsigned int pll2_charge_pump_current_nA;
175 unsigned char pll2_ndiv_a_cnt;
176 unsigned char pll2_ndiv_b_cnt;
177 bool pll2_freq_doubler_en;
178 unsigned char pll2_r2_div;
179 unsigned char pll2_vco_diff_m1; /* 3..5 */
180 unsigned char pll2_vco_diff_m2; /* 3..5 */
181
182 /* Loop Filter PLL2 */
183 enum rpole2_resistor rpole2;
184 enum rzero_resistor rzero;
185 enum cpole1_capacitor cpole1;
186 bool rzero_bypass_en;
187
188 /* Output Channel Configuration */
189 int num_channels;
190 struct ad9523_channel_spec *channels;
191
192 char name[SPI_NAME_SIZE];
193};
194
195#endif /* IIO_FREQUENCY_AD9523_H_ */
diff --git a/include/linux/iio/frequency/adf4350.h b/include/linux/iio/frequency/adf4350.h
new file mode 100644
index 000000000000..b76b4a87065e
--- /dev/null
+++ b/include/linux/iio/frequency/adf4350.h
@@ -0,0 +1,126 @@
1/*
2 * ADF4350/ADF4351 SPI PLL driver
3 *
4 * Copyright 2012 Analog Devices Inc.
5 *
6 * Licensed under the GPL-2.
7 */
8
9#ifndef IIO_PLL_ADF4350_H_
10#define IIO_PLL_ADF4350_H_
11
12/* Registers */
13#define ADF4350_REG0 0
14#define ADF4350_REG1 1
15#define ADF4350_REG2 2
16#define ADF4350_REG3 3
17#define ADF4350_REG4 4
18#define ADF4350_REG5 5
19
20/* REG0 Bit Definitions */
21#define ADF4350_REG0_FRACT(x) (((x) & 0xFFF) << 3)
22#define ADF4350_REG0_INT(x) (((x) & 0xFFFF) << 15)
23
24/* REG1 Bit Definitions */
25#define ADF4350_REG1_MOD(x) (((x) & 0xFFF) << 3)
26#define ADF4350_REG1_PHASE(x) (((x) & 0xFFF) << 15)
27#define ADF4350_REG1_PRESCALER (1 << 27)
28
29/* REG2 Bit Definitions */
30#define ADF4350_REG2_COUNTER_RESET_EN (1 << 3)
31#define ADF4350_REG2_CP_THREESTATE_EN (1 << 4)
32#define ADF4350_REG2_POWER_DOWN_EN (1 << 5)
33#define ADF4350_REG2_PD_POLARITY_POS (1 << 6)
34#define ADF4350_REG2_LDP_6ns (1 << 7)
35#define ADF4350_REG2_LDP_10ns (0 << 7)
36#define ADF4350_REG2_LDF_FRACT_N (0 << 8)
37#define ADF4350_REG2_LDF_INT_N (1 << 8)
38#define ADF4350_REG2_CHARGE_PUMP_CURR_uA(x) (((((x)-312) / 312) & 0xF) << 9)
39#define ADF4350_REG2_DOUBLE_BUFF_EN (1 << 13)
40#define ADF4350_REG2_10BIT_R_CNT(x) ((x) << 14)
41#define ADF4350_REG2_RDIV2_EN (1 << 24)
42#define ADF4350_REG2_RMULT2_EN (1 << 25)
43#define ADF4350_REG2_MUXOUT(x) ((x) << 26)
44#define ADF4350_REG2_NOISE_MODE(x) ((x) << 29)
45#define ADF4350_MUXOUT_THREESTATE 0
46#define ADF4350_MUXOUT_DVDD 1
47#define ADF4350_MUXOUT_GND 2
48#define ADF4350_MUXOUT_R_DIV_OUT 3
49#define ADF4350_MUXOUT_N_DIV_OUT 4
50#define ADF4350_MUXOUT_ANALOG_LOCK_DETECT 5
51#define ADF4350_MUXOUT_DIGITAL_LOCK_DETECT 6
52
53/* REG3 Bit Definitions */
54#define ADF4350_REG3_12BIT_CLKDIV(x) ((x) << 3)
55#define ADF4350_REG3_12BIT_CLKDIV_MODE(x) ((x) << 16)
56#define ADF4350_REG3_12BIT_CSR_EN (1 << 18)
57#define ADF4351_REG3_CHARGE_CANCELLATION_EN (1 << 21)
58#define ADF4351_REG3_ANTI_BACKLASH_3ns_EN (1 << 22)
59#define ADF4351_REG3_BAND_SEL_CLOCK_MODE_HIGH (1 << 23)
60
61/* REG4 Bit Definitions */
62#define ADF4350_REG4_OUTPUT_PWR(x) ((x) << 3)
63#define ADF4350_REG4_RF_OUT_EN (1 << 5)
64#define ADF4350_REG4_AUX_OUTPUT_PWR(x) ((x) << 6)
65#define ADF4350_REG4_AUX_OUTPUT_EN (1 << 8)
66#define ADF4350_REG4_AUX_OUTPUT_FUND (1 << 9)
67#define ADF4350_REG4_AUX_OUTPUT_DIV (0 << 9)
68#define ADF4350_REG4_MUTE_TILL_LOCK_EN (1 << 10)
69#define ADF4350_REG4_VCO_PWRDOWN_EN (1 << 11)
70#define ADF4350_REG4_8BIT_BAND_SEL_CLKDIV(x) ((x) << 12)
71#define ADF4350_REG4_RF_DIV_SEL(x) ((x) << 20)
72#define ADF4350_REG4_FEEDBACK_DIVIDED (0 << 23)
73#define ADF4350_REG4_FEEDBACK_FUND (1 << 23)
74
75/* REG5 Bit Definitions */
76#define ADF4350_REG5_LD_PIN_MODE_LOW (0 << 22)
77#define ADF4350_REG5_LD_PIN_MODE_DIGITAL (1 << 22)
78#define ADF4350_REG5_LD_PIN_MODE_HIGH (3 << 22)
79
80/* Specifications */
81#define ADF4350_MAX_OUT_FREQ 4400000000ULL /* Hz */
82#define ADF4350_MIN_OUT_FREQ 137500000 /* Hz */
83#define ADF4351_MIN_OUT_FREQ 34375000 /* Hz */
84#define ADF4350_MIN_VCO_FREQ 2200000000ULL /* Hz */
85#define ADF4350_MAX_FREQ_45_PRESC 3000000000ULL /* Hz */
86#define ADF4350_MAX_FREQ_PFD 32000000 /* Hz */
87#define ADF4350_MAX_BANDSEL_CLK 125000 /* Hz */
88#define ADF4350_MAX_FREQ_REFIN 250000000 /* Hz */
89#define ADF4350_MAX_MODULUS 4095
90
91/**
92 * struct adf4350_platform_data - platform specific information
93 * @name: Optional device name.
94 * @clkin: REFin frequency in Hz.
95 * @channel_spacing: Channel spacing in Hz (influences MODULUS).
96 * @power_up_frequency: Optional, If set in Hz the PLL tunes to the desired
97 * frequency on probe.
98 * @ref_div_factor: Optional, if set the driver skips dynamic calculation
99 * and uses this default value instead.
100 * @ref_doubler_en: Enables reference doubler.
101 * @ref_div2_en: Enables reference divider.
102 * @r2_user_settings: User defined settings for ADF4350/1 REGISTER_2.
103 * @r3_user_settings: User defined settings for ADF4350/1 REGISTER_3.
104 * @r4_user_settings: User defined settings for ADF4350/1 REGISTER_4.
105 * @gpio_lock_detect: Optional, if set with a valid GPIO number,
106 * pll lock state is tested upon read.
107 * If not used - set to -1.
108 */
109
110struct adf4350_platform_data {
111 char name[32];
112 unsigned long clkin;
113 unsigned long channel_spacing;
114 unsigned long long power_up_frequency;
115
116 unsigned short ref_div_factor; /* 10-bit R counter */
117 bool ref_doubler_en;
118 bool ref_div2_en;
119
120 unsigned r2_user_settings;
121 unsigned r3_user_settings;
122 unsigned r4_user_settings;
123 int gpio_lock_detect;
124};
125
126#endif /* IIO_PLL_ADF4350_H_ */
diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h
index 3a4f6a3ab80d..be82936c4089 100644
--- a/include/linux/iio/iio.h
+++ b/include/linux/iio/iio.h
@@ -130,14 +130,78 @@ struct iio_chan_spec_ext_info {
130}; 130};
131 131
132/** 132/**
133 * struct iio_enum - Enum channel info attribute
134 * @items: An array of strings.
135 * @num_items: Length of the item array.
136 * @set: Set callback function, may be NULL.
137 * @get: Get callback function, may be NULL.
138 *
139 * The iio_enum struct can be used to implement enum style channel attributes.
140 * Enum style attributes are those which have a set of strings which map to
141 * unsigned integer values. The IIO enum helper code takes care of mapping
142 * between value and string as well as generating a "_available" file which
143 * contains a list of all available items. The set callback will be called when
144 * the attribute is updated. The last parameter is the index to the newly
145 * activated item. The get callback will be used to query the currently active
146 * item and is supposed to return the index for it.
147 */
148struct iio_enum {
149 const char * const *items;
150 unsigned int num_items;
151 int (*set)(struct iio_dev *, const struct iio_chan_spec *, unsigned int);
152 int (*get)(struct iio_dev *, const struct iio_chan_spec *);
153};
154
155ssize_t iio_enum_available_read(struct iio_dev *indio_dev,
156 uintptr_t priv, const struct iio_chan_spec *chan, char *buf);
157ssize_t iio_enum_read(struct iio_dev *indio_dev,
158 uintptr_t priv, const struct iio_chan_spec *chan, char *buf);
159ssize_t iio_enum_write(struct iio_dev *indio_dev,
160 uintptr_t priv, const struct iio_chan_spec *chan, const char *buf,
161 size_t len);
162
163/**
164 * IIO_ENUM() - Initialize enum extended channel attribute
165 * @_name: Attribute name
166 * @_shared: Whether the attribute is shared between all channels
167 * @_e: Pointer to a iio_enum struct
168 *
169 * This should usually be used together with IIO_ENUM_AVAILABLE()
170 */
171#define IIO_ENUM(_name, _shared, _e) \
172{ \
173 .name = (_name), \
174 .shared = (_shared), \
175 .read = iio_enum_read, \
176 .write = iio_enum_write, \
177 .private = (uintptr_t)(_e), \
178}
179
180/**
181 * IIO_ENUM_AVAILABLE() - Initialize enum available extended channel attribute
182 * @_name: Attribute name ("_available" will be appended to the name)
183 * @_e: Pointer to a iio_enum struct
184 *
185 * Creates a read only attribute which list all the available enum items in a
186 * space separated list. This should usually be used together with IIO_ENUM()
187 */
188#define IIO_ENUM_AVAILABLE(_name, _e) \
189{ \
190 .name = (_name "_available"), \
191 .shared = true, \
192 .read = iio_enum_available_read, \
193 .private = (uintptr_t)(_e), \
194}
195
196/**
133 * struct iio_chan_spec - specification of a single channel 197 * struct iio_chan_spec - specification of a single channel
134 * @type: What type of measurement is the channel making. 198 * @type: What type of measurement is the channel making.
135 * @channel: What number or name do we wish to assign the channel. 199 * @channel: What number do we wish to assign the channel.
136 * @channel2: If there is a second number for a differential 200 * @channel2: If there is a second number for a differential
137 * channel then this is it. If modified is set then the 201 * channel then this is it. If modified is set then the
138 * value here specifies the modifier. 202 * value here specifies the modifier.
139 * @address: Driver specific identifier. 203 * @address: Driver specific identifier.
140 * @scan_index: Monotonic index to give ordering in scans when read 204 * @scan_index: Monotonic index to give ordering in scans when read
141 * from a buffer. 205 * from a buffer.
142 * @scan_type: Sign: 's' or 'u' to specify signed or unsigned 206 * @scan_type: Sign: 's' or 'u' to specify signed or unsigned
143 * realbits: Number of valid bits of data 207 * realbits: Number of valid bits of data
@@ -147,14 +211,14 @@ struct iio_chan_spec_ext_info {
147 * endianness: little or big endian 211 * endianness: little or big endian
148 * @info_mask: What information is to be exported about this channel. 212 * @info_mask: What information is to be exported about this channel.
149 * This includes calibbias, scale etc. 213 * This includes calibbias, scale etc.
150 * @event_mask: What events can this channel produce. 214 * @event_mask: What events can this channel produce.
151 * @ext_info: Array of extended info attributes for this channel. 215 * @ext_info: Array of extended info attributes for this channel.
152 * The array is NULL terminated, the last element should 216 * The array is NULL terminated, the last element should
153 * have it's name field set to NULL. 217 * have its name field set to NULL.
154 * @extend_name: Allows labeling of channel attributes with an 218 * @extend_name: Allows labeling of channel attributes with an
155 * informative name. Note this has no effect codes etc, 219 * informative name. Note this has no effect codes etc,
156 * unlike modifiers. 220 * unlike modifiers.
157 * @datasheet_name: A name used in in kernel mapping of channels. It should 221 * @datasheet_name: A name used in in-kernel mapping of channels. It should
158 * correspond to the first name that the channel is referred 222 * correspond to the first name that the channel is referred
159 * to by in the datasheet (e.g. IND), or the nearest 223 * to by in the datasheet (e.g. IND), or the nearest
160 * possible compound name (e.g. IND-INC). 224 * possible compound name (e.g. IND-INC).
@@ -163,9 +227,8 @@ struct iio_chan_spec_ext_info {
163 * channel2. Examples are IIO_MOD_X for axial sensors about 227 * channel2. Examples are IIO_MOD_X for axial sensors about
164 * the 'x' axis. 228 * the 'x' axis.
165 * @indexed: Specify the channel has a numerical index. If not, 229 * @indexed: Specify the channel has a numerical index. If not,
166 * the value in channel will be suppressed for attribute 230 * the channel index number will be suppressed for sysfs
167 * but not for event codes. Typically set it to 0 when 231 * attributes but not for event codes.
168 * the index is false.
169 * @differential: Channel is differential. 232 * @differential: Channel is differential.
170 */ 233 */
171struct iio_chan_spec { 234struct iio_chan_spec {
@@ -300,12 +363,16 @@ struct iio_info {
300 * @predisable: [DRIVER] function to run prior to marking buffer 363 * @predisable: [DRIVER] function to run prior to marking buffer
301 * disabled 364 * disabled
302 * @postdisable: [DRIVER] function to run after marking buffer disabled 365 * @postdisable: [DRIVER] function to run after marking buffer disabled
366 * @validate_scan_mask: [DRIVER] function callback to check whether a given
367 * scan mask is valid for the device.
303 */ 368 */
304struct iio_buffer_setup_ops { 369struct iio_buffer_setup_ops {
305 int (*preenable)(struct iio_dev *); 370 int (*preenable)(struct iio_dev *);
306 int (*postenable)(struct iio_dev *); 371 int (*postenable)(struct iio_dev *);
307 int (*predisable)(struct iio_dev *); 372 int (*predisable)(struct iio_dev *);
308 int (*postdisable)(struct iio_dev *); 373 int (*postdisable)(struct iio_dev *);
374 bool (*validate_scan_mask)(struct iio_dev *indio_dev,
375 const unsigned long *scan_mask);
309}; 376};
310 377
311/** 378/**
@@ -329,7 +396,7 @@ struct iio_buffer_setup_ops {
329 * @trig: [INTERN] current device trigger (buffer modes) 396 * @trig: [INTERN] current device trigger (buffer modes)
330 * @pollfunc: [DRIVER] function run on trigger being received 397 * @pollfunc: [DRIVER] function run on trigger being received
331 * @channels: [DRIVER] channel specification structure table 398 * @channels: [DRIVER] channel specification structure table
332 * @num_channels: [DRIVER] number of chanels specified in @channels. 399 * @num_channels: [DRIVER] number of channels specified in @channels.
333 * @channel_attr_list: [INTERN] keep track of automatically created channel 400 * @channel_attr_list: [INTERN] keep track of automatically created channel
334 * attributes 401 * attributes
335 * @chan_attr_group: [INTERN] group for all attrs in base directory 402 * @chan_attr_group: [INTERN] group for all attrs in base directory
@@ -419,7 +486,7 @@ extern struct bus_type iio_bus_type;
419 486
420/** 487/**
421 * iio_device_put() - reference counted deallocation of struct device 488 * iio_device_put() - reference counted deallocation of struct device
422 * @dev: the iio_device containing the device 489 * @indio_dev: IIO device structure containing the device
423 **/ 490 **/
424static inline void iio_device_put(struct iio_dev *indio_dev) 491static inline void iio_device_put(struct iio_dev *indio_dev)
425{ 492{
@@ -429,7 +496,7 @@ static inline void iio_device_put(struct iio_dev *indio_dev)
429 496
430/** 497/**
431 * dev_to_iio_dev() - Get IIO device struct from a device struct 498 * dev_to_iio_dev() - Get IIO device struct from a device struct
432 * @dev: The device embedded in the IIO device 499 * @dev: The device embedded in the IIO device
433 * 500 *
434 * Note: The device must be a IIO device, otherwise the result is undefined. 501 * Note: The device must be a IIO device, otherwise the result is undefined.
435 */ 502 */
@@ -438,11 +505,22 @@ static inline struct iio_dev *dev_to_iio_dev(struct device *dev)
438 return container_of(dev, struct iio_dev, dev); 505 return container_of(dev, struct iio_dev, dev);
439} 506}
440 507
508/**
509 * iio_device_get() - increment reference count for the device
510 * @indio_dev: IIO device structure
511 *
512 * Returns: The passed IIO device
513 **/
514static inline struct iio_dev *iio_device_get(struct iio_dev *indio_dev)
515{
516 return indio_dev ? dev_to_iio_dev(get_device(&indio_dev->dev)) : NULL;
517}
518
441/* Can we make this smaller? */ 519/* Can we make this smaller? */
442#define IIO_ALIGN L1_CACHE_BYTES 520#define IIO_ALIGN L1_CACHE_BYTES
443/** 521/**
444 * iio_device_alloc() - allocate an iio_dev from a driver 522 * iio_device_alloc() - allocate an iio_dev from a driver
445 * @sizeof_priv: Space to allocate for private structure. 523 * @sizeof_priv: Space to allocate for private structure.
446 **/ 524 **/
447struct iio_dev *iio_device_alloc(int sizeof_priv); 525struct iio_dev *iio_device_alloc(int sizeof_priv);
448 526
@@ -459,13 +537,13 @@ static inline struct iio_dev *iio_priv_to_dev(void *priv)
459 537
460/** 538/**
461 * iio_device_free() - free an iio_dev from a driver 539 * iio_device_free() - free an iio_dev from a driver
462 * @dev: the iio_dev associated with the device 540 * @indio_dev: the iio_dev associated with the device
463 **/ 541 **/
464void iio_device_free(struct iio_dev *indio_dev); 542void iio_device_free(struct iio_dev *indio_dev);
465 543
466/** 544/**
467 * iio_buffer_enabled() - helper function to test if the buffer is enabled 545 * iio_buffer_enabled() - helper function to test if the buffer is enabled
468 * @indio_dev: IIO device info structure for device 546 * @indio_dev: IIO device structure for device
469 **/ 547 **/
470static inline bool iio_buffer_enabled(struct iio_dev *indio_dev) 548static inline bool iio_buffer_enabled(struct iio_dev *indio_dev)
471{ 549{
@@ -475,7 +553,7 @@ static inline bool iio_buffer_enabled(struct iio_dev *indio_dev)
475 553
476/** 554/**
477 * iio_get_debugfs_dentry() - helper function to get the debugfs_dentry 555 * iio_get_debugfs_dentry() - helper function to get the debugfs_dentry
478 * @indio_dev: IIO device info structure for device 556 * @indio_dev: IIO device structure for device
479 **/ 557 **/
480#if defined(CONFIG_DEBUG_FS) 558#if defined(CONFIG_DEBUG_FS)
481static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev) 559static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev)
diff --git a/include/linux/iio/machine.h b/include/linux/iio/machine.h
index 0b1f19bfdc44..400a453ff67b 100644
--- a/include/linux/iio/machine.h
+++ b/include/linux/iio/machine.h
@@ -14,7 +14,7 @@
14 * This is matched against the datasheet_name element 14 * This is matched against the datasheet_name element
15 * of struct iio_chan_spec. 15 * of struct iio_chan_spec.
16 * @consumer_dev_name: Name to uniquely identify the consumer device. 16 * @consumer_dev_name: Name to uniquely identify the consumer device.
17 * @consumer_channel: Unique name used to idenitify the channel on the 17 * @consumer_channel: Unique name used to identify the channel on the
18 * consumer side. 18 * consumer side.
19 */ 19 */
20struct iio_map { 20struct iio_map {
diff --git a/include/linux/iio/sysfs.h b/include/linux/iio/sysfs.h
index bfedb73b850e..b7a934b9431b 100644
--- a/include/linux/iio/sysfs.h
+++ b/include/linux/iio/sysfs.h
@@ -97,7 +97,7 @@ struct iio_const_attr {
97#define IIO_DEV_ATTR_SAMP_FREQ_AVAIL(_show) \ 97#define IIO_DEV_ATTR_SAMP_FREQ_AVAIL(_show) \
98 IIO_DEVICE_ATTR(sampling_frequency_available, S_IRUGO, _show, NULL, 0) 98 IIO_DEVICE_ATTR(sampling_frequency_available, S_IRUGO, _show, NULL, 0)
99/** 99/**
100 * IIO_CONST_ATTR_AVAIL_SAMP_FREQ - list available sampling frequencies 100 * IIO_CONST_ATTR_SAMP_FREQ_AVAIL - list available sampling frequencies
101 * @_string: frequency string for the attribute 101 * @_string: frequency string for the attribute
102 * 102 *
103 * Constant version 103 * Constant version
diff --git a/include/linux/iio/triggered_buffer.h b/include/linux/iio/triggered_buffer.h
new file mode 100644
index 000000000000..c378ebec605e
--- /dev/null
+++ b/include/linux/iio/triggered_buffer.h
@@ -0,0 +1,15 @@
1#ifndef _LINUX_IIO_TRIGGERED_BUFFER_H_
2#define _LINUX_IIO_TRIGGERED_BUFFER_H_
3
4#include <linux/interrupt.h>
5
6struct iio_dev;
7struct iio_buffer_setup_ops;
8
9int iio_triggered_buffer_setup(struct iio_dev *indio_dev,
10 irqreturn_t (*pollfunc_bh)(int irq, void *p),
11 irqreturn_t (*pollfunc_th)(int irq, void *p),
12 const struct iio_buffer_setup_ops *setup_ops);
13void iio_triggered_buffer_cleanup(struct iio_dev *indio_dev);
14
15#endif
diff --git a/include/linux/iio/types.h b/include/linux/iio/types.h
index 1b073b1cc7c2..44e397705d7f 100644
--- a/include/linux/iio/types.h
+++ b/include/linux/iio/types.h
@@ -11,7 +11,6 @@
11#define _IIO_TYPES_H_ 11#define _IIO_TYPES_H_
12 12
13enum iio_chan_type { 13enum iio_chan_type {
14 /* real channel types */
15 IIO_VOLTAGE, 14 IIO_VOLTAGE,
16 IIO_CURRENT, 15 IIO_CURRENT,
17 IIO_POWER, 16 IIO_POWER,
@@ -28,6 +27,7 @@ enum iio_chan_type {
28 IIO_TIMESTAMP, 27 IIO_TIMESTAMP,
29 IIO_CAPACITANCE, 28 IIO_CAPACITANCE,
30 IIO_ALTVOLTAGE, 29 IIO_ALTVOLTAGE,
30 IIO_CCT,
31}; 31};
32 32
33enum iio_modifier { 33enum iio_modifier {
@@ -45,6 +45,12 @@ enum iio_modifier {
45 IIO_MOD_X_OR_Y_OR_Z, 45 IIO_MOD_X_OR_Y_OR_Z,
46 IIO_MOD_LIGHT_BOTH, 46 IIO_MOD_LIGHT_BOTH,
47 IIO_MOD_LIGHT_IR, 47 IIO_MOD_LIGHT_IR,
48 IIO_MOD_ROOT_SUM_SQUARED_X_Y,
49 IIO_MOD_SUM_SQUARED_X_Y_Z,
50 IIO_MOD_LIGHT_CLEAR,
51 IIO_MOD_LIGHT_RED,
52 IIO_MOD_LIGHT_GREEN,
53 IIO_MOD_LIGHT_BLUE,
48}; 54};
49 55
50#define IIO_VAL_INT 1 56#define IIO_VAL_INT 1
diff --git a/include/linux/inetdevice.h b/include/linux/inetdevice.h
index 597f4a9f3240..67f9ddacb70c 100644
--- a/include/linux/inetdevice.h
+++ b/include/linux/inetdevice.h
@@ -38,6 +38,7 @@ enum
38 IPV4_DEVCONF_ACCEPT_LOCAL, 38 IPV4_DEVCONF_ACCEPT_LOCAL,
39 IPV4_DEVCONF_SRC_VMARK, 39 IPV4_DEVCONF_SRC_VMARK,
40 IPV4_DEVCONF_PROXY_ARP_PVLAN, 40 IPV4_DEVCONF_PROXY_ARP_PVLAN,
41 IPV4_DEVCONF_ROUTE_LOCALNET,
41 __IPV4_DEVCONF_MAX 42 __IPV4_DEVCONF_MAX
42}; 43};
43 44
@@ -131,6 +132,7 @@ static inline void ipv4_devconf_setall(struct in_device *in_dev)
131#define IN_DEV_PROMOTE_SECONDARIES(in_dev) \ 132#define IN_DEV_PROMOTE_SECONDARIES(in_dev) \
132 IN_DEV_ORCONF((in_dev), \ 133 IN_DEV_ORCONF((in_dev), \
133 PROMOTE_SECONDARIES) 134 PROMOTE_SECONDARIES)
135#define IN_DEV_ROUTE_LOCALNET(in_dev) IN_DEV_ORCONF(in_dev, ROUTE_LOCALNET)
134 136
135#define IN_DEV_RX_REDIRECTS(in_dev) \ 137#define IN_DEV_RX_REDIRECTS(in_dev) \
136 ((IN_DEV_FORWARD(in_dev) && \ 138 ((IN_DEV_FORWARD(in_dev) && \
diff --git a/include/linux/init_task.h b/include/linux/init_task.h
index 9e65eff6af3b..89f1cb1056f0 100644
--- a/include/linux/init_task.h
+++ b/include/linux/init_task.h
@@ -123,8 +123,17 @@ extern struct group_info init_groups;
123 123
124extern struct cred init_cred; 124extern struct cred init_cred;
125 125
126extern struct task_group root_task_group;
127
128#ifdef CONFIG_CGROUP_SCHED
129# define INIT_CGROUP_SCHED(tsk) \
130 .sched_task_group = &root_task_group,
131#else
132# define INIT_CGROUP_SCHED(tsk)
133#endif
134
126#ifdef CONFIG_PERF_EVENTS 135#ifdef CONFIG_PERF_EVENTS
127# define INIT_PERF_EVENTS(tsk) \ 136# define INIT_PERF_EVENTS(tsk) \
128 .perf_event_mutex = \ 137 .perf_event_mutex = \
129 __MUTEX_INITIALIZER(tsk.perf_event_mutex), \ 138 __MUTEX_INITIALIZER(tsk.perf_event_mutex), \
130 .perf_event_list = LIST_HEAD_INIT(tsk.perf_event_list), 139 .perf_event_list = LIST_HEAD_INIT(tsk.perf_event_list),
@@ -161,6 +170,7 @@ extern struct cred init_cred;
161 }, \ 170 }, \
162 .tasks = LIST_HEAD_INIT(tsk.tasks), \ 171 .tasks = LIST_HEAD_INIT(tsk.tasks), \
163 INIT_PUSHABLE_TASKS(tsk) \ 172 INIT_PUSHABLE_TASKS(tsk) \
173 INIT_CGROUP_SCHED(tsk) \
164 .ptraced = LIST_HEAD_INIT(tsk.ptraced), \ 174 .ptraced = LIST_HEAD_INIT(tsk.ptraced), \
165 .ptrace_entry = LIST_HEAD_INIT(tsk.ptrace_entry), \ 175 .ptrace_entry = LIST_HEAD_INIT(tsk.ptrace_entry), \
166 .real_parent = &tsk, \ 176 .real_parent = &tsk, \
@@ -168,8 +178,8 @@ extern struct cred init_cred;
168 .children = LIST_HEAD_INIT(tsk.children), \ 178 .children = LIST_HEAD_INIT(tsk.children), \
169 .sibling = LIST_HEAD_INIT(tsk.sibling), \ 179 .sibling = LIST_HEAD_INIT(tsk.sibling), \
170 .group_leader = &tsk, \ 180 .group_leader = &tsk, \
171 RCU_INIT_POINTER(.real_cred, &init_cred), \ 181 RCU_POINTER_INITIALIZER(real_cred, &init_cred), \
172 RCU_INIT_POINTER(.cred, &init_cred), \ 182 RCU_POINTER_INITIALIZER(cred, &init_cred), \
173 .comm = INIT_TASK_COMM, \ 183 .comm = INIT_TASK_COMM, \
174 .thread = INIT_THREAD, \ 184 .thread = INIT_THREAD, \
175 .fs = &init_fs, \ 185 .fs = &init_fs, \
diff --git a/include/linux/input.h b/include/linux/input.h
index a81671453575..725dcd0f63a4 100644
--- a/include/linux/input.h
+++ b/include/linux/input.h
@@ -116,6 +116,7 @@ struct input_keymap_entry {
116 116
117/** 117/**
118 * EVIOCGMTSLOTS(len) - get MT slot values 118 * EVIOCGMTSLOTS(len) - get MT slot values
119 * @len: size of the data buffer in bytes
119 * 120 *
120 * The ioctl buffer argument should be binary equivalent to 121 * The ioctl buffer argument should be binary equivalent to
121 * 122 *
@@ -806,18 +807,20 @@ struct input_keymap_entry {
806#define ABS_MT_WIDTH_MAJOR 0x32 /* Major axis of approaching ellipse */ 807#define ABS_MT_WIDTH_MAJOR 0x32 /* Major axis of approaching ellipse */
807#define ABS_MT_WIDTH_MINOR 0x33 /* Minor axis (omit if circular) */ 808#define ABS_MT_WIDTH_MINOR 0x33 /* Minor axis (omit if circular) */
808#define ABS_MT_ORIENTATION 0x34 /* Ellipse orientation */ 809#define ABS_MT_ORIENTATION 0x34 /* Ellipse orientation */
809#define ABS_MT_POSITION_X 0x35 /* Center X ellipse position */ 810#define ABS_MT_POSITION_X 0x35 /* Center X touch position */
810#define ABS_MT_POSITION_Y 0x36 /* Center Y ellipse position */ 811#define ABS_MT_POSITION_Y 0x36 /* Center Y touch position */
811#define ABS_MT_TOOL_TYPE 0x37 /* Type of touching device */ 812#define ABS_MT_TOOL_TYPE 0x37 /* Type of touching device */
812#define ABS_MT_BLOB_ID 0x38 /* Group a set of packets as a blob */ 813#define ABS_MT_BLOB_ID 0x38 /* Group a set of packets as a blob */
813#define ABS_MT_TRACKING_ID 0x39 /* Unique ID of initiated contact */ 814#define ABS_MT_TRACKING_ID 0x39 /* Unique ID of initiated contact */
814#define ABS_MT_PRESSURE 0x3a /* Pressure on contact area */ 815#define ABS_MT_PRESSURE 0x3a /* Pressure on contact area */
815#define ABS_MT_DISTANCE 0x3b /* Contact hover distance */ 816#define ABS_MT_DISTANCE 0x3b /* Contact hover distance */
817#define ABS_MT_TOOL_X 0x3c /* Center X tool position */
818#define ABS_MT_TOOL_Y 0x3d /* Center Y tool position */
816 819
817#ifdef __KERNEL__ 820#ifdef __KERNEL__
818/* Implementation details, userspace should not care about these */ 821/* Implementation details, userspace should not care about these */
819#define ABS_MT_FIRST ABS_MT_TOUCH_MAJOR 822#define ABS_MT_FIRST ABS_MT_TOUCH_MAJOR
820#define ABS_MT_LAST ABS_MT_DISTANCE 823#define ABS_MT_LAST ABS_MT_TOOL_Y
821#endif 824#endif
822 825
823#define ABS_MAX 0x3f 826#define ABS_MAX 0x3f
diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h
index e6ca56de9936..78e2ada50cd5 100644
--- a/include/linux/intel-iommu.h
+++ b/include/linux/intel-iommu.h
@@ -308,6 +308,8 @@ enum {
308 308
309struct intel_iommu { 309struct intel_iommu {
310 void __iomem *reg; /* Pointer to hardware regs, virtual addr */ 310 void __iomem *reg; /* Pointer to hardware regs, virtual addr */
311 u64 reg_phys; /* physical address of hw register set */
312 u64 reg_size; /* size of hw register set */
311 u64 cap; 313 u64 cap;
312 u64 ecap; 314 u64 ecap;
313 u32 gcmd; /* Holds TE, EAFL. Don't need SRTP, SFL, WBF */ 315 u32 gcmd; /* Holds TE, EAFL. Don't need SRTP, SFL, WBF */
diff --git a/include/linux/io.h b/include/linux/io.h
index 7fd2d2138bf3..069e4075f872 100644
--- a/include/linux/io.h
+++ b/include/linux/io.h
@@ -67,4 +67,13 @@ int check_signature(const volatile void __iomem *io_addr,
67 const unsigned char *signature, int length); 67 const unsigned char *signature, int length);
68void devm_ioremap_release(struct device *dev, void *res); 68void devm_ioremap_release(struct device *dev, void *res);
69 69
70/*
71 * Some systems do not have legacy ISA devices.
72 * /dev/port is not a valid interface on these systems.
73 * So for those archs, <asm/io.h> should define the following symbol.
74 */
75#ifndef arch_has_dev_port
76#define arch_has_dev_port() (1)
77#endif
78
70#endif /* _LINUX_IO_H */ 79#endif /* _LINUX_IO_H */
diff --git a/include/linux/iommu.h b/include/linux/iommu.h
index 450293f6d68b..54d6d690073c 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -26,6 +26,7 @@
26#define IOMMU_CACHE (4) /* DMA cache coherency */ 26#define IOMMU_CACHE (4) /* DMA cache coherency */
27 27
28struct iommu_ops; 28struct iommu_ops;
29struct iommu_group;
29struct bus_type; 30struct bus_type;
30struct device; 31struct device;
31struct iommu_domain; 32struct iommu_domain;
@@ -37,16 +38,28 @@ struct iommu_domain;
37typedef int (*iommu_fault_handler_t)(struct iommu_domain *, 38typedef int (*iommu_fault_handler_t)(struct iommu_domain *,
38 struct device *, unsigned long, int, void *); 39 struct device *, unsigned long, int, void *);
39 40
41struct iommu_domain_geometry {
42 dma_addr_t aperture_start; /* First address that can be mapped */
43 dma_addr_t aperture_end; /* Last address that can be mapped */
44 bool force_aperture; /* DMA only allowed in mappable range? */
45};
46
40struct iommu_domain { 47struct iommu_domain {
41 struct iommu_ops *ops; 48 struct iommu_ops *ops;
42 void *priv; 49 void *priv;
43 iommu_fault_handler_t handler; 50 iommu_fault_handler_t handler;
44 void *handler_token; 51 void *handler_token;
52 struct iommu_domain_geometry geometry;
45}; 53};
46 54
47#define IOMMU_CAP_CACHE_COHERENCY 0x1 55#define IOMMU_CAP_CACHE_COHERENCY 0x1
48#define IOMMU_CAP_INTR_REMAP 0x2 /* isolates device intrs */ 56#define IOMMU_CAP_INTR_REMAP 0x2 /* isolates device intrs */
49 57
58enum iommu_attr {
59 DOMAIN_ATTR_MAX,
60 DOMAIN_ATTR_GEOMETRY,
61};
62
50#ifdef CONFIG_IOMMU_API 63#ifdef CONFIG_IOMMU_API
51 64
52/** 65/**
@@ -59,7 +72,10 @@ struct iommu_domain {
59 * @unmap: unmap a physically contiguous memory region from an iommu domain 72 * @unmap: unmap a physically contiguous memory region from an iommu domain
60 * @iova_to_phys: translate iova to physical address 73 * @iova_to_phys: translate iova to physical address
61 * @domain_has_cap: domain capabilities query 74 * @domain_has_cap: domain capabilities query
62 * @commit: commit iommu domain 75 * @add_device: add device to iommu grouping
76 * @remove_device: remove device from iommu grouping
77 * @domain_get_attr: Query domain attributes
78 * @domain_set_attr: Change domain attributes
63 * @pgsize_bitmap: bitmap of supported page sizes 79 * @pgsize_bitmap: bitmap of supported page sizes
64 */ 80 */
65struct iommu_ops { 81struct iommu_ops {
@@ -75,10 +91,23 @@ struct iommu_ops {
75 unsigned long iova); 91 unsigned long iova);
76 int (*domain_has_cap)(struct iommu_domain *domain, 92 int (*domain_has_cap)(struct iommu_domain *domain,
77 unsigned long cap); 93 unsigned long cap);
94 int (*add_device)(struct device *dev);
95 void (*remove_device)(struct device *dev);
78 int (*device_group)(struct device *dev, unsigned int *groupid); 96 int (*device_group)(struct device *dev, unsigned int *groupid);
97 int (*domain_get_attr)(struct iommu_domain *domain,
98 enum iommu_attr attr, void *data);
99 int (*domain_set_attr)(struct iommu_domain *domain,
100 enum iommu_attr attr, void *data);
79 unsigned long pgsize_bitmap; 101 unsigned long pgsize_bitmap;
80}; 102};
81 103
104#define IOMMU_GROUP_NOTIFY_ADD_DEVICE 1 /* Device added */
105#define IOMMU_GROUP_NOTIFY_DEL_DEVICE 2 /* Pre Device removed */
106#define IOMMU_GROUP_NOTIFY_BIND_DRIVER 3 /* Pre Driver bind */
107#define IOMMU_GROUP_NOTIFY_BOUND_DRIVER 4 /* Post Driver bind */
108#define IOMMU_GROUP_NOTIFY_UNBIND_DRIVER 5 /* Pre Driver unbind */
109#define IOMMU_GROUP_NOTIFY_UNBOUND_DRIVER 6 /* Post Driver unbind */
110
82extern int bus_set_iommu(struct bus_type *bus, struct iommu_ops *ops); 111extern int bus_set_iommu(struct bus_type *bus, struct iommu_ops *ops);
83extern bool iommu_present(struct bus_type *bus); 112extern bool iommu_present(struct bus_type *bus);
84extern struct iommu_domain *iommu_domain_alloc(struct bus_type *bus); 113extern struct iommu_domain *iommu_domain_alloc(struct bus_type *bus);
@@ -97,7 +126,34 @@ extern int iommu_domain_has_cap(struct iommu_domain *domain,
97 unsigned long cap); 126 unsigned long cap);
98extern void iommu_set_fault_handler(struct iommu_domain *domain, 127extern void iommu_set_fault_handler(struct iommu_domain *domain,
99 iommu_fault_handler_t handler, void *token); 128 iommu_fault_handler_t handler, void *token);
100extern int iommu_device_group(struct device *dev, unsigned int *groupid); 129
130extern int iommu_attach_group(struct iommu_domain *domain,
131 struct iommu_group *group);
132extern void iommu_detach_group(struct iommu_domain *domain,
133 struct iommu_group *group);
134extern struct iommu_group *iommu_group_alloc(void);
135extern void *iommu_group_get_iommudata(struct iommu_group *group);
136extern void iommu_group_set_iommudata(struct iommu_group *group,
137 void *iommu_data,
138 void (*release)(void *iommu_data));
139extern int iommu_group_set_name(struct iommu_group *group, const char *name);
140extern int iommu_group_add_device(struct iommu_group *group,
141 struct device *dev);
142extern void iommu_group_remove_device(struct device *dev);
143extern int iommu_group_for_each_dev(struct iommu_group *group, void *data,
144 int (*fn)(struct device *, void *));
145extern struct iommu_group *iommu_group_get(struct device *dev);
146extern void iommu_group_put(struct iommu_group *group);
147extern int iommu_group_register_notifier(struct iommu_group *group,
148 struct notifier_block *nb);
149extern int iommu_group_unregister_notifier(struct iommu_group *group,
150 struct notifier_block *nb);
151extern int iommu_group_id(struct iommu_group *group);
152
153extern int iommu_domain_get_attr(struct iommu_domain *domain, enum iommu_attr,
154 void *data);
155extern int iommu_domain_set_attr(struct iommu_domain *domain, enum iommu_attr,
156 void *data);
101 157
102/** 158/**
103 * report_iommu_fault() - report about an IOMMU fault to the IOMMU framework 159 * report_iommu_fault() - report about an IOMMU fault to the IOMMU framework
@@ -142,6 +198,7 @@ static inline int report_iommu_fault(struct iommu_domain *domain,
142#else /* CONFIG_IOMMU_API */ 198#else /* CONFIG_IOMMU_API */
143 199
144struct iommu_ops {}; 200struct iommu_ops {};
201struct iommu_group {};
145 202
146static inline bool iommu_present(struct bus_type *bus) 203static inline bool iommu_present(struct bus_type *bus)
147{ 204{
@@ -197,11 +254,88 @@ static inline void iommu_set_fault_handler(struct iommu_domain *domain,
197{ 254{
198} 255}
199 256
200static inline int iommu_device_group(struct device *dev, unsigned int *groupid) 257int iommu_attach_group(struct iommu_domain *domain, struct iommu_group *group)
258{
259 return -ENODEV;
260}
261
262void iommu_detach_group(struct iommu_domain *domain, struct iommu_group *group)
263{
264}
265
266struct iommu_group *iommu_group_alloc(void)
267{
268 return ERR_PTR(-ENODEV);
269}
270
271void *iommu_group_get_iommudata(struct iommu_group *group)
272{
273 return NULL;
274}
275
276void iommu_group_set_iommudata(struct iommu_group *group, void *iommu_data,
277 void (*release)(void *iommu_data))
278{
279}
280
281int iommu_group_set_name(struct iommu_group *group, const char *name)
282{
283 return -ENODEV;
284}
285
286int iommu_group_add_device(struct iommu_group *group, struct device *dev)
287{
288 return -ENODEV;
289}
290
291void iommu_group_remove_device(struct device *dev)
292{
293}
294
295int iommu_group_for_each_dev(struct iommu_group *group, void *data,
296 int (*fn)(struct device *, void *))
297{
298 return -ENODEV;
299}
300
301struct iommu_group *iommu_group_get(struct device *dev)
302{
303 return NULL;
304}
305
306void iommu_group_put(struct iommu_group *group)
307{
308}
309
310int iommu_group_register_notifier(struct iommu_group *group,
311 struct notifier_block *nb)
201{ 312{
202 return -ENODEV; 313 return -ENODEV;
203} 314}
204 315
316int iommu_group_unregister_notifier(struct iommu_group *group,
317 struct notifier_block *nb)
318{
319 return 0;
320}
321
322int iommu_group_id(struct iommu_group *group)
323{
324 return -ENODEV;
325}
326
327static inline int iommu_domain_get_attr(struct iommu_domain *domain,
328 enum iommu_attr attr, void *data)
329{
330 return -EINVAL;
331}
332
333static inline int iommu_domain_set_attr(struct iommu_domain *domain,
334 enum iommu_attr attr, void *data)
335{
336 return -EINVAL;
337}
338
205#endif /* CONFIG_IOMMU_API */ 339#endif /* CONFIG_IOMMU_API */
206 340
207#endif /* __LINUX_IOMMU_H */ 341#endif /* __LINUX_IOMMU_H */
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h
index 8260ef779762..379e433e15e0 100644
--- a/include/linux/ipv6.h
+++ b/include/linux/ipv6.h
@@ -299,9 +299,9 @@ struct ipv6_pinfo {
299 struct in6_addr rcv_saddr; 299 struct in6_addr rcv_saddr;
300 struct in6_addr daddr; 300 struct in6_addr daddr;
301 struct in6_pktinfo sticky_pktinfo; 301 struct in6_pktinfo sticky_pktinfo;
302 struct in6_addr *daddr_cache; 302 const struct in6_addr *daddr_cache;
303#ifdef CONFIG_IPV6_SUBTREES 303#ifdef CONFIG_IPV6_SUBTREES
304 struct in6_addr *saddr_cache; 304 const struct in6_addr *saddr_cache;
305#endif 305#endif
306 306
307 __be32 flow_label; 307 __be32 flow_label;
@@ -410,6 +410,22 @@ struct tcp6_sock {
410 410
411extern int inet6_sk_rebuild_header(struct sock *sk); 411extern int inet6_sk_rebuild_header(struct sock *sk);
412 412
413struct inet6_timewait_sock {
414 struct in6_addr tw_v6_daddr;
415 struct in6_addr tw_v6_rcv_saddr;
416};
417
418struct tcp6_timewait_sock {
419 struct tcp_timewait_sock tcp6tw_tcp;
420 struct inet6_timewait_sock tcp6tw_inet6;
421};
422
423static inline struct inet6_timewait_sock *inet6_twsk(const struct sock *sk)
424{
425 return (struct inet6_timewait_sock *)(((u8 *)sk) +
426 inet_twsk(sk)->tw_ipv6_offset);
427}
428
413#if IS_ENABLED(CONFIG_IPV6) 429#if IS_ENABLED(CONFIG_IPV6)
414static inline struct ipv6_pinfo * inet6_sk(const struct sock *__sk) 430static inline struct ipv6_pinfo * inet6_sk(const struct sock *__sk)
415{ 431{
@@ -459,28 +475,12 @@ static inline void inet_sk_copy_descendant(struct sock *sk_to,
459#define __ipv6_only_sock(sk) (inet6_sk(sk)->ipv6only) 475#define __ipv6_only_sock(sk) (inet6_sk(sk)->ipv6only)
460#define ipv6_only_sock(sk) ((sk)->sk_family == PF_INET6 && __ipv6_only_sock(sk)) 476#define ipv6_only_sock(sk) ((sk)->sk_family == PF_INET6 && __ipv6_only_sock(sk))
461 477
462struct inet6_timewait_sock {
463 struct in6_addr tw_v6_daddr;
464 struct in6_addr tw_v6_rcv_saddr;
465};
466
467struct tcp6_timewait_sock {
468 struct tcp_timewait_sock tcp6tw_tcp;
469 struct inet6_timewait_sock tcp6tw_inet6;
470};
471
472static inline u16 inet6_tw_offset(const struct proto *prot) 478static inline u16 inet6_tw_offset(const struct proto *prot)
473{ 479{
474 return prot->twsk_prot->twsk_obj_size - 480 return prot->twsk_prot->twsk_obj_size -
475 sizeof(struct inet6_timewait_sock); 481 sizeof(struct inet6_timewait_sock);
476} 482}
477 483
478static inline struct inet6_timewait_sock *inet6_twsk(const struct sock *sk)
479{
480 return (struct inet6_timewait_sock *)(((u8 *)sk) +
481 inet_twsk(sk)->tw_ipv6_offset);
482}
483
484static inline struct in6_addr *__inet6_rcv_saddr(const struct sock *sk) 484static inline struct in6_addr *__inet6_rcv_saddr(const struct sock *sk)
485{ 485{
486 return likely(sk->sk_state != TCP_TIME_WAIT) ? 486 return likely(sk->sk_state != TCP_TIME_WAIT) ?
diff --git a/include/linux/irq.h b/include/linux/irq.h
index 61f5cec031e0..553fb66da130 100644
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
@@ -150,9 +150,7 @@ struct irq_data {
150 void *handler_data; 150 void *handler_data;
151 void *chip_data; 151 void *chip_data;
152 struct msi_desc *msi_desc; 152 struct msi_desc *msi_desc;
153#ifdef CONFIG_SMP
154 cpumask_var_t affinity; 153 cpumask_var_t affinity;
155#endif
156}; 154};
157 155
158/* 156/*
@@ -301,8 +299,6 @@ static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d)
301 * @irq_pm_shutdown: function called from core code on shutdown once per chip 299 * @irq_pm_shutdown: function called from core code on shutdown once per chip
302 * @irq_print_chip: optional to print special chip info in show_interrupts 300 * @irq_print_chip: optional to print special chip info in show_interrupts
303 * @flags: chip specific flags 301 * @flags: chip specific flags
304 *
305 * @release: release function solely used by UML
306 */ 302 */
307struct irq_chip { 303struct irq_chip {
308 const char *name; 304 const char *name;
diff --git a/include/linux/jump_label.h b/include/linux/jump_label.h
index c513a40510f5..0976fc46d1e0 100644
--- a/include/linux/jump_label.h
+++ b/include/linux/jump_label.h
@@ -42,8 +42,7 @@
42 * allowed. 42 * allowed.
43 * 43 *
44 * Not initializing the key (static data is initialized to 0s anyway) is the 44 * Not initializing the key (static data is initialized to 0s anyway) is the
45 * same as using STATIC_KEY_INIT_FALSE and static_key_false() is 45 * same as using STATIC_KEY_INIT_FALSE.
46 * equivalent with static_branch().
47 * 46 *
48*/ 47*/
49 48
@@ -107,12 +106,6 @@ static __always_inline bool static_key_true(struct static_key *key)
107 return !static_key_false(key); 106 return !static_key_false(key);
108} 107}
109 108
110/* Deprecated. Please use 'static_key_false() instead. */
111static __always_inline bool static_branch(struct static_key *key)
112{
113 return arch_static_branch(key);
114}
115
116extern struct jump_entry __start___jump_table[]; 109extern struct jump_entry __start___jump_table[];
117extern struct jump_entry __stop___jump_table[]; 110extern struct jump_entry __stop___jump_table[];
118 111
@@ -166,14 +159,6 @@ static __always_inline bool static_key_true(struct static_key *key)
166 return false; 159 return false;
167} 160}
168 161
169/* Deprecated. Please use 'static_key_false() instead. */
170static __always_inline bool static_branch(struct static_key *key)
171{
172 if (unlikely(atomic_read(&key->enabled)) > 0)
173 return true;
174 return false;
175}
176
177static inline void static_key_slow_inc(struct static_key *key) 162static inline void static_key_slow_inc(struct static_key *key)
178{ 163{
179 atomic_inc(&key->enabled); 164 atomic_inc(&key->enabled);
diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index e07f5e0c5df4..604382143bcf 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -377,7 +377,6 @@ extern enum system_states {
377 SYSTEM_HALT, 377 SYSTEM_HALT,
378 SYSTEM_POWER_OFF, 378 SYSTEM_POWER_OFF,
379 SYSTEM_RESTART, 379 SYSTEM_RESTART,
380 SYSTEM_SUSPEND_DISK,
381} system_state; 380} system_state;
382 381
383#define TAINT_PROPRIETARY_MODULE 0 382#define TAINT_PROPRIETARY_MODULE 0
diff --git a/include/linux/key.h b/include/linux/key.h
index 4cd22ed627ef..cef3b315ba7c 100644
--- a/include/linux/key.h
+++ b/include/linux/key.h
@@ -303,7 +303,9 @@ static inline bool key_is_instantiated(const struct key *key)
303 rwsem_is_locked(&((struct key *)(KEY))->sem))) 303 rwsem_is_locked(&((struct key *)(KEY))->sem)))
304 304
305#define rcu_assign_keypointer(KEY, PAYLOAD) \ 305#define rcu_assign_keypointer(KEY, PAYLOAD) \
306 (rcu_assign_pointer((KEY)->payload.rcudata, PAYLOAD)) 306do { \
307 rcu_assign_pointer((KEY)->payload.rcudata, (PAYLOAD)); \
308} while (0)
307 309
308#ifdef CONFIG_SYSCTL 310#ifdef CONFIG_SYSCTL
309extern ctl_table key_sysctls[]; 311extern ctl_table key_sysctls[];
diff --git a/include/linux/kmsg_dump.h b/include/linux/kmsg_dump.h
index 35f7237ec972..2e7a1e032c71 100644
--- a/include/linux/kmsg_dump.h
+++ b/include/linux/kmsg_dump.h
@@ -21,6 +21,7 @@
21 * is passed to the kernel. 21 * is passed to the kernel.
22 */ 22 */
23enum kmsg_dump_reason { 23enum kmsg_dump_reason {
24 KMSG_DUMP_UNDEF,
24 KMSG_DUMP_PANIC, 25 KMSG_DUMP_PANIC,
25 KMSG_DUMP_OOPS, 26 KMSG_DUMP_OOPS,
26 KMSG_DUMP_EMERG, 27 KMSG_DUMP_EMERG,
@@ -31,23 +32,42 @@ enum kmsg_dump_reason {
31 32
32/** 33/**
33 * struct kmsg_dumper - kernel crash message dumper structure 34 * struct kmsg_dumper - kernel crash message dumper structure
34 * @dump: The callback which gets called on crashes. The buffer is passed
35 * as two sections, where s1 (length l1) contains the older
36 * messages and s2 (length l2) contains the newer.
37 * @list: Entry in the dumper list (private) 35 * @list: Entry in the dumper list (private)
36 * @dump: Call into dumping code which will retrieve the data with
37 * through the record iterator
38 * @max_reason: filter for highest reason number that should be dumped
38 * @registered: Flag that specifies if this is already registered 39 * @registered: Flag that specifies if this is already registered
39 */ 40 */
40struct kmsg_dumper { 41struct kmsg_dumper {
41 void (*dump)(struct kmsg_dumper *dumper, enum kmsg_dump_reason reason,
42 const char *s1, unsigned long l1,
43 const char *s2, unsigned long l2);
44 struct list_head list; 42 struct list_head list;
45 int registered; 43 void (*dump)(struct kmsg_dumper *dumper, enum kmsg_dump_reason reason);
44 enum kmsg_dump_reason max_reason;
45 bool active;
46 bool registered;
47
48 /* private state of the kmsg iterator */
49 u32 cur_idx;
50 u32 next_idx;
51 u64 cur_seq;
52 u64 next_seq;
46}; 53};
47 54
48#ifdef CONFIG_PRINTK 55#ifdef CONFIG_PRINTK
49void kmsg_dump(enum kmsg_dump_reason reason); 56void kmsg_dump(enum kmsg_dump_reason reason);
50 57
58bool kmsg_dump_get_line_nolock(struct kmsg_dumper *dumper, bool syslog,
59 char *line, size_t size, size_t *len);
60
61bool kmsg_dump_get_line(struct kmsg_dumper *dumper, bool syslog,
62 char *line, size_t size, size_t *len);
63
64bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog,
65 char *buf, size_t size, size_t *len);
66
67void kmsg_dump_rewind_nolock(struct kmsg_dumper *dumper);
68
69void kmsg_dump_rewind(struct kmsg_dumper *dumper);
70
51int kmsg_dump_register(struct kmsg_dumper *dumper); 71int kmsg_dump_register(struct kmsg_dumper *dumper);
52 72
53int kmsg_dump_unregister(struct kmsg_dumper *dumper); 73int kmsg_dump_unregister(struct kmsg_dumper *dumper);
@@ -56,6 +76,33 @@ static inline void kmsg_dump(enum kmsg_dump_reason reason)
56{ 76{
57} 77}
58 78
79static inline bool kmsg_dump_get_line_nolock(struct kmsg_dumper *dumper,
80 bool syslog, const char *line,
81 size_t size, size_t *len)
82{
83 return false;
84}
85
86static inline bool kmsg_dump_get_line(struct kmsg_dumper *dumper, bool syslog,
87 const char *line, size_t size, size_t *len)
88{
89 return false;
90}
91
92static inline bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog,
93 char *buf, size_t size, size_t *len)
94{
95 return false;
96}
97
98static inline void kmsg_dump_rewind_nolock(struct kmsg_dumper *dumper)
99{
100}
101
102static inline void kmsg_dump_rewind(struct kmsg_dumper *dumper)
103{
104}
105
59static inline int kmsg_dump_register(struct kmsg_dumper *dumper) 106static inline int kmsg_dump_register(struct kmsg_dumper *dumper)
60{ 107{
61 return -EINVAL; 108 return -EINVAL;
diff --git a/include/linux/ks8851_mll.h b/include/linux/ks8851_mll.h
new file mode 100644
index 000000000000..e9ccfb59ed30
--- /dev/null
+++ b/include/linux/ks8851_mll.h
@@ -0,0 +1,33 @@
1/*
2 * ks8861_mll platform data struct definition
3 * Copyright (c) 2012 BTicino S.p.A.
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17 */
18
19#ifndef _LINUX_KS8851_MLL_H
20#define _LINUX_KS8851_MLL_H
21
22#include <linux/if_ether.h>
23
24/**
25 * struct ks8851_mll_platform_data - Platform data of the KS8851_MLL network driver
26 * @macaddr: The MAC address of the device, set to all 0:s to use the on in
27 * the chip.
28 */
29struct ks8851_mll_platform_data {
30 u8 mac_addr[ETH_ALEN];
31};
32
33#endif
diff --git a/include/linux/kthread.h b/include/linux/kthread.h
index 0714b24c0e45..22ccf9dee177 100644
--- a/include/linux/kthread.h
+++ b/include/linux/kthread.h
@@ -49,8 +49,6 @@ extern int tsk_fork_get_node(struct task_struct *tsk);
49 * can be queued and flushed using queue/flush_kthread_work() 49 * can be queued and flushed using queue/flush_kthread_work()
50 * respectively. Queued kthread_works are processed by a kthread 50 * respectively. Queued kthread_works are processed by a kthread
51 * running kthread_worker_fn(). 51 * running kthread_worker_fn().
52 *
53 * A kthread_work can't be freed while it is executing.
54 */ 52 */
55struct kthread_work; 53struct kthread_work;
56typedef void (*kthread_work_func_t)(struct kthread_work *work); 54typedef void (*kthread_work_func_t)(struct kthread_work *work);
@@ -59,15 +57,14 @@ struct kthread_worker {
59 spinlock_t lock; 57 spinlock_t lock;
60 struct list_head work_list; 58 struct list_head work_list;
61 struct task_struct *task; 59 struct task_struct *task;
60 struct kthread_work *current_work;
62}; 61};
63 62
64struct kthread_work { 63struct kthread_work {
65 struct list_head node; 64 struct list_head node;
66 kthread_work_func_t func; 65 kthread_work_func_t func;
67 wait_queue_head_t done; 66 wait_queue_head_t done;
68 atomic_t flushing; 67 struct kthread_worker *worker;
69 int queue_seq;
70 int done_seq;
71}; 68};
72 69
73#define KTHREAD_WORKER_INIT(worker) { \ 70#define KTHREAD_WORKER_INIT(worker) { \
@@ -79,7 +76,6 @@ struct kthread_work {
79 .node = LIST_HEAD_INIT((work).node), \ 76 .node = LIST_HEAD_INIT((work).node), \
80 .func = (fn), \ 77 .func = (fn), \
81 .done = __WAIT_QUEUE_HEAD_INITIALIZER((work).done), \ 78 .done = __WAIT_QUEUE_HEAD_INITIALIZER((work).done), \
82 .flushing = ATOMIC_INIT(0), \
83 } 79 }
84 80
85#define DEFINE_KTHREAD_WORKER(worker) \ 81#define DEFINE_KTHREAD_WORKER(worker) \
diff --git a/include/linux/kvm.h b/include/linux/kvm.h
index 09f2b3aa2da7..2ce09aa7d3b3 100644
--- a/include/linux/kvm.h
+++ b/include/linux/kvm.h
@@ -617,6 +617,7 @@ struct kvm_ppc_smmu_info {
617#define KVM_CAP_SIGNAL_MSI 77 617#define KVM_CAP_SIGNAL_MSI 77
618#define KVM_CAP_PPC_GET_SMMU_INFO 78 618#define KVM_CAP_PPC_GET_SMMU_INFO 78
619#define KVM_CAP_S390_COW 79 619#define KVM_CAP_S390_COW 79
620#define KVM_CAP_PPC_ALLOC_HTAB 80
620 621
621#ifdef KVM_CAP_IRQ_ROUTING 622#ifdef KVM_CAP_IRQ_ROUTING
622 623
@@ -828,6 +829,8 @@ struct kvm_s390_ucas_mapping {
828#define KVM_SIGNAL_MSI _IOW(KVMIO, 0xa5, struct kvm_msi) 829#define KVM_SIGNAL_MSI _IOW(KVMIO, 0xa5, struct kvm_msi)
829/* Available with KVM_CAP_PPC_GET_SMMU_INFO */ 830/* Available with KVM_CAP_PPC_GET_SMMU_INFO */
830#define KVM_PPC_GET_SMMU_INFO _IOR(KVMIO, 0xa6, struct kvm_ppc_smmu_info) 831#define KVM_PPC_GET_SMMU_INFO _IOR(KVMIO, 0xa6, struct kvm_ppc_smmu_info)
832/* Available with KVM_CAP_PPC_ALLOC_HTAB */
833#define KVM_PPC_ALLOCATE_HTAB _IOWR(KVMIO, 0xa7, __u32)
831 834
832/* 835/*
833 * ioctls for vcpu fds 836 * ioctls for vcpu fds
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index c4464356b35b..b70b48b01098 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -306,7 +306,7 @@ struct kvm {
306 struct hlist_head irq_ack_notifier_list; 306 struct hlist_head irq_ack_notifier_list;
307#endif 307#endif
308 308
309#ifdef KVM_ARCH_WANT_MMU_NOTIFIER 309#if defined(CONFIG_MMU_NOTIFIER) && defined(KVM_ARCH_WANT_MMU_NOTIFIER)
310 struct mmu_notifier mmu_notifier; 310 struct mmu_notifier mmu_notifier;
311 unsigned long mmu_notifier_seq; 311 unsigned long mmu_notifier_seq;
312 long mmu_notifier_count; 312 long mmu_notifier_count;
@@ -314,13 +314,19 @@ struct kvm {
314 long tlbs_dirty; 314 long tlbs_dirty;
315}; 315};
316 316
317/* The guest did something we don't support. */ 317#define kvm_err(fmt, ...) \
318#define pr_unimpl(vcpu, fmt, ...) \ 318 pr_err("kvm [%i]: " fmt, task_pid_nr(current), ## __VA_ARGS__)
319 pr_err_ratelimited("kvm: %i: cpu%i " fmt, \ 319#define kvm_info(fmt, ...) \
320 current->tgid, (vcpu)->vcpu_id , ## __VA_ARGS__) 320 pr_info("kvm [%i]: " fmt, task_pid_nr(current), ## __VA_ARGS__)
321#define kvm_debug(fmt, ...) \
322 pr_debug("kvm [%i]: " fmt, task_pid_nr(current), ## __VA_ARGS__)
323#define kvm_pr_unimpl(fmt, ...) \
324 pr_err_ratelimited("kvm [%i]: " fmt, \
325 task_tgid_nr(current), ## __VA_ARGS__)
321 326
322#define kvm_printf(kvm, fmt ...) printk(KERN_DEBUG fmt) 327/* The guest did something we don't support. */
323#define vcpu_printf(vcpu, fmt...) kvm_printf(vcpu->kvm, fmt) 328#define vcpu_unimpl(vcpu, fmt, ...) \
329 kvm_pr_unimpl("vcpu%i " fmt, (vcpu)->vcpu_id, ## __VA_ARGS__)
324 330
325static inline struct kvm_vcpu *kvm_get_vcpu(struct kvm *kvm, int i) 331static inline struct kvm_vcpu *kvm_get_vcpu(struct kvm *kvm, int i)
326{ 332{
@@ -535,6 +541,9 @@ int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu);
535 541
536void kvm_free_physmem(struct kvm *kvm); 542void kvm_free_physmem(struct kvm *kvm);
537 543
544void *kvm_kvzalloc(unsigned long size);
545void kvm_kvfree(const void *addr);
546
538#ifndef __KVM_HAVE_ARCH_VM_ALLOC 547#ifndef __KVM_HAVE_ARCH_VM_ALLOC
539static inline struct kvm *kvm_arch_alloc_vm(void) 548static inline struct kvm *kvm_arch_alloc_vm(void)
540{ 549{
@@ -771,7 +780,7 @@ struct kvm_stats_debugfs_item {
771extern struct kvm_stats_debugfs_item debugfs_entries[]; 780extern struct kvm_stats_debugfs_item debugfs_entries[];
772extern struct dentry *kvm_debugfs_dir; 781extern struct dentry *kvm_debugfs_dir;
773 782
774#ifdef KVM_ARCH_WANT_MMU_NOTIFIER 783#if defined(CONFIG_MMU_NOTIFIER) && defined(KVM_ARCH_WANT_MMU_NOTIFIER)
775static inline int mmu_notifier_retry(struct kvm_vcpu *vcpu, unsigned long mmu_seq) 784static inline int mmu_notifier_retry(struct kvm_vcpu *vcpu, unsigned long mmu_seq)
776{ 785{
777 if (unlikely(vcpu->kvm->mmu_notifier_count)) 786 if (unlikely(vcpu->kvm->mmu_notifier_count))
@@ -793,7 +802,7 @@ static inline int mmu_notifier_retry(struct kvm_vcpu *vcpu, unsigned long mmu_se
793} 802}
794#endif 803#endif
795 804
796#ifdef CONFIG_HAVE_KVM_IRQCHIP 805#ifdef KVM_CAP_IRQ_ROUTING
797 806
798#define KVM_MAX_IRQ_ROUTES 1024 807#define KVM_MAX_IRQ_ROUTES 1024
799 808
@@ -815,7 +824,7 @@ static inline void kvm_free_irq_routing(struct kvm *kvm) {}
815#ifdef CONFIG_HAVE_KVM_EVENTFD 824#ifdef CONFIG_HAVE_KVM_EVENTFD
816 825
817void kvm_eventfd_init(struct kvm *kvm); 826void kvm_eventfd_init(struct kvm *kvm);
818int kvm_irqfd(struct kvm *kvm, int fd, int gsi, int flags); 827int kvm_irqfd(struct kvm *kvm, struct kvm_irqfd *args);
819void kvm_irqfd_release(struct kvm *kvm); 828void kvm_irqfd_release(struct kvm *kvm);
820void kvm_irq_routing_update(struct kvm *, struct kvm_irq_routing_table *); 829void kvm_irq_routing_update(struct kvm *, struct kvm_irq_routing_table *);
821int kvm_ioeventfd(struct kvm *kvm, struct kvm_ioeventfd *args); 830int kvm_ioeventfd(struct kvm *kvm, struct kvm_ioeventfd *args);
@@ -824,7 +833,7 @@ int kvm_ioeventfd(struct kvm *kvm, struct kvm_ioeventfd *args);
824 833
825static inline void kvm_eventfd_init(struct kvm *kvm) {} 834static inline void kvm_eventfd_init(struct kvm *kvm) {}
826 835
827static inline int kvm_irqfd(struct kvm *kvm, int fd, int gsi, int flags) 836static inline int kvm_irqfd(struct kvm *kvm, struct kvm_irqfd *args)
828{ 837{
829 return -EINVAL; 838 return -EINVAL;
830} 839}
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 6e887c742a27..64f90e17e51d 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -161,6 +161,8 @@ enum {
161 ATA_DFLAG_DETACH = (1 << 24), 161 ATA_DFLAG_DETACH = (1 << 24),
162 ATA_DFLAG_DETACHED = (1 << 25), 162 ATA_DFLAG_DETACHED = (1 << 25),
163 163
164 ATA_DFLAG_DA = (1 << 26), /* device supports Device Attention */
165
164 ATA_DEV_UNKNOWN = 0, /* unknown device */ 166 ATA_DEV_UNKNOWN = 0, /* unknown device */
165 ATA_DEV_ATA = 1, /* ATA device */ 167 ATA_DEV_ATA = 1, /* ATA device */
166 ATA_DEV_ATA_UNSUP = 2, /* ATA device (unsupported) */ 168 ATA_DEV_ATA_UNSUP = 2, /* ATA device (unsupported) */
@@ -545,9 +547,6 @@ struct ata_host {
545 struct mutex eh_mutex; 547 struct mutex eh_mutex;
546 struct task_struct *eh_owner; 548 struct task_struct *eh_owner;
547 549
548#ifdef CONFIG_ATA_ACPI
549 acpi_handle acpi_handle;
550#endif
551 struct ata_port *simplex_claimed; /* channel owning the DMA */ 550 struct ata_port *simplex_claimed; /* channel owning the DMA */
552 struct ata_port *ports[0]; 551 struct ata_port *ports[0];
553}; 552};
@@ -615,7 +614,6 @@ struct ata_device {
615 struct scsi_device *sdev; /* attached SCSI device */ 614 struct scsi_device *sdev; /* attached SCSI device */
616 void *private_data; 615 void *private_data;
617#ifdef CONFIG_ATA_ACPI 616#ifdef CONFIG_ATA_ACPI
618 acpi_handle acpi_handle;
619 union acpi_object *gtf_cache; 617 union acpi_object *gtf_cache;
620 unsigned int gtf_filter; 618 unsigned int gtf_filter;
621#endif 619#endif
@@ -797,7 +795,6 @@ struct ata_port {
797 void *private_data; 795 void *private_data;
798 796
799#ifdef CONFIG_ATA_ACPI 797#ifdef CONFIG_ATA_ACPI
800 acpi_handle acpi_handle;
801 struct ata_acpi_gtm __acpi_init_gtm; /* use ata_acpi_init_gtm() */ 798 struct ata_acpi_gtm __acpi_init_gtm; /* use ata_acpi_init_gtm() */
802#endif 799#endif
803 /* owned by EH */ 800 /* owned by EH */
@@ -846,6 +843,8 @@ struct ata_port_operations {
846 void (*error_handler)(struct ata_port *ap); 843 void (*error_handler)(struct ata_port *ap);
847 void (*lost_interrupt)(struct ata_port *ap); 844 void (*lost_interrupt)(struct ata_port *ap);
848 void (*post_internal_cmd)(struct ata_queued_cmd *qc); 845 void (*post_internal_cmd)(struct ata_queued_cmd *qc);
846 void (*sched_eh)(struct ata_port *ap);
847 void (*end_eh)(struct ata_port *ap);
849 848
850 /* 849 /*
851 * Optional features 850 * Optional features
@@ -1114,6 +1113,8 @@ int ata_acpi_stm(struct ata_port *ap, const struct ata_acpi_gtm *stm);
1114int ata_acpi_gtm(struct ata_port *ap, struct ata_acpi_gtm *stm); 1113int ata_acpi_gtm(struct ata_port *ap, struct ata_acpi_gtm *stm);
1115unsigned long ata_acpi_gtm_xfermask(struct ata_device *dev, 1114unsigned long ata_acpi_gtm_xfermask(struct ata_device *dev,
1116 const struct ata_acpi_gtm *gtm); 1115 const struct ata_acpi_gtm *gtm);
1116acpi_handle ata_ap_acpi_handle(struct ata_port *ap);
1117acpi_handle ata_dev_acpi_handle(struct ata_device *dev);
1117int ata_acpi_cbl_80wire(struct ata_port *ap, const struct ata_acpi_gtm *gtm); 1118int ata_acpi_cbl_80wire(struct ata_port *ap, const struct ata_acpi_gtm *gtm);
1118#else 1119#else
1119static inline const struct ata_acpi_gtm *ata_acpi_init_gtm(struct ata_port *ap) 1120static inline const struct ata_acpi_gtm *ata_acpi_init_gtm(struct ata_port *ap)
@@ -1167,6 +1168,8 @@ extern void ata_do_eh(struct ata_port *ap, ata_prereset_fn_t prereset,
1167 ata_reset_fn_t softreset, ata_reset_fn_t hardreset, 1168 ata_reset_fn_t softreset, ata_reset_fn_t hardreset,
1168 ata_postreset_fn_t postreset); 1169 ata_postreset_fn_t postreset);
1169extern void ata_std_error_handler(struct ata_port *ap); 1170extern void ata_std_error_handler(struct ata_port *ap);
1171extern void ata_std_sched_eh(struct ata_port *ap);
1172extern void ata_std_end_eh(struct ata_port *ap);
1170extern int ata_link_nr_enabled(struct ata_link *link); 1173extern int ata_link_nr_enabled(struct ata_link *link);
1171 1174
1172/* 1175/*
diff --git a/include/linux/mdio.h b/include/linux/mdio.h
index dfb947959ec9..7cccafe50e7b 100644
--- a/include/linux/mdio.h
+++ b/include/linux/mdio.h
@@ -43,7 +43,11 @@
43#define MDIO_PKGID2 15 43#define MDIO_PKGID2 15
44#define MDIO_AN_ADVERTISE 16 /* AN advertising (base page) */ 44#define MDIO_AN_ADVERTISE 16 /* AN advertising (base page) */
45#define MDIO_AN_LPA 19 /* AN LP abilities (base page) */ 45#define MDIO_AN_LPA 19 /* AN LP abilities (base page) */
46#define MDIO_PCS_EEE_ABLE 20 /* EEE Capability register */
47#define MDIO_PCS_EEE_WK_ERR 22 /* EEE wake error counter */
46#define MDIO_PHYXS_LNSTAT 24 /* PHY XGXS lane state */ 48#define MDIO_PHYXS_LNSTAT 24 /* PHY XGXS lane state */
49#define MDIO_AN_EEE_ADV 60 /* EEE advertisement */
50#define MDIO_AN_EEE_LPABLE 61 /* EEE link partner ability */
47 51
48/* Media-dependent registers. */ 52/* Media-dependent registers. */
49#define MDIO_PMA_10GBT_SWAPPOL 130 /* 10GBASE-T pair swap & polarity */ 53#define MDIO_PMA_10GBT_SWAPPOL 130 /* 10GBASE-T pair swap & polarity */
@@ -56,7 +60,6 @@
56#define MDIO_PCS_10GBRT_STAT2 33 /* 10GBASE-R/-T PCS status 2 */ 60#define MDIO_PCS_10GBRT_STAT2 33 /* 10GBASE-R/-T PCS status 2 */
57#define MDIO_AN_10GBT_CTRL 32 /* 10GBASE-T auto-negotiation control */ 61#define MDIO_AN_10GBT_CTRL 32 /* 10GBASE-T auto-negotiation control */
58#define MDIO_AN_10GBT_STAT 33 /* 10GBASE-T auto-negotiation status */ 62#define MDIO_AN_10GBT_STAT 33 /* 10GBASE-T auto-negotiation status */
59#define MDIO_AN_EEE_ADV 60 /* EEE advertisement */
60 63
61/* LASI (Link Alarm Status Interrupt) registers, defined by XENPAK MSA. */ 64/* LASI (Link Alarm Status Interrupt) registers, defined by XENPAK MSA. */
62#define MDIO_PMA_LASI_RXCTRL 0x9000 /* RX_ALARM control */ 65#define MDIO_PMA_LASI_RXCTRL 0x9000 /* RX_ALARM control */
@@ -82,6 +85,7 @@
82#define MDIO_AN_CTRL1_RESTART BMCR_ANRESTART 85#define MDIO_AN_CTRL1_RESTART BMCR_ANRESTART
83#define MDIO_AN_CTRL1_ENABLE BMCR_ANENABLE 86#define MDIO_AN_CTRL1_ENABLE BMCR_ANENABLE
84#define MDIO_AN_CTRL1_XNP 0x2000 /* Enable extended next page */ 87#define MDIO_AN_CTRL1_XNP 0x2000 /* Enable extended next page */
88#define MDIO_PCS_CTRL1_CLKSTOP_EN 0x400 /* Stop the clock during LPI */
85 89
86/* 10 Gb/s */ 90/* 10 Gb/s */
87#define MDIO_CTRL1_SPEED10G (MDIO_CTRL1_SPEEDSELEXT | 0x00) 91#define MDIO_CTRL1_SPEED10G (MDIO_CTRL1_SPEEDSELEXT | 0x00)
@@ -237,9 +241,25 @@
237#define MDIO_AN_10GBT_STAT_MS 0x4000 /* Master/slave config */ 241#define MDIO_AN_10GBT_STAT_MS 0x4000 /* Master/slave config */
238#define MDIO_AN_10GBT_STAT_MSFLT 0x8000 /* Master/slave config fault */ 242#define MDIO_AN_10GBT_STAT_MSFLT 0x8000 /* Master/slave config fault */
239 243
240/* AN EEE Advertisement register. */ 244/* EEE Supported/Advertisement/LP Advertisement registers.
241#define MDIO_AN_EEE_ADV_100TX 0x0002 /* Advertise 100TX EEE cap */ 245 *
242#define MDIO_AN_EEE_ADV_1000T 0x0004 /* Advertise 1000T EEE cap */ 246 * EEE capability Register (3.20), Advertisement (7.60) and
247 * Link partner ability (7.61) registers have and can use the same identical
248 * bit masks.
249 */
250#define MDIO_AN_EEE_ADV_100TX 0x0002 /* Advertise 100TX EEE cap */
251#define MDIO_AN_EEE_ADV_1000T 0x0004 /* Advertise 1000T EEE cap */
252/* Note: the two defines above can be potentially used by the user-land
253 * and cannot remove them now.
254 * So, we define the new generic MDIO_EEE_100TX and MDIO_EEE_1000T macros
255 * using the previous ones (that can be considered obsolete).
256 */
257#define MDIO_EEE_100TX MDIO_AN_EEE_ADV_100TX /* 100TX EEE cap */
258#define MDIO_EEE_1000T MDIO_AN_EEE_ADV_1000T /* 1000T EEE cap */
259#define MDIO_EEE_10GT 0x0008 /* 10GT EEE cap */
260#define MDIO_EEE_1000KX 0x0010 /* 1000KX EEE cap */
261#define MDIO_EEE_10GKX4 0x0020 /* 10G KX4 EEE cap */
262#define MDIO_EEE_10GKR 0x0040 /* 10G KR EEE cap */
243 263
244/* LASI RX_ALARM control/status registers. */ 264/* LASI RX_ALARM control/status registers. */
245#define MDIO_PMA_LASI_RX_PHYXSLFLT 0x0001 /* PHY XS RX local fault */ 265#define MDIO_PMA_LASI_RX_PHYXSLFLT 0x0001 /* PHY XS RX local fault */
diff --git a/include/linux/memblock.h b/include/linux/memblock.h
index a6bb10235148..19dc455b4f3d 100644
--- a/include/linux/memblock.h
+++ b/include/linux/memblock.h
@@ -50,9 +50,7 @@ phys_addr_t memblock_find_in_range_node(phys_addr_t start, phys_addr_t end,
50 phys_addr_t size, phys_addr_t align, int nid); 50 phys_addr_t size, phys_addr_t align, int nid);
51phys_addr_t memblock_find_in_range(phys_addr_t start, phys_addr_t end, 51phys_addr_t memblock_find_in_range(phys_addr_t start, phys_addr_t end,
52 phys_addr_t size, phys_addr_t align); 52 phys_addr_t size, phys_addr_t align);
53int memblock_free_reserved_regions(void); 53phys_addr_t get_allocated_memblock_reserved_regions_info(phys_addr_t *addr);
54int memblock_reserve_reserved_regions(void);
55
56void memblock_allow_resize(void); 54void memblock_allow_resize(void);
57int memblock_add_node(phys_addr_t base, phys_addr_t size, int nid); 55int memblock_add_node(phys_addr_t base, phys_addr_t size, int nid);
58int memblock_add(phys_addr_t base, phys_addr_t size); 56int memblock_add(phys_addr_t base, phys_addr_t size);
diff --git a/include/linux/mfd/abx500/ab8500-codec.h b/include/linux/mfd/abx500/ab8500-codec.h
new file mode 100644
index 000000000000..dc6529202cdd
--- /dev/null
+++ b/include/linux/mfd/abx500/ab8500-codec.h
@@ -0,0 +1,52 @@
1/*
2 * Copyright (C) ST-Ericsson SA 2012
3 *
4 * Author: Ola Lilja <ola.o.lilja@stericsson.com>
5 * for ST-Ericsson.
6 *
7 * License terms:
8 *
9 * This program is free software; you can redistribute it and/or modify it
10 * under the terms of the GNU General Public License version 2 as published
11 * by the Free Software Foundation.
12 */
13
14#ifndef AB8500_CORE_CODEC_H
15#define AB8500_CORE_CODEC_H
16
17/* Mic-types */
18enum amic_type {
19 AMIC_TYPE_SINGLE_ENDED,
20 AMIC_TYPE_DIFFERENTIAL
21};
22
23/* Mic-biases */
24enum amic_micbias {
25 AMIC_MICBIAS_VAMIC1,
26 AMIC_MICBIAS_VAMIC2
27};
28
29/* Bias-voltage */
30enum ear_cm_voltage {
31 EAR_CMV_0_95V,
32 EAR_CMV_1_10V,
33 EAR_CMV_1_27V,
34 EAR_CMV_1_58V
35};
36
37/* Analog microphone settings */
38struct amic_settings {
39 enum amic_type mic1_type;
40 enum amic_type mic2_type;
41 enum amic_micbias mic1a_micbias;
42 enum amic_micbias mic1b_micbias;
43 enum amic_micbias mic2_micbias;
44};
45
46/* Platform data structure for the audio-parts of the AB8500 */
47struct ab8500_codec_platform_data {
48 struct amic_settings amics;
49 enum ear_cm_voltage ear_cmv;
50};
51
52#endif
diff --git a/include/linux/mfd/abx500/ab8500.h b/include/linux/mfd/abx500/ab8500.h
index 91dd3ef63e99..bc9b84b60ec6 100644
--- a/include/linux/mfd/abx500/ab8500.h
+++ b/include/linux/mfd/abx500/ab8500.h
@@ -266,6 +266,7 @@ struct ab8500 {
266struct regulator_reg_init; 266struct regulator_reg_init;
267struct regulator_init_data; 267struct regulator_init_data;
268struct ab8500_gpio_platform_data; 268struct ab8500_gpio_platform_data;
269struct ab8500_codec_platform_data;
269 270
270/** 271/**
271 * struct ab8500_platform_data - AB8500 platform data 272 * struct ab8500_platform_data - AB8500 platform data
@@ -284,6 +285,7 @@ struct ab8500_platform_data {
284 int num_regulator; 285 int num_regulator;
285 struct regulator_init_data *regulator; 286 struct regulator_init_data *regulator;
286 struct ab8500_gpio_platform_data *gpio; 287 struct ab8500_gpio_platform_data *gpio;
288 struct ab8500_codec_platform_data *codec;
287}; 289};
288 290
289extern int __devinit ab8500_init(struct ab8500 *ab8500, 291extern int __devinit ab8500_init(struct ab8500 *ab8500,
diff --git a/include/linux/mfd/s5m87xx/s5m-core.h b/include/linux/mfd/s5m87xx/s5m-core.h
index 21603b42f22f..0b2e0ed309f5 100644
--- a/include/linux/mfd/s5m87xx/s5m-core.h
+++ b/include/linux/mfd/s5m87xx/s5m-core.h
@@ -347,6 +347,7 @@ struct s5m_platform_data {
347 bool buck_voltage_lock; 347 bool buck_voltage_lock;
348 348
349 int buck_gpios[3]; 349 int buck_gpios[3];
350 int buck_ds[3];
350 int buck2_voltage[8]; 351 int buck2_voltage[8];
351 bool buck2_gpiodvs; 352 bool buck2_gpiodvs;
352 int buck3_voltage[8]; 353 int buck3_voltage[8];
@@ -369,6 +370,10 @@ struct s5m_platform_data {
369 bool buck2_ramp_enable; 370 bool buck2_ramp_enable;
370 bool buck3_ramp_enable; 371 bool buck3_ramp_enable;
371 bool buck4_ramp_enable; 372 bool buck4_ramp_enable;
373
374 int buck2_init;
375 int buck3_init;
376 int buck4_init;
372}; 377};
373 378
374#endif /* __LINUX_MFD_S5M_CORE_H */ 379#endif /* __LINUX_MFD_S5M_CORE_H */
diff --git a/include/linux/mfd/tmio.h b/include/linux/mfd/tmio.h
index f5171dbf8850..d83af39815ab 100644
--- a/include/linux/mfd/tmio.h
+++ b/include/linux/mfd/tmio.h
@@ -101,6 +101,7 @@ struct tmio_mmc_host;
101struct tmio_mmc_data { 101struct tmio_mmc_data {
102 unsigned int hclk; 102 unsigned int hclk;
103 unsigned long capabilities; 103 unsigned long capabilities;
104 unsigned long capabilities2;
104 unsigned long flags; 105 unsigned long flags;
105 u32 ocr_mask; /* available voltages */ 106 u32 ocr_mask; /* available voltages */
106 struct tmio_mmc_dma *dma; 107 struct tmio_mmc_dma *dma;
@@ -110,6 +111,9 @@ struct tmio_mmc_data {
110 void (*set_clk_div)(struct platform_device *host, int state); 111 void (*set_clk_div)(struct platform_device *host, int state);
111 int (*get_cd)(struct platform_device *host); 112 int (*get_cd)(struct platform_device *host);
112 int (*write16_hook)(struct tmio_mmc_host *host, int addr); 113 int (*write16_hook)(struct tmio_mmc_host *host, int addr);
114 /* clock management callbacks */
115 int (*clk_enable)(struct platform_device *pdev, unsigned int *f);
116 void (*clk_disable)(struct platform_device *pdev);
113}; 117};
114 118
115/* 119/*
diff --git a/include/linux/mfd/tps65217.h b/include/linux/mfd/tps65217.h
index e030ef9a64ee..12c06870829a 100644
--- a/include/linux/mfd/tps65217.h
+++ b/include/linux/mfd/tps65217.h
@@ -217,7 +217,8 @@ enum tps65217_regulator_id {
217 * Board data may be used to initialize regulator. 217 * Board data may be used to initialize regulator.
218 */ 218 */
219struct tps65217_board { 219struct tps65217_board {
220 struct regulator_init_data *tps65217_init_data; 220 struct regulator_init_data *tps65217_init_data[TPS65217_NUM_REGULATOR];
221 struct device_node *of_node[TPS65217_NUM_REGULATOR];
221}; 222};
222 223
223/** 224/**
@@ -227,11 +228,6 @@ struct tps65217_board {
227 * @max_uV: minimum micro volts 228 * @max_uV: minimum micro volts
228 * @vsel_to_uv: Function pointer to get voltage from selector 229 * @vsel_to_uv: Function pointer to get voltage from selector
229 * @uv_to_vsel: Function pointer to get selector from voltage 230 * @uv_to_vsel: Function pointer to get selector from voltage
230 * @table: Table for non-uniform voltage step-size
231 * @table_len: Length of the voltage table
232 * @enable_mask: Regulator enable mask bits
233 * @set_vout_reg: Regulator output voltage set register
234 * @set_vout_mask: Regulator output voltage set mask
235 * 231 *
236 * This data is used to check the regualtor voltage limits while setting. 232 * This data is used to check the regualtor voltage limits while setting.
237 */ 233 */
@@ -241,11 +237,6 @@ struct tps_info {
241 int max_uV; 237 int max_uV;
242 int (*vsel_to_uv)(unsigned int vsel); 238 int (*vsel_to_uv)(unsigned int vsel);
243 int (*uv_to_vsel)(int uV, unsigned int *vsel); 239 int (*uv_to_vsel)(int uV, unsigned int *vsel);
244 const int *table;
245 unsigned int table_len;
246 unsigned int enable_mask;
247 unsigned int set_vout_reg;
248 unsigned int set_vout_mask;
249}; 240};
250 241
251/** 242/**
diff --git a/include/linux/mfd/tps65910.h b/include/linux/mfd/tps65910.h
index dd8dc0a6c462..6c4c478e21a4 100644
--- a/include/linux/mfd/tps65910.h
+++ b/include/linux/mfd/tps65910.h
@@ -880,4 +880,10 @@ static inline int tps65910_reg_clear_bits(struct tps65910 *tps65910, u8 reg,
880 return regmap_update_bits(tps65910->regmap, reg, mask, 0); 880 return regmap_update_bits(tps65910->regmap, reg, mask, 0);
881} 881}
882 882
883static inline int tps65910_reg_update_bits(struct tps65910 *tps65910, u8 reg,
884 u8 mask, u8 val)
885{
886 return regmap_update_bits(tps65910->regmap, reg, mask, val);
887}
888
883#endif /* __LINUX_MFD_TPS65910_H */ 889#endif /* __LINUX_MFD_TPS65910_H */
diff --git a/include/linux/mii.h b/include/linux/mii.h
index 2783eca629a0..8ef3a7a11592 100644
--- a/include/linux/mii.h
+++ b/include/linux/mii.h
@@ -21,6 +21,8 @@
21#define MII_EXPANSION 0x06 /* Expansion register */ 21#define MII_EXPANSION 0x06 /* Expansion register */
22#define MII_CTRL1000 0x09 /* 1000BASE-T control */ 22#define MII_CTRL1000 0x09 /* 1000BASE-T control */
23#define MII_STAT1000 0x0a /* 1000BASE-T status */ 23#define MII_STAT1000 0x0a /* 1000BASE-T status */
24#define MII_MMD_CTRL 0x0d /* MMD Access Control Register */
25#define MII_MMD_DATA 0x0e /* MMD Access Data Register */
24#define MII_ESTATUS 0x0f /* Extended Status */ 26#define MII_ESTATUS 0x0f /* Extended Status */
25#define MII_DCOUNTER 0x12 /* Disconnect counter */ 27#define MII_DCOUNTER 0x12 /* Disconnect counter */
26#define MII_FCSCOUNTER 0x13 /* False carrier counter */ 28#define MII_FCSCOUNTER 0x13 /* False carrier counter */
@@ -141,6 +143,13 @@
141#define FLOW_CTRL_TX 0x01 143#define FLOW_CTRL_TX 0x01
142#define FLOW_CTRL_RX 0x02 144#define FLOW_CTRL_RX 0x02
143 145
146/* MMD Access Control register fields */
147#define MII_MMD_CTRL_DEVAD_MASK 0x1f /* Mask MMD DEVAD*/
148#define MII_MMD_CTRL_ADDR 0x0000 /* Address */
149#define MII_MMD_CTRL_NOINCR 0x4000 /* no post increment */
150#define MII_MMD_CTRL_INCR_RDWT 0x8000 /* post increment on reads & writes */
151#define MII_MMD_CTRL_INCR_ON_WT 0xC000 /* post increment on writes only */
152
144/* This structure is used in all SIOCxMIIxxx ioctl calls */ 153/* This structure is used in all SIOCxMIIxxx ioctl calls */
145struct mii_ioctl_data { 154struct mii_ioctl_data {
146 __u16 phy_id; 155 __u16 phy_id;
diff --git a/include/linux/mlx4/cmd.h b/include/linux/mlx4/cmd.h
index 1f3860a8a109..260695186256 100644
--- a/include/linux/mlx4/cmd.h
+++ b/include/linux/mlx4/cmd.h
@@ -154,6 +154,10 @@ enum {
154 /* set port opcode modifiers */ 154 /* set port opcode modifiers */
155 MLX4_SET_PORT_PRIO2TC = 0x8, 155 MLX4_SET_PORT_PRIO2TC = 0x8,
156 MLX4_SET_PORT_SCHEDULER = 0x9, 156 MLX4_SET_PORT_SCHEDULER = 0x9,
157
158 /* register/delete flow steering network rules */
159 MLX4_QP_FLOW_STEERING_ATTACH = 0x65,
160 MLX4_QP_FLOW_STEERING_DETACH = 0x66,
157}; 161};
158 162
159enum { 163enum {
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h
index 6a8f002b8ed3..bd6c9fcdf2dd 100644
--- a/include/linux/mlx4/device.h
+++ b/include/linux/mlx4/device.h
@@ -36,6 +36,7 @@
36#include <linux/pci.h> 36#include <linux/pci.h>
37#include <linux/completion.h> 37#include <linux/completion.h>
38#include <linux/radix-tree.h> 38#include <linux/radix-tree.h>
39#include <linux/cpu_rmap.h>
39 40
40#include <linux/atomic.h> 41#include <linux/atomic.h>
41 42
@@ -56,6 +57,13 @@ enum {
56 MLX4_MAX_PORTS = 2 57 MLX4_MAX_PORTS = 2
57}; 58};
58 59
60/* base qkey for use in sriov tunnel-qp/proxy-qp communication.
61 * These qkeys must not be allowed for general use. This is a 64k range,
62 * and to test for violation, we use the mask (protect against future chg).
63 */
64#define MLX4_RESERVED_QKEY_BASE (0xFFFF0000)
65#define MLX4_RESERVED_QKEY_MASK (0xFFFF0000)
66
59enum { 67enum {
60 MLX4_BOARD_ID_LEN = 64 68 MLX4_BOARD_ID_LEN = 64
61}; 69};
@@ -70,6 +78,36 @@ enum {
70 MLX4_MFUNC_EQE_MASK = (MLX4_MFUNC_MAX_EQES - 1) 78 MLX4_MFUNC_EQE_MASK = (MLX4_MFUNC_MAX_EQES - 1)
71}; 79};
72 80
81/* Driver supports 3 diffrent device methods to manage traffic steering:
82 * -device managed - High level API for ib and eth flow steering. FW is
83 * managing flow steering tables.
84 * - B0 steering mode - Common low level API for ib and (if supported) eth.
85 * - A0 steering mode - Limited low level API for eth. In case of IB,
86 * B0 mode is in use.
87 */
88enum {
89 MLX4_STEERING_MODE_A0,
90 MLX4_STEERING_MODE_B0,
91 MLX4_STEERING_MODE_DEVICE_MANAGED
92};
93
94static inline const char *mlx4_steering_mode_str(int steering_mode)
95{
96 switch (steering_mode) {
97 case MLX4_STEERING_MODE_A0:
98 return "A0 steering";
99
100 case MLX4_STEERING_MODE_B0:
101 return "B0 steering";
102
103 case MLX4_STEERING_MODE_DEVICE_MANAGED:
104 return "Device managed flow steering";
105
106 default:
107 return "Unrecognize steering mode";
108 }
109}
110
73enum { 111enum {
74 MLX4_DEV_CAP_FLAG_RC = 1LL << 0, 112 MLX4_DEV_CAP_FLAG_RC = 1LL << 0,
75 MLX4_DEV_CAP_FLAG_UC = 1LL << 1, 113 MLX4_DEV_CAP_FLAG_UC = 1LL << 1,
@@ -96,13 +134,15 @@ enum {
96 MLX4_DEV_CAP_FLAG_VEP_UC_STEER = 1LL << 41, 134 MLX4_DEV_CAP_FLAG_VEP_UC_STEER = 1LL << 41,
97 MLX4_DEV_CAP_FLAG_VEP_MC_STEER = 1LL << 42, 135 MLX4_DEV_CAP_FLAG_VEP_MC_STEER = 1LL << 42,
98 MLX4_DEV_CAP_FLAG_COUNTERS = 1LL << 48, 136 MLX4_DEV_CAP_FLAG_COUNTERS = 1LL << 48,
99 MLX4_DEV_CAP_FLAG_SENSE_SUPPORT = 1LL << 55 137 MLX4_DEV_CAP_FLAG_SENSE_SUPPORT = 1LL << 55,
138 MLX4_DEV_CAP_FLAG_PORT_MNG_CHG_EV = 1LL << 59,
100}; 139};
101 140
102enum { 141enum {
103 MLX4_DEV_CAP_FLAG2_RSS = 1LL << 0, 142 MLX4_DEV_CAP_FLAG2_RSS = 1LL << 0,
104 MLX4_DEV_CAP_FLAG2_RSS_TOP = 1LL << 1, 143 MLX4_DEV_CAP_FLAG2_RSS_TOP = 1LL << 1,
105 MLX4_DEV_CAP_FLAG2_RSS_XOR = 1LL << 2 144 MLX4_DEV_CAP_FLAG2_RSS_XOR = 1LL << 2,
145 MLX4_DEV_CAP_FLAG2_FS_EN = 1LL << 3
106}; 146};
107 147
108#define MLX4_ATTR_EXTENDED_PORT_INFO cpu_to_be16(0xff90) 148#define MLX4_ATTR_EXTENDED_PORT_INFO cpu_to_be16(0xff90)
@@ -138,6 +178,7 @@ enum mlx4_event {
138 MLX4_EVENT_TYPE_COMM_CHANNEL = 0x18, 178 MLX4_EVENT_TYPE_COMM_CHANNEL = 0x18,
139 MLX4_EVENT_TYPE_FATAL_WARNING = 0x1b, 179 MLX4_EVENT_TYPE_FATAL_WARNING = 0x1b,
140 MLX4_EVENT_TYPE_FLR_EVENT = 0x1c, 180 MLX4_EVENT_TYPE_FLR_EVENT = 0x1c,
181 MLX4_EVENT_TYPE_PORT_MNG_CHG_EVENT = 0x1d,
141 MLX4_EVENT_TYPE_NONE = 0xff, 182 MLX4_EVENT_TYPE_NONE = 0xff,
142}; 183};
143 184
@@ -235,12 +276,32 @@ enum {
235 MLX4_MAX_FAST_REG_PAGES = 511, 276 MLX4_MAX_FAST_REG_PAGES = 511,
236}; 277};
237 278
279enum {
280 MLX4_DEV_PMC_SUBTYPE_GUID_INFO = 0x14,
281 MLX4_DEV_PMC_SUBTYPE_PORT_INFO = 0x15,
282 MLX4_DEV_PMC_SUBTYPE_PKEY_TABLE = 0x16,
283};
284
285/* Port mgmt change event handling */
286enum {
287 MLX4_EQ_PORT_INFO_MSTR_SM_LID_CHANGE_MASK = 1 << 0,
288 MLX4_EQ_PORT_INFO_GID_PFX_CHANGE_MASK = 1 << 1,
289 MLX4_EQ_PORT_INFO_LID_CHANGE_MASK = 1 << 2,
290 MLX4_EQ_PORT_INFO_CLIENT_REREG_MASK = 1 << 3,
291 MLX4_EQ_PORT_INFO_MSTR_SM_SL_CHANGE_MASK = 1 << 4,
292};
293
294#define MSTR_SM_CHANGE_MASK (MLX4_EQ_PORT_INFO_MSTR_SM_SL_CHANGE_MASK | \
295 MLX4_EQ_PORT_INFO_MSTR_SM_LID_CHANGE_MASK)
296
238static inline u64 mlx4_fw_ver(u64 major, u64 minor, u64 subminor) 297static inline u64 mlx4_fw_ver(u64 major, u64 minor, u64 subminor)
239{ 298{
240 return (major << 32) | (minor << 16) | subminor; 299 return (major << 32) | (minor << 16) | subminor;
241} 300}
242 301
243struct mlx4_phys_caps { 302struct mlx4_phys_caps {
303 u32 gid_phys_table_len[MLX4_MAX_PORTS + 1];
304 u32 pkey_phys_table_len[MLX4_MAX_PORTS + 1];
244 u32 num_phys_eqs; 305 u32 num_phys_eqs;
245}; 306};
246 307
@@ -273,6 +334,8 @@ struct mlx4_caps {
273 int max_qp_init_rdma; 334 int max_qp_init_rdma;
274 int max_qp_dest_rdma; 335 int max_qp_dest_rdma;
275 int sqp_start; 336 int sqp_start;
337 u32 base_sqpn;
338 u32 base_tunnel_sqpn;
276 int num_srqs; 339 int num_srqs;
277 int max_srq_wqes; 340 int max_srq_wqes;
278 int max_srq_sge; 341 int max_srq_sge;
@@ -295,6 +358,8 @@ struct mlx4_caps {
295 int num_amgms; 358 int num_amgms;
296 int reserved_mcgs; 359 int reserved_mcgs;
297 int num_qp_per_mgm; 360 int num_qp_per_mgm;
361 int steering_mode;
362 int fs_log_max_ucast_qp_range_size;
298 int num_pds; 363 int num_pds;
299 int reserved_pds; 364 int reserved_pds;
300 int max_xrcds; 365 int max_xrcds;
@@ -509,8 +574,85 @@ struct mlx4_dev {
509 u8 rev_id; 574 u8 rev_id;
510 char board_id[MLX4_BOARD_ID_LEN]; 575 char board_id[MLX4_BOARD_ID_LEN];
511 int num_vfs; 576 int num_vfs;
577 u64 regid_promisc_array[MLX4_MAX_PORTS + 1];
578 u64 regid_allmulti_array[MLX4_MAX_PORTS + 1];
512}; 579};
513 580
581struct mlx4_eqe {
582 u8 reserved1;
583 u8 type;
584 u8 reserved2;
585 u8 subtype;
586 union {
587 u32 raw[6];
588 struct {
589 __be32 cqn;
590 } __packed comp;
591 struct {
592 u16 reserved1;
593 __be16 token;
594 u32 reserved2;
595 u8 reserved3[3];
596 u8 status;
597 __be64 out_param;
598 } __packed cmd;
599 struct {
600 __be32 qpn;
601 } __packed qp;
602 struct {
603 __be32 srqn;
604 } __packed srq;
605 struct {
606 __be32 cqn;
607 u32 reserved1;
608 u8 reserved2[3];
609 u8 syndrome;
610 } __packed cq_err;
611 struct {
612 u32 reserved1[2];
613 __be32 port;
614 } __packed port_change;
615 struct {
616 #define COMM_CHANNEL_BIT_ARRAY_SIZE 4
617 u32 reserved;
618 u32 bit_vec[COMM_CHANNEL_BIT_ARRAY_SIZE];
619 } __packed comm_channel_arm;
620 struct {
621 u8 port;
622 u8 reserved[3];
623 __be64 mac;
624 } __packed mac_update;
625 struct {
626 __be32 slave_id;
627 } __packed flr_event;
628 struct {
629 __be16 current_temperature;
630 __be16 warning_threshold;
631 } __packed warming;
632 struct {
633 u8 reserved[3];
634 u8 port;
635 union {
636 struct {
637 __be16 mstr_sm_lid;
638 __be16 port_lid;
639 __be32 changed_attr;
640 u8 reserved[3];
641 u8 mstr_sm_sl;
642 __be64 gid_prefix;
643 } __packed port_info;
644 struct {
645 __be32 block_ptr;
646 __be32 tbl_entries_mask;
647 } __packed tbl_change_info;
648 } params;
649 } __packed port_mgmt_change;
650 } event;
651 u8 slave_id;
652 u8 reserved3[2];
653 u8 owner;
654} __packed;
655
514struct mlx4_init_port_param { 656struct mlx4_init_port_param {
515 int set_guid0; 657 int set_guid0;
516 int set_node_guid; 658 int set_node_guid;
@@ -534,6 +676,15 @@ struct mlx4_init_port_param {
534 if (((dev)->caps.port_mask[port] == MLX4_PORT_TYPE_IB) || \ 676 if (((dev)->caps.port_mask[port] == MLX4_PORT_TYPE_IB) || \
535 ((dev)->caps.flags & MLX4_DEV_CAP_FLAG_IBOE)) 677 ((dev)->caps.flags & MLX4_DEV_CAP_FLAG_IBOE))
536 678
679#define MLX4_INVALID_SLAVE_ID 0xFF
680
681void handle_port_mgmt_change_event(struct work_struct *work);
682
683static inline int mlx4_master_func_num(struct mlx4_dev *dev)
684{
685 return dev->caps.function;
686}
687
537static inline int mlx4_is_master(struct mlx4_dev *dev) 688static inline int mlx4_is_master(struct mlx4_dev *dev)
538{ 689{
539 return dev->flags & MLX4_FLAG_MASTER; 690 return dev->flags & MLX4_FLAG_MASTER;
@@ -623,9 +774,99 @@ int mlx4_unicast_attach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16],
623int mlx4_unicast_detach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16], 774int mlx4_unicast_detach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16],
624 enum mlx4_protocol prot); 775 enum mlx4_protocol prot);
625int mlx4_multicast_attach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16], 776int mlx4_multicast_attach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16],
626 int block_mcast_loopback, enum mlx4_protocol protocol); 777 u8 port, int block_mcast_loopback,
778 enum mlx4_protocol protocol, u64 *reg_id);
627int mlx4_multicast_detach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16], 779int mlx4_multicast_detach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16],
628 enum mlx4_protocol protocol); 780 enum mlx4_protocol protocol, u64 reg_id);
781
782enum {
783 MLX4_DOMAIN_UVERBS = 0x1000,
784 MLX4_DOMAIN_ETHTOOL = 0x2000,
785 MLX4_DOMAIN_RFS = 0x3000,
786 MLX4_DOMAIN_NIC = 0x5000,
787};
788
789enum mlx4_net_trans_rule_id {
790 MLX4_NET_TRANS_RULE_ID_ETH = 0,
791 MLX4_NET_TRANS_RULE_ID_IB,
792 MLX4_NET_TRANS_RULE_ID_IPV6,
793 MLX4_NET_TRANS_RULE_ID_IPV4,
794 MLX4_NET_TRANS_RULE_ID_TCP,
795 MLX4_NET_TRANS_RULE_ID_UDP,
796 MLX4_NET_TRANS_RULE_NUM, /* should be last */
797};
798
799enum mlx4_net_trans_promisc_mode {
800 MLX4_FS_PROMISC_NONE = 0,
801 MLX4_FS_PROMISC_UPLINK,
802 /* For future use. Not implemented yet */
803 MLX4_FS_PROMISC_FUNCTION_PORT,
804 MLX4_FS_PROMISC_ALL_MULTI,
805};
806
807struct mlx4_spec_eth {
808 u8 dst_mac[6];
809 u8 dst_mac_msk[6];
810 u8 src_mac[6];
811 u8 src_mac_msk[6];
812 u8 ether_type_enable;
813 __be16 ether_type;
814 __be16 vlan_id_msk;
815 __be16 vlan_id;
816};
817
818struct mlx4_spec_tcp_udp {
819 __be16 dst_port;
820 __be16 dst_port_msk;
821 __be16 src_port;
822 __be16 src_port_msk;
823};
824
825struct mlx4_spec_ipv4 {
826 __be32 dst_ip;
827 __be32 dst_ip_msk;
828 __be32 src_ip;
829 __be32 src_ip_msk;
830};
831
832struct mlx4_spec_ib {
833 __be32 r_qpn;
834 __be32 qpn_msk;
835 u8 dst_gid[16];
836 u8 dst_gid_msk[16];
837};
838
839struct mlx4_spec_list {
840 struct list_head list;
841 enum mlx4_net_trans_rule_id id;
842 union {
843 struct mlx4_spec_eth eth;
844 struct mlx4_spec_ib ib;
845 struct mlx4_spec_ipv4 ipv4;
846 struct mlx4_spec_tcp_udp tcp_udp;
847 };
848};
849
850enum mlx4_net_trans_hw_rule_queue {
851 MLX4_NET_TRANS_Q_FIFO,
852 MLX4_NET_TRANS_Q_LIFO,
853};
854
855struct mlx4_net_trans_rule {
856 struct list_head list;
857 enum mlx4_net_trans_hw_rule_queue queue_mode;
858 bool exclusive;
859 bool allow_loopback;
860 enum mlx4_net_trans_promisc_mode promisc_mode;
861 u8 port;
862 u16 priority;
863 u32 qpn;
864};
865
866int mlx4_flow_steer_promisc_add(struct mlx4_dev *dev, u8 port, u32 qpn,
867 enum mlx4_net_trans_promisc_mode mode);
868int mlx4_flow_steer_promisc_remove(struct mlx4_dev *dev, u8 port,
869 enum mlx4_net_trans_promisc_mode mode);
629int mlx4_multicast_promisc_add(struct mlx4_dev *dev, u32 qpn, u8 port); 870int mlx4_multicast_promisc_add(struct mlx4_dev *dev, u32 qpn, u8 port);
630int mlx4_multicast_promisc_remove(struct mlx4_dev *dev, u32 qpn, u8 port); 871int mlx4_multicast_promisc_remove(struct mlx4_dev *dev, u32 qpn, u8 port);
631int mlx4_unicast_promisc_add(struct mlx4_dev *dev, u32 qpn, u8 port); 872int mlx4_unicast_promisc_add(struct mlx4_dev *dev, u32 qpn, u8 port);
@@ -659,7 +900,8 @@ void mlx4_fmr_unmap(struct mlx4_dev *dev, struct mlx4_fmr *fmr,
659int mlx4_fmr_free(struct mlx4_dev *dev, struct mlx4_fmr *fmr); 900int mlx4_fmr_free(struct mlx4_dev *dev, struct mlx4_fmr *fmr);
660int mlx4_SYNC_TPT(struct mlx4_dev *dev); 901int mlx4_SYNC_TPT(struct mlx4_dev *dev);
661int mlx4_test_interrupts(struct mlx4_dev *dev); 902int mlx4_test_interrupts(struct mlx4_dev *dev);
662int mlx4_assign_eq(struct mlx4_dev *dev, char* name , int* vector); 903int mlx4_assign_eq(struct mlx4_dev *dev, char *name, struct cpu_rmap *rmap,
904 int *vector);
663void mlx4_release_eq(struct mlx4_dev *dev, int vec); 905void mlx4_release_eq(struct mlx4_dev *dev, int vec);
664 906
665int mlx4_wol_read(struct mlx4_dev *dev, u64 *config, int port); 907int mlx4_wol_read(struct mlx4_dev *dev, u64 *config, int port);
@@ -668,4 +910,10 @@ int mlx4_wol_write(struct mlx4_dev *dev, u64 config, int port);
668int mlx4_counter_alloc(struct mlx4_dev *dev, u32 *idx); 910int mlx4_counter_alloc(struct mlx4_dev *dev, u32 *idx);
669void mlx4_counter_free(struct mlx4_dev *dev, u32 idx); 911void mlx4_counter_free(struct mlx4_dev *dev, u32 idx);
670 912
913int mlx4_flow_attach(struct mlx4_dev *dev,
914 struct mlx4_net_trans_rule *rule, u64 *reg_id);
915int mlx4_flow_detach(struct mlx4_dev *dev, u64 reg_id);
916
917int mlx4_get_parav_qkey(struct mlx4_dev *dev, u32 qpn, u32 *qkey);
918
671#endif /* MLX4_DEVICE_H */ 919#endif /* MLX4_DEVICE_H */
diff --git a/include/linux/mlx4/driver.h b/include/linux/mlx4/driver.h
index 5f1298b1b5ef..d813704b963b 100644
--- a/include/linux/mlx4/driver.h
+++ b/include/linux/mlx4/driver.h
@@ -37,18 +37,21 @@
37 37
38struct mlx4_dev; 38struct mlx4_dev;
39 39
40#define MLX4_MAC_MASK 0xffffffffffffULL
41
40enum mlx4_dev_event { 42enum mlx4_dev_event {
41 MLX4_DEV_EVENT_CATASTROPHIC_ERROR, 43 MLX4_DEV_EVENT_CATASTROPHIC_ERROR,
42 MLX4_DEV_EVENT_PORT_UP, 44 MLX4_DEV_EVENT_PORT_UP,
43 MLX4_DEV_EVENT_PORT_DOWN, 45 MLX4_DEV_EVENT_PORT_DOWN,
44 MLX4_DEV_EVENT_PORT_REINIT, 46 MLX4_DEV_EVENT_PORT_REINIT,
47 MLX4_DEV_EVENT_PORT_MGMT_CHANGE,
45}; 48};
46 49
47struct mlx4_interface { 50struct mlx4_interface {
48 void * (*add) (struct mlx4_dev *dev); 51 void * (*add) (struct mlx4_dev *dev);
49 void (*remove)(struct mlx4_dev *dev, void *context); 52 void (*remove)(struct mlx4_dev *dev, void *context);
50 void (*event) (struct mlx4_dev *dev, void *context, 53 void (*event) (struct mlx4_dev *dev, void *context,
51 enum mlx4_dev_event event, int port); 54 enum mlx4_dev_event event, unsigned long param);
52 void * (*get_dev)(struct mlx4_dev *dev, void *context, u8 port); 55 void * (*get_dev)(struct mlx4_dev *dev, void *context, u8 port);
53 struct list_head list; 56 struct list_head list;
54 enum mlx4_protocol protocol; 57 enum mlx4_protocol protocol;
diff --git a/include/linux/mm.h b/include/linux/mm.h
index b36d08ce5c57..f9f279cf5b1b 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -1591,6 +1591,7 @@ void vmemmap_populate_print_last(void);
1591enum mf_flags { 1591enum mf_flags {
1592 MF_COUNT_INCREASED = 1 << 0, 1592 MF_COUNT_INCREASED = 1 << 0,
1593 MF_ACTION_REQUIRED = 1 << 1, 1593 MF_ACTION_REQUIRED = 1 << 1,
1594 MF_MUST_KILL = 1 << 2,
1594}; 1595};
1595extern int memory_failure(unsigned long pfn, int trapno, int flags); 1596extern int memory_failure(unsigned long pfn, int trapno, int flags);
1596extern void memory_failure_queue(unsigned long pfn, int trapno, int flags); 1597extern void memory_failure_queue(unsigned long pfn, int trapno, int flags);
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
index dad95bdd06d7..704a626d94a0 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
@@ -57,8 +57,18 @@ struct page {
57 }; 57 };
58 58
59 union { 59 union {
60#if defined(CONFIG_HAVE_CMPXCHG_DOUBLE) && \
61 defined(CONFIG_HAVE_ALIGNED_STRUCT_PAGE)
60 /* Used for cmpxchg_double in slub */ 62 /* Used for cmpxchg_double in slub */
61 unsigned long counters; 63 unsigned long counters;
64#else
65 /*
66 * Keep _count separate from slub cmpxchg_double data.
67 * As the rest of the double word is protected by
68 * slab_lock but _count is not.
69 */
70 unsigned counters;
71#endif
62 72
63 struct { 73 struct {
64 74
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h
index d76513b5b263..111aca5e97f3 100644
--- a/include/linux/mmc/card.h
+++ b/include/linux/mmc/card.h
@@ -149,6 +149,7 @@ struct sd_switch_caps {
149#define SD_SET_CURRENT_LIMIT_400 1 149#define SD_SET_CURRENT_LIMIT_400 1
150#define SD_SET_CURRENT_LIMIT_600 2 150#define SD_SET_CURRENT_LIMIT_600 2
151#define SD_SET_CURRENT_LIMIT_800 3 151#define SD_SET_CURRENT_LIMIT_800 3
152#define SD_SET_CURRENT_NO_CHANGE (-1)
152 153
153#define SD_MAX_CURRENT_200 (1 << SD_SET_CURRENT_LIMIT_200) 154#define SD_MAX_CURRENT_200 (1 << SD_SET_CURRENT_LIMIT_200)
154#define SD_MAX_CURRENT_400 (1 << SD_SET_CURRENT_LIMIT_400) 155#define SD_MAX_CURRENT_400 (1 << SD_SET_CURRENT_LIMIT_400)
diff --git a/include/linux/mmc/cd-gpio.h b/include/linux/mmc/cd-gpio.h
deleted file mode 100644
index cefaba038ccb..000000000000
--- a/include/linux/mmc/cd-gpio.h
+++ /dev/null
@@ -1,18 +0,0 @@
1/*
2 * Generic GPIO card-detect helper header
3 *
4 * Copyright (C) 2011, Guennadi Liakhovetski <g.liakhovetski@gmx.de>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11#ifndef MMC_CD_GPIO_H
12#define MMC_CD_GPIO_H
13
14struct mmc_host;
15int mmc_cd_gpio_request(struct mmc_host *host, unsigned int gpio);
16void mmc_cd_gpio_free(struct mmc_host *host);
17
18#endif
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index 0707d228d7f1..f578a71d82a6 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -11,6 +11,7 @@
11#define LINUX_MMC_HOST_H 11#define LINUX_MMC_HOST_H
12 12
13#include <linux/leds.h> 13#include <linux/leds.h>
14#include <linux/mutex.h>
14#include <linux/sched.h> 15#include <linux/sched.h>
15#include <linux/device.h> 16#include <linux/device.h>
16#include <linux/fault-inject.h> 17#include <linux/fault-inject.h>
@@ -150,11 +151,31 @@ struct mmc_async_req {
150 int (*err_check) (struct mmc_card *, struct mmc_async_req *); 151 int (*err_check) (struct mmc_card *, struct mmc_async_req *);
151}; 152};
152 153
153struct mmc_hotplug { 154/**
154 unsigned int irq; 155 * struct mmc_slot - MMC slot functions
156 *
157 * @cd_irq: MMC/SD-card slot hotplug detection IRQ or -EINVAL
158 * @lock: protect the @handler_priv pointer
159 * @handler_priv: MMC/SD-card slot context
160 *
161 * Some MMC/SD host controllers implement slot-functions like card and
162 * write-protect detection natively. However, a large number of controllers
163 * leave these functions to the CPU. This struct provides a hook to attach
164 * such slot-function drivers.
165 */
166struct mmc_slot {
167 int cd_irq;
168 struct mutex lock;
155 void *handler_priv; 169 void *handler_priv;
156}; 170};
157 171
172struct regulator;
173
174struct mmc_supply {
175 struct regulator *vmmc; /* Card power supply */
176 struct regulator *vqmmc; /* Optional Vccq supply */
177};
178
158struct mmc_host { 179struct mmc_host {
159 struct device *parent; 180 struct device *parent;
160 struct device class_dev; 181 struct device class_dev;
@@ -168,6 +189,9 @@ struct mmc_host {
168 u32 ocr_avail_sd; /* SD-specific OCR */ 189 u32 ocr_avail_sd; /* SD-specific OCR */
169 u32 ocr_avail_mmc; /* MMC-specific OCR */ 190 u32 ocr_avail_mmc; /* MMC-specific OCR */
170 struct notifier_block pm_notify; 191 struct notifier_block pm_notify;
192 u32 max_current_330;
193 u32 max_current_300;
194 u32 max_current_180;
171 195
172#define MMC_VDD_165_195 0x00000080 /* VDD voltage 1.65 - 1.95 */ 196#define MMC_VDD_165_195 0x00000080 /* VDD voltage 1.65 - 1.95 */
173#define MMC_VDD_20_21 0x00000100 /* VDD voltage 2.0 ~ 2.1 */ 197#define MMC_VDD_20_21 0x00000100 /* VDD voltage 2.0 ~ 2.1 */
@@ -211,16 +235,9 @@ struct mmc_host {
211#define MMC_CAP_UHS_SDR50 (1 << 17) /* Host supports UHS SDR50 mode */ 235#define MMC_CAP_UHS_SDR50 (1 << 17) /* Host supports UHS SDR50 mode */
212#define MMC_CAP_UHS_SDR104 (1 << 18) /* Host supports UHS SDR104 mode */ 236#define MMC_CAP_UHS_SDR104 (1 << 18) /* Host supports UHS SDR104 mode */
213#define MMC_CAP_UHS_DDR50 (1 << 19) /* Host supports UHS DDR50 mode */ 237#define MMC_CAP_UHS_DDR50 (1 << 19) /* Host supports UHS DDR50 mode */
214#define MMC_CAP_SET_XPC_330 (1 << 20) /* Host supports >150mA current at 3.3V */
215#define MMC_CAP_SET_XPC_300 (1 << 21) /* Host supports >150mA current at 3.0V */
216#define MMC_CAP_SET_XPC_180 (1 << 22) /* Host supports >150mA current at 1.8V */
217#define MMC_CAP_DRIVER_TYPE_A (1 << 23) /* Host supports Driver Type A */ 238#define MMC_CAP_DRIVER_TYPE_A (1 << 23) /* Host supports Driver Type A */
218#define MMC_CAP_DRIVER_TYPE_C (1 << 24) /* Host supports Driver Type C */ 239#define MMC_CAP_DRIVER_TYPE_C (1 << 24) /* Host supports Driver Type C */
219#define MMC_CAP_DRIVER_TYPE_D (1 << 25) /* Host supports Driver Type D */ 240#define MMC_CAP_DRIVER_TYPE_D (1 << 25) /* Host supports Driver Type D */
220#define MMC_CAP_MAX_CURRENT_200 (1 << 26) /* Host max current limit is 200mA */
221#define MMC_CAP_MAX_CURRENT_400 (1 << 27) /* Host max current limit is 400mA */
222#define MMC_CAP_MAX_CURRENT_600 (1 << 28) /* Host max current limit is 600mA */
223#define MMC_CAP_MAX_CURRENT_800 (1 << 29) /* Host max current limit is 800mA */
224#define MMC_CAP_CMD23 (1 << 30) /* CMD23 supported. */ 241#define MMC_CAP_CMD23 (1 << 30) /* CMD23 supported. */
225#define MMC_CAP_HW_RESET (1 << 31) /* Hardware reset */ 242#define MMC_CAP_HW_RESET (1 << 31) /* Hardware reset */
226 243
@@ -238,6 +255,8 @@ struct mmc_host {
238#define MMC_CAP2_BROKEN_VOLTAGE (1 << 7) /* Use the broken voltage */ 255#define MMC_CAP2_BROKEN_VOLTAGE (1 << 7) /* Use the broken voltage */
239#define MMC_CAP2_DETECT_ON_ERR (1 << 8) /* On I/O err check card removal */ 256#define MMC_CAP2_DETECT_ON_ERR (1 << 8) /* On I/O err check card removal */
240#define MMC_CAP2_HC_ERASE_SZ (1 << 9) /* High-capacity erase size */ 257#define MMC_CAP2_HC_ERASE_SZ (1 << 9) /* High-capacity erase size */
258#define MMC_CAP2_CD_ACTIVE_HIGH (1 << 10) /* Card-detect signal active high */
259#define MMC_CAP2_RO_ACTIVE_HIGH (1 << 11) /* Write-protect signal active high */
241 260
242 mmc_pm_flag_t pm_caps; /* supported pm features */ 261 mmc_pm_flag_t pm_caps; /* supported pm features */
243 unsigned int power_notify_type; 262 unsigned int power_notify_type;
@@ -290,7 +309,7 @@ struct mmc_host {
290 309
291 struct delayed_work detect; 310 struct delayed_work detect;
292 int detect_change; /* card detect flag */ 311 int detect_change; /* card detect flag */
293 struct mmc_hotplug hotplug; 312 struct mmc_slot slot;
294 313
295 const struct mmc_bus_ops *bus_ops; /* current bus driver */ 314 const struct mmc_bus_ops *bus_ops; /* current bus driver */
296 unsigned int bus_refs; /* reference counter */ 315 unsigned int bus_refs; /* reference counter */
@@ -309,6 +328,7 @@ struct mmc_host {
309#ifdef CONFIG_REGULATOR 328#ifdef CONFIG_REGULATOR
310 bool regulator_enabled; /* regulator state */ 329 bool regulator_enabled; /* regulator state */
311#endif 330#endif
331 struct mmc_supply supply;
312 332
313 struct dentry *debugfs_root; 333 struct dentry *debugfs_root;
314 334
@@ -357,13 +377,12 @@ static inline void mmc_signal_sdio_irq(struct mmc_host *host)
357 wake_up_process(host->sdio_irq_thread); 377 wake_up_process(host->sdio_irq_thread);
358} 378}
359 379
360struct regulator;
361
362#ifdef CONFIG_REGULATOR 380#ifdef CONFIG_REGULATOR
363int mmc_regulator_get_ocrmask(struct regulator *supply); 381int mmc_regulator_get_ocrmask(struct regulator *supply);
364int mmc_regulator_set_ocr(struct mmc_host *mmc, 382int mmc_regulator_set_ocr(struct mmc_host *mmc,
365 struct regulator *supply, 383 struct regulator *supply,
366 unsigned short vdd_bit); 384 unsigned short vdd_bit);
385int mmc_regulator_get_supply(struct mmc_host *mmc);
367#else 386#else
368static inline int mmc_regulator_get_ocrmask(struct regulator *supply) 387static inline int mmc_regulator_get_ocrmask(struct regulator *supply)
369{ 388{
@@ -376,6 +395,11 @@ static inline int mmc_regulator_set_ocr(struct mmc_host *mmc,
376{ 395{
377 return 0; 396 return 0;
378} 397}
398
399static inline int mmc_regulator_get_supply(struct mmc_host *mmc)
400{
401 return 0;
402}
379#endif 403#endif
380 404
381int mmc_card_awake(struct mmc_host *host); 405int mmc_card_awake(struct mmc_host *host);
diff --git a/include/linux/mmc/sdhci-spear.h b/include/linux/mmc/sdhci-spear.h
index 5cdc96da9dd5..e78c0e236e9d 100644
--- a/include/linux/mmc/sdhci-spear.h
+++ b/include/linux/mmc/sdhci-spear.h
@@ -4,7 +4,7 @@
4 * SDHCI declarations specific to ST SPEAr platform 4 * SDHCI declarations specific to ST SPEAr platform
5 * 5 *
6 * Copyright (C) 2010 ST Microelectronics 6 * Copyright (C) 2010 ST Microelectronics
7 * Viresh Kumar<viresh.kumar@st.com> 7 * Viresh Kumar <viresh.linux@gmail.com>
8 * 8 *
9 * This file is licensed under the terms of the GNU General Public 9 * This file is licensed under the terms of the GNU General Public
10 * License version 2. This program is licensed "as is" without any 10 * License version 2. This program is licensed "as is" without any
diff --git a/include/linux/mmc/sdhci.h b/include/linux/mmc/sdhci.h
index e9051e1cb1ce..ac83b105bedd 100644
--- a/include/linux/mmc/sdhci.h
+++ b/include/linux/mmc/sdhci.h
@@ -122,6 +122,7 @@ struct sdhci_host {
122#define SDHCI_PV_ENABLED (1<<8) /* Preset value enabled */ 122#define SDHCI_PV_ENABLED (1<<8) /* Preset value enabled */
123#define SDHCI_SDIO_IRQ_ENABLED (1<<9) /* SDIO irq enabled */ 123#define SDHCI_SDIO_IRQ_ENABLED (1<<9) /* SDIO irq enabled */
124#define SDHCI_HS200_NEEDS_TUNING (1<<10) /* HS200 needs tuning */ 124#define SDHCI_HS200_NEEDS_TUNING (1<<10) /* HS200 needs tuning */
125#define SDHCI_USING_RETUNING_TIMER (1<<11) /* Host is using a retuning timer for the card */
125 126
126 unsigned int version; /* SDHCI spec. version */ 127 unsigned int version; /* SDHCI spec. version */
127 128
@@ -155,7 +156,8 @@ struct sdhci_host {
155 156
156 struct timer_list timer; /* Timer for timeouts */ 157 struct timer_list timer; /* Timer for timeouts */
157 158
158 unsigned int caps; /* Alternative capabilities */ 159 unsigned int caps; /* Alternative CAPABILITY_0 */
160 unsigned int caps1; /* Alternative CAPABILITY_1 */
159 161
160 unsigned int ocr_avail_sdio; /* OCR bit masks */ 162 unsigned int ocr_avail_sdio; /* OCR bit masks */
161 unsigned int ocr_avail_sd; 163 unsigned int ocr_avail_sd;
diff --git a/include/linux/mmc/sdio.h b/include/linux/mmc/sdio.h
index c9fe66c58f8f..17446d3c3602 100644
--- a/include/linux/mmc/sdio.h
+++ b/include/linux/mmc/sdio.h
@@ -98,7 +98,9 @@
98 98
99#define SDIO_CCCR_IF 0x07 /* bus interface controls */ 99#define SDIO_CCCR_IF 0x07 /* bus interface controls */
100 100
101#define SDIO_BUS_WIDTH_MASK 0x03 /* data bus width setting */
101#define SDIO_BUS_WIDTH_1BIT 0x00 102#define SDIO_BUS_WIDTH_1BIT 0x00
103#define SDIO_BUS_WIDTH_RESERVED 0x01
102#define SDIO_BUS_WIDTH_4BIT 0x02 104#define SDIO_BUS_WIDTH_4BIT 0x02
103#define SDIO_BUS_ECSI 0x20 /* Enable continuous SPI interrupt */ 105#define SDIO_BUS_ECSI 0x20 /* Enable continuous SPI interrupt */
104#define SDIO_BUS_SCSI 0x40 /* Support continuous SPI interrupt */ 106#define SDIO_BUS_SCSI 0x40 /* Support continuous SPI interrupt */
diff --git a/include/linux/mmc/sh_mmcif.h b/include/linux/mmc/sh_mmcif.h
index 05f0e3db1c12..e7d5dd67bb74 100644
--- a/include/linux/mmc/sh_mmcif.h
+++ b/include/linux/mmc/sh_mmcif.h
@@ -32,18 +32,14 @@
32 * 1111 : Peripheral clock (sup_pclk set '1') 32 * 1111 : Peripheral clock (sup_pclk set '1')
33 */ 33 */
34 34
35struct sh_mmcif_dma {
36 struct sh_dmae_slave chan_priv_tx;
37 struct sh_dmae_slave chan_priv_rx;
38};
39
40struct sh_mmcif_plat_data { 35struct sh_mmcif_plat_data {
41 void (*set_pwr)(struct platform_device *pdev, int state); 36 void (*set_pwr)(struct platform_device *pdev, int state);
42 void (*down_pwr)(struct platform_device *pdev); 37 void (*down_pwr)(struct platform_device *pdev);
43 int (*get_cd)(struct platform_device *pdef); 38 int (*get_cd)(struct platform_device *pdef);
44 struct sh_mmcif_dma *dma; /* Deprecated. Instead */ 39 unsigned int slave_id_tx; /* embedded slave_id_[tr]x */
45 unsigned int slave_id_tx; /* use embedded slave_id_[tr]x */
46 unsigned int slave_id_rx; 40 unsigned int slave_id_rx;
41 bool use_cd_gpio : 1;
42 unsigned int cd_gpio;
47 u8 sup_pclk; /* 1 :SH7757, 0: SH7724/SH7372 */ 43 u8 sup_pclk; /* 1 :SH7757, 0: SH7724/SH7372 */
48 unsigned long caps; 44 unsigned long caps;
49 u32 ocr; 45 u32 ocr;
diff --git a/include/linux/mmc/sh_mobile_sdhi.h b/include/linux/mmc/sh_mobile_sdhi.h
index e94e620aeddc..b65679ffa880 100644
--- a/include/linux/mmc/sh_mobile_sdhi.h
+++ b/include/linux/mmc/sh_mobile_sdhi.h
@@ -23,6 +23,7 @@ struct sh_mobile_sdhi_info {
23 int dma_slave_rx; 23 int dma_slave_rx;
24 unsigned long tmio_flags; 24 unsigned long tmio_flags;
25 unsigned long tmio_caps; 25 unsigned long tmio_caps;
26 unsigned long tmio_caps2;
26 u32 tmio_ocr_mask; /* available MMC voltages */ 27 u32 tmio_ocr_mask; /* available MMC voltages */
27 unsigned int cd_gpio; 28 unsigned int cd_gpio;
28 struct tmio_mmc_data *pdata; 29 struct tmio_mmc_data *pdata;
diff --git a/include/linux/mmc/slot-gpio.h b/include/linux/mmc/slot-gpio.h
new file mode 100644
index 000000000000..7d88d27bfafa
--- /dev/null
+++ b/include/linux/mmc/slot-gpio.h
@@ -0,0 +1,24 @@
1/*
2 * Generic GPIO card-detect helper header
3 *
4 * Copyright (C) 2011, Guennadi Liakhovetski <g.liakhovetski@gmx.de>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11#ifndef MMC_SLOT_GPIO_H
12#define MMC_SLOT_GPIO_H
13
14struct mmc_host;
15
16int mmc_gpio_get_ro(struct mmc_host *host);
17int mmc_gpio_request_ro(struct mmc_host *host, unsigned int gpio);
18void mmc_gpio_free_ro(struct mmc_host *host);
19
20int mmc_gpio_get_cd(struct mmc_host *host);
21int mmc_gpio_request_cd(struct mmc_host *host, unsigned int gpio);
22void mmc_gpio_free_cd(struct mmc_host *host);
23
24#endif
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
index 2427706f78b4..458988bd55a1 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -188,7 +188,7 @@ static inline int is_unevictable_lru(enum lru_list lru)
188struct zone_reclaim_stat { 188struct zone_reclaim_stat {
189 /* 189 /*
190 * The pageout code in vmscan.c keeps track of how many of the 190 * The pageout code in vmscan.c keeps track of how many of the
191 * mem/swap backed and file backed pages are refeferenced. 191 * mem/swap backed and file backed pages are referenced.
192 * The higher the rotated/scanned ratio, the more valuable 192 * The higher the rotated/scanned ratio, the more valuable
193 * that cache is. 193 * that cache is.
194 * 194 *
@@ -694,7 +694,7 @@ typedef struct pglist_data {
694 range, including holes */ 694 range, including holes */
695 int node_id; 695 int node_id;
696 wait_queue_head_t kswapd_wait; 696 wait_queue_head_t kswapd_wait;
697 struct task_struct *kswapd; 697 struct task_struct *kswapd; /* Protected by lock_memory_hotplug() */
698 int kswapd_max_order; 698 int kswapd_max_order;
699 enum zone_type classzone_idx; 699 enum zone_type classzone_idx;
700} pg_data_t; 700} pg_data_t;
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
index 5db93821f9c7..6955045199b0 100644
--- a/include/linux/mod_devicetable.h
+++ b/include/linux/mod_devicetable.h
@@ -78,6 +78,9 @@ struct ieee1394_device_id {
78 * of a given interface; other interfaces may support other classes. 78 * of a given interface; other interfaces may support other classes.
79 * @bInterfaceSubClass: Subclass of interface; associated with bInterfaceClass. 79 * @bInterfaceSubClass: Subclass of interface; associated with bInterfaceClass.
80 * @bInterfaceProtocol: Protocol of interface; associated with bInterfaceClass. 80 * @bInterfaceProtocol: Protocol of interface; associated with bInterfaceClass.
81 * @bInterfaceNumber: Number of interface; composite devices may use
82 * fixed interface numbers to differentiate between vendor-specific
83 * interfaces.
81 * @driver_info: Holds information used by the driver. Usually it holds 84 * @driver_info: Holds information used by the driver. Usually it holds
82 * a pointer to a descriptor understood by the driver, or perhaps 85 * a pointer to a descriptor understood by the driver, or perhaps
83 * device flags. 86 * device flags.
@@ -115,8 +118,12 @@ struct usb_device_id {
115 __u8 bInterfaceSubClass; 118 __u8 bInterfaceSubClass;
116 __u8 bInterfaceProtocol; 119 __u8 bInterfaceProtocol;
117 120
121 /* Used for vendor-specific interface matches */
122 __u8 bInterfaceNumber;
123
118 /* not matched against */ 124 /* not matched against */
119 kernel_ulong_t driver_info; 125 kernel_ulong_t driver_info
126 __attribute__((aligned(sizeof(kernel_ulong_t))));
120}; 127};
121 128
122/* Some useful macros to use to create struct usb_device_id */ 129/* Some useful macros to use to create struct usb_device_id */
@@ -130,6 +137,7 @@ struct usb_device_id {
130#define USB_DEVICE_ID_MATCH_INT_CLASS 0x0080 137#define USB_DEVICE_ID_MATCH_INT_CLASS 0x0080
131#define USB_DEVICE_ID_MATCH_INT_SUBCLASS 0x0100 138#define USB_DEVICE_ID_MATCH_INT_SUBCLASS 0x0100
132#define USB_DEVICE_ID_MATCH_INT_PROTOCOL 0x0200 139#define USB_DEVICE_ID_MATCH_INT_PROTOCOL 0x0200
140#define USB_DEVICE_ID_MATCH_INT_NUMBER 0x0400
133 141
134#define HID_ANY_ID (~0) 142#define HID_ANY_ID (~0)
135#define HID_BUS_ANY 0xffff 143#define HID_BUS_ANY 0xffff
diff --git a/include/linux/mxsfb.h b/include/linux/mxsfb.h
new file mode 100644
index 000000000000..f14943d55315
--- /dev/null
+++ b/include/linux/mxsfb.h
@@ -0,0 +1,49 @@
1/*
2 * This program is free software; you can redistribute it and/or
3 * modify it under the terms of the GNU General Public License
4 * as published by the Free Software Foundation; either version 2
5 * of the License, or (at your option) any later version.
6 * This program is distributed in the hope that it will be useful,
7 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 * GNU General Public License for more details.
10 *
11 * You should have received a copy of the GNU General Public License
12 * along with this program; if not, write to the Free Software
13 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
14 * MA 02110-1301, USA.
15 */
16
17#ifndef __LINUX_MXSFB_H
18#define __LINUX_MXSFB_H
19
20#include <linux/fb.h>
21
22#define STMLCDIF_8BIT 1 /** pixel data bus to the display is of 8 bit width */
23#define STMLCDIF_16BIT 0 /** pixel data bus to the display is of 16 bit width */
24#define STMLCDIF_18BIT 2 /** pixel data bus to the display is of 18 bit width */
25#define STMLCDIF_24BIT 3 /** pixel data bus to the display is of 24 bit width */
26
27#define FB_SYNC_DATA_ENABLE_HIGH_ACT (1 << 6)
28#define FB_SYNC_DOTCLK_FAILING_ACT (1 << 7) /* failing/negtive edge sampling */
29
30struct mxsfb_platform_data {
31 struct fb_videomode *mode_list;
32 unsigned mode_count;
33
34 unsigned default_bpp;
35
36 unsigned dotclk_delay; /* refer manual HW_LCDIF_VDCTRL4 register */
37 unsigned ld_intf_width; /* refer STMLCDIF_* macros */
38
39 unsigned fb_size; /* Size of the video memory. If zero a
40 * default will be used
41 */
42 unsigned long fb_phys; /* physical address for the video memory. If
43 * zero the framebuffer memory will be dynamically
44 * allocated. If specified,fb_size must also be specified.
45 * fb_phys must be unused by Linux.
46 */
47};
48
49#endif /* __LINUX_MXSFB_H */
diff --git a/include/linux/namei.h b/include/linux/namei.h
index ffc02135c483..d2ef8b34b967 100644
--- a/include/linux/namei.h
+++ b/include/linux/namei.h
@@ -7,12 +7,6 @@
7 7
8struct vfsmount; 8struct vfsmount;
9 9
10struct open_intent {
11 int flags;
12 int create_mode;
13 struct file *file;
14};
15
16enum { MAX_NESTED_LINKS = 8 }; 10enum { MAX_NESTED_LINKS = 8 };
17 11
18struct nameidata { 12struct nameidata {
@@ -25,11 +19,6 @@ struct nameidata {
25 int last_type; 19 int last_type;
26 unsigned depth; 20 unsigned depth;
27 char *saved_names[MAX_NESTED_LINKS + 1]; 21 char *saved_names[MAX_NESTED_LINKS + 1];
28
29 /* Intent data */
30 union {
31 struct open_intent open;
32 } intent;
33}; 22};
34 23
35/* 24/*
@@ -78,13 +67,10 @@ extern int kern_path(const char *, unsigned, struct path *);
78 67
79extern struct dentry *kern_path_create(int, const char *, struct path *, int); 68extern struct dentry *kern_path_create(int, const char *, struct path *, int);
80extern struct dentry *user_path_create(int, const char __user *, struct path *, int); 69extern struct dentry *user_path_create(int, const char __user *, struct path *, int);
81extern int kern_path_parent(const char *, struct nameidata *); 70extern struct dentry *kern_path_locked(const char *, struct path *);
82extern int vfs_path_lookup(struct dentry *, struct vfsmount *, 71extern int vfs_path_lookup(struct dentry *, struct vfsmount *,
83 const char *, unsigned int, struct path *); 72 const char *, unsigned int, struct path *);
84 73
85extern struct file *lookup_instantiate_filp(struct nameidata *nd, struct dentry *dentry,
86 int (*open)(struct inode *, struct file *));
87
88extern struct dentry *lookup_one_len(const char *, struct dentry *, int); 74extern struct dentry *lookup_one_len(const char *, struct dentry *, int);
89 75
90extern int follow_down_one(struct path *); 76extern int follow_down_one(struct path *);
@@ -94,6 +80,8 @@ extern int follow_up(struct path *);
94extern struct dentry *lock_rename(struct dentry *, struct dentry *); 80extern struct dentry *lock_rename(struct dentry *, struct dentry *);
95extern void unlock_rename(struct dentry *, struct dentry *); 81extern void unlock_rename(struct dentry *, struct dentry *);
96 82
83extern void nd_jump_link(struct nameidata *nd, struct path *path);
84
97static inline void nd_set_link(struct nameidata *nd, char *path) 85static inline void nd_set_link(struct nameidata *nd, char *path)
98{ 86{
99 nd->saved_names[nd->depth] = path; 87 nd->saved_names[nd->depth] = path;
diff --git a/include/linux/net.h b/include/linux/net.h
index e9ac2df079ba..99276c3dc89a 100644
--- a/include/linux/net.h
+++ b/include/linux/net.h
@@ -72,6 +72,7 @@ struct net;
72#define SOCK_NOSPACE 2 72#define SOCK_NOSPACE 2
73#define SOCK_PASSCRED 3 73#define SOCK_PASSCRED 3
74#define SOCK_PASSSEC 4 74#define SOCK_PASSSEC 4
75#define SOCK_EXTERNALLY_ALLOCATED 5
75 76
76#ifndef ARCH_HAS_SOCKET_TYPES 77#ifndef ARCH_HAS_SOCKET_TYPES
77/** 78/**
@@ -247,6 +248,7 @@ extern int sock_recvmsg(struct socket *sock, struct msghdr *msg,
247 size_t size, int flags); 248 size_t size, int flags);
248extern int sock_map_fd(struct socket *sock, int flags); 249extern int sock_map_fd(struct socket *sock, int flags);
249extern struct socket *sockfd_lookup(int fd, int *err); 250extern struct socket *sockfd_lookup(int fd, int *err);
251extern struct socket *sock_from_file(struct file *file, int *err);
250#define sockfd_put(sock) fput(sock->file) 252#define sockfd_put(sock) fput(sock->file)
251extern int net_ratelimit(void); 253extern int net_ratelimit(void);
252 254
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index d94cb1431519..eb06e58bed0b 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -1046,10 +1046,9 @@ struct net_device {
1046 */ 1046 */
1047 char name[IFNAMSIZ]; 1047 char name[IFNAMSIZ];
1048 1048
1049 struct pm_qos_request pm_qos_req; 1049 /* device name hash chain, please keep it close to name[] */
1050
1051 /* device name hash chain */
1052 struct hlist_node name_hlist; 1050 struct hlist_node name_hlist;
1051
1053 /* snmp alias */ 1052 /* snmp alias */
1054 char *ifalias; 1053 char *ifalias;
1055 1054
@@ -1322,6 +1321,8 @@ struct net_device {
1322 1321
1323 /* group the device belongs to */ 1322 /* group the device belongs to */
1324 int group; 1323 int group;
1324
1325 struct pm_qos_request pm_qos_req;
1325}; 1326};
1326#define to_net_dev(d) container_of(d, struct net_device, dev) 1327#define to_net_dev(d) container_of(d, struct net_device, dev)
1327 1328
@@ -1626,6 +1627,7 @@ extern int dev_alloc_name(struct net_device *dev, const char *name);
1626extern int dev_open(struct net_device *dev); 1627extern int dev_open(struct net_device *dev);
1627extern int dev_close(struct net_device *dev); 1628extern int dev_close(struct net_device *dev);
1628extern void dev_disable_lro(struct net_device *dev); 1629extern void dev_disable_lro(struct net_device *dev);
1630extern int dev_loopback_xmit(struct sk_buff *newskb);
1629extern int dev_queue_xmit(struct sk_buff *skb); 1631extern int dev_queue_xmit(struct sk_buff *skb);
1630extern int register_netdevice(struct net_device *dev); 1632extern int register_netdevice(struct net_device *dev);
1631extern void unregister_netdevice_queue(struct net_device *dev, 1633extern void unregister_netdevice_queue(struct net_device *dev,
@@ -2108,7 +2110,12 @@ static inline int netif_set_real_num_rx_queues(struct net_device *dev,
2108static inline int netif_copy_real_num_queues(struct net_device *to_dev, 2110static inline int netif_copy_real_num_queues(struct net_device *to_dev,
2109 const struct net_device *from_dev) 2111 const struct net_device *from_dev)
2110{ 2112{
2111 netif_set_real_num_tx_queues(to_dev, from_dev->real_num_tx_queues); 2113 int err;
2114
2115 err = netif_set_real_num_tx_queues(to_dev,
2116 from_dev->real_num_tx_queues);
2117 if (err)
2118 return err;
2112#ifdef CONFIG_RPS 2119#ifdef CONFIG_RPS
2113 return netif_set_real_num_rx_queues(to_dev, 2120 return netif_set_real_num_rx_queues(to_dev,
2114 from_dev->real_num_rx_queues); 2121 from_dev->real_num_rx_queues);
@@ -2117,6 +2124,9 @@ static inline int netif_copy_real_num_queues(struct net_device *to_dev,
2117#endif 2124#endif
2118} 2125}
2119 2126
2127#define DEFAULT_MAX_NUM_RSS_QUEUES (8)
2128extern int netif_get_num_default_rss_queues(void);
2129
2120/* Use this variant when it is known for sure that it 2130/* Use this variant when it is known for sure that it
2121 * is executing from hardware interrupt context or with hardware interrupts 2131 * is executing from hardware interrupt context or with hardware interrupts
2122 * disabled. 2132 * disabled.
diff --git a/include/linux/netfilter.h b/include/linux/netfilter.h
index ff9c84c29b28..c613cf0d7884 100644
--- a/include/linux/netfilter.h
+++ b/include/linux/netfilter.h
@@ -94,6 +94,16 @@ static inline int nf_inet_addr_cmp(const union nf_inet_addr *a1,
94 a1->all[3] == a2->all[3]; 94 a1->all[3] == a2->all[3];
95} 95}
96 96
97static inline void nf_inet_addr_mask(const union nf_inet_addr *a1,
98 union nf_inet_addr *result,
99 const union nf_inet_addr *mask)
100{
101 result->all[0] = a1->all[0] & mask->all[0];
102 result->all[1] = a1->all[1] & mask->all[1];
103 result->all[2] = a1->all[2] & mask->all[2];
104 result->all[3] = a1->all[3] & mask->all[3];
105}
106
97extern void netfilter_init(void); 107extern void netfilter_init(void);
98 108
99/* Largest hook number + 1 */ 109/* Largest hook number + 1 */
@@ -383,6 +393,22 @@ nf_nat_decode_session(struct sk_buff *skb, struct flowi *fl, u_int8_t family)
383extern void (*ip_ct_attach)(struct sk_buff *, struct sk_buff *) __rcu; 393extern void (*ip_ct_attach)(struct sk_buff *, struct sk_buff *) __rcu;
384extern void nf_ct_attach(struct sk_buff *, struct sk_buff *); 394extern void nf_ct_attach(struct sk_buff *, struct sk_buff *);
385extern void (*nf_ct_destroy)(struct nf_conntrack *) __rcu; 395extern void (*nf_ct_destroy)(struct nf_conntrack *) __rcu;
396
397struct nf_conn;
398struct nlattr;
399
400struct nfq_ct_hook {
401 size_t (*build_size)(const struct nf_conn *ct);
402 int (*build)(struct sk_buff *skb, struct nf_conn *ct);
403 int (*parse)(const struct nlattr *attr, struct nf_conn *ct);
404};
405extern struct nfq_ct_hook __rcu *nfq_ct_hook;
406
407struct nfq_ct_nat_hook {
408 void (*seq_adjust)(struct sk_buff *skb, struct nf_conn *ct,
409 u32 ctinfo, int off);
410};
411extern struct nfq_ct_nat_hook __rcu *nfq_ct_nat_hook;
386#else 412#else
387static inline void nf_ct_attach(struct sk_buff *new, struct sk_buff *skb) {} 413static inline void nf_ct_attach(struct sk_buff *new, struct sk_buff *skb) {}
388#endif 414#endif
diff --git a/include/linux/netfilter/Kbuild b/include/linux/netfilter/Kbuild
index 1697036336b6..874ae8f2706b 100644
--- a/include/linux/netfilter/Kbuild
+++ b/include/linux/netfilter/Kbuild
@@ -10,6 +10,7 @@ header-y += nfnetlink.h
10header-y += nfnetlink_acct.h 10header-y += nfnetlink_acct.h
11header-y += nfnetlink_compat.h 11header-y += nfnetlink_compat.h
12header-y += nfnetlink_conntrack.h 12header-y += nfnetlink_conntrack.h
13header-y += nfnetlink_cthelper.h
13header-y += nfnetlink_cttimeout.h 14header-y += nfnetlink_cttimeout.h
14header-y += nfnetlink_log.h 15header-y += nfnetlink_log.h
15header-y += nfnetlink_queue.h 16header-y += nfnetlink_queue.h
diff --git a/include/linux/netfilter/nf_conntrack_sip.h b/include/linux/netfilter/nf_conntrack_sip.h
index 0ce91d56a5f2..0dfc8b7210a3 100644
--- a/include/linux/netfilter/nf_conntrack_sip.h
+++ b/include/linux/netfilter/nf_conntrack_sip.h
@@ -2,6 +2,8 @@
2#define __NF_CONNTRACK_SIP_H__ 2#define __NF_CONNTRACK_SIP_H__
3#ifdef __KERNEL__ 3#ifdef __KERNEL__
4 4
5#include <net/netfilter/nf_conntrack_expect.h>
6
5#define SIP_PORT 5060 7#define SIP_PORT 5060
6#define SIP_TIMEOUT 3600 8#define SIP_TIMEOUT 3600
7 9
diff --git a/include/linux/netfilter/nfnetlink.h b/include/linux/netfilter/nfnetlink.h
index a1048c1587d1..18341cdb2443 100644
--- a/include/linux/netfilter/nfnetlink.h
+++ b/include/linux/netfilter/nfnetlink.h
@@ -50,7 +50,8 @@ struct nfgenmsg {
50#define NFNL_SUBSYS_IPSET 6 50#define NFNL_SUBSYS_IPSET 6
51#define NFNL_SUBSYS_ACCT 7 51#define NFNL_SUBSYS_ACCT 7
52#define NFNL_SUBSYS_CTNETLINK_TIMEOUT 8 52#define NFNL_SUBSYS_CTNETLINK_TIMEOUT 8
53#define NFNL_SUBSYS_COUNT 9 53#define NFNL_SUBSYS_CTHELPER 9
54#define NFNL_SUBSYS_COUNT 10
54 55
55#ifdef __KERNEL__ 56#ifdef __KERNEL__
56 57
diff --git a/include/linux/netfilter/nfnetlink_conntrack.h b/include/linux/netfilter/nfnetlink_conntrack.h
index e58e4b93c108..f649f7423ca2 100644
--- a/include/linux/netfilter/nfnetlink_conntrack.h
+++ b/include/linux/netfilter/nfnetlink_conntrack.h
@@ -7,6 +7,8 @@ enum cntl_msg_types {
7 IPCTNL_MSG_CT_GET, 7 IPCTNL_MSG_CT_GET,
8 IPCTNL_MSG_CT_DELETE, 8 IPCTNL_MSG_CT_DELETE,
9 IPCTNL_MSG_CT_GET_CTRZERO, 9 IPCTNL_MSG_CT_GET_CTRZERO,
10 IPCTNL_MSG_CT_GET_STATS_CPU,
11 IPCTNL_MSG_CT_GET_STATS,
10 12
11 IPCTNL_MSG_MAX 13 IPCTNL_MSG_MAX
12}; 14};
@@ -15,6 +17,7 @@ enum ctnl_exp_msg_types {
15 IPCTNL_MSG_EXP_NEW, 17 IPCTNL_MSG_EXP_NEW,
16 IPCTNL_MSG_EXP_GET, 18 IPCTNL_MSG_EXP_GET,
17 IPCTNL_MSG_EXP_DELETE, 19 IPCTNL_MSG_EXP_DELETE,
20 IPCTNL_MSG_EXP_GET_STATS_CPU,
18 21
19 IPCTNL_MSG_EXP_MAX 22 IPCTNL_MSG_EXP_MAX
20}; 23};
@@ -191,6 +194,7 @@ enum ctattr_expect_nat {
191enum ctattr_help { 194enum ctattr_help {
192 CTA_HELP_UNSPEC, 195 CTA_HELP_UNSPEC,
193 CTA_HELP_NAME, 196 CTA_HELP_NAME,
197 CTA_HELP_INFO,
194 __CTA_HELP_MAX 198 __CTA_HELP_MAX
195}; 199};
196#define CTA_HELP_MAX (__CTA_HELP_MAX - 1) 200#define CTA_HELP_MAX (__CTA_HELP_MAX - 1)
@@ -202,4 +206,39 @@ enum ctattr_secctx {
202}; 206};
203#define CTA_SECCTX_MAX (__CTA_SECCTX_MAX - 1) 207#define CTA_SECCTX_MAX (__CTA_SECCTX_MAX - 1)
204 208
209enum ctattr_stats_cpu {
210 CTA_STATS_UNSPEC,
211 CTA_STATS_SEARCHED,
212 CTA_STATS_FOUND,
213 CTA_STATS_NEW,
214 CTA_STATS_INVALID,
215 CTA_STATS_IGNORE,
216 CTA_STATS_DELETE,
217 CTA_STATS_DELETE_LIST,
218 CTA_STATS_INSERT,
219 CTA_STATS_INSERT_FAILED,
220 CTA_STATS_DROP,
221 CTA_STATS_EARLY_DROP,
222 CTA_STATS_ERROR,
223 CTA_STATS_SEARCH_RESTART,
224 __CTA_STATS_MAX,
225};
226#define CTA_STATS_MAX (__CTA_STATS_MAX - 1)
227
228enum ctattr_stats_global {
229 CTA_STATS_GLOBAL_UNSPEC,
230 CTA_STATS_GLOBAL_ENTRIES,
231 __CTA_STATS_GLOBAL_MAX,
232};
233#define CTA_STATS_GLOBAL_MAX (__CTA_STATS_GLOBAL_MAX - 1)
234
235enum ctattr_expect_stats {
236 CTA_STATS_EXP_UNSPEC,
237 CTA_STATS_EXP_NEW,
238 CTA_STATS_EXP_CREATE,
239 CTA_STATS_EXP_DELETE,
240 __CTA_STATS_EXP_MAX,
241};
242#define CTA_STATS_EXP_MAX (__CTA_STATS_EXP_MAX - 1)
243
205#endif /* _IPCONNTRACK_NETLINK_H */ 244#endif /* _IPCONNTRACK_NETLINK_H */
diff --git a/include/linux/netfilter/nfnetlink_cthelper.h b/include/linux/netfilter/nfnetlink_cthelper.h
new file mode 100644
index 000000000000..33659f6fad3e
--- /dev/null
+++ b/include/linux/netfilter/nfnetlink_cthelper.h
@@ -0,0 +1,55 @@
1#ifndef _NFNL_CTHELPER_H_
2#define _NFNL_CTHELPER_H_
3
4#define NFCT_HELPER_STATUS_DISABLED 0
5#define NFCT_HELPER_STATUS_ENABLED 1
6
7enum nfnl_acct_msg_types {
8 NFNL_MSG_CTHELPER_NEW,
9 NFNL_MSG_CTHELPER_GET,
10 NFNL_MSG_CTHELPER_DEL,
11 NFNL_MSG_CTHELPER_MAX
12};
13
14enum nfnl_cthelper_type {
15 NFCTH_UNSPEC,
16 NFCTH_NAME,
17 NFCTH_TUPLE,
18 NFCTH_QUEUE_NUM,
19 NFCTH_POLICY,
20 NFCTH_PRIV_DATA_LEN,
21 NFCTH_STATUS,
22 __NFCTH_MAX
23};
24#define NFCTH_MAX (__NFCTH_MAX - 1)
25
26enum nfnl_cthelper_policy_type {
27 NFCTH_POLICY_SET_UNSPEC,
28 NFCTH_POLICY_SET_NUM,
29 NFCTH_POLICY_SET,
30 NFCTH_POLICY_SET1 = NFCTH_POLICY_SET,
31 NFCTH_POLICY_SET2,
32 NFCTH_POLICY_SET3,
33 NFCTH_POLICY_SET4,
34 __NFCTH_POLICY_SET_MAX
35};
36#define NFCTH_POLICY_SET_MAX (__NFCTH_POLICY_SET_MAX - 1)
37
38enum nfnl_cthelper_pol_type {
39 NFCTH_POLICY_UNSPEC,
40 NFCTH_POLICY_NAME,
41 NFCTH_POLICY_EXPECT_MAX,
42 NFCTH_POLICY_EXPECT_TIMEOUT,
43 __NFCTH_POLICY_MAX
44};
45#define NFCTH_POLICY_MAX (__NFCTH_POLICY_MAX - 1)
46
47enum nfnl_cthelper_tuple_type {
48 NFCTH_TUPLE_UNSPEC,
49 NFCTH_TUPLE_L3PROTONUM,
50 NFCTH_TUPLE_L4PROTONUM,
51 __NFCTH_TUPLE_MAX,
52};
53#define NFCTH_TUPLE_MAX (__NFCTH_TUPLE_MAX - 1)
54
55#endif /* _NFNL_CTHELPER_H */
diff --git a/include/linux/netfilter/nfnetlink_queue.h b/include/linux/netfilter/nfnetlink_queue.h
index 24b32e6c009e..3b1c1360aedf 100644
--- a/include/linux/netfilter/nfnetlink_queue.h
+++ b/include/linux/netfilter/nfnetlink_queue.h
@@ -42,6 +42,8 @@ enum nfqnl_attr_type {
42 NFQA_IFINDEX_PHYSOUTDEV, /* __u32 ifindex */ 42 NFQA_IFINDEX_PHYSOUTDEV, /* __u32 ifindex */
43 NFQA_HWADDR, /* nfqnl_msg_packet_hw */ 43 NFQA_HWADDR, /* nfqnl_msg_packet_hw */
44 NFQA_PAYLOAD, /* opaque data payload */ 44 NFQA_PAYLOAD, /* opaque data payload */
45 NFQA_CT, /* nf_conntrack_netlink.h */
46 NFQA_CT_INFO, /* enum ip_conntrack_info */
45 47
46 __NFQA_MAX 48 __NFQA_MAX
47}; 49};
@@ -84,8 +86,15 @@ enum nfqnl_attr_config {
84 NFQA_CFG_CMD, /* nfqnl_msg_config_cmd */ 86 NFQA_CFG_CMD, /* nfqnl_msg_config_cmd */
85 NFQA_CFG_PARAMS, /* nfqnl_msg_config_params */ 87 NFQA_CFG_PARAMS, /* nfqnl_msg_config_params */
86 NFQA_CFG_QUEUE_MAXLEN, /* __u32 */ 88 NFQA_CFG_QUEUE_MAXLEN, /* __u32 */
89 NFQA_CFG_MASK, /* identify which flags to change */
90 NFQA_CFG_FLAGS, /* value of these flags (__u32) */
87 __NFQA_CFG_MAX 91 __NFQA_CFG_MAX
88}; 92};
89#define NFQA_CFG_MAX (__NFQA_CFG_MAX-1) 93#define NFQA_CFG_MAX (__NFQA_CFG_MAX-1)
90 94
95/* Flags for NFQA_CFG_FLAGS */
96#define NFQA_CFG_F_FAIL_OPEN (1 << 0)
97#define NFQA_CFG_F_CONNTRACK (1 << 1)
98#define NFQA_CFG_F_MAX (1 << 2)
99
91#endif /* _NFNETLINK_QUEUE_H */ 100#endif /* _NFNETLINK_QUEUE_H */
diff --git a/include/linux/netfilter/xt_connlimit.h b/include/linux/netfilter/xt_connlimit.h
index d1366f05d1b2..f1656096121e 100644
--- a/include/linux/netfilter/xt_connlimit.h
+++ b/include/linux/netfilter/xt_connlimit.h
@@ -22,13 +22,8 @@ struct xt_connlimit_info {
22#endif 22#endif
23 }; 23 };
24 unsigned int limit; 24 unsigned int limit;
25 union { 25 /* revision 1 */
26 /* revision 0 */ 26 __u32 flags;
27 unsigned int inverse;
28
29 /* revision 1 */
30 __u32 flags;
31 };
32 27
33 /* Used internally by the kernel */ 28 /* Used internally by the kernel */
34 struct xt_connlimit_data *data __attribute__((aligned(8))); 29 struct xt_connlimit_data *data __attribute__((aligned(8)));
diff --git a/include/linux/netfilter/xt_recent.h b/include/linux/netfilter/xt_recent.h
index 83318e01425e..6ef36c113e89 100644
--- a/include/linux/netfilter/xt_recent.h
+++ b/include/linux/netfilter/xt_recent.h
@@ -32,4 +32,14 @@ struct xt_recent_mtinfo {
32 __u8 side; 32 __u8 side;
33}; 33};
34 34
35struct xt_recent_mtinfo_v1 {
36 __u32 seconds;
37 __u32 hit_count;
38 __u8 check_set;
39 __u8 invert;
40 char name[XT_RECENT_NAME_LEN];
41 __u8 side;
42 union nf_inet_addr mask;
43};
44
35#endif /* _LINUX_NETFILTER_XT_RECENT_H */ 45#endif /* _LINUX_NETFILTER_XT_RECENT_H */
diff --git a/include/linux/netfilter_ipv4.h b/include/linux/netfilter_ipv4.h
index fa0946c549d3..e2b12801378d 100644
--- a/include/linux/netfilter_ipv4.h
+++ b/include/linux/netfilter_ipv4.h
@@ -66,6 +66,7 @@ enum nf_ip_hook_priorities {
66 NF_IP_PRI_SECURITY = 50, 66 NF_IP_PRI_SECURITY = 50,
67 NF_IP_PRI_NAT_SRC = 100, 67 NF_IP_PRI_NAT_SRC = 100,
68 NF_IP_PRI_SELINUX_LAST = 225, 68 NF_IP_PRI_SELINUX_LAST = 225,
69 NF_IP_PRI_CONNTRACK_HELPER = 300,
69 NF_IP_PRI_CONNTRACK_CONFIRM = INT_MAX, 70 NF_IP_PRI_CONNTRACK_CONFIRM = INT_MAX,
70 NF_IP_PRI_LAST = INT_MAX, 71 NF_IP_PRI_LAST = INT_MAX,
71}; 72};
diff --git a/include/linux/netfilter_ipv4/Kbuild b/include/linux/netfilter_ipv4/Kbuild
index c61b8fb1a9ef..8ba0c5b72ea9 100644
--- a/include/linux/netfilter_ipv4/Kbuild
+++ b/include/linux/netfilter_ipv4/Kbuild
@@ -5,7 +5,6 @@ header-y += ipt_LOG.h
5header-y += ipt_REJECT.h 5header-y += ipt_REJECT.h
6header-y += ipt_TTL.h 6header-y += ipt_TTL.h
7header-y += ipt_ULOG.h 7header-y += ipt_ULOG.h
8header-y += ipt_addrtype.h
9header-y += ipt_ah.h 8header-y += ipt_ah.h
10header-y += ipt_ecn.h 9header-y += ipt_ecn.h
11header-y += ipt_ttl.h 10header-y += ipt_ttl.h
diff --git a/include/linux/netfilter_ipv4/ipt_addrtype.h b/include/linux/netfilter_ipv4/ipt_addrtype.h
deleted file mode 100644
index 0da42237c8da..000000000000
--- a/include/linux/netfilter_ipv4/ipt_addrtype.h
+++ /dev/null
@@ -1,27 +0,0 @@
1#ifndef _IPT_ADDRTYPE_H
2#define _IPT_ADDRTYPE_H
3
4#include <linux/types.h>
5
6enum {
7 IPT_ADDRTYPE_INVERT_SOURCE = 0x0001,
8 IPT_ADDRTYPE_INVERT_DEST = 0x0002,
9 IPT_ADDRTYPE_LIMIT_IFACE_IN = 0x0004,
10 IPT_ADDRTYPE_LIMIT_IFACE_OUT = 0x0008,
11};
12
13struct ipt_addrtype_info_v1 {
14 __u16 source; /* source-type mask */
15 __u16 dest; /* dest-type mask */
16 __u32 flags;
17};
18
19/* revision 0 */
20struct ipt_addrtype_info {
21 __u16 source; /* source-type mask */
22 __u16 dest; /* dest-type mask */
23 __u32 invert_source;
24 __u32 invert_dest;
25};
26
27#endif
diff --git a/include/linux/netfilter_ipv6.h b/include/linux/netfilter_ipv6.h
index 57c025127f1d..7c8a513ce7a3 100644
--- a/include/linux/netfilter_ipv6.h
+++ b/include/linux/netfilter_ipv6.h
@@ -71,6 +71,7 @@ enum nf_ip6_hook_priorities {
71 NF_IP6_PRI_SECURITY = 50, 71 NF_IP6_PRI_SECURITY = 50,
72 NF_IP6_PRI_NAT_SRC = 100, 72 NF_IP6_PRI_NAT_SRC = 100,
73 NF_IP6_PRI_SELINUX_LAST = 225, 73 NF_IP6_PRI_SELINUX_LAST = 225,
74 NF_IP6_PRI_CONNTRACK_HELPER = 300,
74 NF_IP6_PRI_LAST = INT_MAX, 75 NF_IP6_PRI_LAST = INT_MAX,
75}; 76};
76 77
diff --git a/include/linux/netlink.h b/include/linux/netlink.h
index 0f628ffa420c..f74dd133788f 100644
--- a/include/linux/netlink.h
+++ b/include/linux/netlink.h
@@ -174,11 +174,17 @@ struct netlink_skb_parms {
174extern void netlink_table_grab(void); 174extern void netlink_table_grab(void);
175extern void netlink_table_ungrab(void); 175extern void netlink_table_ungrab(void);
176 176
177extern struct sock *netlink_kernel_create(struct net *net, 177/* optional Netlink kernel configuration parameters */
178 int unit,unsigned int groups, 178struct netlink_kernel_cfg {
179 void (*input)(struct sk_buff *skb), 179 unsigned int groups;
180 struct mutex *cb_mutex, 180 void (*input)(struct sk_buff *skb);
181 struct module *module); 181 struct mutex *cb_mutex;
182 void (*bind)(int group);
183};
184
185extern struct sock *netlink_kernel_create(struct net *net, int unit,
186 struct module *module,
187 struct netlink_kernel_cfg *cfg);
182extern void netlink_kernel_release(struct sock *sk); 188extern void netlink_kernel_release(struct sock *sk);
183extern int __netlink_change_ngroups(struct sock *sk, unsigned int groups); 189extern int __netlink_change_ngroups(struct sock *sk, unsigned int groups);
184extern int netlink_change_ngroups(struct sock *sk, unsigned int groups); 190extern int netlink_change_ngroups(struct sock *sk, unsigned int groups);
@@ -241,14 +247,6 @@ struct netlink_notify {
241struct nlmsghdr * 247struct nlmsghdr *
242__nlmsg_put(struct sk_buff *skb, u32 pid, u32 seq, int type, int len, int flags); 248__nlmsg_put(struct sk_buff *skb, u32 pid, u32 seq, int type, int len, int flags);
243 249
244#define NLMSG_NEW(skb, pid, seq, type, len, flags) \
245({ if (unlikely(skb_tailroom(skb) < (int)NLMSG_SPACE(len))) \
246 goto nlmsg_failure; \
247 __nlmsg_put(skb, pid, seq, type, len, flags); })
248
249#define NLMSG_PUT(skb, pid, seq, type, len) \
250 NLMSG_NEW(skb, pid, seq, type, len, 0)
251
252struct netlink_dump_control { 250struct netlink_dump_control {
253 int (*dump)(struct sk_buff *skb, struct netlink_callback *); 251 int (*dump)(struct sk_buff *skb, struct netlink_callback *);
254 int (*done)(struct netlink_callback*); 252 int (*done)(struct netlink_callback*);
diff --git a/include/linux/netpoll.h b/include/linux/netpoll.h
index 5dfa091c3347..28f5389c924b 100644
--- a/include/linux/netpoll.h
+++ b/include/linux/netpoll.h
@@ -43,7 +43,7 @@ struct netpoll_info {
43void netpoll_send_udp(struct netpoll *np, const char *msg, int len); 43void netpoll_send_udp(struct netpoll *np, const char *msg, int len);
44void netpoll_print_options(struct netpoll *np); 44void netpoll_print_options(struct netpoll *np);
45int netpoll_parse_options(struct netpoll *np, char *opt); 45int netpoll_parse_options(struct netpoll *np, char *opt);
46int __netpoll_setup(struct netpoll *np); 46int __netpoll_setup(struct netpoll *np, struct net_device *ndev);
47int netpoll_setup(struct netpoll *np); 47int netpoll_setup(struct netpoll *np);
48int netpoll_trap(void); 48int netpoll_trap(void);
49void netpoll_set_trap(int trap); 49void netpoll_set_trap(int trap);
diff --git a/include/linux/nfc.h b/include/linux/nfc.h
index 0ae9b5857c83..6189f27e305b 100644
--- a/include/linux/nfc.h
+++ b/include/linux/nfc.h
@@ -56,6 +56,10 @@
56 * %NFC_ATTR_PROTOCOLS) 56 * %NFC_ATTR_PROTOCOLS)
57 * @NFC_EVENT_DEVICE_REMOVED: event emitted when a device is removed 57 * @NFC_EVENT_DEVICE_REMOVED: event emitted when a device is removed
58 * (it sends %NFC_ATTR_DEVICE_INDEX) 58 * (it sends %NFC_ATTR_DEVICE_INDEX)
59 * @NFC_EVENT_TM_ACTIVATED: event emitted when the adapter is activated in
60 * target mode.
61 * @NFC_EVENT_DEVICE_DEACTIVATED: event emitted when the adapter is deactivated
62 * from target mode.
59 */ 63 */
60enum nfc_commands { 64enum nfc_commands {
61 NFC_CMD_UNSPEC, 65 NFC_CMD_UNSPEC,
@@ -71,6 +75,8 @@ enum nfc_commands {
71 NFC_EVENT_DEVICE_ADDED, 75 NFC_EVENT_DEVICE_ADDED,
72 NFC_EVENT_DEVICE_REMOVED, 76 NFC_EVENT_DEVICE_REMOVED,
73 NFC_EVENT_TARGET_LOST, 77 NFC_EVENT_TARGET_LOST,
78 NFC_EVENT_TM_ACTIVATED,
79 NFC_EVENT_TM_DEACTIVATED,
74/* private: internal use only */ 80/* private: internal use only */
75 __NFC_CMD_AFTER_LAST 81 __NFC_CMD_AFTER_LAST
76}; 82};
@@ -94,6 +100,8 @@ enum nfc_commands {
94 * @NFC_ATTR_TARGET_SENSF_RES: NFC-F targets extra information, max 18 bytes 100 * @NFC_ATTR_TARGET_SENSF_RES: NFC-F targets extra information, max 18 bytes
95 * @NFC_ATTR_COMM_MODE: Passive or active mode 101 * @NFC_ATTR_COMM_MODE: Passive or active mode
96 * @NFC_ATTR_RF_MODE: Initiator or target 102 * @NFC_ATTR_RF_MODE: Initiator or target
103 * @NFC_ATTR_IM_PROTOCOLS: Initiator mode protocols to poll for
104 * @NFC_ATTR_TM_PROTOCOLS: Target mode protocols to listen for
97 */ 105 */
98enum nfc_attrs { 106enum nfc_attrs {
99 NFC_ATTR_UNSPEC, 107 NFC_ATTR_UNSPEC,
@@ -109,6 +117,8 @@ enum nfc_attrs {
109 NFC_ATTR_COMM_MODE, 117 NFC_ATTR_COMM_MODE,
110 NFC_ATTR_RF_MODE, 118 NFC_ATTR_RF_MODE,
111 NFC_ATTR_DEVICE_POWERED, 119 NFC_ATTR_DEVICE_POWERED,
120 NFC_ATTR_IM_PROTOCOLS,
121 NFC_ATTR_TM_PROTOCOLS,
112/* private: internal use only */ 122/* private: internal use only */
113 __NFC_ATTR_AFTER_LAST 123 __NFC_ATTR_AFTER_LAST
114}; 124};
@@ -118,6 +128,7 @@ enum nfc_attrs {
118#define NFC_NFCID1_MAXSIZE 10 128#define NFC_NFCID1_MAXSIZE 10
119#define NFC_SENSB_RES_MAXSIZE 12 129#define NFC_SENSB_RES_MAXSIZE 12
120#define NFC_SENSF_RES_MAXSIZE 18 130#define NFC_SENSF_RES_MAXSIZE 18
131#define NFC_GB_MAXSIZE 48
121 132
122/* NFC protocols */ 133/* NFC protocols */
123#define NFC_PROTO_JEWEL 1 134#define NFC_PROTO_JEWEL 1
@@ -125,8 +136,9 @@ enum nfc_attrs {
125#define NFC_PROTO_FELICA 3 136#define NFC_PROTO_FELICA 3
126#define NFC_PROTO_ISO14443 4 137#define NFC_PROTO_ISO14443 4
127#define NFC_PROTO_NFC_DEP 5 138#define NFC_PROTO_NFC_DEP 5
139#define NFC_PROTO_ISO14443_B 6
128 140
129#define NFC_PROTO_MAX 6 141#define NFC_PROTO_MAX 7
130 142
131/* NFC communication modes */ 143/* NFC communication modes */
132#define NFC_COMM_ACTIVE 0 144#define NFC_COMM_ACTIVE 0
@@ -135,13 +147,15 @@ enum nfc_attrs {
135/* NFC RF modes */ 147/* NFC RF modes */
136#define NFC_RF_INITIATOR 0 148#define NFC_RF_INITIATOR 0
137#define NFC_RF_TARGET 1 149#define NFC_RF_TARGET 1
150#define NFC_RF_NONE 2
138 151
139/* NFC protocols masks used in bitsets */ 152/* NFC protocols masks used in bitsets */
140#define NFC_PROTO_JEWEL_MASK (1 << NFC_PROTO_JEWEL) 153#define NFC_PROTO_JEWEL_MASK (1 << NFC_PROTO_JEWEL)
141#define NFC_PROTO_MIFARE_MASK (1 << NFC_PROTO_MIFARE) 154#define NFC_PROTO_MIFARE_MASK (1 << NFC_PROTO_MIFARE)
142#define NFC_PROTO_FELICA_MASK (1 << NFC_PROTO_FELICA) 155#define NFC_PROTO_FELICA_MASK (1 << NFC_PROTO_FELICA)
143#define NFC_PROTO_ISO14443_MASK (1 << NFC_PROTO_ISO14443) 156#define NFC_PROTO_ISO14443_MASK (1 << NFC_PROTO_ISO14443)
144#define NFC_PROTO_NFC_DEP_MASK (1 << NFC_PROTO_NFC_DEP) 157#define NFC_PROTO_NFC_DEP_MASK (1 << NFC_PROTO_NFC_DEP)
158#define NFC_PROTO_ISO14443_B_MASK (1 << NFC_PROTO_ISO14443_B)
145 159
146struct sockaddr_nfc { 160struct sockaddr_nfc {
147 sa_family_t sa_family; 161 sa_family_t sa_family;
diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h
index fbb78fb09bd2..f58325a1d8fb 100644
--- a/include/linux/nfs_fs_sb.h
+++ b/include/linux/nfs_fs_sb.h
@@ -25,6 +25,7 @@ struct nfs41_impl_id;
25 */ 25 */
26struct nfs_client { 26struct nfs_client {
27 atomic_t cl_count; 27 atomic_t cl_count;
28 atomic_t cl_mds_count;
28 int cl_cons_state; /* current construction state (-ve: init error) */ 29 int cl_cons_state; /* current construction state (-ve: init error) */
29#define NFS_CS_READY 0 /* ready to be used */ 30#define NFS_CS_READY 0 /* ready to be used */
30#define NFS_CS_INITING 1 /* busy initialising */ 31#define NFS_CS_INITING 1 /* busy initialising */
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
index 8aadd90b808a..d3b7c18b18f4 100644
--- a/include/linux/nfs_xdr.h
+++ b/include/linux/nfs_xdr.h
@@ -1374,7 +1374,7 @@ struct nfs_rpc_ops {
1374 int (*readlink)(struct inode *, struct page *, unsigned int, 1374 int (*readlink)(struct inode *, struct page *, unsigned int,
1375 unsigned int); 1375 unsigned int);
1376 int (*create) (struct inode *, struct dentry *, 1376 int (*create) (struct inode *, struct dentry *,
1377 struct iattr *, int, struct nfs_open_context *); 1377 struct iattr *, int);
1378 int (*remove) (struct inode *, struct qstr *); 1378 int (*remove) (struct inode *, struct qstr *);
1379 void (*unlink_setup) (struct rpc_message *, struct inode *dir); 1379 void (*unlink_setup) (struct rpc_message *, struct inode *dir);
1380 void (*unlink_rpc_prepare) (struct rpc_task *, struct nfs_unlinkdata *); 1380 void (*unlink_rpc_prepare) (struct rpc_task *, struct nfs_unlinkdata *);
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h
index a6959f72745e..2f3878806403 100644
--- a/include/linux/nl80211.h
+++ b/include/linux/nl80211.h
@@ -170,6 +170,8 @@
170 * %NL80211_ATTR_CIPHER_GROUP, %NL80211_ATTR_WPA_VERSIONS, 170 * %NL80211_ATTR_CIPHER_GROUP, %NL80211_ATTR_WPA_VERSIONS,
171 * %NL80211_ATTR_AKM_SUITES, %NL80211_ATTR_PRIVACY, 171 * %NL80211_ATTR_AKM_SUITES, %NL80211_ATTR_PRIVACY,
172 * %NL80211_ATTR_AUTH_TYPE and %NL80211_ATTR_INACTIVITY_TIMEOUT. 172 * %NL80211_ATTR_AUTH_TYPE and %NL80211_ATTR_INACTIVITY_TIMEOUT.
173 * The channel to use can be set on the interface or be given using the
174 * %NL80211_ATTR_WIPHY_FREQ and %NL80211_ATTR_WIPHY_CHANNEL_TYPE attrs.
173 * @NL80211_CMD_NEW_BEACON: old alias for %NL80211_CMD_START_AP 175 * @NL80211_CMD_NEW_BEACON: old alias for %NL80211_CMD_START_AP
174 * @NL80211_CMD_STOP_AP: Stop AP operation on the given interface 176 * @NL80211_CMD_STOP_AP: Stop AP operation on the given interface
175 * @NL80211_CMD_DEL_BEACON: old alias for %NL80211_CMD_STOP_AP 177 * @NL80211_CMD_DEL_BEACON: old alias for %NL80211_CMD_STOP_AP
@@ -275,6 +277,12 @@
275 * @NL80211_CMD_NEW_SURVEY_RESULTS: survey data notification (as a reply to 277 * @NL80211_CMD_NEW_SURVEY_RESULTS: survey data notification (as a reply to
276 * NL80211_CMD_GET_SURVEY and on the "scan" multicast group) 278 * NL80211_CMD_GET_SURVEY and on the "scan" multicast group)
277 * 279 *
280 * @NL80211_CMD_SET_PMKSA: Add a PMKSA cache entry, using %NL80211_ATTR_MAC
281 * (for the BSSID) and %NL80211_ATTR_PMKID.
282 * @NL80211_CMD_DEL_PMKSA: Delete a PMKSA cache entry, using %NL80211_ATTR_MAC
283 * (for the BSSID) and %NL80211_ATTR_PMKID.
284 * @NL80211_CMD_FLUSH_PMKSA: Flush all PMKSA cache entries.
285 *
278 * @NL80211_CMD_REG_CHANGE: indicates to userspace the regulatory domain 286 * @NL80211_CMD_REG_CHANGE: indicates to userspace the regulatory domain
279 * has been changed and provides details of the request information 287 * has been changed and provides details of the request information
280 * that caused the change such as who initiated the regulatory request 288 * that caused the change such as who initiated the regulatory request
@@ -454,6 +462,10 @@
454 * the frame. 462 * the frame.
455 * @NL80211_CMD_ACTION_TX_STATUS: Alias for @NL80211_CMD_FRAME_TX_STATUS for 463 * @NL80211_CMD_ACTION_TX_STATUS: Alias for @NL80211_CMD_FRAME_TX_STATUS for
456 * backward compatibility. 464 * backward compatibility.
465 *
466 * @NL80211_CMD_SET_POWER_SAVE: Set powersave, using %NL80211_ATTR_PS_STATE
467 * @NL80211_CMD_GET_POWER_SAVE: Get powersave status in %NL80211_ATTR_PS_STATE
468 *
457 * @NL80211_CMD_SET_CQM: Connection quality monitor configuration. This command 469 * @NL80211_CMD_SET_CQM: Connection quality monitor configuration. This command
458 * is used to configure connection quality monitoring notification trigger 470 * is used to configure connection quality monitoring notification trigger
459 * levels. 471 * levels.
@@ -759,6 +771,9 @@ enum nl80211_commands {
759 * @NL80211_ATTR_IFNAME: network interface name 771 * @NL80211_ATTR_IFNAME: network interface name
760 * @NL80211_ATTR_IFTYPE: type of virtual interface, see &enum nl80211_iftype 772 * @NL80211_ATTR_IFTYPE: type of virtual interface, see &enum nl80211_iftype
761 * 773 *
774 * @NL80211_ATTR_WDEV: wireless device identifier, used for pseudo-devices
775 * that don't have a netdev (u64)
776 *
762 * @NL80211_ATTR_MAC: MAC address (various uses) 777 * @NL80211_ATTR_MAC: MAC address (various uses)
763 * 778 *
764 * @NL80211_ATTR_KEY_DATA: (temporal) key data; for TKIP this consists of 779 * @NL80211_ATTR_KEY_DATA: (temporal) key data; for TKIP this consists of
@@ -769,6 +784,13 @@ enum nl80211_commands {
769 * section 7.3.2.25.1, e.g. 0x000FAC04) 784 * section 7.3.2.25.1, e.g. 0x000FAC04)
770 * @NL80211_ATTR_KEY_SEQ: transmit key sequence number (IV/PN) for TKIP and 785 * @NL80211_ATTR_KEY_SEQ: transmit key sequence number (IV/PN) for TKIP and
771 * CCMP keys, each six bytes in little endian 786 * CCMP keys, each six bytes in little endian
787 * @NL80211_ATTR_KEY_DEFAULT: Flag attribute indicating the key is default key
788 * @NL80211_ATTR_KEY_DEFAULT_MGMT: Flag attribute indicating the key is the
789 * default management key
790 * @NL80211_ATTR_CIPHER_SUITES_PAIRWISE: For crypto settings for connect or
791 * other commands, indicates which pairwise cipher suites are used
792 * @NL80211_ATTR_CIPHER_SUITE_GROUP: For crypto settings for connect or
793 * other commands, indicates which group cipher suite is used
772 * 794 *
773 * @NL80211_ATTR_BEACON_INTERVAL: beacon interval in TU 795 * @NL80211_ATTR_BEACON_INTERVAL: beacon interval in TU
774 * @NL80211_ATTR_DTIM_PERIOD: DTIM period for beaconing 796 * @NL80211_ATTR_DTIM_PERIOD: DTIM period for beaconing
@@ -1004,6 +1026,8 @@ enum nl80211_commands {
1004 * @NL80211_ATTR_ACK: Flag attribute indicating that the frame was 1026 * @NL80211_ATTR_ACK: Flag attribute indicating that the frame was
1005 * acknowledged by the recipient. 1027 * acknowledged by the recipient.
1006 * 1028 *
1029 * @NL80211_ATTR_PS_STATE: powersave state, using &enum nl80211_ps_state values.
1030 *
1007 * @NL80211_ATTR_CQM: connection quality monitor configuration in a 1031 * @NL80211_ATTR_CQM: connection quality monitor configuration in a
1008 * nested attribute with %NL80211_ATTR_CQM_* sub-attributes. 1032 * nested attribute with %NL80211_ATTR_CQM_* sub-attributes.
1009 * 1033 *
@@ -1061,7 +1085,7 @@ enum nl80211_commands {
1061 * flag isn't set, the frame will be rejected. This is also used as an 1085 * flag isn't set, the frame will be rejected. This is also used as an
1062 * nl80211 capability flag. 1086 * nl80211 capability flag.
1063 * 1087 *
1064 * @NL80211_ATTR_BSS_HTOPMODE: HT operation mode (u16) 1088 * @NL80211_ATTR_BSS_HT_OPMODE: HT operation mode (u16)
1065 * 1089 *
1066 * @NL80211_ATTR_KEY_DEFAULT_TYPES: A nested attribute containing flags 1090 * @NL80211_ATTR_KEY_DEFAULT_TYPES: A nested attribute containing flags
1067 * attributes, specifying what a key should be set as default as. 1091 * attributes, specifying what a key should be set as default as.
@@ -1085,10 +1109,10 @@ enum nl80211_commands {
1085 * indicate which WoW triggers should be enabled. This is also 1109 * indicate which WoW triggers should be enabled. This is also
1086 * used by %NL80211_CMD_GET_WOWLAN to get the currently enabled WoWLAN 1110 * used by %NL80211_CMD_GET_WOWLAN to get the currently enabled WoWLAN
1087 * triggers. 1111 * triggers.
1088 1112 *
1089 * @NL80211_ATTR_SCHED_SCAN_INTERVAL: Interval between scheduled scan 1113 * @NL80211_ATTR_SCHED_SCAN_INTERVAL: Interval between scheduled scan
1090 * cycles, in msecs. 1114 * cycles, in msecs.
1091 1115 *
1092 * @NL80211_ATTR_SCHED_SCAN_MATCH: Nested attribute with one or more 1116 * @NL80211_ATTR_SCHED_SCAN_MATCH: Nested attribute with one or more
1093 * sets of attributes to match during scheduled scans. Only BSSs 1117 * sets of attributes to match during scheduled scans. Only BSSs
1094 * that match any of the sets will be reported. These are 1118 * that match any of the sets will be reported. These are
@@ -1115,7 +1139,7 @@ enum nl80211_commands {
1115 * are managed in software: interfaces of these types aren't subject to 1139 * are managed in software: interfaces of these types aren't subject to
1116 * any restrictions in their number or combinations. 1140 * any restrictions in their number or combinations.
1117 * 1141 *
1118 * @%NL80211_ATTR_REKEY_DATA: nested attribute containing the information 1142 * @NL80211_ATTR_REKEY_DATA: nested attribute containing the information
1119 * necessary for GTK rekeying in the device, see &enum nl80211_rekey_data. 1143 * necessary for GTK rekeying in the device, see &enum nl80211_rekey_data.
1120 * 1144 *
1121 * @NL80211_ATTR_SCAN_SUPP_RATES: rates per to be advertised as supported in scan, 1145 * @NL80211_ATTR_SCAN_SUPP_RATES: rates per to be advertised as supported in scan,
@@ -1182,7 +1206,6 @@ enum nl80211_commands {
1182 * @NL80211_ATTR_FEATURE_FLAGS: This u32 attribute contains flags from 1206 * @NL80211_ATTR_FEATURE_FLAGS: This u32 attribute contains flags from
1183 * &enum nl80211_feature_flags and is advertised in wiphy information. 1207 * &enum nl80211_feature_flags and is advertised in wiphy information.
1184 * @NL80211_ATTR_PROBE_RESP_OFFLOAD: Indicates that the HW responds to probe 1208 * @NL80211_ATTR_PROBE_RESP_OFFLOAD: Indicates that the HW responds to probe
1185 *
1186 * requests while operating in AP-mode. 1209 * requests while operating in AP-mode.
1187 * This attribute holds a bitmap of the supported protocols for 1210 * This attribute holds a bitmap of the supported protocols for
1188 * offloading (see &enum nl80211_probe_resp_offload_support_attr). 1211 * offloading (see &enum nl80211_probe_resp_offload_support_attr).
@@ -1222,6 +1245,12 @@ enum nl80211_commands {
1222 * @NL80211_ATTR_BG_SCAN_PERIOD: Background scan period in seconds 1245 * @NL80211_ATTR_BG_SCAN_PERIOD: Background scan period in seconds
1223 * or 0 to disable background scan. 1246 * or 0 to disable background scan.
1224 * 1247 *
1248 * @NL80211_ATTR_USER_REG_HINT_TYPE: type of regulatory hint passed from
1249 * userspace. If unset it is assumed the hint comes directly from
1250 * a user. If set code could specify exactly what type of source
1251 * was used to provide the hint. For the different types of
1252 * allowed user regulatory hints see nl80211_user_reg_hint_type.
1253 *
1225 * @NL80211_ATTR_MAX: highest attribute number currently defined 1254 * @NL80211_ATTR_MAX: highest attribute number currently defined
1226 * @__NL80211_ATTR_AFTER_LAST: internal use 1255 * @__NL80211_ATTR_AFTER_LAST: internal use
1227 */ 1256 */
@@ -1473,6 +1502,10 @@ enum nl80211_attrs {
1473 1502
1474 NL80211_ATTR_BG_SCAN_PERIOD, 1503 NL80211_ATTR_BG_SCAN_PERIOD,
1475 1504
1505 NL80211_ATTR_WDEV,
1506
1507 NL80211_ATTR_USER_REG_HINT_TYPE,
1508
1476 /* add attributes here, update the policy in nl80211.c */ 1509 /* add attributes here, update the policy in nl80211.c */
1477 1510
1478 __NL80211_ATTR_AFTER_LAST, 1511 __NL80211_ATTR_AFTER_LAST,
@@ -1520,6 +1553,13 @@ enum nl80211_attrs {
1520#define NL80211_MAX_NR_CIPHER_SUITES 5 1553#define NL80211_MAX_NR_CIPHER_SUITES 5
1521#define NL80211_MAX_NR_AKM_SUITES 2 1554#define NL80211_MAX_NR_AKM_SUITES 2
1522 1555
1556#define NL80211_MIN_REMAIN_ON_CHANNEL_TIME 10
1557
1558/* default RSSI threshold for scan results if none specified. */
1559#define NL80211_SCAN_RSSI_THOLD_OFF -300
1560
1561#define NL80211_CQM_TXE_MAX_INTVL 1800
1562
1523/** 1563/**
1524 * enum nl80211_iftype - (virtual) interface types 1564 * enum nl80211_iftype - (virtual) interface types
1525 * 1565 *
@@ -1613,12 +1653,20 @@ struct nl80211_sta_flag_update {
1613 * 1653 *
1614 * These attribute types are used with %NL80211_STA_INFO_TXRATE 1654 * These attribute types are used with %NL80211_STA_INFO_TXRATE
1615 * when getting information about the bitrate of a station. 1655 * when getting information about the bitrate of a station.
1656 * There are 2 attributes for bitrate, a legacy one that represents
1657 * a 16-bit value, and new one that represents a 32-bit value.
1658 * If the rate value fits into 16 bit, both attributes are reported
1659 * with the same value. If the rate is too high to fit into 16 bits
1660 * (>6.5535Gbps) only 32-bit attribute is included.
1661 * User space tools encouraged to use the 32-bit attribute and fall
1662 * back to the 16-bit one for compatibility with older kernels.
1616 * 1663 *
1617 * @__NL80211_RATE_INFO_INVALID: attribute number 0 is reserved 1664 * @__NL80211_RATE_INFO_INVALID: attribute number 0 is reserved
1618 * @NL80211_RATE_INFO_BITRATE: total bitrate (u16, 100kbit/s) 1665 * @NL80211_RATE_INFO_BITRATE: total bitrate (u16, 100kbit/s)
1619 * @NL80211_RATE_INFO_MCS: mcs index for 802.11n (u8) 1666 * @NL80211_RATE_INFO_MCS: mcs index for 802.11n (u8)
1620 * @NL80211_RATE_INFO_40_MHZ_WIDTH: 40 Mhz dualchannel bitrate 1667 * @NL80211_RATE_INFO_40_MHZ_WIDTH: 40 Mhz dualchannel bitrate
1621 * @NL80211_RATE_INFO_SHORT_GI: 400ns guard interval 1668 * @NL80211_RATE_INFO_SHORT_GI: 400ns guard interval
1669 * @NL80211_RATE_INFO_BITRATE32: total bitrate (u32, 100kbit/s)
1622 * @NL80211_RATE_INFO_MAX: highest rate_info number currently defined 1670 * @NL80211_RATE_INFO_MAX: highest rate_info number currently defined
1623 * @__NL80211_RATE_INFO_AFTER_LAST: internal use 1671 * @__NL80211_RATE_INFO_AFTER_LAST: internal use
1624 */ 1672 */
@@ -1628,6 +1676,7 @@ enum nl80211_rate_info {
1628 NL80211_RATE_INFO_MCS, 1676 NL80211_RATE_INFO_MCS,
1629 NL80211_RATE_INFO_40_MHZ_WIDTH, 1677 NL80211_RATE_INFO_40_MHZ_WIDTH,
1630 NL80211_RATE_INFO_SHORT_GI, 1678 NL80211_RATE_INFO_SHORT_GI,
1679 NL80211_RATE_INFO_BITRATE32,
1631 1680
1632 /* keep last */ 1681 /* keep last */
1633 __NL80211_RATE_INFO_AFTER_LAST, 1682 __NL80211_RATE_INFO_AFTER_LAST,
@@ -1788,6 +1837,9 @@ enum nl80211_mpath_info {
1788 * @NL80211_BAND_ATTR_HT_CAPA: HT capabilities, as in the HT information IE 1837 * @NL80211_BAND_ATTR_HT_CAPA: HT capabilities, as in the HT information IE
1789 * @NL80211_BAND_ATTR_HT_AMPDU_FACTOR: A-MPDU factor, as in 11n 1838 * @NL80211_BAND_ATTR_HT_AMPDU_FACTOR: A-MPDU factor, as in 11n
1790 * @NL80211_BAND_ATTR_HT_AMPDU_DENSITY: A-MPDU density, as in 11n 1839 * @NL80211_BAND_ATTR_HT_AMPDU_DENSITY: A-MPDU density, as in 11n
1840 * @NL80211_BAND_ATTR_VHT_MCS_SET: 32-byte attribute containing the MCS set as
1841 * defined in 802.11ac
1842 * @NL80211_BAND_ATTR_VHT_CAPA: VHT capabilities, as in the HT information IE
1791 * @NL80211_BAND_ATTR_MAX: highest band attribute currently defined 1843 * @NL80211_BAND_ATTR_MAX: highest band attribute currently defined
1792 * @__NL80211_BAND_ATTR_AFTER_LAST: internal use 1844 * @__NL80211_BAND_ATTR_AFTER_LAST: internal use
1793 */ 1845 */
@@ -1801,6 +1853,9 @@ enum nl80211_band_attr {
1801 NL80211_BAND_ATTR_HT_AMPDU_FACTOR, 1853 NL80211_BAND_ATTR_HT_AMPDU_FACTOR,
1802 NL80211_BAND_ATTR_HT_AMPDU_DENSITY, 1854 NL80211_BAND_ATTR_HT_AMPDU_DENSITY,
1803 1855
1856 NL80211_BAND_ATTR_VHT_MCS_SET,
1857 NL80211_BAND_ATTR_VHT_CAPA,
1858
1804 /* keep last */ 1859 /* keep last */
1805 __NL80211_BAND_ATTR_AFTER_LAST, 1860 __NL80211_BAND_ATTR_AFTER_LAST,
1806 NL80211_BAND_ATTR_MAX = __NL80211_BAND_ATTR_AFTER_LAST - 1 1861 NL80211_BAND_ATTR_MAX = __NL80211_BAND_ATTR_AFTER_LAST - 1
@@ -1952,6 +2007,8 @@ enum nl80211_reg_rule_attr {
1952 * @__NL80211_SCHED_SCAN_MATCH_ATTR_INVALID: attribute number 0 is reserved 2007 * @__NL80211_SCHED_SCAN_MATCH_ATTR_INVALID: attribute number 0 is reserved
1953 * @NL80211_SCHED_SCAN_MATCH_ATTR_SSID: SSID to be used for matching, 2008 * @NL80211_SCHED_SCAN_MATCH_ATTR_SSID: SSID to be used for matching,
1954 * only report BSS with matching SSID. 2009 * only report BSS with matching SSID.
2010 * @NL80211_SCHED_SCAN_MATCH_ATTR_RSSI: RSSI threshold (in dBm) for reporting a
2011 * BSS in scan results. Filtering is turned off if not specified.
1955 * @NL80211_SCHED_SCAN_MATCH_ATTR_MAX: highest scheduled scan filter 2012 * @NL80211_SCHED_SCAN_MATCH_ATTR_MAX: highest scheduled scan filter
1956 * attribute number currently defined 2013 * attribute number currently defined
1957 * @__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST: internal use 2014 * @__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST: internal use
@@ -1959,7 +2016,8 @@ enum nl80211_reg_rule_attr {
1959enum nl80211_sched_scan_match_attr { 2016enum nl80211_sched_scan_match_attr {
1960 __NL80211_SCHED_SCAN_MATCH_ATTR_INVALID, 2017 __NL80211_SCHED_SCAN_MATCH_ATTR_INVALID,
1961 2018
1962 NL80211_ATTR_SCHED_SCAN_MATCH_SSID, 2019 NL80211_SCHED_SCAN_MATCH_ATTR_SSID,
2020 NL80211_SCHED_SCAN_MATCH_ATTR_RSSI,
1963 2021
1964 /* keep last */ 2022 /* keep last */
1965 __NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST, 2023 __NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST,
@@ -1967,6 +2025,9 @@ enum nl80211_sched_scan_match_attr {
1967 __NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST - 1 2025 __NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST - 1
1968}; 2026};
1969 2027
2028/* only for backward compatibility */
2029#define NL80211_ATTR_SCHED_SCAN_MATCH_SSID NL80211_SCHED_SCAN_MATCH_ATTR_SSID
2030
1970/** 2031/**
1971 * enum nl80211_reg_rule_flags - regulatory rule flags 2032 * enum nl80211_reg_rule_flags - regulatory rule flags
1972 * 2033 *
@@ -2008,6 +2069,26 @@ enum nl80211_dfs_regions {
2008}; 2069};
2009 2070
2010/** 2071/**
2072 * enum nl80211_user_reg_hint_type - type of user regulatory hint
2073 *
2074 * @NL80211_USER_REG_HINT_USER: a user sent the hint. This is always
2075 * assumed if the attribute is not set.
2076 * @NL80211_USER_REG_HINT_CELL_BASE: the hint comes from a cellular
2077 * base station. Device drivers that have been tested to work
2078 * properly to support this type of hint can enable these hints
2079 * by setting the NL80211_FEATURE_CELL_BASE_REG_HINTS feature
2080 * capability on the struct wiphy. The wireless core will
2081 * ignore all cell base station hints until at least one device
2082 * present has been registered with the wireless core that
2083 * has listed NL80211_FEATURE_CELL_BASE_REG_HINTS as a
2084 * supported feature.
2085 */
2086enum nl80211_user_reg_hint_type {
2087 NL80211_USER_REG_HINT_USER = 0,
2088 NL80211_USER_REG_HINT_CELL_BASE = 1,
2089};
2090
2091/**
2011 * enum nl80211_survey_info - survey information 2092 * enum nl80211_survey_info - survey information
2012 * 2093 *
2013 * These attribute types are used with %NL80211_ATTR_SURVEY_INFO 2094 * These attribute types are used with %NL80211_ATTR_SURVEY_INFO
@@ -2086,78 +2167,91 @@ enum nl80211_mntr_flags {
2086 * @__NL80211_MESHCONF_INVALID: internal use 2167 * @__NL80211_MESHCONF_INVALID: internal use
2087 * 2168 *
2088 * @NL80211_MESHCONF_RETRY_TIMEOUT: specifies the initial retry timeout in 2169 * @NL80211_MESHCONF_RETRY_TIMEOUT: specifies the initial retry timeout in
2089 * millisecond units, used by the Peer Link Open message 2170 * millisecond units, used by the Peer Link Open message
2090 * 2171 *
2091 * @NL80211_MESHCONF_CONFIRM_TIMEOUT: specifies the initial confirm timeout, in 2172 * @NL80211_MESHCONF_CONFIRM_TIMEOUT: specifies the initial confirm timeout, in
2092 * millisecond units, used by the peer link management to close a peer link 2173 * millisecond units, used by the peer link management to close a peer link
2093 * 2174 *
2094 * @NL80211_MESHCONF_HOLDING_TIMEOUT: specifies the holding timeout, in 2175 * @NL80211_MESHCONF_HOLDING_TIMEOUT: specifies the holding timeout, in
2095 * millisecond units 2176 * millisecond units
2096 * 2177 *
2097 * @NL80211_MESHCONF_MAX_PEER_LINKS: maximum number of peer links allowed 2178 * @NL80211_MESHCONF_MAX_PEER_LINKS: maximum number of peer links allowed
2098 * on this mesh interface 2179 * on this mesh interface
2099 * 2180 *
2100 * @NL80211_MESHCONF_MAX_RETRIES: specifies the maximum number of peer link 2181 * @NL80211_MESHCONF_MAX_RETRIES: specifies the maximum number of peer link
2101 * open retries that can be sent to establish a new peer link instance in a 2182 * open retries that can be sent to establish a new peer link instance in a
2102 * mesh 2183 * mesh
2103 * 2184 *
2104 * @NL80211_MESHCONF_TTL: specifies the value of TTL field set at a source mesh 2185 * @NL80211_MESHCONF_TTL: specifies the value of TTL field set at a source mesh
2105 * point. 2186 * point.
2106 * 2187 *
2107 * @NL80211_MESHCONF_AUTO_OPEN_PLINKS: whether we should automatically 2188 * @NL80211_MESHCONF_AUTO_OPEN_PLINKS: whether we should automatically
2108 * open peer links when we detect compatible mesh peers. 2189 * open peer links when we detect compatible mesh peers.
2109 * 2190 *
2110 * @NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES: the number of action frames 2191 * @NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES: the number of action frames
2111 * containing a PREQ that an MP can send to a particular destination (path 2192 * containing a PREQ that an MP can send to a particular destination (path
2112 * target) 2193 * target)
2113 * 2194 *
2114 * @NL80211_MESHCONF_PATH_REFRESH_TIME: how frequently to refresh mesh paths 2195 * @NL80211_MESHCONF_PATH_REFRESH_TIME: how frequently to refresh mesh paths
2115 * (in milliseconds) 2196 * (in milliseconds)
2116 * 2197 *
2117 * @NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT: minimum length of time to wait 2198 * @NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT: minimum length of time to wait
2118 * until giving up on a path discovery (in milliseconds) 2199 * until giving up on a path discovery (in milliseconds)
2119 * 2200 *
2120 * @NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT: The time (in TUs) for which mesh 2201 * @NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT: The time (in TUs) for which mesh
2121 * points receiving a PREQ shall consider the forwarding information from the 2202 * points receiving a PREQ shall consider the forwarding information from
2122 * root to be valid. (TU = time unit) 2203 * the root to be valid. (TU = time unit)
2123 * 2204 *
2124 * @NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL: The minimum interval of time (in 2205 * @NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL: The minimum interval of time (in
2125 * TUs) during which an MP can send only one action frame containing a PREQ 2206 * TUs) during which an MP can send only one action frame containing a PREQ
2126 * reference element 2207 * reference element
2127 * 2208 *
2128 * @NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME: The interval of time (in TUs) 2209 * @NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME: The interval of time (in TUs)
2129 * that it takes for an HWMP information element to propagate across the mesh 2210 * that it takes for an HWMP information element to propagate across the
2211 * mesh
2130 * 2212 *
2131 * @NL80211_MESHCONF_HWMP_ROOTMODE: whether root mode is enabled or not 2213 * @NL80211_MESHCONF_HWMP_ROOTMODE: whether root mode is enabled or not
2132 * 2214 *
2133 * @NL80211_MESHCONF_ELEMENT_TTL: specifies the value of TTL field set at a 2215 * @NL80211_MESHCONF_ELEMENT_TTL: specifies the value of TTL field set at a
2134 * source mesh point for path selection elements. 2216 * source mesh point for path selection elements.
2135 * 2217 *
2136 * @NL80211_MESHCONF_HWMP_RANN_INTERVAL: The interval of time (in TUs) between 2218 * @NL80211_MESHCONF_HWMP_RANN_INTERVAL: The interval of time (in TUs) between
2137 * root announcements are transmitted. 2219 * root announcements are transmitted.
2138 * 2220 *
2139 * @NL80211_MESHCONF_GATE_ANNOUNCEMENTS: Advertise that this mesh station has 2221 * @NL80211_MESHCONF_GATE_ANNOUNCEMENTS: Advertise that this mesh station has
2140 * access to a broader network beyond the MBSS. This is done via Root 2222 * access to a broader network beyond the MBSS. This is done via Root
2141 * Announcement frames. 2223 * Announcement frames.
2142 * 2224 *
2143 * @NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL: The minimum interval of time (in 2225 * @NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL: The minimum interval of time (in
2144 * TUs) during which a mesh STA can send only one Action frame containing a 2226 * TUs) during which a mesh STA can send only one Action frame containing a
2145 * PERR element. 2227 * PERR element.
2146 * 2228 *
2147 * @NL80211_MESHCONF_FORWARDING: set Mesh STA as forwarding or non-forwarding 2229 * @NL80211_MESHCONF_FORWARDING: set Mesh STA as forwarding or non-forwarding
2148 * or forwarding entity (default is TRUE - forwarding entity) 2230 * or forwarding entity (default is TRUE - forwarding entity)
2149 * 2231 *
2150 * @NL80211_MESHCONF_RSSI_THRESHOLD: RSSI threshold in dBm. This specifies the 2232 * @NL80211_MESHCONF_RSSI_THRESHOLD: RSSI threshold in dBm. This specifies the
2151 * threshold for average signal strength of candidate station to establish 2233 * threshold for average signal strength of candidate station to establish
2152 * a peer link. 2234 * a peer link.
2153 *
2154 * @NL80211_MESHCONF_ATTR_MAX: highest possible mesh configuration attribute
2155 * 2235 *
2156 * @NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR: maximum number of neighbors 2236 * @NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR: maximum number of neighbors
2157 * to synchronize to for 11s default synchronization method (see 11C.12.2.2) 2237 * to synchronize to for 11s default synchronization method
2238 * (see 11C.12.2.2)
2158 * 2239 *
2159 * @NL80211_MESHCONF_HT_OPMODE: set mesh HT protection mode. 2240 * @NL80211_MESHCONF_HT_OPMODE: set mesh HT protection mode.
2160 * 2241 *
2242 * @NL80211_MESHCONF_ATTR_MAX: highest possible mesh configuration attribute
2243 *
2244 * @NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT: The time (in TUs) for
2245 * which mesh STAs receiving a proactive PREQ shall consider the forwarding
2246 * information to the root mesh STA to be valid.
2247 *
2248 * @NL80211_MESHCONF_HWMP_ROOT_INTERVAL: The interval of time (in TUs) between
2249 * proactive PREQs are transmitted.
2250 *
2251 * @NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL: The minimum interval of time
2252 * (in TUs) during which a mesh STA can send only one Action frame
2253 * containing a PREQ element for root path confirmation.
2254 *
2161 * @__NL80211_MESHCONF_ATTR_AFTER_LAST: internal use 2255 * @__NL80211_MESHCONF_ATTR_AFTER_LAST: internal use
2162 */ 2256 */
2163enum nl80211_meshconf_params { 2257enum nl80211_meshconf_params {
@@ -2184,6 +2278,9 @@ enum nl80211_meshconf_params {
2184 NL80211_MESHCONF_RSSI_THRESHOLD, 2278 NL80211_MESHCONF_RSSI_THRESHOLD,
2185 NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR, 2279 NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR,
2186 NL80211_MESHCONF_HT_OPMODE, 2280 NL80211_MESHCONF_HT_OPMODE,
2281 NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT,
2282 NL80211_MESHCONF_HWMP_ROOT_INTERVAL,
2283 NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL,
2187 2284
2188 /* keep last */ 2285 /* keep last */
2189 __NL80211_MESHCONF_ATTR_AFTER_LAST, 2286 __NL80211_MESHCONF_ATTR_AFTER_LAST,
@@ -2199,34 +2296,36 @@ enum nl80211_meshconf_params {
2199 * @__NL80211_MESH_SETUP_INVALID: Internal use 2296 * @__NL80211_MESH_SETUP_INVALID: Internal use
2200 * 2297 *
2201 * @NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL: Enable this option to use a 2298 * @NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL: Enable this option to use a
2202 * vendor specific path selection algorithm or disable it to use the default 2299 * vendor specific path selection algorithm or disable it to use the
2203 * HWMP. 2300 * default HWMP.
2204 * 2301 *
2205 * @NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC: Enable this option to use a 2302 * @NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC: Enable this option to use a
2206 * vendor specific path metric or disable it to use the default Airtime 2303 * vendor specific path metric or disable it to use the default Airtime
2207 * metric. 2304 * metric.
2208 * 2305 *
2209 * @NL80211_MESH_SETUP_IE: Information elements for this mesh, for instance, a 2306 * @NL80211_MESH_SETUP_IE: Information elements for this mesh, for instance, a
2210 * robust security network ie, or a vendor specific information element that 2307 * robust security network ie, or a vendor specific information element
2211 * vendors will use to identify the path selection methods and metrics in use. 2308 * that vendors will use to identify the path selection methods and
2309 * metrics in use.
2212 * 2310 *
2213 * @NL80211_MESH_SETUP_USERSPACE_AUTH: Enable this option if an authentication 2311 * @NL80211_MESH_SETUP_USERSPACE_AUTH: Enable this option if an authentication
2214 * daemon will be authenticating mesh candidates. 2312 * daemon will be authenticating mesh candidates.
2215 * 2313 *
2216 * @NL80211_MESH_SETUP_USERSPACE_AMPE: Enable this option if an authentication 2314 * @NL80211_MESH_SETUP_USERSPACE_AMPE: Enable this option if an authentication
2217 * daemon will be securing peer link frames. AMPE is a secured version of Mesh 2315 * daemon will be securing peer link frames. AMPE is a secured version of
2218 * Peering Management (MPM) and is implemented with the assistance of a 2316 * Mesh Peering Management (MPM) and is implemented with the assistance of
2219 * userspace daemon. When this flag is set, the kernel will send peer 2317 * a userspace daemon. When this flag is set, the kernel will send peer
2220 * management frames to a userspace daemon that will implement AMPE 2318 * management frames to a userspace daemon that will implement AMPE
2221 * functionality (security capabilities selection, key confirmation, and key 2319 * functionality (security capabilities selection, key confirmation, and
2222 * management). When the flag is unset (default), the kernel can autonomously 2320 * key management). When the flag is unset (default), the kernel can
2223 * complete (unsecured) mesh peering without the need of a userspace daemon. 2321 * autonomously complete (unsecured) mesh peering without the need of a
2224 * 2322 * userspace daemon.
2225 * @NL80211_MESH_SETUP_ATTR_MAX: highest possible mesh setup attribute number
2226 * 2323 *
2227 * @NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC: Enable this option to use a 2324 * @NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC: Enable this option to use a
2228 * vendor specific synchronization method or disable it to use the default 2325 * vendor specific synchronization method or disable it to use the default
2229 * neighbor offset synchronization 2326 * neighbor offset synchronization
2327 *
2328 * @NL80211_MESH_SETUP_ATTR_MAX: highest possible mesh setup attribute number
2230 * 2329 *
2231 * @__NL80211_MESH_SETUP_ATTR_AFTER_LAST: Internal use 2330 * @__NL80211_MESH_SETUP_ATTR_AFTER_LAST: Internal use
2232 */ 2331 */
@@ -2490,12 +2589,19 @@ enum nl80211_tx_rate_attributes {
2490 * enum nl80211_band - Frequency band 2589 * enum nl80211_band - Frequency band
2491 * @NL80211_BAND_2GHZ: 2.4 GHz ISM band 2590 * @NL80211_BAND_2GHZ: 2.4 GHz ISM band
2492 * @NL80211_BAND_5GHZ: around 5 GHz band (4.9 - 5.7 GHz) 2591 * @NL80211_BAND_5GHZ: around 5 GHz band (4.9 - 5.7 GHz)
2592 * @NL80211_BAND_60GHZ: around 60 GHz band (58.32 - 64.80 GHz)
2493 */ 2593 */
2494enum nl80211_band { 2594enum nl80211_band {
2495 NL80211_BAND_2GHZ, 2595 NL80211_BAND_2GHZ,
2496 NL80211_BAND_5GHZ, 2596 NL80211_BAND_5GHZ,
2597 NL80211_BAND_60GHZ,
2497}; 2598};
2498 2599
2600/**
2601 * enum nl80211_ps_state - powersave state
2602 * @NL80211_PS_DISABLED: powersave is disabled
2603 * @NL80211_PS_ENABLED: powersave is enabled
2604 */
2499enum nl80211_ps_state { 2605enum nl80211_ps_state {
2500 NL80211_PS_DISABLED, 2606 NL80211_PS_DISABLED,
2501 NL80211_PS_ENABLED, 2607 NL80211_PS_ENABLED,
@@ -2513,6 +2619,17 @@ enum nl80211_ps_state {
2513 * @NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT: RSSI threshold event 2619 * @NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT: RSSI threshold event
2514 * @NL80211_ATTR_CQM_PKT_LOSS_EVENT: a u32 value indicating that this many 2620 * @NL80211_ATTR_CQM_PKT_LOSS_EVENT: a u32 value indicating that this many
2515 * consecutive packets were not acknowledged by the peer 2621 * consecutive packets were not acknowledged by the peer
2622 * @NL80211_ATTR_CQM_TXE_RATE: TX error rate in %. Minimum % of TX failures
2623 * during the given %NL80211_ATTR_CQM_TXE_INTVL before an
2624 * %NL80211_CMD_NOTIFY_CQM with reported %NL80211_ATTR_CQM_TXE_RATE and
2625 * %NL80211_ATTR_CQM_TXE_PKTS is generated.
2626 * @NL80211_ATTR_CQM_TXE_PKTS: number of attempted packets in a given
2627 * %NL80211_ATTR_CQM_TXE_INTVL before %NL80211_ATTR_CQM_TXE_RATE is
2628 * checked.
2629 * @NL80211_ATTR_CQM_TXE_INTVL: interval in seconds. Specifies the periodic
2630 * interval in which %NL80211_ATTR_CQM_TXE_PKTS and
2631 * %NL80211_ATTR_CQM_TXE_RATE must be satisfied before generating an
2632 * %NL80211_CMD_NOTIFY_CQM. Set to 0 to turn off TX error reporting.
2516 * @__NL80211_ATTR_CQM_AFTER_LAST: internal 2633 * @__NL80211_ATTR_CQM_AFTER_LAST: internal
2517 * @NL80211_ATTR_CQM_MAX: highest key attribute 2634 * @NL80211_ATTR_CQM_MAX: highest key attribute
2518 */ 2635 */
@@ -2522,6 +2639,9 @@ enum nl80211_attr_cqm {
2522 NL80211_ATTR_CQM_RSSI_HYST, 2639 NL80211_ATTR_CQM_RSSI_HYST,
2523 NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT, 2640 NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT,
2524 NL80211_ATTR_CQM_PKT_LOSS_EVENT, 2641 NL80211_ATTR_CQM_PKT_LOSS_EVENT,
2642 NL80211_ATTR_CQM_TXE_RATE,
2643 NL80211_ATTR_CQM_TXE_PKTS,
2644 NL80211_ATTR_CQM_TXE_INTVL,
2525 2645
2526 /* keep last */ 2646 /* keep last */
2527 __NL80211_ATTR_CQM_AFTER_LAST, 2647 __NL80211_ATTR_CQM_AFTER_LAST,
@@ -2534,10 +2654,14 @@ enum nl80211_attr_cqm {
2534 * configured threshold 2654 * configured threshold
2535 * @NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH: The RSSI is higher than the 2655 * @NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH: The RSSI is higher than the
2536 * configured threshold 2656 * configured threshold
2657 * @NL80211_CQM_RSSI_BEACON_LOSS_EVENT: The device experienced beacon loss.
2658 * (Note that deauth/disassoc will still follow if the AP is not
2659 * available. This event might get used as roaming event, etc.)
2537 */ 2660 */
2538enum nl80211_cqm_rssi_threshold_event { 2661enum nl80211_cqm_rssi_threshold_event {
2539 NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW, 2662 NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW,
2540 NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH, 2663 NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH,
2664 NL80211_CQM_RSSI_BEACON_LOSS_EVENT,
2541}; 2665};
2542 2666
2543 2667
@@ -2867,11 +2991,15 @@ enum nl80211_ap_sme_features {
2867 * @NL80211_FEATURE_HT_IBSS: This driver supports IBSS with HT datarates. 2991 * @NL80211_FEATURE_HT_IBSS: This driver supports IBSS with HT datarates.
2868 * @NL80211_FEATURE_INACTIVITY_TIMER: This driver takes care of freeing up 2992 * @NL80211_FEATURE_INACTIVITY_TIMER: This driver takes care of freeing up
2869 * the connected inactive stations in AP mode. 2993 * the connected inactive stations in AP mode.
2994 * @NL80211_FEATURE_CELL_BASE_REG_HINTS: This driver has been tested
2995 * to work properly to suppport receiving regulatory hints from
2996 * cellular base stations.
2870 */ 2997 */
2871enum nl80211_feature_flags { 2998enum nl80211_feature_flags {
2872 NL80211_FEATURE_SK_TX_STATUS = 1 << 0, 2999 NL80211_FEATURE_SK_TX_STATUS = 1 << 0,
2873 NL80211_FEATURE_HT_IBSS = 1 << 1, 3000 NL80211_FEATURE_HT_IBSS = 1 << 1,
2874 NL80211_FEATURE_INACTIVITY_TIMER = 1 << 2, 3001 NL80211_FEATURE_INACTIVITY_TIMER = 1 << 2,
3002 NL80211_FEATURE_CELL_BASE_REG_HINTS = 1 << 3,
2875}; 3003};
2876 3004
2877/** 3005/**
diff --git a/include/linux/nl802154.h b/include/linux/nl802154.h
index 5a3db3aa5f17..fd4f2d1cdf6c 100644
--- a/include/linux/nl802154.h
+++ b/include/linux/nl802154.h
@@ -130,18 +130,8 @@ enum {
130enum { 130enum {
131 __IEEE802154_DEV_INVALID = -1, 131 __IEEE802154_DEV_INVALID = -1,
132 132
133 /* TODO: 133 IEEE802154_DEV_WPAN,
134 * Nowadays three device types supported by this stack at linux-zigbee 134 IEEE802154_DEV_MONITOR,
135 * project: WPAN = 0, MONITOR = 1 and SMAC = 2.
136 *
137 * Since this stack implementation exists many years, it's definitely
138 * bad idea to change the assigned values due to they are already used
139 * by third-party userspace software like: iz-tools, wireshark...
140 *
141 * Currently only monitor device is added and initialized by '1' for
142 * compatibility.
143 */
144 IEEE802154_DEV_MONITOR = 1,
145 135
146 __IEEE802154_DEV_MAX, 136 __IEEE802154_DEV_MAX,
147}; 137};
diff --git a/include/linux/of.h b/include/linux/of.h
index 2ec1083af7ff..0e9cf9eec085 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -163,6 +163,11 @@ static inline int of_node_to_nid(struct device_node *np) { return -1; }
163#define of_node_to_nid of_node_to_nid 163#define of_node_to_nid of_node_to_nid
164#endif 164#endif
165 165
166static inline const char* of_node_full_name(struct device_node *np)
167{
168 return np ? np->full_name : "<no-node>";
169}
170
166extern struct device_node *of_find_node_by_name(struct device_node *from, 171extern struct device_node *of_find_node_by_name(struct device_node *from,
167 const char *name); 172 const char *name);
168#define for_each_node_by_name(dn, name) \ 173#define for_each_node_by_name(dn, name) \
@@ -260,8 +265,7 @@ extern int of_machine_is_compatible(const char *compat);
260extern int prom_add_property(struct device_node* np, struct property* prop); 265extern int prom_add_property(struct device_node* np, struct property* prop);
261extern int prom_remove_property(struct device_node *np, struct property *prop); 266extern int prom_remove_property(struct device_node *np, struct property *prop);
262extern int prom_update_property(struct device_node *np, 267extern int prom_update_property(struct device_node *np,
263 struct property *newprop, 268 struct property *newprop);
264 struct property *oldprop);
265 269
266#if defined(CONFIG_OF_DYNAMIC) 270#if defined(CONFIG_OF_DYNAMIC)
267/* For updating the device tree at runtime */ 271/* For updating the device tree at runtime */
@@ -303,6 +307,11 @@ const char *of_prop_next_string(struct property *prop, const char *cur);
303 307
304#else /* CONFIG_OF */ 308#else /* CONFIG_OF */
305 309
310static inline const char* of_node_full_name(struct device_node *np)
311{
312 return "<no-node>";
313}
314
306static inline bool of_have_populated_dt(void) 315static inline bool of_have_populated_dt(void)
307{ 316{
308 return false; 317 return false;
diff --git a/include/linux/of_iommu.h b/include/linux/of_iommu.h
new file mode 100644
index 000000000000..51a560f34bca
--- /dev/null
+++ b/include/linux/of_iommu.h
@@ -0,0 +1,21 @@
1#ifndef __OF_IOMMU_H
2#define __OF_IOMMU_H
3
4#ifdef CONFIG_OF_IOMMU
5
6extern int of_get_dma_window(struct device_node *dn, const char *prefix,
7 int index, unsigned long *busno, dma_addr_t *addr,
8 size_t *size);
9
10#else
11
12static inline int of_get_dma_window(struct device_node *dn, const char *prefix,
13 int index, unsigned long *busno, dma_addr_t *addr,
14 size_t *size)
15{
16 return -EINVAL;
17}
18
19#endif /* CONFIG_OF_IOMMU */
20
21#endif /* __OF_IOMMU_H */
diff --git a/include/linux/of_mtd.h b/include/linux/of_mtd.h
index bae1b6094c63..ed7f267e6389 100644
--- a/include/linux/of_mtd.h
+++ b/include/linux/of_mtd.h
@@ -11,7 +11,7 @@
11 11
12#ifdef CONFIG_OF_MTD 12#ifdef CONFIG_OF_MTD
13#include <linux/of.h> 13#include <linux/of.h>
14extern const int of_get_nand_ecc_mode(struct device_node *np); 14int of_get_nand_ecc_mode(struct device_node *np);
15int of_get_nand_bus_width(struct device_node *np); 15int of_get_nand_bus_width(struct device_node *np);
16bool of_get_nand_on_flash_bbt(struct device_node *np); 16bool of_get_nand_on_flash_bbt(struct device_node *np);
17#endif 17#endif
diff --git a/include/linux/pata_arasan_cf_data.h b/include/linux/pata_arasan_cf_data.h
index a6ee9aa898bb..a7b4fc386e63 100644
--- a/include/linux/pata_arasan_cf_data.h
+++ b/include/linux/pata_arasan_cf_data.h
@@ -4,7 +4,7 @@
4 * Arasan Compact Flash host controller platform data header file 4 * Arasan Compact Flash host controller platform data header file
5 * 5 *
6 * Copyright (C) 2011 ST Microelectronics 6 * Copyright (C) 2011 ST Microelectronics
7 * Viresh Kumar <viresh.kumar@st.com> 7 * Viresh Kumar <viresh.linux@gmail.com>
8 * 8 *
9 * This file is licensed under the terms of the GNU General Public 9 * This file is licensed under the terms of the GNU General Public
10 * License version 2. This program is licensed "as is" without any 10 * License version 2. This program is licensed "as is" without any
diff --git a/include/linux/pci-acpi.h b/include/linux/pci-acpi.h
index 44623500f419..248fba2af98a 100644
--- a/include/linux/pci-acpi.h
+++ b/include/linux/pci-acpi.h
@@ -17,6 +17,7 @@ extern acpi_status pci_acpi_remove_bus_pm_notifier(struct acpi_device *dev);
17extern acpi_status pci_acpi_add_pm_notifier(struct acpi_device *dev, 17extern acpi_status pci_acpi_add_pm_notifier(struct acpi_device *dev,
18 struct pci_dev *pci_dev); 18 struct pci_dev *pci_dev);
19extern acpi_status pci_acpi_remove_pm_notifier(struct acpi_device *dev); 19extern acpi_status pci_acpi_remove_pm_notifier(struct acpi_device *dev);
20extern phys_addr_t acpi_pci_root_get_mcfg_addr(acpi_handle handle);
20 21
21static inline acpi_handle acpi_find_root_bridge_handle(struct pci_dev *pdev) 22static inline acpi_handle acpi_find_root_bridge_handle(struct pci_dev *pdev)
22{ 23{
diff --git a/include/linux/pci.h b/include/linux/pci.h
index fefb4e19bf6a..5faa8310eec9 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -132,9 +132,10 @@ static inline const char *pci_power_name(pci_power_t state)
132 return pci_power_names[1 + (int) state]; 132 return pci_power_names[1 + (int) state];
133} 133}
134 134
135#define PCI_PM_D2_DELAY 200 135#define PCI_PM_D2_DELAY 200
136#define PCI_PM_D3_WAIT 10 136#define PCI_PM_D3_WAIT 10
137#define PCI_PM_BUS_WAIT 50 137#define PCI_PM_D3COLD_WAIT 100
138#define PCI_PM_BUS_WAIT 50
138 139
139/** The pci_channel state describes connectivity between the CPU and 140/** The pci_channel state describes connectivity between the CPU and
140 * the pci device. If some PCI bus between here and the pci device 141 * the pci device. If some PCI bus between here and the pci device
@@ -176,8 +177,6 @@ enum pci_dev_flags {
176 PCI_DEV_FLAGS_NO_D3 = (__force pci_dev_flags_t) 2, 177 PCI_DEV_FLAGS_NO_D3 = (__force pci_dev_flags_t) 2,
177 /* Provide indication device is assigned by a Virtual Machine Manager */ 178 /* Provide indication device is assigned by a Virtual Machine Manager */
178 PCI_DEV_FLAGS_ASSIGNED = (__force pci_dev_flags_t) 4, 179 PCI_DEV_FLAGS_ASSIGNED = (__force pci_dev_flags_t) 4,
179 /* Device causes system crash if in D3 during S3 sleep */
180 PCI_DEV_FLAGS_NO_D3_DURING_SLEEP = (__force pci_dev_flags_t) 8,
181}; 180};
182 181
183enum pci_irq_reroute_variant { 182enum pci_irq_reroute_variant {
@@ -280,11 +279,18 @@ struct pci_dev {
280 unsigned int pme_poll:1; /* Poll device's PME status bit */ 279 unsigned int pme_poll:1; /* Poll device's PME status bit */
281 unsigned int d1_support:1; /* Low power state D1 is supported */ 280 unsigned int d1_support:1; /* Low power state D1 is supported */
282 unsigned int d2_support:1; /* Low power state D2 is supported */ 281 unsigned int d2_support:1; /* Low power state D2 is supported */
283 unsigned int no_d1d2:1; /* Only allow D0 and D3 */ 282 unsigned int no_d1d2:1; /* D1 and D2 are forbidden */
283 unsigned int no_d3cold:1; /* D3cold is forbidden */
284 unsigned int d3cold_allowed:1; /* D3cold is allowed by user */
284 unsigned int mmio_always_on:1; /* disallow turning off io/mem 285 unsigned int mmio_always_on:1; /* disallow turning off io/mem
285 decoding during bar sizing */ 286 decoding during bar sizing */
286 unsigned int wakeup_prepared:1; 287 unsigned int wakeup_prepared:1;
288 unsigned int runtime_d3cold:1; /* whether go through runtime
289 D3cold, not set for devices
290 powered on/off by the
291 corresponding bridge */
287 unsigned int d3_delay; /* D3->D0 transition time in ms */ 292 unsigned int d3_delay; /* D3->D0 transition time in ms */
293 unsigned int d3cold_delay; /* D3cold->D0 transition time in ms */
288 294
289#ifdef CONFIG_PCIEASPM 295#ifdef CONFIG_PCIEASPM
290 struct pcie_link_state *link_state; /* ASPM link state. */ 296 struct pcie_link_state *link_state; /* ASPM link state. */
@@ -326,6 +332,8 @@ struct pci_dev {
326 unsigned int is_hotplug_bridge:1; 332 unsigned int is_hotplug_bridge:1;
327 unsigned int __aer_firmware_first_valid:1; 333 unsigned int __aer_firmware_first_valid:1;
328 unsigned int __aer_firmware_first:1; 334 unsigned int __aer_firmware_first:1;
335 unsigned int broken_intx_masking:1;
336 unsigned int io_window_1k:1; /* Intel P2P bridge 1K I/O windows */
329 pci_dev_flags_t dev_flags; 337 pci_dev_flags_t dev_flags;
330 atomic_t enable_cnt; /* pci_enable_device has been called */ 338 atomic_t enable_cnt; /* pci_enable_device has been called */
331 339
@@ -370,6 +378,8 @@ static inline int pci_channel_offline(struct pci_dev *pdev)
370 return (pdev->error_state != pci_channel_io_normal); 378 return (pdev->error_state != pci_channel_io_normal);
371} 379}
372 380
381extern struct resource busn_resource;
382
373struct pci_host_bridge_window { 383struct pci_host_bridge_window {
374 struct list_head list; 384 struct list_head list;
375 struct resource *res; /* host bridge aperture (CPU address) */ 385 struct resource *res; /* host bridge aperture (CPU address) */
@@ -421,6 +431,7 @@ struct pci_bus {
421 struct list_head slots; /* list of slots on this bus */ 431 struct list_head slots; /* list of slots on this bus */
422 struct resource *resource[PCI_BRIDGE_RESOURCE_NUM]; 432 struct resource *resource[PCI_BRIDGE_RESOURCE_NUM];
423 struct list_head resources; /* address space routed to this bus */ 433 struct list_head resources; /* address space routed to this bus */
434 struct resource busn_res; /* bus numbers routed to this bus */
424 435
425 struct pci_ops *ops; /* configuration access functions */ 436 struct pci_ops *ops; /* configuration access functions */
426 void *sysdata; /* hook for sys-specific extension */ 437 void *sysdata; /* hook for sys-specific extension */
@@ -428,8 +439,6 @@ struct pci_bus {
428 439
429 unsigned char number; /* bus number */ 440 unsigned char number; /* bus number */
430 unsigned char primary; /* number of primary bridge */ 441 unsigned char primary; /* number of primary bridge */
431 unsigned char secondary; /* number of secondary bridge */
432 unsigned char subordinate; /* max number of subordinate buses */
433 unsigned char max_bus_speed; /* enum pci_bus_speed */ 442 unsigned char max_bus_speed; /* enum pci_bus_speed */
434 unsigned char cur_bus_speed; /* enum pci_bus_speed */ 443 unsigned char cur_bus_speed; /* enum pci_bus_speed */
435 444
@@ -476,6 +485,32 @@ static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev) { return false;
476#define PCIBIOS_SET_FAILED 0x88 485#define PCIBIOS_SET_FAILED 0x88
477#define PCIBIOS_BUFFER_TOO_SMALL 0x89 486#define PCIBIOS_BUFFER_TOO_SMALL 0x89
478 487
488/*
489 * Translate above to generic errno for passing back through non-pci.
490 */
491static inline int pcibios_err_to_errno(int err)
492{
493 if (err <= PCIBIOS_SUCCESSFUL)
494 return err; /* Assume already errno */
495
496 switch (err) {
497 case PCIBIOS_FUNC_NOT_SUPPORTED:
498 return -ENOENT;
499 case PCIBIOS_BAD_VENDOR_ID:
500 return -EINVAL;
501 case PCIBIOS_DEVICE_NOT_FOUND:
502 return -ENODEV;
503 case PCIBIOS_BAD_REGISTER_NUMBER:
504 return -EFAULT;
505 case PCIBIOS_SET_FAILED:
506 return -EIO;
507 case PCIBIOS_BUFFER_TOO_SMALL:
508 return -ENOSPC;
509 }
510
511 return -ENOTTY;
512}
513
479/* Low-level architecture-dependent routines */ 514/* Low-level architecture-dependent routines */
480 515
481struct pci_ops { 516struct pci_ops {
@@ -644,6 +679,7 @@ extern int no_pci_devices(void);
644 679
645void pcibios_fixup_bus(struct pci_bus *); 680void pcibios_fixup_bus(struct pci_bus *);
646int __must_check pcibios_enable_device(struct pci_dev *, int mask); 681int __must_check pcibios_enable_device(struct pci_dev *, int mask);
682/* Architecture specific versions may override this (weak) */
647char *pcibios_setup(char *str); 683char *pcibios_setup(char *str);
648 684
649/* Used only when drivers/pci/setup.c is used */ 685/* Used only when drivers/pci/setup.c is used */
@@ -670,6 +706,9 @@ struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops, void *sysdata);
670struct pci_bus *pci_create_root_bus(struct device *parent, int bus, 706struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
671 struct pci_ops *ops, void *sysdata, 707 struct pci_ops *ops, void *sysdata,
672 struct list_head *resources); 708 struct list_head *resources);
709int pci_bus_insert_busn_res(struct pci_bus *b, int bus, int busmax);
710int pci_bus_update_busn_res_end(struct pci_bus *b, int busmax);
711void pci_bus_release_busn_res(struct pci_bus *b);
673struct pci_bus * __devinit pci_scan_root_bus(struct device *parent, int bus, 712struct pci_bus * __devinit pci_scan_root_bus(struct device *parent, int bus,
674 struct pci_ops *ops, void *sysdata, 713 struct pci_ops *ops, void *sysdata,
675 struct list_head *resources); 714 struct list_head *resources);
@@ -716,8 +755,6 @@ enum pci_lost_interrupt_reason pci_lost_interrupt(struct pci_dev *dev);
716int pci_find_capability(struct pci_dev *dev, int cap); 755int pci_find_capability(struct pci_dev *dev, int cap);
717int pci_find_next_capability(struct pci_dev *dev, u8 pos, int cap); 756int pci_find_next_capability(struct pci_dev *dev, u8 pos, int cap);
718int pci_find_ext_capability(struct pci_dev *dev, int cap); 757int pci_find_ext_capability(struct pci_dev *dev, int cap);
719int pci_bus_find_ext_capability(struct pci_bus *bus, unsigned int devfn,
720 int cap);
721int pci_find_ht_capability(struct pci_dev *dev, int ht_cap); 758int pci_find_ht_capability(struct pci_dev *dev, int ht_cap);
722int pci_find_next_ht_capability(struct pci_dev *dev, int pos, int ht_cap); 759int pci_find_next_ht_capability(struct pci_dev *dev, int pos, int ht_cap);
723struct pci_bus *pci_find_next_bus(const struct pci_bus *from); 760struct pci_bus *pci_find_next_bus(const struct pci_bus *from);
@@ -779,6 +816,14 @@ static inline int pci_write_config_dword(const struct pci_dev *dev, int where,
779 return pci_bus_write_config_dword(dev->bus, dev->devfn, where, val); 816 return pci_bus_write_config_dword(dev->bus, dev->devfn, where, val);
780} 817}
781 818
819/* user-space driven config access */
820int pci_user_read_config_byte(struct pci_dev *dev, int where, u8 *val);
821int pci_user_read_config_word(struct pci_dev *dev, int where, u16 *val);
822int pci_user_read_config_dword(struct pci_dev *dev, int where, u32 *val);
823int pci_user_write_config_byte(struct pci_dev *dev, int where, u8 val);
824int pci_user_write_config_word(struct pci_dev *dev, int where, u16 val);
825int pci_user_write_config_dword(struct pci_dev *dev, int where, u32 val);
826
782int __must_check pci_enable_device(struct pci_dev *dev); 827int __must_check pci_enable_device(struct pci_dev *dev);
783int __must_check pci_enable_device_io(struct pci_dev *dev); 828int __must_check pci_enable_device_io(struct pci_dev *dev);
784int __must_check pci_enable_device_mem(struct pci_dev *dev); 829int __must_check pci_enable_device_mem(struct pci_dev *dev);
@@ -877,7 +922,6 @@ enum pci_obff_signal_type {
877int pci_enable_obff(struct pci_dev *dev, enum pci_obff_signal_type); 922int pci_enable_obff(struct pci_dev *dev, enum pci_obff_signal_type);
878void pci_disable_obff(struct pci_dev *dev); 923void pci_disable_obff(struct pci_dev *dev);
879 924
880bool pci_ltr_supported(struct pci_dev *dev);
881int pci_enable_ltr(struct pci_dev *dev); 925int pci_enable_ltr(struct pci_dev *dev);
882void pci_disable_ltr(struct pci_dev *dev); 926void pci_disable_ltr(struct pci_dev *dev);
883int pci_set_ltr(struct pci_dev *dev, int snoop_lat_ns, int nosnoop_lat_ns); 927int pci_set_ltr(struct pci_dev *dev, int snoop_lat_ns, int nosnoop_lat_ns);
@@ -1334,6 +1378,9 @@ static inline struct pci_dev *pci_get_bus_and_slot(unsigned int bus,
1334static inline int pci_domain_nr(struct pci_bus *bus) 1378static inline int pci_domain_nr(struct pci_bus *bus)
1335{ return 0; } 1379{ return 0; }
1336 1380
1381static inline struct pci_dev *pci_dev_get(struct pci_dev *dev)
1382{ return NULL; }
1383
1337#define dev_is_pci(d) (false) 1384#define dev_is_pci(d) (false)
1338#define dev_is_pf(d) (false) 1385#define dev_is_pf(d) (false)
1339#define dev_num_vf(d) (0) 1386#define dev_num_vf(d) (0)
@@ -1488,9 +1535,20 @@ enum pci_fixup_pass {
1488 1535
1489#ifdef CONFIG_PCI_QUIRKS 1536#ifdef CONFIG_PCI_QUIRKS
1490void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev); 1537void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev);
1538struct pci_dev *pci_get_dma_source(struct pci_dev *dev);
1539int pci_dev_specific_acs_enabled(struct pci_dev *dev, u16 acs_flags);
1491#else 1540#else
1492static inline void pci_fixup_device(enum pci_fixup_pass pass, 1541static inline void pci_fixup_device(enum pci_fixup_pass pass,
1493 struct pci_dev *dev) {} 1542 struct pci_dev *dev) {}
1543static inline struct pci_dev *pci_get_dma_source(struct pci_dev *dev)
1544{
1545 return pci_dev_get(dev);
1546}
1547static inline int pci_dev_specific_acs_enabled(struct pci_dev *dev,
1548 u16 acs_flags)
1549{
1550 return -ENOTTY;
1551}
1494#endif 1552#endif
1495 1553
1496void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen); 1554void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen);
@@ -1593,7 +1651,9 @@ static inline bool pci_is_pcie(struct pci_dev *dev)
1593} 1651}
1594 1652
1595void pci_request_acs(void); 1653void pci_request_acs(void);
1596 1654bool pci_acs_enabled(struct pci_dev *pdev, u16 acs_flags);
1655bool pci_acs_path_enabled(struct pci_dev *start,
1656 struct pci_dev *end, u16 acs_flags);
1597 1657
1598#define PCI_VPD_LRDT 0x80 /* Large Resource Data Type */ 1658#define PCI_VPD_LRDT 0x80 /* Large Resource Data Type */
1599#define PCI_VPD_LRDT_ID(x) (x | PCI_VPD_LRDT) 1659#define PCI_VPD_LRDT_ID(x) (x | PCI_VPD_LRDT)
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index ab741b0d0074..fc3526077348 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -517,6 +517,7 @@
517#define PCI_DEVICE_ID_AMD_11H_NB_DRAM 0x1302 517#define PCI_DEVICE_ID_AMD_11H_NB_DRAM 0x1302
518#define PCI_DEVICE_ID_AMD_11H_NB_MISC 0x1303 518#define PCI_DEVICE_ID_AMD_11H_NB_MISC 0x1303
519#define PCI_DEVICE_ID_AMD_11H_NB_LINK 0x1304 519#define PCI_DEVICE_ID_AMD_11H_NB_LINK 0x1304
520#define PCI_DEVICE_ID_AMD_15H_M10H_F3 0x1403
520#define PCI_DEVICE_ID_AMD_15H_NB_F0 0x1600 521#define PCI_DEVICE_ID_AMD_15H_NB_F0 0x1600
521#define PCI_DEVICE_ID_AMD_15H_NB_F1 0x1601 522#define PCI_DEVICE_ID_AMD_15H_NB_F1 0x1601
522#define PCI_DEVICE_ID_AMD_15H_NB_F2 0x1602 523#define PCI_DEVICE_ID_AMD_15H_NB_F2 0x1602
@@ -2755,6 +2756,17 @@
2755#define PCI_DEVICE_ID_INTEL_IOAT_SNB7 0x3c27 2756#define PCI_DEVICE_ID_INTEL_IOAT_SNB7 0x3c27
2756#define PCI_DEVICE_ID_INTEL_IOAT_SNB8 0x3c2e 2757#define PCI_DEVICE_ID_INTEL_IOAT_SNB8 0x3c2e
2757#define PCI_DEVICE_ID_INTEL_IOAT_SNB9 0x3c2f 2758#define PCI_DEVICE_ID_INTEL_IOAT_SNB9 0x3c2f
2759#define PCI_DEVICE_ID_INTEL_UNC_HA 0x3c46
2760#define PCI_DEVICE_ID_INTEL_UNC_IMC0 0x3cb0
2761#define PCI_DEVICE_ID_INTEL_UNC_IMC1 0x3cb1
2762#define PCI_DEVICE_ID_INTEL_UNC_IMC2 0x3cb4
2763#define PCI_DEVICE_ID_INTEL_UNC_IMC3 0x3cb5
2764#define PCI_DEVICE_ID_INTEL_UNC_QPI0 0x3c41
2765#define PCI_DEVICE_ID_INTEL_UNC_QPI1 0x3c42
2766#define PCI_DEVICE_ID_INTEL_UNC_R2PCIE 0x3c43
2767#define PCI_DEVICE_ID_INTEL_UNC_R3QPI0 0x3c44
2768#define PCI_DEVICE_ID_INTEL_UNC_R3QPI1 0x3c45
2769#define PCI_DEVICE_ID_INTEL_JAKETOWN_UBOX 0x3ce0
2758#define PCI_DEVICE_ID_INTEL_IOAT_SNB 0x402f 2770#define PCI_DEVICE_ID_INTEL_IOAT_SNB 0x402f
2759#define PCI_DEVICE_ID_INTEL_5100_16 0x65f0 2771#define PCI_DEVICE_ID_INTEL_5100_16 0x65f0
2760#define PCI_DEVICE_ID_INTEL_5100_21 0x65f5 2772#define PCI_DEVICE_ID_INTEL_5100_21 0x65f5
diff --git a/include/linux/pci_regs.h b/include/linux/pci_regs.h
index 4b608f543412..53274bff5773 100644
--- a/include/linux/pci_regs.h
+++ b/include/linux/pci_regs.h
@@ -26,6 +26,7 @@
26 * Under PCI, each device has 256 bytes of configuration address space, 26 * Under PCI, each device has 256 bytes of configuration address space,
27 * of which the first 64 bytes are standardized as follows: 27 * of which the first 64 bytes are standardized as follows:
28 */ 28 */
29#define PCI_STD_HEADER_SIZEOF 64
29#define PCI_VENDOR_ID 0x00 /* 16 bits */ 30#define PCI_VENDOR_ID 0x00 /* 16 bits */
30#define PCI_DEVICE_ID 0x02 /* 16 bits */ 31#define PCI_DEVICE_ID 0x02 /* 16 bits */
31#define PCI_COMMAND 0x04 /* 16 bits */ 32#define PCI_COMMAND 0x04 /* 16 bits */
@@ -125,7 +126,8 @@
125#define PCI_IO_RANGE_TYPE_MASK 0x0fUL /* I/O bridging type */ 126#define PCI_IO_RANGE_TYPE_MASK 0x0fUL /* I/O bridging type */
126#define PCI_IO_RANGE_TYPE_16 0x00 127#define PCI_IO_RANGE_TYPE_16 0x00
127#define PCI_IO_RANGE_TYPE_32 0x01 128#define PCI_IO_RANGE_TYPE_32 0x01
128#define PCI_IO_RANGE_MASK (~0x0fUL) 129#define PCI_IO_RANGE_MASK (~0x0fUL) /* Standard 4K I/O windows */
130#define PCI_IO_1K_RANGE_MASK (~0x03UL) /* Intel 1K I/O windows */
129#define PCI_SEC_STATUS 0x1e /* Secondary status register, only bit 14 used */ 131#define PCI_SEC_STATUS 0x1e /* Secondary status register, only bit 14 used */
130#define PCI_MEMORY_BASE 0x20 /* Memory range behind */ 132#define PCI_MEMORY_BASE 0x20 /* Memory range behind */
131#define PCI_MEMORY_LIMIT 0x22 133#define PCI_MEMORY_LIMIT 0x22
@@ -209,9 +211,12 @@
209#define PCI_CAP_ID_SHPC 0x0C /* PCI Standard Hot-Plug Controller */ 211#define PCI_CAP_ID_SHPC 0x0C /* PCI Standard Hot-Plug Controller */
210#define PCI_CAP_ID_SSVID 0x0D /* Bridge subsystem vendor/device ID */ 212#define PCI_CAP_ID_SSVID 0x0D /* Bridge subsystem vendor/device ID */
211#define PCI_CAP_ID_AGP3 0x0E /* AGP Target PCI-PCI bridge */ 213#define PCI_CAP_ID_AGP3 0x0E /* AGP Target PCI-PCI bridge */
214#define PCI_CAP_ID_SECDEV 0x0F /* Secure Device */
212#define PCI_CAP_ID_EXP 0x10 /* PCI Express */ 215#define PCI_CAP_ID_EXP 0x10 /* PCI Express */
213#define PCI_CAP_ID_MSIX 0x11 /* MSI-X */ 216#define PCI_CAP_ID_MSIX 0x11 /* MSI-X */
217#define PCI_CAP_ID_SATA 0x12 /* SATA Data/Index Conf. */
214#define PCI_CAP_ID_AF 0x13 /* PCI Advanced Features */ 218#define PCI_CAP_ID_AF 0x13 /* PCI Advanced Features */
219#define PCI_CAP_ID_MAX PCI_CAP_ID_AF
215#define PCI_CAP_LIST_NEXT 1 /* Next capability in the list */ 220#define PCI_CAP_LIST_NEXT 1 /* Next capability in the list */
216#define PCI_CAP_FLAGS 2 /* Capability defined flags (16 bits) */ 221#define PCI_CAP_FLAGS 2 /* Capability defined flags (16 bits) */
217#define PCI_CAP_SIZEOF 4 222#define PCI_CAP_SIZEOF 4
@@ -276,6 +281,7 @@
276#define PCI_VPD_ADDR_MASK 0x7fff /* Address mask */ 281#define PCI_VPD_ADDR_MASK 0x7fff /* Address mask */
277#define PCI_VPD_ADDR_F 0x8000 /* Write 0, 1 indicates completion */ 282#define PCI_VPD_ADDR_F 0x8000 /* Write 0, 1 indicates completion */
278#define PCI_VPD_DATA 4 /* 32-bits of data returned here */ 283#define PCI_VPD_DATA 4 /* 32-bits of data returned here */
284#define PCI_CAP_VPD_SIZEOF 8
279 285
280/* Slot Identification */ 286/* Slot Identification */
281 287
@@ -297,8 +303,10 @@
297#define PCI_MSI_ADDRESS_HI 8 /* Upper 32 bits (if PCI_MSI_FLAGS_64BIT set) */ 303#define PCI_MSI_ADDRESS_HI 8 /* Upper 32 bits (if PCI_MSI_FLAGS_64BIT set) */
298#define PCI_MSI_DATA_32 8 /* 16 bits of data for 32-bit devices */ 304#define PCI_MSI_DATA_32 8 /* 16 bits of data for 32-bit devices */
299#define PCI_MSI_MASK_32 12 /* Mask bits register for 32-bit devices */ 305#define PCI_MSI_MASK_32 12 /* Mask bits register for 32-bit devices */
306#define PCI_MSI_PENDING_32 16 /* Pending intrs for 32-bit devices */
300#define PCI_MSI_DATA_64 12 /* 16 bits of data for 64-bit devices */ 307#define PCI_MSI_DATA_64 12 /* 16 bits of data for 64-bit devices */
301#define PCI_MSI_MASK_64 16 /* Mask bits register for 64-bit devices */ 308#define PCI_MSI_MASK_64 16 /* Mask bits register for 64-bit devices */
309#define PCI_MSI_PENDING_64 20 /* Pending intrs for 64-bit devices */
302 310
303/* MSI-X registers */ 311/* MSI-X registers */
304#define PCI_MSIX_FLAGS 2 312#define PCI_MSIX_FLAGS 2
@@ -308,6 +316,7 @@
308#define PCI_MSIX_TABLE 4 316#define PCI_MSIX_TABLE 4
309#define PCI_MSIX_PBA 8 317#define PCI_MSIX_PBA 8
310#define PCI_MSIX_FLAGS_BIRMASK (7 << 0) 318#define PCI_MSIX_FLAGS_BIRMASK (7 << 0)
319#define PCI_CAP_MSIX_SIZEOF 12 /* size of MSIX registers */
311 320
312/* MSI-X entry's format */ 321/* MSI-X entry's format */
313#define PCI_MSIX_ENTRY_SIZE 16 322#define PCI_MSIX_ENTRY_SIZE 16
@@ -338,6 +347,7 @@
338#define PCI_AF_CTRL_FLR 0x01 347#define PCI_AF_CTRL_FLR 0x01
339#define PCI_AF_STATUS 5 348#define PCI_AF_STATUS 5
340#define PCI_AF_STATUS_TP 0x01 349#define PCI_AF_STATUS_TP 0x01
350#define PCI_CAP_AF_SIZEOF 6 /* size of AF registers */
341 351
342/* PCI-X registers */ 352/* PCI-X registers */
343 353
@@ -374,6 +384,10 @@
374#define PCI_X_STATUS_SPL_ERR 0x20000000 /* Rcvd Split Completion Error Msg */ 384#define PCI_X_STATUS_SPL_ERR 0x20000000 /* Rcvd Split Completion Error Msg */
375#define PCI_X_STATUS_266MHZ 0x40000000 /* 266 MHz capable */ 385#define PCI_X_STATUS_266MHZ 0x40000000 /* 266 MHz capable */
376#define PCI_X_STATUS_533MHZ 0x80000000 /* 533 MHz capable */ 386#define PCI_X_STATUS_533MHZ 0x80000000 /* 533 MHz capable */
387#define PCI_X_ECC_CSR 8 /* ECC control and status */
388#define PCI_CAP_PCIX_SIZEOF_V0 8 /* size of registers for Version 0 */
389#define PCI_CAP_PCIX_SIZEOF_V1 24 /* size for Version 1 */
390#define PCI_CAP_PCIX_SIZEOF_V2 PCI_CAP_PCIX_SIZEOF_V1 /* Same for v2 */
377 391
378/* PCI Bridge Subsystem ID registers */ 392/* PCI Bridge Subsystem ID registers */
379 393
@@ -462,6 +476,7 @@
462#define PCI_EXP_LNKSTA_DLLLA 0x2000 /* Data Link Layer Link Active */ 476#define PCI_EXP_LNKSTA_DLLLA 0x2000 /* Data Link Layer Link Active */
463#define PCI_EXP_LNKSTA_LBMS 0x4000 /* Link Bandwidth Management Status */ 477#define PCI_EXP_LNKSTA_LBMS 0x4000 /* Link Bandwidth Management Status */
464#define PCI_EXP_LNKSTA_LABS 0x8000 /* Link Autonomous Bandwidth Status */ 478#define PCI_EXP_LNKSTA_LABS 0x8000 /* Link Autonomous Bandwidth Status */
479#define PCI_CAP_EXP_ENDPOINT_SIZEOF_V1 20 /* v1 endpoints end here */
465#define PCI_EXP_SLTCAP 20 /* Slot Capabilities */ 480#define PCI_EXP_SLTCAP 20 /* Slot Capabilities */
466#define PCI_EXP_SLTCAP_ABP 0x00000001 /* Attention Button Present */ 481#define PCI_EXP_SLTCAP_ABP 0x00000001 /* Attention Button Present */
467#define PCI_EXP_SLTCAP_PCP 0x00000002 /* Power Controller Present */ 482#define PCI_EXP_SLTCAP_PCP 0x00000002 /* Power Controller Present */
@@ -507,6 +522,12 @@
507#define PCI_EXP_RTSTA 32 /* Root Status */ 522#define PCI_EXP_RTSTA 32 /* Root Status */
508#define PCI_EXP_RTSTA_PME 0x10000 /* PME status */ 523#define PCI_EXP_RTSTA_PME 0x10000 /* PME status */
509#define PCI_EXP_RTSTA_PENDING 0x20000 /* PME pending */ 524#define PCI_EXP_RTSTA_PENDING 0x20000 /* PME pending */
525/*
526 * Note that the following PCI Express 'Capability Structure' registers
527 * were introduced with 'Capability Version' 0x2 (v2). These registers
528 * do not exist on devices with Capability Version 1. Use pci_pcie_cap2()
529 * to use these fields safely.
530 */
510#define PCI_EXP_DEVCAP2 36 /* Device Capabilities 2 */ 531#define PCI_EXP_DEVCAP2 36 /* Device Capabilities 2 */
511#define PCI_EXP_DEVCAP2_ARI 0x20 /* Alternative Routing-ID */ 532#define PCI_EXP_DEVCAP2_ARI 0x20 /* Alternative Routing-ID */
512#define PCI_EXP_DEVCAP2_LTR 0x800 /* Latency tolerance reporting */ 533#define PCI_EXP_DEVCAP2_LTR 0x800 /* Latency tolerance reporting */
@@ -521,6 +542,7 @@
521#define PCI_EXP_OBFF_MSGA_EN 0x2000 /* OBFF enable with Message type A */ 542#define PCI_EXP_OBFF_MSGA_EN 0x2000 /* OBFF enable with Message type A */
522#define PCI_EXP_OBFF_MSGB_EN 0x4000 /* OBFF enable with Message type B */ 543#define PCI_EXP_OBFF_MSGB_EN 0x4000 /* OBFF enable with Message type B */
523#define PCI_EXP_OBFF_WAKE_EN 0x6000 /* OBFF using WAKE# signaling */ 544#define PCI_EXP_OBFF_WAKE_EN 0x6000 /* OBFF using WAKE# signaling */
545#define PCI_CAP_EXP_ENDPOINT_SIZEOF_V2 44 /* v2 endpoints end here */
524#define PCI_EXP_LNKCTL2 48 /* Link Control 2 */ 546#define PCI_EXP_LNKCTL2 48 /* Link Control 2 */
525#define PCI_EXP_SLTCTL2 56 /* Slot Control 2 */ 547#define PCI_EXP_SLTCTL2 56 /* Slot Control 2 */
526 548
@@ -529,23 +551,43 @@
529#define PCI_EXT_CAP_VER(header) ((header >> 16) & 0xf) 551#define PCI_EXT_CAP_VER(header) ((header >> 16) & 0xf)
530#define PCI_EXT_CAP_NEXT(header) ((header >> 20) & 0xffc) 552#define PCI_EXT_CAP_NEXT(header) ((header >> 20) & 0xffc)
531 553
532#define PCI_EXT_CAP_ID_ERR 1 554#define PCI_EXT_CAP_ID_ERR 0x01 /* Advanced Error Reporting */
533#define PCI_EXT_CAP_ID_VC 2 555#define PCI_EXT_CAP_ID_VC 0x02 /* Virtual Channel Capability */
534#define PCI_EXT_CAP_ID_DSN 3 556#define PCI_EXT_CAP_ID_DSN 0x03 /* Device Serial Number */
535#define PCI_EXT_CAP_ID_PWR 4 557#define PCI_EXT_CAP_ID_PWR 0x04 /* Power Budgeting */
536#define PCI_EXT_CAP_ID_VNDR 11 558#define PCI_EXT_CAP_ID_RCLD 0x05 /* Root Complex Link Declaration */
537#define PCI_EXT_CAP_ID_ACS 13 559#define PCI_EXT_CAP_ID_RCILC 0x06 /* Root Complex Internal Link Control */
538#define PCI_EXT_CAP_ID_ARI 14 560#define PCI_EXT_CAP_ID_RCEC 0x07 /* Root Complex Event Collector */
539#define PCI_EXT_CAP_ID_ATS 15 561#define PCI_EXT_CAP_ID_MFVC 0x08 /* Multi-Function VC Capability */
540#define PCI_EXT_CAP_ID_SRIOV 16 562#define PCI_EXT_CAP_ID_VC9 0x09 /* same as _VC */
541#define PCI_EXT_CAP_ID_PRI 19 563#define PCI_EXT_CAP_ID_RCRB 0x0A /* Root Complex RB? */
542#define PCI_EXT_CAP_ID_LTR 24 564#define PCI_EXT_CAP_ID_VNDR 0x0B /* Vendor Specific */
543#define PCI_EXT_CAP_ID_PASID 27 565#define PCI_EXT_CAP_ID_CAC 0x0C /* Config Access - obsolete */
566#define PCI_EXT_CAP_ID_ACS 0x0D /* Access Control Services */
567#define PCI_EXT_CAP_ID_ARI 0x0E /* Alternate Routing ID */
568#define PCI_EXT_CAP_ID_ATS 0x0F /* Address Translation Services */
569#define PCI_EXT_CAP_ID_SRIOV 0x10 /* Single Root I/O Virtualization */
570#define PCI_EXT_CAP_ID_MRIOV 0x11 /* Multi Root I/O Virtualization */
571#define PCI_EXT_CAP_ID_MCAST 0x12 /* Multicast */
572#define PCI_EXT_CAP_ID_PRI 0x13 /* Page Request Interface */
573#define PCI_EXT_CAP_ID_AMD_XXX 0x14 /* reserved for AMD */
574#define PCI_EXT_CAP_ID_REBAR 0x15 /* resizable BAR */
575#define PCI_EXT_CAP_ID_DPA 0x16 /* dynamic power alloc */
576#define PCI_EXT_CAP_ID_TPH 0x17 /* TPH request */
577#define PCI_EXT_CAP_ID_LTR 0x18 /* latency tolerance reporting */
578#define PCI_EXT_CAP_ID_SECPCI 0x19 /* Secondary PCIe */
579#define PCI_EXT_CAP_ID_PMUX 0x1A /* Protocol Multiplexing */
580#define PCI_EXT_CAP_ID_PASID 0x1B /* Process Address Space ID */
581#define PCI_EXT_CAP_ID_MAX PCI_EXT_CAP_ID_PASID
582
583#define PCI_EXT_CAP_DSN_SIZEOF 12
584#define PCI_EXT_CAP_MCAST_ENDPOINT_SIZEOF 40
544 585
545/* Advanced Error Reporting */ 586/* Advanced Error Reporting */
546#define PCI_ERR_UNCOR_STATUS 4 /* Uncorrectable Error Status */ 587#define PCI_ERR_UNCOR_STATUS 4 /* Uncorrectable Error Status */
547#define PCI_ERR_UNC_TRAIN 0x00000001 /* Training */ 588#define PCI_ERR_UNC_TRAIN 0x00000001 /* Training */
548#define PCI_ERR_UNC_DLP 0x00000010 /* Data Link Protocol */ 589#define PCI_ERR_UNC_DLP 0x00000010 /* Data Link Protocol */
590#define PCI_ERR_UNC_SURPDN 0x00000020 /* Surprise Down */
549#define PCI_ERR_UNC_POISON_TLP 0x00001000 /* Poisoned TLP */ 591#define PCI_ERR_UNC_POISON_TLP 0x00001000 /* Poisoned TLP */
550#define PCI_ERR_UNC_FCP 0x00002000 /* Flow Control Protocol */ 592#define PCI_ERR_UNC_FCP 0x00002000 /* Flow Control Protocol */
551#define PCI_ERR_UNC_COMP_TIME 0x00004000 /* Completion Timeout */ 593#define PCI_ERR_UNC_COMP_TIME 0x00004000 /* Completion Timeout */
@@ -555,6 +597,11 @@
555#define PCI_ERR_UNC_MALF_TLP 0x00040000 /* Malformed TLP */ 597#define PCI_ERR_UNC_MALF_TLP 0x00040000 /* Malformed TLP */
556#define PCI_ERR_UNC_ECRC 0x00080000 /* ECRC Error Status */ 598#define PCI_ERR_UNC_ECRC 0x00080000 /* ECRC Error Status */
557#define PCI_ERR_UNC_UNSUP 0x00100000 /* Unsupported Request */ 599#define PCI_ERR_UNC_UNSUP 0x00100000 /* Unsupported Request */
600#define PCI_ERR_UNC_ACSV 0x00200000 /* ACS Violation */
601#define PCI_ERR_UNC_INTN 0x00400000 /* internal error */
602#define PCI_ERR_UNC_MCBTLP 0x00800000 /* MC blocked TLP */
603#define PCI_ERR_UNC_ATOMEG 0x01000000 /* Atomic egress blocked */
604#define PCI_ERR_UNC_TLPPRE 0x02000000 /* TLP prefix blocked */
558#define PCI_ERR_UNCOR_MASK 8 /* Uncorrectable Error Mask */ 605#define PCI_ERR_UNCOR_MASK 8 /* Uncorrectable Error Mask */
559 /* Same bits as above */ 606 /* Same bits as above */
560#define PCI_ERR_UNCOR_SEVER 12 /* Uncorrectable Error Severity */ 607#define PCI_ERR_UNCOR_SEVER 12 /* Uncorrectable Error Severity */
@@ -565,6 +612,9 @@
565#define PCI_ERR_COR_BAD_DLLP 0x00000080 /* Bad DLLP Status */ 612#define PCI_ERR_COR_BAD_DLLP 0x00000080 /* Bad DLLP Status */
566#define PCI_ERR_COR_REP_ROLL 0x00000100 /* REPLAY_NUM Rollover */ 613#define PCI_ERR_COR_REP_ROLL 0x00000100 /* REPLAY_NUM Rollover */
567#define PCI_ERR_COR_REP_TIMER 0x00001000 /* Replay Timer Timeout */ 614#define PCI_ERR_COR_REP_TIMER 0x00001000 /* Replay Timer Timeout */
615#define PCI_ERR_COR_ADV_NFAT 0x00002000 /* Advisory Non-Fatal */
616#define PCI_ERR_COR_INTERNAL 0x00004000 /* Corrected Internal */
617#define PCI_ERR_COR_LOG_OVER 0x00008000 /* Header Log Overflow */
568#define PCI_ERR_COR_MASK 20 /* Correctable Error Mask */ 618#define PCI_ERR_COR_MASK 20 /* Correctable Error Mask */
569 /* Same bits as above */ 619 /* Same bits as above */
570#define PCI_ERR_CAP 24 /* Advanced Error Capabilities */ 620#define PCI_ERR_CAP 24 /* Advanced Error Capabilities */
@@ -596,12 +646,18 @@
596 646
597/* Virtual Channel */ 647/* Virtual Channel */
598#define PCI_VC_PORT_REG1 4 648#define PCI_VC_PORT_REG1 4
649#define PCI_VC_REG1_EVCC 0x7 /* extended vc count */
599#define PCI_VC_PORT_REG2 8 650#define PCI_VC_PORT_REG2 8
651#define PCI_VC_REG2_32_PHASE 0x2
652#define PCI_VC_REG2_64_PHASE 0x4
653#define PCI_VC_REG2_128_PHASE 0x8
600#define PCI_VC_PORT_CTRL 12 654#define PCI_VC_PORT_CTRL 12
601#define PCI_VC_PORT_STATUS 14 655#define PCI_VC_PORT_STATUS 14
602#define PCI_VC_RES_CAP 16 656#define PCI_VC_RES_CAP 16
603#define PCI_VC_RES_CTRL 20 657#define PCI_VC_RES_CTRL 20
604#define PCI_VC_RES_STATUS 26 658#define PCI_VC_RES_STATUS 26
659#define PCI_CAP_VC_BASE_SIZEOF 0x10
660#define PCI_CAP_VC_PER_VC_SIZEOF 0x0C
605 661
606/* Power Budgeting */ 662/* Power Budgeting */
607#define PCI_PWR_DSR 4 /* Data Select Register */ 663#define PCI_PWR_DSR 4 /* Data Select Register */
@@ -614,6 +670,7 @@
614#define PCI_PWR_DATA_RAIL(x) (((x) >> 18) & 7) /* Power Rail */ 670#define PCI_PWR_DATA_RAIL(x) (((x) >> 18) & 7) /* Power Rail */
615#define PCI_PWR_CAP 12 /* Capability */ 671#define PCI_PWR_CAP 12 /* Capability */
616#define PCI_PWR_CAP_BUDGET(x) ((x) & 1) /* Included in system budget */ 672#define PCI_PWR_CAP_BUDGET(x) ((x) & 1) /* Included in system budget */
673#define PCI_EXT_CAP_PWR_SIZEOF 16
617 674
618/* 675/*
619 * Hypertransport sub capability types 676 * Hypertransport sub capability types
@@ -646,6 +703,8 @@
646#define HT_CAPTYPE_ERROR_RETRY 0xC0 /* Retry on error configuration */ 703#define HT_CAPTYPE_ERROR_RETRY 0xC0 /* Retry on error configuration */
647#define HT_CAPTYPE_GEN3 0xD0 /* Generation 3 hypertransport configuration */ 704#define HT_CAPTYPE_GEN3 0xD0 /* Generation 3 hypertransport configuration */
648#define HT_CAPTYPE_PM 0xE0 /* Hypertransport powermanagement configuration */ 705#define HT_CAPTYPE_PM 0xE0 /* Hypertransport powermanagement configuration */
706#define HT_CAP_SIZEOF_LONG 28 /* slave & primary */
707#define HT_CAP_SIZEOF_SHORT 24 /* host & secondary */
649 708
650/* Alternative Routing-ID Interpretation */ 709/* Alternative Routing-ID Interpretation */
651#define PCI_ARI_CAP 0x04 /* ARI Capability Register */ 710#define PCI_ARI_CAP 0x04 /* ARI Capability Register */
@@ -656,6 +715,7 @@
656#define PCI_ARI_CTRL_MFVC 0x0001 /* MFVC Function Groups Enable */ 715#define PCI_ARI_CTRL_MFVC 0x0001 /* MFVC Function Groups Enable */
657#define PCI_ARI_CTRL_ACS 0x0002 /* ACS Function Groups Enable */ 716#define PCI_ARI_CTRL_ACS 0x0002 /* ACS Function Groups Enable */
658#define PCI_ARI_CTRL_FG(x) (((x) >> 4) & 7) /* Function Group */ 717#define PCI_ARI_CTRL_FG(x) (((x) >> 4) & 7) /* Function Group */
718#define PCI_EXT_CAP_ARI_SIZEOF 8
659 719
660/* Address Translation Service */ 720/* Address Translation Service */
661#define PCI_ATS_CAP 0x04 /* ATS Capability Register */ 721#define PCI_ATS_CAP 0x04 /* ATS Capability Register */
@@ -665,6 +725,7 @@
665#define PCI_ATS_CTRL_ENABLE 0x8000 /* ATS Enable */ 725#define PCI_ATS_CTRL_ENABLE 0x8000 /* ATS Enable */
666#define PCI_ATS_CTRL_STU(x) ((x) & 0x1f) /* Smallest Translation Unit */ 726#define PCI_ATS_CTRL_STU(x) ((x) & 0x1f) /* Smallest Translation Unit */
667#define PCI_ATS_MIN_STU 12 /* shift of minimum STU block */ 727#define PCI_ATS_MIN_STU 12 /* shift of minimum STU block */
728#define PCI_EXT_CAP_ATS_SIZEOF 8
668 729
669/* Page Request Interface */ 730/* Page Request Interface */
670#define PCI_PRI_CTRL 0x04 /* PRI control register */ 731#define PCI_PRI_CTRL 0x04 /* PRI control register */
@@ -676,6 +737,7 @@
676#define PCI_PRI_STATUS_STOPPED 0x100 /* PRI Stopped */ 737#define PCI_PRI_STATUS_STOPPED 0x100 /* PRI Stopped */
677#define PCI_PRI_MAX_REQ 0x08 /* PRI max reqs supported */ 738#define PCI_PRI_MAX_REQ 0x08 /* PRI max reqs supported */
678#define PCI_PRI_ALLOC_REQ 0x0c /* PRI max reqs allowed */ 739#define PCI_PRI_ALLOC_REQ 0x0c /* PRI max reqs allowed */
740#define PCI_EXT_CAP_PRI_SIZEOF 16
679 741
680/* PASID capability */ 742/* PASID capability */
681#define PCI_PASID_CAP 0x04 /* PASID feature register */ 743#define PCI_PASID_CAP 0x04 /* PASID feature register */
@@ -685,6 +747,7 @@
685#define PCI_PASID_CTRL_ENABLE 0x01 /* Enable bit */ 747#define PCI_PASID_CTRL_ENABLE 0x01 /* Enable bit */
686#define PCI_PASID_CTRL_EXEC 0x02 /* Exec permissions Enable */ 748#define PCI_PASID_CTRL_EXEC 0x02 /* Exec permissions Enable */
687#define PCI_PASID_CTRL_PRIV 0x04 /* Priviledge Mode Enable */ 749#define PCI_PASID_CTRL_PRIV 0x04 /* Priviledge Mode Enable */
750#define PCI_EXT_CAP_PASID_SIZEOF 8
688 751
689/* Single Root I/O Virtualization */ 752/* Single Root I/O Virtualization */
690#define PCI_SRIOV_CAP 0x04 /* SR-IOV Capabilities */ 753#define PCI_SRIOV_CAP 0x04 /* SR-IOV Capabilities */
@@ -716,12 +779,14 @@
716#define PCI_SRIOV_VFM_MI 0x1 /* Dormant.MigrateIn */ 779#define PCI_SRIOV_VFM_MI 0x1 /* Dormant.MigrateIn */
717#define PCI_SRIOV_VFM_MO 0x2 /* Active.MigrateOut */ 780#define PCI_SRIOV_VFM_MO 0x2 /* Active.MigrateOut */
718#define PCI_SRIOV_VFM_AV 0x3 /* Active.Available */ 781#define PCI_SRIOV_VFM_AV 0x3 /* Active.Available */
782#define PCI_EXT_CAP_SRIOV_SIZEOF 64
719 783
720#define PCI_LTR_MAX_SNOOP_LAT 0x4 784#define PCI_LTR_MAX_SNOOP_LAT 0x4
721#define PCI_LTR_MAX_NOSNOOP_LAT 0x6 785#define PCI_LTR_MAX_NOSNOOP_LAT 0x6
722#define PCI_LTR_VALUE_MASK 0x000003ff 786#define PCI_LTR_VALUE_MASK 0x000003ff
723#define PCI_LTR_SCALE_MASK 0x00001c00 787#define PCI_LTR_SCALE_MASK 0x00001c00
724#define PCI_LTR_SCALE_SHIFT 10 788#define PCI_LTR_SCALE_SHIFT 10
789#define PCI_EXT_CAP_LTR_SIZEOF 8
725 790
726/* Access Control Service */ 791/* Access Control Service */
727#define PCI_ACS_CAP 0x04 /* ACS Capability Register */ 792#define PCI_ACS_CAP 0x04 /* ACS Capability Register */
@@ -732,7 +797,38 @@
732#define PCI_ACS_UF 0x10 /* Upstream Forwarding */ 797#define PCI_ACS_UF 0x10 /* Upstream Forwarding */
733#define PCI_ACS_EC 0x20 /* P2P Egress Control */ 798#define PCI_ACS_EC 0x20 /* P2P Egress Control */
734#define PCI_ACS_DT 0x40 /* Direct Translated P2P */ 799#define PCI_ACS_DT 0x40 /* Direct Translated P2P */
800#define PCI_ACS_EGRESS_BITS 0x05 /* ACS Egress Control Vector Size */
735#define PCI_ACS_CTRL 0x06 /* ACS Control Register */ 801#define PCI_ACS_CTRL 0x06 /* ACS Control Register */
736#define PCI_ACS_EGRESS_CTL_V 0x08 /* ACS Egress Control Vector */ 802#define PCI_ACS_EGRESS_CTL_V 0x08 /* ACS Egress Control Vector */
737 803
804#define PCI_VSEC_HDR 4 /* extended cap - vendor specific */
805#define PCI_VSEC_HDR_LEN_SHIFT 20 /* shift for length field */
806
807/* sata capability */
808#define PCI_SATA_REGS 4 /* SATA REGs specifier */
809#define PCI_SATA_REGS_MASK 0xF /* location - BAR#/inline */
810#define PCI_SATA_REGS_INLINE 0xF /* REGS in config space */
811#define PCI_SATA_SIZEOF_SHORT 8
812#define PCI_SATA_SIZEOF_LONG 16
813
814/* resizable BARs */
815#define PCI_REBAR_CTRL 8 /* control register */
816#define PCI_REBAR_CTRL_NBAR_MASK (7 << 5) /* mask for # bars */
817#define PCI_REBAR_CTRL_NBAR_SHIFT 5 /* shift for # bars */
818
819/* dynamic power allocation */
820#define PCI_DPA_CAP 4 /* capability register */
821#define PCI_DPA_CAP_SUBSTATE_MASK 0x1F /* # substates - 1 */
822#define PCI_DPA_BASE_SIZEOF 16 /* size with 0 substates */
823
824/* TPH Requester */
825#define PCI_TPH_CAP 4 /* capability register */
826#define PCI_TPH_CAP_LOC_MASK 0x600 /* location mask */
827#define PCI_TPH_LOC_NONE 0x000 /* no location */
828#define PCI_TPH_LOC_CAP 0x200 /* in capability */
829#define PCI_TPH_LOC_MSIX 0x400 /* in MSI-X */
830#define PCI_TPH_CAP_ST_MASK 0x07FF0000 /* st table mask */
831#define PCI_TPH_CAP_ST_SHIFT 16 /* st table shift */
832#define PCI_TPH_BASE_SIZEOF 12 /* size with no st table */
833
738#endif /* LINUX_PCI_REGS_H */ 834#endif /* LINUX_PCI_REGS_H */
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index 45db49f64bb4..76c5c8b724a7 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -677,6 +677,7 @@ struct hw_perf_event {
677 u64 last_tag; 677 u64 last_tag;
678 unsigned long config_base; 678 unsigned long config_base;
679 unsigned long event_base; 679 unsigned long event_base;
680 int event_base_rdpmc;
680 int idx; 681 int idx;
681 int last_cpu; 682 int last_cpu;
682 683
@@ -1106,6 +1107,8 @@ perf_event_create_kernel_counter(struct perf_event_attr *attr,
1106 struct task_struct *task, 1107 struct task_struct *task,
1107 perf_overflow_handler_t callback, 1108 perf_overflow_handler_t callback,
1108 void *context); 1109 void *context);
1110extern void perf_pmu_migrate_context(struct pmu *pmu,
1111 int src_cpu, int dst_cpu);
1109extern u64 perf_event_read_value(struct perf_event *event, 1112extern u64 perf_event_read_value(struct perf_event *event,
1110 u64 *enabled, u64 *running); 1113 u64 *enabled, u64 *running);
1111 1114
diff --git a/include/linux/phy.h b/include/linux/phy.h
index c291cae8ce32..93b3cf77f564 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -243,6 +243,15 @@ enum phy_state {
243 PHY_RESUMING 243 PHY_RESUMING
244}; 244};
245 245
246/**
247 * struct phy_c45_device_ids - 802.3-c45 Device Identifiers
248 * @devices_in_package: Bit vector of devices present.
249 * @device_ids: The device identifer for each present device.
250 */
251struct phy_c45_device_ids {
252 u32 devices_in_package;
253 u32 device_ids[8];
254};
246 255
247/* phy_device: An instance of a PHY 256/* phy_device: An instance of a PHY
248 * 257 *
@@ -250,6 +259,8 @@ enum phy_state {
250 * bus: Pointer to the bus this PHY is on 259 * bus: Pointer to the bus this PHY is on
251 * dev: driver model device structure for this PHY 260 * dev: driver model device structure for this PHY
252 * phy_id: UID for this device found during discovery 261 * phy_id: UID for this device found during discovery
262 * c45_ids: 802.3-c45 Device Identifers if is_c45.
263 * is_c45: Set to true if this phy uses clause 45 addressing.
253 * state: state of the PHY for management purposes 264 * state: state of the PHY for management purposes
254 * dev_flags: Device-specific flags used by the PHY driver. 265 * dev_flags: Device-specific flags used by the PHY driver.
255 * addr: Bus address of PHY 266 * addr: Bus address of PHY
@@ -285,6 +296,9 @@ struct phy_device {
285 296
286 u32 phy_id; 297 u32 phy_id;
287 298
299 struct phy_c45_device_ids c45_ids;
300 bool is_c45;
301
288 enum phy_state state; 302 enum phy_state state;
289 303
290 u32 dev_flags; 304 u32 dev_flags;
@@ -412,6 +426,12 @@ struct phy_driver {
412 /* Clears up any memory if needed */ 426 /* Clears up any memory if needed */
413 void (*remove)(struct phy_device *phydev); 427 void (*remove)(struct phy_device *phydev);
414 428
429 /* Returns true if this is a suitable driver for the given
430 * phydev. If NULL, matching is based on phy_id and
431 * phy_id_mask.
432 */
433 int (*match_phy_device)(struct phy_device *phydev);
434
415 /* Handles ethtool queries for hardware time stamping. */ 435 /* Handles ethtool queries for hardware time stamping. */
416 int (*ts_info)(struct phy_device *phydev, struct ethtool_ts_info *ti); 436 int (*ts_info)(struct phy_device *phydev, struct ethtool_ts_info *ti);
417 437
@@ -480,7 +500,9 @@ static inline int phy_write(struct phy_device *phydev, u32 regnum, u16 val)
480 return mdiobus_write(phydev->bus, phydev->addr, regnum, val); 500 return mdiobus_write(phydev->bus, phydev->addr, regnum, val);
481} 501}
482 502
483struct phy_device* get_phy_device(struct mii_bus *bus, int addr); 503struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id,
504 bool is_c45, struct phy_c45_device_ids *c45_ids);
505struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45);
484int phy_device_register(struct phy_device *phy); 506int phy_device_register(struct phy_device *phy);
485int phy_init_hw(struct phy_device *phydev); 507int phy_init_hw(struct phy_device *phydev);
486struct phy_device * phy_attach(struct net_device *dev, 508struct phy_device * phy_attach(struct net_device *dev,
@@ -511,7 +533,9 @@ int genphy_read_status(struct phy_device *phydev);
511int genphy_suspend(struct phy_device *phydev); 533int genphy_suspend(struct phy_device *phydev);
512int genphy_resume(struct phy_device *phydev); 534int genphy_resume(struct phy_device *phydev);
513void phy_driver_unregister(struct phy_driver *drv); 535void phy_driver_unregister(struct phy_driver *drv);
536void phy_drivers_unregister(struct phy_driver *drv, int n);
514int phy_driver_register(struct phy_driver *new_driver); 537int phy_driver_register(struct phy_driver *new_driver);
538int phy_drivers_register(struct phy_driver *new_driver, int n);
515void phy_state_machine(struct work_struct *work); 539void phy_state_machine(struct work_struct *work);
516void phy_start_machine(struct phy_device *phydev, 540void phy_start_machine(struct phy_device *phydev,
517 void (*handler)(struct net_device *)); 541 void (*handler)(struct net_device *));
@@ -532,6 +556,11 @@ int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask,
532 int (*run)(struct phy_device *)); 556 int (*run)(struct phy_device *));
533int phy_scan_fixups(struct phy_device *phydev); 557int phy_scan_fixups(struct phy_device *phydev);
534 558
559int phy_init_eee(struct phy_device *phydev, bool clk_stop_enable);
560int phy_get_eee_err(struct phy_device *phydev);
561int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data);
562int phy_ethtool_get_eee(struct phy_device *phydev, struct ethtool_eee *data);
563
535int __init mdio_bus_init(void); 564int __init mdio_bus_init(void);
536void mdio_bus_exit(void); 565void mdio_bus_exit(void);
537 566
diff --git a/include/linux/pinctrl/pinctrl.h b/include/linux/pinctrl/pinctrl.h
index 3b894a668d32..69393a662532 100644
--- a/include/linux/pinctrl/pinctrl.h
+++ b/include/linux/pinctrl/pinctrl.h
@@ -131,8 +131,9 @@ extern void pinctrl_unregister(struct pinctrl_dev *pctldev);
131extern bool pin_is_valid(struct pinctrl_dev *pctldev, int pin); 131extern bool pin_is_valid(struct pinctrl_dev *pctldev, int pin);
132extern void pinctrl_add_gpio_range(struct pinctrl_dev *pctldev, 132extern void pinctrl_add_gpio_range(struct pinctrl_dev *pctldev,
133 struct pinctrl_gpio_range *range); 133 struct pinctrl_gpio_range *range);
134extern void pinctrl_remove_gpio_range(struct pinctrl_dev *pctldev, 134extern void pinctrl_add_gpio_ranges(struct pinctrl_dev *pctldev,
135 struct pinctrl_gpio_range *range); 135 struct pinctrl_gpio_range *ranges,
136 unsigned nranges);
136extern const char *pinctrl_dev_get_name(struct pinctrl_dev *pctldev); 137extern const char *pinctrl_dev_get_name(struct pinctrl_dev *pctldev);
137extern void *pinctrl_dev_get_drvdata(struct pinctrl_dev *pctldev); 138extern void *pinctrl_dev_get_drvdata(struct pinctrl_dev *pctldev);
138#else 139#else
diff --git a/include/linux/pkt_cls.h b/include/linux/pkt_cls.h
index defbde203d07..082eafaf026b 100644
--- a/include/linux/pkt_cls.h
+++ b/include/linux/pkt_cls.h
@@ -451,8 +451,10 @@ enum {
451#define TCF_EM_U32 3 451#define TCF_EM_U32 3
452#define TCF_EM_META 4 452#define TCF_EM_META 4
453#define TCF_EM_TEXT 5 453#define TCF_EM_TEXT 5
454#define TCF_EM_VLAN 6 454#define TCF_EM_VLAN 6
455#define TCF_EM_MAX 6 455#define TCF_EM_CANID 7
456#define TCF_EM_IPSET 8
457#define TCF_EM_MAX 8
456 458
457enum { 459enum {
458 TCF_EM_PROG_TC 460 TCF_EM_PROG_TC
diff --git a/include/linux/platform_data/ad7266.h b/include/linux/platform_data/ad7266.h
new file mode 100644
index 000000000000..eabfdcb26992
--- /dev/null
+++ b/include/linux/platform_data/ad7266.h
@@ -0,0 +1,54 @@
1/*
2 * AD7266/65 SPI ADC driver
3 *
4 * Copyright 2012 Analog Devices Inc.
5 *
6 * Licensed under the GPL-2.
7 */
8
9#ifndef __IIO_ADC_AD7266_H__
10#define __IIO_ADC_AD7266_H__
11
12/**
13 * enum ad7266_range - AD7266 reference voltage range
14 * @AD7266_RANGE_VREF: Device is configured for input range 0V - VREF
15 * (RANGE pin set to low)
16 * @AD7266_RANGE_2VREF: Device is configured for input range 0V - 2VREF
17 * (RANGE pin set to high)
18 */
19enum ad7266_range {
20 AD7266_RANGE_VREF,
21 AD7266_RANGE_2VREF,
22};
23
24/**
25 * enum ad7266_mode - AD7266 sample mode
26 * @AD7266_MODE_DIFF: Device is configured for full differential mode
27 * (SGL/DIFF pin set to low, AD0 pin set to low)
28 * @AD7266_MODE_PSEUDO_DIFF: Device is configured for pseudo differential mode
29 * (SGL/DIFF pin set to low, AD0 pin set to high)
30 * @AD7266_MODE_SINGLE_ENDED: Device is configured for single-ended mode
31 * (SGL/DIFF pin set to high)
32 */
33enum ad7266_mode {
34 AD7266_MODE_DIFF,
35 AD7266_MODE_PSEUDO_DIFF,
36 AD7266_MODE_SINGLE_ENDED,
37};
38
39/**
40 * struct ad7266_platform_data - Platform data for the AD7266 driver
41 * @range: Reference voltage range the device is configured for
42 * @mode: Sample mode the device is configured for
43 * @fixed_addr: Whether the address pins are hard-wired
44 * @addr_gpios: GPIOs used for controlling the address pins, only used if
45 * fixed_addr is set to false.
46 */
47struct ad7266_platform_data {
48 enum ad7266_range range;
49 enum ad7266_mode mode;
50 bool fixed_addr;
51 unsigned int addr_gpios[3];
52};
53
54#endif
diff --git a/include/linux/platform_data/atmel-aes.h b/include/linux/platform_data/atmel-aes.h
new file mode 100644
index 000000000000..e7a1949bad26
--- /dev/null
+++ b/include/linux/platform_data/atmel-aes.h
@@ -0,0 +1,22 @@
1#ifndef __LINUX_ATMEL_AES_H
2#define __LINUX_ATMEL_AES_H
3
4#include <mach/at_hdmac.h>
5
6/**
7 * struct aes_dma_data - DMA data for AES
8 */
9struct aes_dma_data {
10 struct at_dma_slave txdata;
11 struct at_dma_slave rxdata;
12};
13
14/**
15 * struct aes_platform_data - board-specific AES configuration
16 * @dma_slave: DMA slave interface to use in data transfers.
17 */
18struct aes_platform_data {
19 struct aes_dma_data *dma_slave;
20};
21
22#endif /* __LINUX_ATMEL_AES_H */
diff --git a/include/linux/platform_data/clk-integrator.h b/include/linux/platform_data/clk-integrator.h
new file mode 100644
index 000000000000..83fe9c283bb8
--- /dev/null
+++ b/include/linux/platform_data/clk-integrator.h
@@ -0,0 +1 @@
void integrator_clk_init(bool is_cp);
diff --git a/include/linux/platform_data/clk-nomadik.h b/include/linux/platform_data/clk-nomadik.h
new file mode 100644
index 000000000000..5713c87b2477
--- /dev/null
+++ b/include/linux/platform_data/clk-nomadik.h
@@ -0,0 +1,2 @@
1/* Minimal platform data header */
2void nomadik_clk_init(void);
diff --git a/include/linux/platform_data/clk-u300.h b/include/linux/platform_data/clk-u300.h
new file mode 100644
index 000000000000..8429e73911a1
--- /dev/null
+++ b/include/linux/platform_data/clk-u300.h
@@ -0,0 +1 @@
void __init u300_clk_init(void __iomem *base);
diff --git a/include/linux/platform_data/mmp_audio.h b/include/linux/platform_data/mmp_audio.h
new file mode 100644
index 000000000000..0f25d165abd6
--- /dev/null
+++ b/include/linux/platform_data/mmp_audio.h
@@ -0,0 +1,22 @@
1/*
2 * MMP Platform AUDIO Management
3 *
4 * Copyright (c) 2011 Marvell Semiconductors Inc.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 */
11
12#ifndef MMP_AUDIO_H
13#define MMP_AUDIO_H
14
15struct mmp_audio_platdata {
16 u32 period_max_capture;
17 u32 buffer_max_capture;
18 u32 period_max_playback;
19 u32 buffer_max_playback;
20};
21
22#endif /* MMP_AUDIO_H */
diff --git a/include/linux/platform_data/omap_drm.h b/include/linux/platform_data/omap_drm.h
new file mode 100644
index 000000000000..3da73bdc2031
--- /dev/null
+++ b/include/linux/platform_data/omap_drm.h
@@ -0,0 +1,52 @@
1/*
2 * DRM/KMS platform data for TI OMAP platforms
3 *
4 * Copyright (C) 2012 Texas Instruments
5 * Author: Rob Clark <rob.clark@linaro.org>
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License version 2 as published by
9 * the Free Software Foundation.
10 *
11 * This program is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 * more details.
15 *
16 * You should have received a copy of the GNU General Public License along with
17 * this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef __PLATFORM_DATA_OMAP_DRM_H__
21#define __PLATFORM_DATA_OMAP_DRM_H__
22
23/*
24 * Optional platform data to configure the default configuration of which
25 * pipes/overlays/CRTCs are used.. if this is not provided, then instead the
26 * first CONFIG_DRM_OMAP_NUM_CRTCS are used, and they are each connected to
27 * one manager, with priority given to managers that are connected to
28 * detected devices. Remaining overlays are used as video planes. This
29 * should be a good default behavior for most cases, but yet there still
30 * might be times when you wish to do something different.
31 */
32struct omap_kms_platform_data {
33 /* overlays to use as CRTCs: */
34 int ovl_cnt;
35 const int *ovl_ids;
36
37 /* overlays to use as video planes: */
38 int pln_cnt;
39 const int *pln_ids;
40
41 int mgr_cnt;
42 const int *mgr_ids;
43
44 int dev_cnt;
45 const char **dev_names;
46};
47
48struct omap_drm_platform_data {
49 struct omap_kms_platform_data *kms_pdata;
50};
51
52#endif /* __PLATFORM_DATA_OMAP_DRM_H__ */
diff --git a/include/linux/platform_data/s3c-hsotg.h b/include/linux/platform_data/s3c-hsotg.h
index 97ec12c2ded4..8b79e0967f9c 100644
--- a/include/linux/platform_data/s3c-hsotg.h
+++ b/include/linux/platform_data/s3c-hsotg.h
@@ -12,6 +12,9 @@
12 * published by the Free Software Foundation. 12 * published by the Free Software Foundation.
13*/ 13*/
14 14
15#ifndef __LINUX_USB_S3C_HSOTG_H
16#define __LINUX_USB_S3C_HSOTG_H
17
15enum s3c_hsotg_dmamode { 18enum s3c_hsotg_dmamode {
16 S3C_HSOTG_DMA_NONE, /* do not use DMA at-all */ 19 S3C_HSOTG_DMA_NONE, /* do not use DMA at-all */
17 S3C_HSOTG_DMA_ONLY, /* always use DMA */ 20 S3C_HSOTG_DMA_ONLY, /* always use DMA */
@@ -33,3 +36,5 @@ struct s3c_hsotg_plat {
33}; 36};
34 37
35extern void s3c_hsotg_set_platdata(struct s3c_hsotg_plat *pd); 38extern void s3c_hsotg_set_platdata(struct s3c_hsotg_plat *pd);
39
40#endif /* __LINUX_USB_S3C_HSOTG_H */
diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h
index 30f794eb3826..a7d6172922d4 100644
--- a/include/linux/pm_domain.h
+++ b/include/linux/pm_domain.h
@@ -15,6 +15,7 @@
15#include <linux/err.h> 15#include <linux/err.h>
16#include <linux/of.h> 16#include <linux/of.h>
17#include <linux/notifier.h> 17#include <linux/notifier.h>
18#include <linux/cpuidle.h>
18 19
19enum gpd_status { 20enum gpd_status {
20 GPD_STATE_ACTIVE = 0, /* PM domain is active */ 21 GPD_STATE_ACTIVE = 0, /* PM domain is active */
@@ -45,6 +46,11 @@ struct gpd_dev_ops {
45 bool (*active_wakeup)(struct device *dev); 46 bool (*active_wakeup)(struct device *dev);
46}; 47};
47 48
49struct gpd_cpu_data {
50 unsigned int saved_exit_latency;
51 struct cpuidle_state *idle_state;
52};
53
48struct generic_pm_domain { 54struct generic_pm_domain {
49 struct dev_pm_domain domain; /* PM domain operations */ 55 struct dev_pm_domain domain; /* PM domain operations */
50 struct list_head gpd_list_node; /* Node in the global PM domains list */ 56 struct list_head gpd_list_node; /* Node in the global PM domains list */
@@ -75,6 +81,7 @@ struct generic_pm_domain {
75 bool max_off_time_changed; 81 bool max_off_time_changed;
76 bool cached_power_down_ok; 82 bool cached_power_down_ok;
77 struct device_node *of_node; /* Node in device tree */ 83 struct device_node *of_node; /* Node in device tree */
84 struct gpd_cpu_data *cpu_data;
78}; 85};
79 86
80static inline struct generic_pm_domain *pd_to_genpd(struct dev_pm_domain *pd) 87static inline struct generic_pm_domain *pd_to_genpd(struct dev_pm_domain *pd)
@@ -105,6 +112,7 @@ struct generic_pm_domain_data {
105 struct gpd_timing_data td; 112 struct gpd_timing_data td;
106 struct notifier_block nb; 113 struct notifier_block nb;
107 struct mutex lock; 114 struct mutex lock;
115 unsigned int refcount;
108 bool need_restore; 116 bool need_restore;
109 bool always_on; 117 bool always_on;
110}; 118};
@@ -155,6 +163,8 @@ extern int pm_genpd_add_callbacks(struct device *dev,
155 struct gpd_dev_ops *ops, 163 struct gpd_dev_ops *ops,
156 struct gpd_timing_data *td); 164 struct gpd_timing_data *td);
157extern int __pm_genpd_remove_callbacks(struct device *dev, bool clear_td); 165extern int __pm_genpd_remove_callbacks(struct device *dev, bool clear_td);
166extern int genpd_attach_cpuidle(struct generic_pm_domain *genpd, int state);
167extern int genpd_detach_cpuidle(struct generic_pm_domain *genpd);
158extern void pm_genpd_init(struct generic_pm_domain *genpd, 168extern void pm_genpd_init(struct generic_pm_domain *genpd,
159 struct dev_power_governor *gov, bool is_off); 169 struct dev_power_governor *gov, bool is_off);
160 170
@@ -211,6 +221,14 @@ static inline int __pm_genpd_remove_callbacks(struct device *dev, bool clear_td)
211{ 221{
212 return -ENOSYS; 222 return -ENOSYS;
213} 223}
224static inline int genpd_attach_cpuidle(struct generic_pm_domain *genpd, int st)
225{
226 return -ENOSYS;
227}
228static inline int genpd_detach_cpuidle(struct generic_pm_domain *genpd)
229{
230 return -ENOSYS;
231}
214static inline void pm_genpd_init(struct generic_pm_domain *genpd, 232static inline void pm_genpd_init(struct generic_pm_domain *genpd,
215 struct dev_power_governor *gov, bool is_off) 233 struct dev_power_governor *gov, bool is_off)
216{ 234{
diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h
index 233149cb19f4..9924ea1f22e0 100644
--- a/include/linux/pm_qos.h
+++ b/include/linux/pm_qos.h
@@ -66,7 +66,7 @@ enum pm_qos_req_action {
66 66
67static inline int dev_pm_qos_request_active(struct dev_pm_qos_request *req) 67static inline int dev_pm_qos_request_active(struct dev_pm_qos_request *req)
68{ 68{
69 return req->dev != 0; 69 return req->dev != NULL;
70} 70}
71 71
72int pm_qos_update_target(struct pm_qos_constraints *c, struct plist_node *node, 72int pm_qos_update_target(struct pm_qos_constraints *c, struct plist_node *node,
diff --git a/include/linux/power/smartreflex.h b/include/linux/power/smartreflex.h
new file mode 100644
index 000000000000..3101e62a1213
--- /dev/null
+++ b/include/linux/power/smartreflex.h
@@ -0,0 +1,308 @@
1/*
2 * OMAP Smartreflex Defines and Routines
3 *
4 * Author: Thara Gopinath <thara@ti.com>
5 *
6 * Copyright (C) 2010 Texas Instruments, Inc.
7 * Thara Gopinath <thara@ti.com>
8 *
9 * Copyright (C) 2008 Nokia Corporation
10 * Kalle Jokiniemi
11 *
12 * Copyright (C) 2007 Texas Instruments, Inc.
13 * Lesly A M <x0080970@ti.com>
14 *
15 * This program is free software; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License version 2 as
17 * published by the Free Software Foundation.
18 */
19
20#ifndef __POWER_SMARTREFLEX_H
21#define __POWER_SMARTREFLEX_H
22
23#include <linux/types.h>
24#include <linux/platform_device.h>
25#include <linux/delay.h>
26#include <plat/voltage.h>
27
28/*
29 * Different Smartreflex IPs version. The v1 is the 65nm version used in
30 * OMAP3430. The v2 is the update for the 45nm version of the IP
31 * used in OMAP3630 and OMAP4430
32 */
33#define SR_TYPE_V1 1
34#define SR_TYPE_V2 2
35
36/* SMART REFLEX REG ADDRESS OFFSET */
37#define SRCONFIG 0x00
38#define SRSTATUS 0x04
39#define SENVAL 0x08
40#define SENMIN 0x0C
41#define SENMAX 0x10
42#define SENAVG 0x14
43#define AVGWEIGHT 0x18
44#define NVALUERECIPROCAL 0x1c
45#define SENERROR_V1 0x20
46#define ERRCONFIG_V1 0x24
47#define IRQ_EOI 0x20
48#define IRQSTATUS_RAW 0x24
49#define IRQSTATUS 0x28
50#define IRQENABLE_SET 0x2C
51#define IRQENABLE_CLR 0x30
52#define SENERROR_V2 0x34
53#define ERRCONFIG_V2 0x38
54
55/* Bit/Shift Positions */
56
57/* SRCONFIG */
58#define SRCONFIG_ACCUMDATA_SHIFT 22
59#define SRCONFIG_SRCLKLENGTH_SHIFT 12
60#define SRCONFIG_SENNENABLE_V1_SHIFT 5
61#define SRCONFIG_SENPENABLE_V1_SHIFT 3
62#define SRCONFIG_SENNENABLE_V2_SHIFT 1
63#define SRCONFIG_SENPENABLE_V2_SHIFT 0
64#define SRCONFIG_CLKCTRL_SHIFT 0
65
66#define SRCONFIG_ACCUMDATA_MASK (0x3ff << 22)
67
68#define SRCONFIG_SRENABLE BIT(11)
69#define SRCONFIG_SENENABLE BIT(10)
70#define SRCONFIG_ERRGEN_EN BIT(9)
71#define SRCONFIG_MINMAXAVG_EN BIT(8)
72#define SRCONFIG_DELAYCTRL BIT(2)
73
74/* AVGWEIGHT */
75#define AVGWEIGHT_SENPAVGWEIGHT_SHIFT 2
76#define AVGWEIGHT_SENNAVGWEIGHT_SHIFT 0
77
78/* NVALUERECIPROCAL */
79#define NVALUERECIPROCAL_SENPGAIN_SHIFT 20
80#define NVALUERECIPROCAL_SENNGAIN_SHIFT 16
81#define NVALUERECIPROCAL_RNSENP_SHIFT 8
82#define NVALUERECIPROCAL_RNSENN_SHIFT 0
83
84/* ERRCONFIG */
85#define ERRCONFIG_ERRWEIGHT_SHIFT 16
86#define ERRCONFIG_ERRMAXLIMIT_SHIFT 8
87#define ERRCONFIG_ERRMINLIMIT_SHIFT 0
88
89#define SR_ERRWEIGHT_MASK (0x07 << 16)
90#define SR_ERRMAXLIMIT_MASK (0xff << 8)
91#define SR_ERRMINLIMIT_MASK (0xff << 0)
92
93#define ERRCONFIG_VPBOUNDINTEN_V1 BIT(31)
94#define ERRCONFIG_VPBOUNDINTST_V1 BIT(30)
95#define ERRCONFIG_MCUACCUMINTEN BIT(29)
96#define ERRCONFIG_MCUACCUMINTST BIT(28)
97#define ERRCONFIG_MCUVALIDINTEN BIT(27)
98#define ERRCONFIG_MCUVALIDINTST BIT(26)
99#define ERRCONFIG_MCUBOUNDINTEN BIT(25)
100#define ERRCONFIG_MCUBOUNDINTST BIT(24)
101#define ERRCONFIG_MCUDISACKINTEN BIT(23)
102#define ERRCONFIG_VPBOUNDINTST_V2 BIT(23)
103#define ERRCONFIG_MCUDISACKINTST BIT(22)
104#define ERRCONFIG_VPBOUNDINTEN_V2 BIT(22)
105
106#define ERRCONFIG_STATUS_V1_MASK (ERRCONFIG_VPBOUNDINTST_V1 | \
107 ERRCONFIG_MCUACCUMINTST | \
108 ERRCONFIG_MCUVALIDINTST | \
109 ERRCONFIG_MCUBOUNDINTST | \
110 ERRCONFIG_MCUDISACKINTST)
111/* IRQSTATUS */
112#define IRQSTATUS_MCUACCUMINT BIT(3)
113#define IRQSTATUS_MCVALIDINT BIT(2)
114#define IRQSTATUS_MCBOUNDSINT BIT(1)
115#define IRQSTATUS_MCUDISABLEACKINT BIT(0)
116
117/* IRQENABLE_SET and IRQENABLE_CLEAR */
118#define IRQENABLE_MCUACCUMINT BIT(3)
119#define IRQENABLE_MCUVALIDINT BIT(2)
120#define IRQENABLE_MCUBOUNDSINT BIT(1)
121#define IRQENABLE_MCUDISABLEACKINT BIT(0)
122
123/* Common Bit values */
124
125#define SRCLKLENGTH_12MHZ_SYSCLK 0x3c
126#define SRCLKLENGTH_13MHZ_SYSCLK 0x41
127#define SRCLKLENGTH_19MHZ_SYSCLK 0x60
128#define SRCLKLENGTH_26MHZ_SYSCLK 0x82
129#define SRCLKLENGTH_38MHZ_SYSCLK 0xC0
130
131/*
132 * 3430 specific values. Maybe these should be passed from board file or
133 * pmic structures.
134 */
135#define OMAP3430_SR_ACCUMDATA 0x1f4
136
137#define OMAP3430_SR1_SENPAVGWEIGHT 0x03
138#define OMAP3430_SR1_SENNAVGWEIGHT 0x03
139
140#define OMAP3430_SR2_SENPAVGWEIGHT 0x01
141#define OMAP3430_SR2_SENNAVGWEIGHT 0x01
142
143#define OMAP3430_SR_ERRWEIGHT 0x04
144#define OMAP3430_SR_ERRMAXLIMIT 0x02
145
146struct omap_sr {
147 char *name;
148 struct list_head node;
149 struct platform_device *pdev;
150 struct omap_sr_nvalue_table *nvalue_table;
151 struct voltagedomain *voltdm;
152 struct dentry *dbg_dir;
153 unsigned int irq;
154 int srid;
155 int ip_type;
156 int nvalue_count;
157 bool autocomp_active;
158 u32 clk_length;
159 u32 err_weight;
160 u32 err_minlimit;
161 u32 err_maxlimit;
162 u32 accum_data;
163 u32 senn_avgweight;
164 u32 senp_avgweight;
165 u32 senp_mod;
166 u32 senn_mod;
167 void __iomem *base;
168};
169
170/**
171 * test_cond_timeout - busy-loop, testing a condition
172 * @cond: condition to test until it evaluates to true
173 * @timeout: maximum number of microseconds in the timeout
174 * @index: loop index (integer)
175 *
176 * Loop waiting for @cond to become true or until at least @timeout
177 * microseconds have passed. To use, define some integer @index in the
178 * calling code. After running, if @index == @timeout, then the loop has
179 * timed out.
180 *
181 * Copied from omap_test_timeout */
182#define sr_test_cond_timeout(cond, timeout, index) \
183({ \
184 for (index = 0; index < timeout; index++) { \
185 if (cond) \
186 break; \
187 udelay(1); \
188 } \
189})
190
191/**
192 * struct omap_sr_pmic_data - Strucutre to be populated by pmic code to pass
193 * pmic specific info to smartreflex driver
194 *
195 * @sr_pmic_init: API to initialize smartreflex on the PMIC side.
196 */
197struct omap_sr_pmic_data {
198 void (*sr_pmic_init) (void);
199};
200
201/**
202 * struct omap_smartreflex_dev_attr - Smartreflex Device attribute.
203 *
204 * @sensor_voltdm_name: Name of voltdomain of SR instance
205 */
206struct omap_smartreflex_dev_attr {
207 const char *sensor_voltdm_name;
208};
209
210#ifdef CONFIG_POWER_AVS_OMAP
211/*
212 * The smart reflex driver supports CLASS1 CLASS2 and CLASS3 SR.
213 * The smartreflex class driver should pass the class type.
214 * Should be used to populate the class_type field of the
215 * omap_smartreflex_class_data structure.
216 */
217#define SR_CLASS1 0x1
218#define SR_CLASS2 0x2
219#define SR_CLASS3 0x3
220
221/**
222 * struct omap_sr_class_data - Smartreflex class driver info
223 *
224 * @enable: API to enable a particular class smaartreflex.
225 * @disable: API to disable a particular class smartreflex.
226 * @configure: API to configure a particular class smartreflex.
227 * @notify: API to notify the class driver about an event in SR.
228 * Not needed for class3.
229 * @notify_flags: specify the events to be notified to the class driver
230 * @class_type: specify which smartreflex class.
231 * Can be used by the SR driver to take any class
232 * based decisions.
233 */
234struct omap_sr_class_data {
235 int (*enable)(struct omap_sr *sr);
236 int (*disable)(struct omap_sr *sr, int is_volt_reset);
237 int (*configure)(struct omap_sr *sr);
238 int (*notify)(struct omap_sr *sr, u32 status);
239 u8 notify_flags;
240 u8 class_type;
241};
242
243/**
244 * struct omap_sr_nvalue_table - Smartreflex n-target value info
245 *
246 * @efuse_offs: The offset of the efuse where n-target values are stored.
247 * @nvalue: The n-target value.
248 * @errminlimit: The value of the ERRMINLIMIT bitfield for this n-target
249 * @volt_nominal: microvolts DC that the VDD is initially programmed to
250 */
251struct omap_sr_nvalue_table {
252 u32 efuse_offs;
253 u32 nvalue;
254 u32 errminlimit;
255 unsigned long volt_nominal;
256};
257
258/**
259 * struct omap_sr_data - Smartreflex platform data.
260 *
261 * @name: instance name
262 * @ip_type: Smartreflex IP type.
263 * @senp_mod: SENPENABLE value for the sr
264 * @senn_mod: SENNENABLE value for sr
265 * @nvalue_count: Number of distinct nvalues in the nvalue table
266 * @enable_on_init: whether this sr module needs to enabled at
267 * boot up or not.
268 * @nvalue_table: table containing the efuse offsets and nvalues
269 * corresponding to them.
270 * @voltdm: Pointer to the voltage domain associated with the SR
271 */
272struct omap_sr_data {
273 const char *name;
274 int ip_type;
275 u32 senp_mod;
276 u32 senn_mod;
277 int nvalue_count;
278 bool enable_on_init;
279 struct omap_sr_nvalue_table *nvalue_table;
280 struct voltagedomain *voltdm;
281};
282
283/* Smartreflex module enable/disable interface */
284void omap_sr_enable(struct voltagedomain *voltdm);
285void omap_sr_disable(struct voltagedomain *voltdm);
286void omap_sr_disable_reset_volt(struct voltagedomain *voltdm);
287
288/* API to register the pmic specific data with the smartreflex driver. */
289void omap_sr_register_pmic(struct omap_sr_pmic_data *pmic_data);
290
291/* Smartreflex driver hooks to be called from Smartreflex class driver */
292int sr_enable(struct voltagedomain *voltdm, unsigned long volt);
293void sr_disable(struct voltagedomain *voltdm);
294int sr_configure_errgen(struct voltagedomain *voltdm);
295int sr_disable_errgen(struct voltagedomain *voltdm);
296int sr_configure_minmax(struct voltagedomain *voltdm);
297
298/* API to register the smartreflex class driver with the smartreflex driver */
299int sr_register_class(struct omap_sr_class_data *class_data);
300#else
301static inline void omap_sr_enable(struct voltagedomain *voltdm) {}
302static inline void omap_sr_disable(struct voltagedomain *voltdm) {}
303static inline void omap_sr_disable_reset_volt(
304 struct voltagedomain *voltdm) {}
305static inline void omap_sr_register_pmic(
306 struct omap_sr_pmic_data *pmic_data) {}
307#endif
308#endif
diff --git a/include/linux/prctl.h b/include/linux/prctl.h
index 3988012255dc..289760f424aa 100644
--- a/include/linux/prctl.h
+++ b/include/linux/prctl.h
@@ -141,6 +141,8 @@
141 * Changing LSM security domain is considered a new privilege. So, for example, 141 * Changing LSM security domain is considered a new privilege. So, for example,
142 * asking selinux for a specific new context (e.g. with runcon) will result 142 * asking selinux for a specific new context (e.g. with runcon) will result
143 * in execve returning -EPERM. 143 * in execve returning -EPERM.
144 *
145 * See Documentation/prctl/no_new_privs.txt for more details.
144 */ 146 */
145#define PR_SET_NO_NEW_PRIVS 38 147#define PR_SET_NO_NEW_PRIVS 38
146#define PR_GET_NO_NEW_PRIVS 39 148#define PR_GET_NO_NEW_PRIVS 39
diff --git a/include/linux/pstore.h b/include/linux/pstore.h
index e1461e143be2..c892587d9b81 100644
--- a/include/linux/pstore.h
+++ b/include/linux/pstore.h
@@ -24,14 +24,22 @@
24 24
25#include <linux/time.h> 25#include <linux/time.h>
26#include <linux/kmsg_dump.h> 26#include <linux/kmsg_dump.h>
27#include <linux/mutex.h>
28#include <linux/types.h>
29#include <linux/spinlock.h>
30#include <linux/errno.h>
27 31
28/* types */ 32/* types */
29enum pstore_type_id { 33enum pstore_type_id {
30 PSTORE_TYPE_DMESG = 0, 34 PSTORE_TYPE_DMESG = 0,
31 PSTORE_TYPE_MCE = 1, 35 PSTORE_TYPE_MCE = 1,
36 PSTORE_TYPE_CONSOLE = 2,
37 PSTORE_TYPE_FTRACE = 3,
32 PSTORE_TYPE_UNKNOWN = 255 38 PSTORE_TYPE_UNKNOWN = 255
33}; 39};
34 40
41struct module;
42
35struct pstore_info { 43struct pstore_info {
36 struct module *owner; 44 struct module *owner;
37 char *name; 45 char *name;
@@ -47,11 +55,23 @@ struct pstore_info {
47 int (*write)(enum pstore_type_id type, 55 int (*write)(enum pstore_type_id type,
48 enum kmsg_dump_reason reason, u64 *id, 56 enum kmsg_dump_reason reason, u64 *id,
49 unsigned int part, size_t size, struct pstore_info *psi); 57 unsigned int part, size_t size, struct pstore_info *psi);
58 int (*write_buf)(enum pstore_type_id type,
59 enum kmsg_dump_reason reason, u64 *id,
60 unsigned int part, const char *buf, size_t size,
61 struct pstore_info *psi);
50 int (*erase)(enum pstore_type_id type, u64 id, 62 int (*erase)(enum pstore_type_id type, u64 id,
51 struct pstore_info *psi); 63 struct pstore_info *psi);
52 void *data; 64 void *data;
53}; 65};
54 66
67
68#ifdef CONFIG_PSTORE_FTRACE
69extern void pstore_ftrace_call(unsigned long ip, unsigned long parent_ip);
70#else
71static inline void pstore_ftrace_call(unsigned long ip, unsigned long parent_ip)
72{ }
73#endif
74
55#ifdef CONFIG_PSTORE 75#ifdef CONFIG_PSTORE
56extern int pstore_register(struct pstore_info *); 76extern int pstore_register(struct pstore_info *);
57#else 77#else
diff --git a/include/linux/pstore_ram.h b/include/linux/pstore_ram.h
index 7ed7fd4dba49..098d2a838296 100644
--- a/include/linux/pstore_ram.h
+++ b/include/linux/pstore_ram.h
@@ -24,21 +24,7 @@
24#include <linux/init.h> 24#include <linux/init.h>
25 25
26struct persistent_ram_buffer; 26struct persistent_ram_buffer;
27 27struct rs_control;
28struct persistent_ram_descriptor {
29 const char *name;
30 phys_addr_t size;
31};
32
33struct persistent_ram {
34 phys_addr_t start;
35 phys_addr_t size;
36
37 int num_descs;
38 struct persistent_ram_descriptor *descs;
39
40 struct list_head node;
41};
42 28
43struct persistent_ram_zone { 29struct persistent_ram_zone {
44 phys_addr_t paddr; 30 phys_addr_t paddr;
@@ -48,7 +34,6 @@ struct persistent_ram_zone {
48 size_t buffer_size; 34 size_t buffer_size;
49 35
50 /* ECC correction */ 36 /* ECC correction */
51 bool ecc;
52 char *par_buffer; 37 char *par_buffer;
53 char *par_header; 38 char *par_header;
54 struct rs_control *rs_decoder; 39 struct rs_control *rs_decoder;
@@ -56,25 +41,21 @@ struct persistent_ram_zone {
56 int bad_blocks; 41 int bad_blocks;
57 int ecc_block_size; 42 int ecc_block_size;
58 int ecc_size; 43 int ecc_size;
59 int ecc_symsize;
60 int ecc_poly;
61 44
62 char *old_log; 45 char *old_log;
63 size_t old_log_size; 46 size_t old_log_size;
64}; 47};
65 48
66int persistent_ram_early_init(struct persistent_ram *ram); 49struct persistent_ram_zone * __devinit persistent_ram_new(phys_addr_t start,
67 50 size_t size, u32 sig,
68struct persistent_ram_zone * __init persistent_ram_new(phys_addr_t start, 51 int ecc_size);
69 size_t size,
70 bool ecc);
71void persistent_ram_free(struct persistent_ram_zone *prz); 52void persistent_ram_free(struct persistent_ram_zone *prz);
72struct persistent_ram_zone *persistent_ram_init_ringbuffer(struct device *dev, 53void persistent_ram_zap(struct persistent_ram_zone *prz);
73 bool ecc);
74 54
75int persistent_ram_write(struct persistent_ram_zone *prz, const void *s, 55int persistent_ram_write(struct persistent_ram_zone *prz, const void *s,
76 unsigned int count); 56 unsigned int count);
77 57
58void persistent_ram_save_old(struct persistent_ram_zone *prz);
78size_t persistent_ram_old_size(struct persistent_ram_zone *prz); 59size_t persistent_ram_old_size(struct persistent_ram_zone *prz);
79void *persistent_ram_old(struct persistent_ram_zone *prz); 60void *persistent_ram_old(struct persistent_ram_zone *prz);
80void persistent_ram_free_old(struct persistent_ram_zone *prz); 61void persistent_ram_free_old(struct persistent_ram_zone *prz);
@@ -91,8 +72,10 @@ struct ramoops_platform_data {
91 unsigned long mem_size; 72 unsigned long mem_size;
92 unsigned long mem_address; 73 unsigned long mem_address;
93 unsigned long record_size; 74 unsigned long record_size;
75 unsigned long console_size;
76 unsigned long ftrace_size;
94 int dump_oops; 77 int dump_oops;
95 bool ecc; 78 int ecc_size;
96}; 79};
97 80
98#endif 81#endif
diff --git a/include/linux/pxa2xx_ssp.h b/include/linux/pxa2xx_ssp.h
index 44835fb39793..f36632061c66 100644
--- a/include/linux/pxa2xx_ssp.h
+++ b/include/linux/pxa2xx_ssp.h
@@ -160,7 +160,9 @@ enum pxa_ssp_type {
160 PXA25x_SSP, /* pxa 210, 250, 255, 26x */ 160 PXA25x_SSP, /* pxa 210, 250, 255, 26x */
161 PXA25x_NSSP, /* pxa 255, 26x (including ASSP) */ 161 PXA25x_NSSP, /* pxa 255, 26x (including ASSP) */
162 PXA27x_SSP, 162 PXA27x_SSP,
163 PXA3xx_SSP,
163 PXA168_SSP, 164 PXA168_SSP,
165 PXA910_SSP,
164 CE4100_SSP, 166 CE4100_SSP,
165}; 167};
166 168
diff --git a/include/linux/quota.h b/include/linux/quota.h
index c09fa042b5ea..524ede8a160a 100644
--- a/include/linux/quota.h
+++ b/include/linux/quota.h
@@ -333,7 +333,7 @@ struct quotactl_ops {
333 int (*quota_on)(struct super_block *, int, int, struct path *); 333 int (*quota_on)(struct super_block *, int, int, struct path *);
334 int (*quota_on_meta)(struct super_block *, int, int); 334 int (*quota_on_meta)(struct super_block *, int, int);
335 int (*quota_off)(struct super_block *, int); 335 int (*quota_off)(struct super_block *, int);
336 int (*quota_sync)(struct super_block *, int, int); 336 int (*quota_sync)(struct super_block *, int);
337 int (*get_info)(struct super_block *, int, struct if_dqinfo *); 337 int (*get_info)(struct super_block *, int, struct if_dqinfo *);
338 int (*set_info)(struct super_block *, int, struct if_dqinfo *); 338 int (*set_info)(struct super_block *, int, struct if_dqinfo *);
339 int (*get_dqblk)(struct super_block *, int, qid_t, struct fs_disk_quota *); 339 int (*get_dqblk)(struct super_block *, int, qid_t, struct fs_disk_quota *);
diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h
index 17b977304a09..ec6b65feaaba 100644
--- a/include/linux/quotaops.h
+++ b/include/linux/quotaops.h
@@ -83,7 +83,8 @@ int dquot_quota_on(struct super_block *sb, int type, int format_id,
83int dquot_quota_on_mount(struct super_block *sb, char *qf_name, 83int dquot_quota_on_mount(struct super_block *sb, char *qf_name,
84 int format_id, int type); 84 int format_id, int type);
85int dquot_quota_off(struct super_block *sb, int type); 85int dquot_quota_off(struct super_block *sb, int type);
86int dquot_quota_sync(struct super_block *sb, int type, int wait); 86int dquot_writeback_dquots(struct super_block *sb, int type);
87int dquot_quota_sync(struct super_block *sb, int type);
87int dquot_get_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); 88int dquot_get_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii);
88int dquot_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); 89int dquot_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii);
89int dquot_get_dqblk(struct super_block *sb, int type, qid_t id, 90int dquot_get_dqblk(struct super_block *sb, int type, qid_t id,
@@ -255,6 +256,11 @@ static inline int dquot_resume(struct super_block *sb, int type)
255 256
256#define dquot_file_open generic_file_open 257#define dquot_file_open generic_file_open
257 258
259static inline int dquot_writeback_dquots(struct super_block *sb, int type)
260{
261 return 0;
262}
263
258#endif /* CONFIG_QUOTA */ 264#endif /* CONFIG_QUOTA */
259 265
260static inline int dquot_alloc_space_nodirty(struct inode *inode, qsize_t nr) 266static inline int dquot_alloc_space_nodirty(struct inode *inode, qsize_t nr)
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
index 26d1a47591f1..115ead2b5155 100644
--- a/include/linux/rcupdate.h
+++ b/include/linux/rcupdate.h
@@ -147,6 +147,7 @@ extern void synchronize_sched(void);
147 147
148extern void __rcu_read_lock(void); 148extern void __rcu_read_lock(void);
149extern void __rcu_read_unlock(void); 149extern void __rcu_read_unlock(void);
150extern void rcu_read_unlock_special(struct task_struct *t);
150void synchronize_rcu(void); 151void synchronize_rcu(void);
151 152
152/* 153/*
@@ -184,7 +185,6 @@ static inline int rcu_preempt_depth(void)
184/* Internal to kernel */ 185/* Internal to kernel */
185extern void rcu_sched_qs(int cpu); 186extern void rcu_sched_qs(int cpu);
186extern void rcu_bh_qs(int cpu); 187extern void rcu_bh_qs(int cpu);
187extern void rcu_preempt_note_context_switch(void);
188extern void rcu_check_callbacks(int cpu, int user); 188extern void rcu_check_callbacks(int cpu, int user);
189struct notifier_block; 189struct notifier_block;
190extern void rcu_idle_enter(void); 190extern void rcu_idle_enter(void);
@@ -256,6 +256,10 @@ static inline void destroy_rcu_head_on_stack(struct rcu_head *head)
256} 256}
257#endif /* #else !CONFIG_DEBUG_OBJECTS_RCU_HEAD */ 257#endif /* #else !CONFIG_DEBUG_OBJECTS_RCU_HEAD */
258 258
259#if defined(CONFIG_DEBUG_LOCK_ALLOC) || defined(CONFIG_SMP)
260extern int rcu_is_cpu_idle(void);
261#endif /* #if defined(CONFIG_DEBUG_LOCK_ALLOC) || defined(CONFIG_SMP) */
262
259#if defined(CONFIG_HOTPLUG_CPU) && defined(CONFIG_PROVE_RCU) 263#if defined(CONFIG_HOTPLUG_CPU) && defined(CONFIG_PROVE_RCU)
260bool rcu_lockdep_current_cpu_online(void); 264bool rcu_lockdep_current_cpu_online(void);
261#else /* #if defined(CONFIG_HOTPLUG_CPU) && defined(CONFIG_PROVE_RCU) */ 265#else /* #if defined(CONFIG_HOTPLUG_CPU) && defined(CONFIG_PROVE_RCU) */
@@ -267,15 +271,6 @@ static inline bool rcu_lockdep_current_cpu_online(void)
267 271
268#ifdef CONFIG_DEBUG_LOCK_ALLOC 272#ifdef CONFIG_DEBUG_LOCK_ALLOC
269 273
270#ifdef CONFIG_PROVE_RCU
271extern int rcu_is_cpu_idle(void);
272#else /* !CONFIG_PROVE_RCU */
273static inline int rcu_is_cpu_idle(void)
274{
275 return 0;
276}
277#endif /* else !CONFIG_PROVE_RCU */
278
279static inline void rcu_lock_acquire(struct lockdep_map *map) 274static inline void rcu_lock_acquire(struct lockdep_map *map)
280{ 275{
281 lock_acquire(map, 0, 0, 2, 1, NULL, _THIS_IP_); 276 lock_acquire(map, 0, 0, 2, 1, NULL, _THIS_IP_);
@@ -432,8 +427,7 @@ extern int rcu_my_thread_group_empty(void);
432static inline void rcu_preempt_sleep_check(void) 427static inline void rcu_preempt_sleep_check(void)
433{ 428{
434 rcu_lockdep_assert(!lock_is_held(&rcu_lock_map), 429 rcu_lockdep_assert(!lock_is_held(&rcu_lock_map),
435 "Illegal context switch in RCU read-side " 430 "Illegal context switch in RCU read-side critical section");
436 "critical section");
437} 431}
438#else /* #ifdef CONFIG_PROVE_RCU */ 432#else /* #ifdef CONFIG_PROVE_RCU */
439static inline void rcu_preempt_sleep_check(void) 433static inline void rcu_preempt_sleep_check(void)
@@ -514,10 +508,10 @@ static inline void rcu_preempt_sleep_check(void)
514 (_________p1); \ 508 (_________p1); \
515 }) 509 })
516#define __rcu_assign_pointer(p, v, space) \ 510#define __rcu_assign_pointer(p, v, space) \
517 ({ \ 511 do { \
518 smp_wmb(); \ 512 smp_wmb(); \
519 (p) = (typeof(*v) __force space *)(v); \ 513 (p) = (typeof(*v) __force space *)(v); \
520 }) 514 } while (0)
521 515
522 516
523/** 517/**
@@ -852,7 +846,7 @@ static inline notrace void rcu_read_unlock_sched_notrace(void)
852 * 846 *
853 * Assigns the specified value to the specified RCU-protected 847 * Assigns the specified value to the specified RCU-protected
854 * pointer, ensuring that any concurrent RCU readers will see 848 * pointer, ensuring that any concurrent RCU readers will see
855 * any prior initialization. Returns the value assigned. 849 * any prior initialization.
856 * 850 *
857 * Inserts memory barriers on architectures that require them 851 * Inserts memory barriers on architectures that require them
858 * (which is most of them), and also prevents the compiler from 852 * (which is most of them), and also prevents the compiler from
@@ -904,25 +898,17 @@ static inline notrace void rcu_read_unlock_sched_notrace(void)
904 * the reader-accessible portions of the linked structure. 898 * the reader-accessible portions of the linked structure.
905 */ 899 */
906#define RCU_INIT_POINTER(p, v) \ 900#define RCU_INIT_POINTER(p, v) \
907 p = (typeof(*v) __force __rcu *)(v) 901 do { \
908 902 p = (typeof(*v) __force __rcu *)(v); \
909static __always_inline bool __is_kfree_rcu_offset(unsigned long offset) 903 } while (0)
910{
911 return offset < 4096;
912}
913
914static __always_inline
915void __kfree_rcu(struct rcu_head *head, unsigned long offset)
916{
917 typedef void (*rcu_callback)(struct rcu_head *);
918
919 BUILD_BUG_ON(!__builtin_constant_p(offset));
920
921 /* See the kfree_rcu() header comment. */
922 BUILD_BUG_ON(!__is_kfree_rcu_offset(offset));
923 904
924 kfree_call_rcu(head, (rcu_callback)offset); 905/**
925} 906 * RCU_POINTER_INITIALIZER() - statically initialize an RCU protected pointer
907 *
908 * GCC-style initialization for an RCU-protected pointer in a structure field.
909 */
910#define RCU_POINTER_INITIALIZER(p, v) \
911 .p = (typeof(*v) __force __rcu *)(v)
926 912
927/* 913/*
928 * Does the specified offset indicate that the corresponding rcu_head 914 * Does the specified offset indicate that the corresponding rcu_head
@@ -936,7 +922,7 @@ void __kfree_rcu(struct rcu_head *head, unsigned long offset)
936#define __kfree_rcu(head, offset) \ 922#define __kfree_rcu(head, offset) \
937 do { \ 923 do { \
938 BUILD_BUG_ON(!__is_kfree_rcu_offset(offset)); \ 924 BUILD_BUG_ON(!__is_kfree_rcu_offset(offset)); \
939 call_rcu(head, (void (*)(struct rcu_head *))(unsigned long)(offset)); \ 925 kfree_call_rcu(head, (void (*)(struct rcu_head *))(unsigned long)(offset)); \
940 } while (0) 926 } while (0)
941 927
942/** 928/**
diff --git a/include/linux/rcutiny.h b/include/linux/rcutiny.h
index 854dc4c5c271..4e56a9c69a35 100644
--- a/include/linux/rcutiny.h
+++ b/include/linux/rcutiny.h
@@ -87,6 +87,10 @@ static inline void kfree_call_rcu(struct rcu_head *head,
87 87
88#ifdef CONFIG_TINY_RCU 88#ifdef CONFIG_TINY_RCU
89 89
90static inline void rcu_preempt_note_context_switch(void)
91{
92}
93
90static inline int rcu_needs_cpu(int cpu, unsigned long *delta_jiffies) 94static inline int rcu_needs_cpu(int cpu, unsigned long *delta_jiffies)
91{ 95{
92 *delta_jiffies = ULONG_MAX; 96 *delta_jiffies = ULONG_MAX;
@@ -95,6 +99,7 @@ static inline int rcu_needs_cpu(int cpu, unsigned long *delta_jiffies)
95 99
96#else /* #ifdef CONFIG_TINY_RCU */ 100#else /* #ifdef CONFIG_TINY_RCU */
97 101
102void rcu_preempt_note_context_switch(void);
98int rcu_preempt_needs_cpu(void); 103int rcu_preempt_needs_cpu(void);
99 104
100static inline int rcu_needs_cpu(int cpu, unsigned long *delta_jiffies) 105static inline int rcu_needs_cpu(int cpu, unsigned long *delta_jiffies)
@@ -108,6 +113,7 @@ static inline int rcu_needs_cpu(int cpu, unsigned long *delta_jiffies)
108static inline void rcu_note_context_switch(int cpu) 113static inline void rcu_note_context_switch(int cpu)
109{ 114{
110 rcu_sched_qs(cpu); 115 rcu_sched_qs(cpu);
116 rcu_preempt_note_context_switch();
111} 117}
112 118
113/* 119/*
diff --git a/include/linux/regmap.h b/include/linux/regmap.h
index 56af22ec9aba..7f7e00df3adf 100644
--- a/include/linux/regmap.h
+++ b/include/linux/regmap.h
@@ -14,12 +14,14 @@
14 */ 14 */
15 15
16#include <linux/list.h> 16#include <linux/list.h>
17#include <linux/rbtree.h>
17 18
18struct module; 19struct module;
19struct device; 20struct device;
20struct i2c_client; 21struct i2c_client;
21struct spi_device; 22struct spi_device;
22struct regmap; 23struct regmap;
24struct regmap_range_cfg;
23 25
24/* An enum of all the supported cache types */ 26/* An enum of all the supported cache types */
25enum regcache_type { 27enum regcache_type {
@@ -43,6 +45,14 @@ struct reg_default {
43 45
44#ifdef CONFIG_REGMAP 46#ifdef CONFIG_REGMAP
45 47
48enum regmap_endian {
49 /* Unspecified -> 0 -> Backwards compatible default */
50 REGMAP_ENDIAN_DEFAULT = 0,
51 REGMAP_ENDIAN_BIG,
52 REGMAP_ENDIAN_LITTLE,
53 REGMAP_ENDIAN_NATIVE,
54};
55
46/** 56/**
47 * Configuration for the register map of a device. 57 * Configuration for the register map of a device.
48 * 58 *
@@ -84,6 +94,15 @@ struct reg_default {
84 * @reg_defaults_raw: Power on reset values for registers (for use with 94 * @reg_defaults_raw: Power on reset values for registers (for use with
85 * register cache support). 95 * register cache support).
86 * @num_reg_defaults_raw: Number of elements in reg_defaults_raw. 96 * @num_reg_defaults_raw: Number of elements in reg_defaults_raw.
97 * @reg_format_endian: Endianness for formatted register addresses. If this is
98 * DEFAULT, the @reg_format_endian_default value from the
99 * regmap bus is used.
100 * @val_format_endian: Endianness for formatted register values. If this is
101 * DEFAULT, the @reg_format_endian_default value from the
102 * regmap bus is used.
103 *
104 * @ranges: Array of configuration entries for virtual address ranges.
105 * @num_ranges: Number of range configuration entries.
87 */ 106 */
88struct regmap_config { 107struct regmap_config {
89 const char *name; 108 const char *name;
@@ -109,6 +128,43 @@ struct regmap_config {
109 u8 write_flag_mask; 128 u8 write_flag_mask;
110 129
111 bool use_single_rw; 130 bool use_single_rw;
131
132 enum regmap_endian reg_format_endian;
133 enum regmap_endian val_format_endian;
134
135 const struct regmap_range_cfg *ranges;
136 unsigned int n_ranges;
137};
138
139/**
140 * Configuration for indirectly accessed or paged registers.
141 * Registers, mapped to this virtual range, are accessed in two steps:
142 * 1. page selector register update;
143 * 2. access through data window registers.
144 *
145 * @range_min: Address of the lowest register address in virtual range.
146 * @range_max: Address of the highest register in virtual range.
147 *
148 * @page_sel_reg: Register with selector field.
149 * @page_sel_mask: Bit shift for selector value.
150 * @page_sel_shift: Bit mask for selector value.
151 *
152 * @window_start: Address of first (lowest) register in data window.
153 * @window_len: Number of registers in data window.
154 */
155struct regmap_range_cfg {
156 /* Registers of virtual address range */
157 unsigned int range_min;
158 unsigned int range_max;
159
160 /* Page selector for indirect addressing */
161 unsigned int selector_reg;
162 unsigned int selector_mask;
163 int selector_shift;
164
165 /* Data window (per each page) */
166 unsigned int window_start;
167 unsigned int window_len;
112}; 168};
113 169
114typedef int (*regmap_hw_write)(void *context, const void *data, 170typedef int (*regmap_hw_write)(void *context, const void *data,
@@ -133,6 +189,12 @@ typedef void (*regmap_hw_free_context)(void *context);
133 * data. 189 * data.
134 * @read_flag_mask: Mask to be set in the top byte of the register when doing 190 * @read_flag_mask: Mask to be set in the top byte of the register when doing
135 * a read. 191 * a read.
192 * @reg_format_endian_default: Default endianness for formatted register
193 * addresses. Used when the regmap_config specifies DEFAULT. If this is
194 * DEFAULT, BIG is assumed.
195 * @val_format_endian_default: Default endianness for formatted register
196 * values. Used when the regmap_config specifies DEFAULT. If this is
197 * DEFAULT, BIG is assumed.
136 */ 198 */
137struct regmap_bus { 199struct regmap_bus {
138 bool fast_io; 200 bool fast_io;
@@ -141,6 +203,8 @@ struct regmap_bus {
141 regmap_hw_read read; 203 regmap_hw_read read;
142 regmap_hw_free_context free_context; 204 regmap_hw_free_context free_context;
143 u8 read_flag_mask; 205 u8 read_flag_mask;
206 enum regmap_endian reg_format_endian_default;
207 enum regmap_endian val_format_endian_default;
144}; 208};
145 209
146struct regmap *regmap_init(struct device *dev, 210struct regmap *regmap_init(struct device *dev,
@@ -219,6 +283,7 @@ struct regmap_irq {
219 * @status_base: Base status register address. 283 * @status_base: Base status register address.
220 * @mask_base: Base mask register address. 284 * @mask_base: Base mask register address.
221 * @ack_base: Base ack address. If zero then the chip is clear on read. 285 * @ack_base: Base ack address. If zero then the chip is clear on read.
286 * @wake_base: Base address for wake enables. If zero unsupported.
222 * @irq_reg_stride: Stride to use for chips where registers are not contiguous. 287 * @irq_reg_stride: Stride to use for chips where registers are not contiguous.
223 * 288 *
224 * @num_regs: Number of registers in each control bank. 289 * @num_regs: Number of registers in each control bank.
@@ -232,6 +297,7 @@ struct regmap_irq_chip {
232 unsigned int status_base; 297 unsigned int status_base;
233 unsigned int mask_base; 298 unsigned int mask_base;
234 unsigned int ack_base; 299 unsigned int ack_base;
300 unsigned int wake_base;
235 unsigned int irq_reg_stride; 301 unsigned int irq_reg_stride;
236 302
237 int num_regs; 303 int num_regs;
@@ -243,7 +309,7 @@ struct regmap_irq_chip {
243struct regmap_irq_chip_data; 309struct regmap_irq_chip_data;
244 310
245int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags, 311int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags,
246 int irq_base, struct regmap_irq_chip *chip, 312 int irq_base, const struct regmap_irq_chip *chip,
247 struct regmap_irq_chip_data **data); 313 struct regmap_irq_chip_data **data);
248void regmap_del_irq_chip(int irq, struct regmap_irq_chip_data *data); 314void regmap_del_irq_chip(int irq, struct regmap_irq_chip_data *data);
249int regmap_irq_chip_get_base(struct regmap_irq_chip_data *data); 315int regmap_irq_chip_get_base(struct regmap_irq_chip_data *data);
@@ -361,7 +427,6 @@ static inline int regmap_register_patch(struct regmap *map,
361static inline struct regmap *dev_get_regmap(struct device *dev, 427static inline struct regmap *dev_get_regmap(struct device *dev,
362 const char *name) 428 const char *name)
363{ 429{
364 WARN_ONCE(1, "regmap API is disabled");
365 return NULL; 430 return NULL;
366} 431}
367 432
diff --git a/include/linux/regulator/consumer.h b/include/linux/regulator/consumer.h
index 4ed1b30ac5fc..da339fd8c755 100644
--- a/include/linux/regulator/consumer.h
+++ b/include/linux/regulator/consumer.h
@@ -291,6 +291,12 @@ static inline int regulator_set_voltage(struct regulator *regulator,
291 291
292static inline int regulator_get_voltage(struct regulator *regulator) 292static inline int regulator_get_voltage(struct regulator *regulator)
293{ 293{
294 return -EINVAL;
295}
296
297static inline int regulator_is_supported_voltage(struct regulator *regulator,
298 int min_uV, int max_uV)
299{
294 return 0; 300 return 0;
295} 301}
296 302
diff --git a/include/linux/regulator/driver.h b/include/linux/regulator/driver.h
index b0432cc2b169..bac4c871f3bd 100644
--- a/include/linux/regulator/driver.h
+++ b/include/linux/regulator/driver.h
@@ -32,6 +32,8 @@ enum regulator_status {
32 REGULATOR_STATUS_NORMAL, 32 REGULATOR_STATUS_NORMAL,
33 REGULATOR_STATUS_IDLE, 33 REGULATOR_STATUS_IDLE,
34 REGULATOR_STATUS_STANDBY, 34 REGULATOR_STATUS_STANDBY,
35 /* in case that any other status doesn't apply */
36 REGULATOR_STATUS_UNDEFINED,
35}; 37};
36 38
37/** 39/**
@@ -67,6 +69,8 @@ enum regulator_status {
67 * 69 *
68 * @enable_time: Time taken for the regulator voltage output voltage to 70 * @enable_time: Time taken for the regulator voltage output voltage to
69 * stabilise after being enabled, in microseconds. 71 * stabilise after being enabled, in microseconds.
72 * @set_ramp_delay: Set the ramp delay for the regulator. The driver should
73 * select ramp delay equal to or less than(closest) ramp_delay.
70 * @set_voltage_time_sel: Time taken for the regulator voltage output voltage 74 * @set_voltage_time_sel: Time taken for the regulator voltage output voltage
71 * to stabilise after being set to a new value, in microseconds. 75 * to stabilise after being set to a new value, in microseconds.
72 * The function provides the from and to voltage selector, the 76 * The function provides the from and to voltage selector, the
@@ -113,6 +117,7 @@ struct regulator_ops {
113 117
114 /* Time taken to enable or set voltage on the regulator */ 118 /* Time taken to enable or set voltage on the regulator */
115 int (*enable_time) (struct regulator_dev *); 119 int (*enable_time) (struct regulator_dev *);
120 int (*set_ramp_delay) (struct regulator_dev *, int ramp_delay);
116 int (*set_voltage_time_sel) (struct regulator_dev *, 121 int (*set_voltage_time_sel) (struct regulator_dev *,
117 unsigned int old_selector, 122 unsigned int old_selector,
118 unsigned int new_selector); 123 unsigned int new_selector);
@@ -170,11 +175,15 @@ enum regulator_type {
170 * 175 *
171 * @min_uV: Voltage given by the lowest selector (if linear mapping) 176 * @min_uV: Voltage given by the lowest selector (if linear mapping)
172 * @uV_step: Voltage increase with each selector (if linear mapping) 177 * @uV_step: Voltage increase with each selector (if linear mapping)
178 * @ramp_delay: Time to settle down after voltage change (unit: uV/us)
179 * @volt_table: Voltage mapping table (if table based mapping)
173 * 180 *
174 * @vsel_reg: Register for selector when using regulator_regmap_X_voltage_ 181 * @vsel_reg: Register for selector when using regulator_regmap_X_voltage_
175 * @vsel_mask: Mask for register bitfield used for selector 182 * @vsel_mask: Mask for register bitfield used for selector
176 * @enable_reg: Register for control when using regmap enable/disable ops 183 * @enable_reg: Register for control when using regmap enable/disable ops
177 * @enable_mask: Mask for control when using regmap enable/disable ops 184 * @enable_mask: Mask for control when using regmap enable/disable ops
185 *
186 * @enable_time: Time taken for initial enable of regulator (in uS).
178 */ 187 */
179struct regulator_desc { 188struct regulator_desc {
180 const char *name; 189 const char *name;
@@ -188,11 +197,16 @@ struct regulator_desc {
188 197
189 unsigned int min_uV; 198 unsigned int min_uV;
190 unsigned int uV_step; 199 unsigned int uV_step;
200 unsigned int ramp_delay;
201
202 const unsigned int *volt_table;
191 203
192 unsigned int vsel_reg; 204 unsigned int vsel_reg;
193 unsigned int vsel_mask; 205 unsigned int vsel_mask;
194 unsigned int enable_reg; 206 unsigned int enable_reg;
195 unsigned int enable_mask; 207 unsigned int enable_mask;
208
209 unsigned int enable_time;
196}; 210};
197 211
198/** 212/**
@@ -208,6 +222,9 @@ struct regulator_desc {
208 * @of_node: OpenFirmware node to parse for device tree bindings (may be 222 * @of_node: OpenFirmware node to parse for device tree bindings (may be
209 * NULL). 223 * NULL).
210 * @regmap: regmap to use for core regmap helpers 224 * @regmap: regmap to use for core regmap helpers
225 * @ena_gpio: GPIO controlling regulator enable.
226 * @ena_gpio_invert: Sense for GPIO enable control.
227 * @ena_gpio_flags: Flags to use when calling gpio_request_one()
211 */ 228 */
212struct regulator_config { 229struct regulator_config {
213 struct device *dev; 230 struct device *dev;
@@ -215,6 +232,10 @@ struct regulator_config {
215 void *driver_data; 232 void *driver_data;
216 struct device_node *of_node; 233 struct device_node *of_node;
217 struct regmap *regmap; 234 struct regmap *regmap;
235
236 int ena_gpio;
237 unsigned int ena_gpio_invert:1;
238 unsigned int ena_gpio_flags;
218}; 239};
219 240
220/* 241/*
@@ -253,6 +274,10 @@ struct regulator_dev {
253 void *reg_data; /* regulator_dev data */ 274 void *reg_data; /* regulator_dev data */
254 275
255 struct dentry *debugfs; 276 struct dentry *debugfs;
277
278 int ena_gpio;
279 unsigned int ena_gpio_invert:1;
280 unsigned int ena_gpio_state:1;
256}; 281};
257 282
258struct regulator_dev * 283struct regulator_dev *
@@ -271,6 +296,8 @@ int regulator_mode_to_status(unsigned int);
271 296
272int regulator_list_voltage_linear(struct regulator_dev *rdev, 297int regulator_list_voltage_linear(struct regulator_dev *rdev,
273 unsigned int selector); 298 unsigned int selector);
299int regulator_list_voltage_table(struct regulator_dev *rdev,
300 unsigned int selector);
274int regulator_map_voltage_linear(struct regulator_dev *rdev, 301int regulator_map_voltage_linear(struct regulator_dev *rdev,
275 int min_uV, int max_uV); 302 int min_uV, int max_uV);
276int regulator_map_voltage_iterate(struct regulator_dev *rdev, 303int regulator_map_voltage_iterate(struct regulator_dev *rdev,
@@ -280,6 +307,9 @@ int regulator_set_voltage_sel_regmap(struct regulator_dev *rdev, unsigned sel);
280int regulator_is_enabled_regmap(struct regulator_dev *rdev); 307int regulator_is_enabled_regmap(struct regulator_dev *rdev);
281int regulator_enable_regmap(struct regulator_dev *rdev); 308int regulator_enable_regmap(struct regulator_dev *rdev);
282int regulator_disable_regmap(struct regulator_dev *rdev); 309int regulator_disable_regmap(struct regulator_dev *rdev);
310int regulator_set_voltage_time_sel(struct regulator_dev *rdev,
311 unsigned int old_selector,
312 unsigned int new_selector);
283 313
284void *regulator_get_init_drvdata(struct regulator_init_data *reg_init_data); 314void *regulator_get_init_drvdata(struct regulator_init_data *reg_init_data);
285 315
diff --git a/include/linux/regulator/fixed.h b/include/linux/regulator/fixed.h
index f83f7440b488..48918be649d4 100644
--- a/include/linux/regulator/fixed.h
+++ b/include/linux/regulator/fixed.h
@@ -22,6 +22,7 @@ struct regulator_init_data;
22/** 22/**
23 * struct fixed_voltage_config - fixed_voltage_config structure 23 * struct fixed_voltage_config - fixed_voltage_config structure
24 * @supply_name: Name of the regulator supply 24 * @supply_name: Name of the regulator supply
25 * @input_supply: Name of the input regulator supply
25 * @microvolts: Output voltage of regulator 26 * @microvolts: Output voltage of regulator
26 * @gpio: GPIO to use for enable control 27 * @gpio: GPIO to use for enable control
27 * set to -EINVAL if not used 28 * set to -EINVAL if not used
@@ -46,6 +47,7 @@ struct regulator_init_data;
46 */ 47 */
47struct fixed_voltage_config { 48struct fixed_voltage_config {
48 const char *supply_name; 49 const char *supply_name;
50 const char *input_supply;
49 int microvolts; 51 int microvolts;
50 int gpio; 52 int gpio;
51 unsigned startup_delay; 53 unsigned startup_delay;
@@ -58,14 +60,17 @@ struct fixed_voltage_config {
58struct regulator_consumer_supply; 60struct regulator_consumer_supply;
59 61
60#if IS_ENABLED(CONFIG_REGULATOR) 62#if IS_ENABLED(CONFIG_REGULATOR)
61struct platform_device *regulator_register_fixed(int id, 63struct platform_device *regulator_register_always_on(int id, const char *name,
62 struct regulator_consumer_supply *supplies, int num_supplies); 64 struct regulator_consumer_supply *supplies, int num_supplies, int uv);
63#else 65#else
64static inline struct platform_device *regulator_register_fixed(int id, 66static inline struct platform_device *regulator_register_always_on(int id, const char *name,
65 struct regulator_consumer_supply *supplies, int num_supplies) 67 struct regulator_consumer_supply *supplies, int num_supplies, int uv)
66{ 68{
67 return NULL; 69 return NULL;
68} 70}
69#endif 71#endif
70 72
73#define regulator_register_fixed(id, s, ns) regulator_register_always_on(id, \
74 "fixed-dummy", s, ns, 0)
75
71#endif 76#endif
diff --git a/include/linux/regulator/lp872x.h b/include/linux/regulator/lp872x.h
new file mode 100644
index 000000000000..132e05c46661
--- /dev/null
+++ b/include/linux/regulator/lp872x.h
@@ -0,0 +1,90 @@
1/*
2 * Copyright 2012 Texas Instruments
3 *
4 * Author: Milo(Woogyom) Kim <milo.kim@ti.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 */
11
12#ifndef __LP872X_REGULATOR_H__
13#define __LP872X_REGULATOR_H__
14
15#include <linux/regulator/machine.h>
16#include <linux/platform_device.h>
17#include <linux/gpio.h>
18
19#define LP872X_MAX_REGULATORS 9
20
21enum lp872x_regulator_id {
22 LP8720_ID_BASE,
23 LP8720_ID_LDO1 = LP8720_ID_BASE,
24 LP8720_ID_LDO2,
25 LP8720_ID_LDO3,
26 LP8720_ID_LDO4,
27 LP8720_ID_LDO5,
28 LP8720_ID_BUCK,
29
30 LP8725_ID_BASE,
31 LP8725_ID_LDO1 = LP8725_ID_BASE,
32 LP8725_ID_LDO2,
33 LP8725_ID_LDO3,
34 LP8725_ID_LDO4,
35 LP8725_ID_LDO5,
36 LP8725_ID_LILO1,
37 LP8725_ID_LILO2,
38 LP8725_ID_BUCK1,
39 LP8725_ID_BUCK2,
40
41 LP872X_ID_MAX,
42};
43
44enum lp872x_dvs_state {
45 DVS_LOW = GPIOF_OUT_INIT_LOW,
46 DVS_HIGH = GPIOF_OUT_INIT_HIGH,
47};
48
49enum lp872x_dvs_sel {
50 SEL_V1,
51 SEL_V2,
52};
53
54/**
55 * lp872x_dvs
56 * @gpio : gpio pin number for dvs control
57 * @vsel : dvs selector for buck v1 or buck v2 register
58 * @init_state : initial dvs pin state
59 */
60struct lp872x_dvs {
61 int gpio;
62 enum lp872x_dvs_sel vsel;
63 enum lp872x_dvs_state init_state;
64};
65
66/**
67 * lp872x_regdata
68 * @id : regulator id
69 * @init_data : init data for each regulator
70 */
71struct lp872x_regulator_data {
72 enum lp872x_regulator_id id;
73 struct regulator_init_data *init_data;
74};
75
76/**
77 * lp872x_platform_data
78 * @general_config : the value of LP872X_GENERAL_CFG register
79 * @update_config : if LP872X_GENERAL_CFG register is updated, set true
80 * @regulator_data : platform regulator id and init data
81 * @dvs : dvs data for buck voltage control
82 */
83struct lp872x_platform_data {
84 u8 general_config;
85 bool update_config;
86 struct lp872x_regulator_data regulator_data[LP872X_MAX_REGULATORS];
87 struct lp872x_dvs *dvs;
88};
89
90#endif
diff --git a/include/linux/regulator/machine.h b/include/linux/regulator/machine.h
index b02108446be7..40dd0a394cfa 100644
--- a/include/linux/regulator/machine.h
+++ b/include/linux/regulator/machine.h
@@ -92,6 +92,7 @@ struct regulator_state {
92 * mode. 92 * mode.
93 * @initial_state: Suspend state to set by default. 93 * @initial_state: Suspend state to set by default.
94 * @initial_mode: Mode to set at startup. 94 * @initial_mode: Mode to set at startup.
95 * @ramp_delay: Time to settle down after voltage change (unit: uV/us)
95 */ 96 */
96struct regulation_constraints { 97struct regulation_constraints {
97 98
@@ -125,6 +126,8 @@ struct regulation_constraints {
125 /* mode to set on startup */ 126 /* mode to set on startup */
126 unsigned int initial_mode; 127 unsigned int initial_mode;
127 128
129 unsigned int ramp_delay;
130
128 /* constraint flags */ 131 /* constraint flags */
129 unsigned always_on:1; /* regulator never off when system is on */ 132 unsigned always_on:1; /* regulator never off when system is on */
130 unsigned boot_on:1; /* bootloader/firmware enabled regulator */ 133 unsigned boot_on:1; /* bootloader/firmware enabled regulator */
diff --git a/include/linux/rpmsg.h b/include/linux/rpmsg.h
index a8e50e44203c..82a673905edb 100644
--- a/include/linux/rpmsg.h
+++ b/include/linux/rpmsg.h
@@ -38,6 +38,8 @@
38#include <linux/types.h> 38#include <linux/types.h>
39#include <linux/device.h> 39#include <linux/device.h>
40#include <linux/mod_devicetable.h> 40#include <linux/mod_devicetable.h>
41#include <linux/kref.h>
42#include <linux/mutex.h>
41 43
42/* The feature bitmap for virtio rpmsg */ 44/* The feature bitmap for virtio rpmsg */
43#define VIRTIO_RPMSG_F_NS 0 /* RP supports name service notifications */ 45#define VIRTIO_RPMSG_F_NS 0 /* RP supports name service notifications */
@@ -120,7 +122,9 @@ typedef void (*rpmsg_rx_cb_t)(struct rpmsg_channel *, void *, int, void *, u32);
120/** 122/**
121 * struct rpmsg_endpoint - binds a local rpmsg address to its user 123 * struct rpmsg_endpoint - binds a local rpmsg address to its user
122 * @rpdev: rpmsg channel device 124 * @rpdev: rpmsg channel device
125 * @refcount: when this drops to zero, the ept is deallocated
123 * @cb: rx callback handler 126 * @cb: rx callback handler
127 * @cb_lock: must be taken before accessing/changing @cb
124 * @addr: local rpmsg address 128 * @addr: local rpmsg address
125 * @priv: private data for the driver's use 129 * @priv: private data for the driver's use
126 * 130 *
@@ -140,7 +144,9 @@ typedef void (*rpmsg_rx_cb_t)(struct rpmsg_channel *, void *, int, void *, u32);
140 */ 144 */
141struct rpmsg_endpoint { 145struct rpmsg_endpoint {
142 struct rpmsg_channel *rpdev; 146 struct rpmsg_channel *rpdev;
147 struct kref refcount;
143 rpmsg_rx_cb_t cb; 148 rpmsg_rx_cb_t cb;
149 struct mutex cb_lock;
144 u32 addr; 150 u32 addr;
145 void *priv; 151 void *priv;
146}; 152};
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h
index 2c1de8982c85..db71c4ad8624 100644
--- a/include/linux/rtnetlink.h
+++ b/include/linux/rtnetlink.h
@@ -612,12 +612,6 @@ struct tcamsg {
612#include <linux/mutex.h> 612#include <linux/mutex.h>
613#include <linux/netdevice.h> 613#include <linux/netdevice.h>
614 614
615static __inline__ int rtattr_strcmp(const struct rtattr *rta, const char *str)
616{
617 int len = strlen(str) + 1;
618 return len > rta->rta_len || memcmp(RTA_DATA(rta), str, len);
619}
620
621extern int rtnetlink_send(struct sk_buff *skb, struct net *net, u32 pid, u32 group, int echo); 615extern int rtnetlink_send(struct sk_buff *skb, struct net *net, u32 pid, u32 group, int echo);
622extern int rtnl_unicast(struct sk_buff *skb, struct net *net, u32 pid); 616extern int rtnl_unicast(struct sk_buff *skb, struct net *net, u32 pid);
623extern void rtnl_notify(struct sk_buff *skb, struct net *net, u32 pid, 617extern void rtnl_notify(struct sk_buff *skb, struct net *net, u32 pid,
@@ -625,124 +619,7 @@ extern void rtnl_notify(struct sk_buff *skb, struct net *net, u32 pid,
625extern void rtnl_set_sk_err(struct net *net, u32 group, int error); 619extern void rtnl_set_sk_err(struct net *net, u32 group, int error);
626extern int rtnetlink_put_metrics(struct sk_buff *skb, u32 *metrics); 620extern int rtnetlink_put_metrics(struct sk_buff *skb, u32 *metrics);
627extern int rtnl_put_cacheinfo(struct sk_buff *skb, struct dst_entry *dst, 621extern int rtnl_put_cacheinfo(struct sk_buff *skb, struct dst_entry *dst,
628 u32 id, u32 ts, u32 tsage, long expires, 622 u32 id, long expires, u32 error);
629 u32 error);
630
631extern void __rta_fill(struct sk_buff *skb, int attrtype, int attrlen, const void *data);
632
633#define RTA_PUT(skb, attrtype, attrlen, data) \
634({ if (unlikely(skb_tailroom(skb) < (int)RTA_SPACE(attrlen))) \
635 goto rtattr_failure; \
636 __rta_fill(skb, attrtype, attrlen, data); })
637
638#define RTA_APPEND(skb, attrlen, data) \
639({ if (unlikely(skb_tailroom(skb) < (int)(attrlen))) \
640 goto rtattr_failure; \
641 memcpy(skb_put(skb, attrlen), data, attrlen); })
642
643#define RTA_PUT_NOHDR(skb, attrlen, data) \
644({ RTA_APPEND(skb, RTA_ALIGN(attrlen), data); \
645 memset(skb_tail_pointer(skb) - (RTA_ALIGN(attrlen) - attrlen), 0, \
646 RTA_ALIGN(attrlen) - attrlen); })
647
648#define RTA_PUT_U8(skb, attrtype, value) \
649({ u8 _tmp = (value); \
650 RTA_PUT(skb, attrtype, sizeof(u8), &_tmp); })
651
652#define RTA_PUT_U16(skb, attrtype, value) \
653({ u16 _tmp = (value); \
654 RTA_PUT(skb, attrtype, sizeof(u16), &_tmp); })
655
656#define RTA_PUT_U32(skb, attrtype, value) \
657({ u32 _tmp = (value); \
658 RTA_PUT(skb, attrtype, sizeof(u32), &_tmp); })
659
660#define RTA_PUT_U64(skb, attrtype, value) \
661({ u64 _tmp = (value); \
662 RTA_PUT(skb, attrtype, sizeof(u64), &_tmp); })
663
664#define RTA_PUT_SECS(skb, attrtype, value) \
665 RTA_PUT_U64(skb, attrtype, (value) / HZ)
666
667#define RTA_PUT_MSECS(skb, attrtype, value) \
668 RTA_PUT_U64(skb, attrtype, jiffies_to_msecs(value))
669
670#define RTA_PUT_STRING(skb, attrtype, value) \
671 RTA_PUT(skb, attrtype, strlen(value) + 1, value)
672
673#define RTA_PUT_FLAG(skb, attrtype) \
674 RTA_PUT(skb, attrtype, 0, NULL);
675
676#define RTA_NEST(skb, type) \
677({ struct rtattr *__start = (struct rtattr *)skb_tail_pointer(skb); \
678 RTA_PUT(skb, type, 0, NULL); \
679 __start; })
680
681#define RTA_NEST_END(skb, start) \
682({ (start)->rta_len = skb_tail_pointer(skb) - (unsigned char *)(start); \
683 (skb)->len; })
684
685#define RTA_NEST_COMPAT(skb, type, attrlen, data) \
686({ struct rtattr *__start = (struct rtattr *)skb_tail_pointer(skb); \
687 RTA_PUT(skb, type, attrlen, data); \
688 RTA_NEST(skb, type); \
689 __start; })
690
691#define RTA_NEST_COMPAT_END(skb, start) \
692({ struct rtattr *__nest = (void *)(start) + NLMSG_ALIGN((start)->rta_len); \
693 (start)->rta_len = skb_tail_pointer(skb) - (unsigned char *)(start); \
694 RTA_NEST_END(skb, __nest); \
695 (skb)->len; })
696
697#define RTA_NEST_CANCEL(skb, start) \
698({ if (start) \
699 skb_trim(skb, (unsigned char *) (start) - (skb)->data); \
700 -1; })
701
702#define RTA_GET_U8(rta) \
703({ if (!rta || RTA_PAYLOAD(rta) < sizeof(u8)) \
704 goto rtattr_failure; \
705 *(u8 *) RTA_DATA(rta); })
706
707#define RTA_GET_U16(rta) \
708({ if (!rta || RTA_PAYLOAD(rta) < sizeof(u16)) \
709 goto rtattr_failure; \
710 *(u16 *) RTA_DATA(rta); })
711
712#define RTA_GET_U32(rta) \
713({ if (!rta || RTA_PAYLOAD(rta) < sizeof(u32)) \
714 goto rtattr_failure; \
715 *(u32 *) RTA_DATA(rta); })
716
717#define RTA_GET_U64(rta) \
718({ u64 _tmp; \
719 if (!rta || RTA_PAYLOAD(rta) < sizeof(u64)) \
720 goto rtattr_failure; \
721 memcpy(&_tmp, RTA_DATA(rta), sizeof(_tmp)); \
722 _tmp; })
723
724#define RTA_GET_FLAG(rta) (!!(rta))
725
726#define RTA_GET_SECS(rta) ((unsigned long) RTA_GET_U64(rta) * HZ)
727#define RTA_GET_MSECS(rta) (msecs_to_jiffies((unsigned long) RTA_GET_U64(rta)))
728
729static inline struct rtattr *
730__rta_reserve(struct sk_buff *skb, int attrtype, int attrlen)
731{
732 struct rtattr *rta;
733 int size = RTA_LENGTH(attrlen);
734
735 rta = (struct rtattr*)skb_put(skb, RTA_ALIGN(size));
736 rta->rta_type = attrtype;
737 rta->rta_len = size;
738 memset(RTA_DATA(rta) + attrlen, 0, RTA_ALIGN(size) - size);
739 return rta;
740}
741
742#define __RTA_PUT(skb, attrtype, attrlen) \
743({ if (unlikely(skb_tailroom(skb) < (int)RTA_SPACE(attrlen))) \
744 goto rtattr_failure; \
745 __rta_reserve(skb, attrtype, attrlen); })
746 623
747extern void rtmsg_ifinfo(int type, struct net_device *dev, unsigned change); 624extern void rtmsg_ifinfo(int type, struct net_device *dev, unsigned change);
748 625
@@ -794,13 +671,6 @@ extern void __rtnl_unlock(void);
794 } \ 671 } \
795} while(0) 672} while(0)
796 673
797static inline u32 rtm_get_table(struct rtattr **rta, u8 table)
798{
799 return RTA_GET_U32(rta[RTA_TABLE-1]);
800rtattr_failure:
801 return table;
802}
803
804extern int ndo_dflt_fdb_dump(struct sk_buff *skb, 674extern int ndo_dflt_fdb_dump(struct sk_buff *skb,
805 struct netlink_callback *cb, 675 struct netlink_callback *cb,
806 struct net_device *dev, 676 struct net_device *dev,
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 4059c0f33f07..a721cef7e2d4 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -949,6 +949,7 @@ struct sched_domain {
949 unsigned int smt_gain; 949 unsigned int smt_gain;
950 int flags; /* See SD_* */ 950 int flags; /* See SD_* */
951 int level; 951 int level;
952 int idle_buddy; /* cpu assigned to select_idle_sibling() */
952 953
953 /* Runtime fields. */ 954 /* Runtime fields. */
954 unsigned long last_balance; /* init to jiffies. units in jiffies */ 955 unsigned long last_balance; /* init to jiffies. units in jiffies */
@@ -1244,6 +1245,9 @@ struct task_struct {
1244 const struct sched_class *sched_class; 1245 const struct sched_class *sched_class;
1245 struct sched_entity se; 1246 struct sched_entity se;
1246 struct sched_rt_entity rt; 1247 struct sched_rt_entity rt;
1248#ifdef CONFIG_CGROUP_SCHED
1249 struct task_group *sched_task_group;
1250#endif
1247 1251
1248#ifdef CONFIG_PREEMPT_NOTIFIERS 1252#ifdef CONFIG_PREEMPT_NOTIFIERS
1249 /* list of struct preempt_notifier: */ 1253 /* list of struct preempt_notifier: */
@@ -1405,7 +1409,7 @@ struct task_struct {
1405 int (*notifier)(void *priv); 1409 int (*notifier)(void *priv);
1406 void *notifier_data; 1410 void *notifier_data;
1407 sigset_t *notifier_mask; 1411 sigset_t *notifier_mask;
1408 struct hlist_head task_works; 1412 struct callback_head *task_works;
1409 1413
1410 struct audit_context *audit_context; 1414 struct audit_context *audit_context;
1411#ifdef CONFIG_AUDITSYSCALL 1415#ifdef CONFIG_AUDITSYSCALL
@@ -1546,7 +1550,6 @@ struct task_struct {
1546 unsigned long timer_slack_ns; 1550 unsigned long timer_slack_ns;
1547 unsigned long default_timer_slack_ns; 1551 unsigned long default_timer_slack_ns;
1548 1552
1549 struct list_head *scm_work_list;
1550#ifdef CONFIG_FUNCTION_GRAPH_TRACER 1553#ifdef CONFIG_FUNCTION_GRAPH_TRACER
1551 /* Index of current stored address in ret_stack */ 1554 /* Index of current stored address in ret_stack */
1552 int curr_ret_stack; 1555 int curr_ret_stack;
@@ -1581,7 +1584,6 @@ struct task_struct {
1581#endif 1584#endif
1582#ifdef CONFIG_UPROBES 1585#ifdef CONFIG_UPROBES
1583 struct uprobe_task *utask; 1586 struct uprobe_task *utask;
1584 int uprobe_srcu_id;
1585#endif 1587#endif
1586}; 1588};
1587 1589
@@ -1871,22 +1873,12 @@ static inline void rcu_copy_process(struct task_struct *p)
1871 INIT_LIST_HEAD(&p->rcu_node_entry); 1873 INIT_LIST_HEAD(&p->rcu_node_entry);
1872} 1874}
1873 1875
1874static inline void rcu_switch_from(struct task_struct *prev)
1875{
1876 if (prev->rcu_read_lock_nesting != 0)
1877 rcu_preempt_note_context_switch();
1878}
1879
1880#else 1876#else
1881 1877
1882static inline void rcu_copy_process(struct task_struct *p) 1878static inline void rcu_copy_process(struct task_struct *p)
1883{ 1879{
1884} 1880}
1885 1881
1886static inline void rcu_switch_from(struct task_struct *prev)
1887{
1888}
1889
1890#endif 1882#endif
1891 1883
1892#ifdef CONFIG_SMP 1884#ifdef CONFIG_SMP
@@ -1909,6 +1901,14 @@ static inline int set_cpus_allowed_ptr(struct task_struct *p,
1909} 1901}
1910#endif 1902#endif
1911 1903
1904#ifdef CONFIG_NO_HZ
1905void calc_load_enter_idle(void);
1906void calc_load_exit_idle(void);
1907#else
1908static inline void calc_load_enter_idle(void) { }
1909static inline void calc_load_exit_idle(void) { }
1910#endif /* CONFIG_NO_HZ */
1911
1912#ifndef CONFIG_CPUMASK_OFFSTACK 1912#ifndef CONFIG_CPUMASK_OFFSTACK
1913static inline int set_cpus_allowed(struct task_struct *p, cpumask_t new_mask) 1913static inline int set_cpus_allowed(struct task_struct *p, cpumask_t new_mask)
1914{ 1914{
@@ -2725,7 +2725,7 @@ extern int sched_group_set_rt_period(struct task_group *tg,
2725extern long sched_group_rt_period(struct task_group *tg); 2725extern long sched_group_rt_period(struct task_group *tg);
2726extern int sched_rt_can_attach(struct task_group *tg, struct task_struct *tsk); 2726extern int sched_rt_can_attach(struct task_group *tg, struct task_struct *tsk);
2727#endif 2727#endif
2728#endif 2728#endif /* CONFIG_CGROUP_SCHED */
2729 2729
2730extern int task_can_switch_user(struct user_struct *up, 2730extern int task_can_switch_user(struct user_struct *up,
2731 struct task_struct *tsk); 2731 struct task_struct *tsk);
diff --git a/include/linux/seq_file.h b/include/linux/seq_file.h
index fc61854f6224..83c44eefe698 100644
--- a/include/linux/seq_file.h
+++ b/include/linux/seq_file.h
@@ -86,6 +86,7 @@ int seq_puts(struct seq_file *m, const char *s);
86int seq_write(struct seq_file *seq, const void *data, size_t len); 86int seq_write(struct seq_file *seq, const void *data, size_t len);
87 87
88__printf(2, 3) int seq_printf(struct seq_file *, const char *, ...); 88__printf(2, 3) int seq_printf(struct seq_file *, const char *, ...);
89__printf(2, 0) int seq_vprintf(struct seq_file *, const char *, va_list args);
89 90
90int seq_path(struct seq_file *, const struct path *, const char *); 91int seq_path(struct seq_file *, const struct path *, const char *);
91int seq_dentry(struct seq_file *, struct dentry *, const char *); 92int seq_dentry(struct seq_file *, struct dentry *, const char *);
diff --git a/include/linux/sfi_acpi.h b/include/linux/sfi_acpi.h
index c4a5a8cd4469..631af63af42d 100644
--- a/include/linux/sfi_acpi.h
+++ b/include/linux/sfi_acpi.h
@@ -66,7 +66,7 @@ extern int sfi_acpi_table_parse(char *signature, char *oem_id,
66 char *oem_table_id, 66 char *oem_table_id,
67 int (*handler)(struct acpi_table_header *)); 67 int (*handler)(struct acpi_table_header *));
68 68
69static inline int acpi_sfi_table_parse(char *signature, 69static inline int __init acpi_sfi_table_parse(char *signature,
70 int (*handler)(struct acpi_table_header *)) 70 int (*handler)(struct acpi_table_header *))
71{ 71{
72 if (!acpi_table_parse(signature, handler)) 72 if (!acpi_table_parse(signature, handler))
@@ -83,7 +83,7 @@ static inline int sfi_acpi_table_parse(char *signature, char *oem_id,
83 return -1; 83 return -1;
84} 84}
85 85
86static inline int acpi_sfi_table_parse(char *signature, 86static inline int __init acpi_sfi_table_parse(char *signature,
87 int (*handler)(struct acpi_table_header *)) 87 int (*handler)(struct acpi_table_header *))
88{ 88{
89 return acpi_table_parse(signature, handler); 89 return acpi_table_parse(signature, handler);
diff --git a/include/linux/sh_clk.h b/include/linux/sh_clk.h
index c513b73cd7cb..50910913b268 100644
--- a/include/linux/sh_clk.h
+++ b/include/linux/sh_clk.h
@@ -18,7 +18,6 @@ struct clk_mapping {
18 struct kref ref; 18 struct kref ref;
19}; 19};
20 20
21
22struct sh_clk_ops { 21struct sh_clk_ops {
23#ifdef CONFIG_SH_CLK_CPG_LEGACY 22#ifdef CONFIG_SH_CLK_CPG_LEGACY
24 void (*init)(struct clk *clk); 23 void (*init)(struct clk *clk);
@@ -31,6 +30,10 @@ struct sh_clk_ops {
31 long (*round_rate)(struct clk *clk, unsigned long rate); 30 long (*round_rate)(struct clk *clk, unsigned long rate);
32}; 31};
33 32
33#define SH_CLK_DIV_MSK(div) ((1 << (div)) - 1)
34#define SH_CLK_DIV4_MSK SH_CLK_DIV_MSK(4)
35#define SH_CLK_DIV6_MSK SH_CLK_DIV_MSK(6)
36
34struct clk { 37struct clk {
35 struct list_head node; 38 struct list_head node;
36 struct clk *parent; 39 struct clk *parent;
@@ -52,6 +55,7 @@ struct clk {
52 unsigned int enable_bit; 55 unsigned int enable_bit;
53 void __iomem *mapped_reg; 56 void __iomem *mapped_reg;
54 57
58 unsigned int div_mask;
55 unsigned long arch_flags; 59 unsigned long arch_flags;
56 void *priv; 60 void *priv;
57 struct clk_mapping *mapping; 61 struct clk_mapping *mapping;
@@ -65,6 +69,8 @@ struct clk {
65#define CLK_ENABLE_REG_16BIT BIT(2) 69#define CLK_ENABLE_REG_16BIT BIT(2)
66#define CLK_ENABLE_REG_8BIT BIT(3) 70#define CLK_ENABLE_REG_8BIT BIT(3)
67 71
72#define CLK_MASK_DIV_ON_DISABLE BIT(4)
73
68#define CLK_ENABLE_REG_MASK (CLK_ENABLE_REG_32BIT | \ 74#define CLK_ENABLE_REG_MASK (CLK_ENABLE_REG_32BIT | \
69 CLK_ENABLE_REG_16BIT | \ 75 CLK_ENABLE_REG_16BIT | \
70 CLK_ENABLE_REG_8BIT) 76 CLK_ENABLE_REG_8BIT)
@@ -146,14 +152,17 @@ static inline int __deprecated sh_clk_mstp32_register(struct clk *clks, int nr)
146 .enable_reg = (void __iomem *)_reg, \ 152 .enable_reg = (void __iomem *)_reg, \
147 .enable_bit = _shift, \ 153 .enable_bit = _shift, \
148 .arch_flags = _div_bitmap, \ 154 .arch_flags = _div_bitmap, \
155 .div_mask = SH_CLK_DIV4_MSK, \
149 .flags = _flags, \ 156 .flags = _flags, \
150} 157}
151 158
152struct clk_div4_table { 159struct clk_div_table {
153 struct clk_div_mult_table *div_mult_table; 160 struct clk_div_mult_table *div_mult_table;
154 void (*kick)(struct clk *clk); 161 void (*kick)(struct clk *clk);
155}; 162};
156 163
164#define clk_div4_table clk_div_table
165
157int sh_clk_div4_register(struct clk *clks, int nr, 166int sh_clk_div4_register(struct clk *clks, int nr,
158 struct clk_div4_table *table); 167 struct clk_div4_table *table);
159int sh_clk_div4_enable_register(struct clk *clks, int nr, 168int sh_clk_div4_enable_register(struct clk *clks, int nr,
@@ -165,7 +174,9 @@ int sh_clk_div4_reparent_register(struct clk *clks, int nr,
165 _num_parents, _src_shift, _src_width) \ 174 _num_parents, _src_shift, _src_width) \
166{ \ 175{ \
167 .enable_reg = (void __iomem *)_reg, \ 176 .enable_reg = (void __iomem *)_reg, \
168 .flags = _flags, \ 177 .enable_bit = 0, /* unused */ \
178 .flags = _flags | CLK_MASK_DIV_ON_DISABLE, \
179 .div_mask = SH_CLK_DIV6_MSK, \
169 .parent_table = _parents, \ 180 .parent_table = _parents, \
170 .parent_num = _num_parents, \ 181 .parent_num = _num_parents, \
171 .src_shift = _src_shift, \ 182 .src_shift = _src_shift, \
@@ -176,7 +187,9 @@ int sh_clk_div4_reparent_register(struct clk *clks, int nr,
176{ \ 187{ \
177 .parent = _parent, \ 188 .parent = _parent, \
178 .enable_reg = (void __iomem *)_reg, \ 189 .enable_reg = (void __iomem *)_reg, \
179 .flags = _flags, \ 190 .enable_bit = 0, /* unused */ \
191 .div_mask = SH_CLK_DIV6_MSK, \
192 .flags = _flags | CLK_MASK_DIV_ON_DISABLE, \
180} 193}
181 194
182int sh_clk_div6_register(struct clk *clks, int nr); 195int sh_clk_div6_register(struct clk *clks, int nr);
diff --git a/include/linux/sh_dma.h b/include/linux/sh_dma.h
index 425450b980b8..b64d6bec6f90 100644
--- a/include/linux/sh_dma.h
+++ b/include/linux/sh_dma.h
@@ -10,38 +10,27 @@
10#ifndef SH_DMA_H 10#ifndef SH_DMA_H
11#define SH_DMA_H 11#define SH_DMA_H
12 12
13#include <linux/list.h>
14#include <linux/dmaengine.h> 13#include <linux/dmaengine.h>
14#include <linux/list.h>
15#include <linux/shdma-base.h>
16#include <linux/types.h>
17
18struct device;
15 19
16/* Used by slave DMA clients to request DMA to/from a specific peripheral */ 20/* Used by slave DMA clients to request DMA to/from a specific peripheral */
17struct sh_dmae_slave { 21struct sh_dmae_slave {
18 unsigned int slave_id; /* Set by the platform */ 22 struct shdma_slave shdma_slave; /* Set by the platform */
19 struct device *dma_dev; /* Set by the platform */
20 const struct sh_dmae_slave_config *config; /* Set by the driver */
21};
22
23struct sh_dmae_regs {
24 u32 sar; /* SAR / source address */
25 u32 dar; /* DAR / destination address */
26 u32 tcr; /* TCR / transfer count */
27};
28
29struct sh_desc {
30 struct sh_dmae_regs hw;
31 struct list_head node;
32 struct dma_async_tx_descriptor async_tx;
33 enum dma_transfer_direction direction;
34 dma_cookie_t cookie;
35 size_t partial;
36 int chunks;
37 int mark;
38}; 23};
39 24
25/*
26 * Supplied by platforms to specify, how a DMA channel has to be configured for
27 * a certain peripheral
28 */
40struct sh_dmae_slave_config { 29struct sh_dmae_slave_config {
41 unsigned int slave_id; 30 int slave_id;
42 dma_addr_t addr; 31 dma_addr_t addr;
43 u32 chcr; 32 u32 chcr;
44 char mid_rid; 33 char mid_rid;
45}; 34};
46 35
47struct sh_dmae_channel { 36struct sh_dmae_channel {
@@ -110,4 +99,6 @@ struct sh_dmae_pdata {
110#define CHCR_TE 0x00000002 99#define CHCR_TE 0x00000002
111#define CHCR_IE 0x00000004 100#define CHCR_IE 0x00000004
112 101
102bool shdma_chan_filter(struct dma_chan *chan, void *arg);
103
113#endif 104#endif
diff --git a/include/linux/sh_pfc.h b/include/linux/sh_pfc.h
index 5c15aed9c4b2..c19a0925829a 100644
--- a/include/linux/sh_pfc.h
+++ b/include/linux/sh_pfc.h
@@ -11,22 +11,24 @@
11#ifndef __SH_PFC_H 11#ifndef __SH_PFC_H
12#define __SH_PFC_H 12#define __SH_PFC_H
13 13
14#include <linux/stringify.h>
14#include <asm-generic/gpio.h> 15#include <asm-generic/gpio.h>
15 16
16typedef unsigned short pinmux_enum_t; 17typedef unsigned short pinmux_enum_t;
17typedef unsigned short pinmux_flag_t; 18typedef unsigned short pinmux_flag_t;
18 19
19#define PINMUX_TYPE_NONE 0 20enum {
20#define PINMUX_TYPE_FUNCTION 1 21 PINMUX_TYPE_NONE,
21#define PINMUX_TYPE_GPIO 2
22#define PINMUX_TYPE_OUTPUT 3
23#define PINMUX_TYPE_INPUT 4
24#define PINMUX_TYPE_INPUT_PULLUP 5
25#define PINMUX_TYPE_INPUT_PULLDOWN 6
26 22
27#define PINMUX_FLAG_TYPE (0x7) 23 PINMUX_TYPE_FUNCTION,
28#define PINMUX_FLAG_WANT_PULLUP (1 << 3) 24 PINMUX_TYPE_GPIO,
29#define PINMUX_FLAG_WANT_PULLDOWN (1 << 4) 25 PINMUX_TYPE_OUTPUT,
26 PINMUX_TYPE_INPUT,
27 PINMUX_TYPE_INPUT_PULLUP,
28 PINMUX_TYPE_INPUT_PULLDOWN,
29
30 PINMUX_FLAG_TYPE, /* must be last */
31};
30 32
31#define PINMUX_FLAG_DBIT_SHIFT 5 33#define PINMUX_FLAG_DBIT_SHIFT 5
32#define PINMUX_FLAG_DBIT (0x1f << PINMUX_FLAG_DBIT_SHIFT) 34#define PINMUX_FLAG_DBIT (0x1f << PINMUX_FLAG_DBIT_SHIFT)
@@ -36,9 +38,12 @@ typedef unsigned short pinmux_flag_t;
36struct pinmux_gpio { 38struct pinmux_gpio {
37 pinmux_enum_t enum_id; 39 pinmux_enum_t enum_id;
38 pinmux_flag_t flags; 40 pinmux_flag_t flags;
41 const char *name;
39}; 42};
40 43
41#define PINMUX_GPIO(gpio, data_or_mark) [gpio] = { data_or_mark } 44#define PINMUX_GPIO(gpio, data_or_mark) \
45 [gpio] = { .name = __stringify(gpio), .enum_id = data_or_mark, .flags = PINMUX_TYPE_NONE }
46
42#define PINMUX_DATA(data_or_mark, ids...) data_or_mark, ids, 0 47#define PINMUX_DATA(data_or_mark, ids...) data_or_mark, ids, 0
43 48
44struct pinmux_cfg_reg { 49struct pinmux_cfg_reg {
@@ -89,7 +94,7 @@ struct pfc_window {
89 unsigned long size; 94 unsigned long size;
90}; 95};
91 96
92struct pinmux_info { 97struct sh_pfc {
93 char *name; 98 char *name;
94 pinmux_enum_t reserved_id; 99 pinmux_enum_t reserved_id;
95 struct pinmux_range data; 100 struct pinmux_range data;
@@ -112,17 +117,45 @@ struct pinmux_info {
112 struct pinmux_irq *gpio_irq; 117 struct pinmux_irq *gpio_irq;
113 unsigned int gpio_irq_size; 118 unsigned int gpio_irq_size;
114 119
120 spinlock_t lock;
121
115 struct resource *resource; 122 struct resource *resource;
116 unsigned int num_resources; 123 unsigned int num_resources;
117 struct pfc_window *window; 124 struct pfc_window *window;
118 125
119 unsigned long unlock_reg; 126 unsigned long unlock_reg;
120
121 struct gpio_chip chip;
122}; 127};
123 128
124int register_pinmux(struct pinmux_info *pip); 129/* XXX compat for now */
125int unregister_pinmux(struct pinmux_info *pip); 130#define pinmux_info sh_pfc
131
132/* drivers/sh/pfc/gpio.c */
133int sh_pfc_register_gpiochip(struct sh_pfc *pfc);
134
135/* drivers/sh/pfc/pinctrl.c */
136int sh_pfc_register_pinctrl(struct sh_pfc *pfc);
137
138/* drivers/sh/pfc/core.c */
139int register_sh_pfc(struct sh_pfc *pfc);
140
141int sh_pfc_read_bit(struct pinmux_data_reg *dr, unsigned long in_pos);
142void sh_pfc_write_bit(struct pinmux_data_reg *dr, unsigned long in_pos,
143 unsigned long value);
144int sh_pfc_get_data_reg(struct sh_pfc *pfc, unsigned gpio,
145 struct pinmux_data_reg **drp, int *bitp);
146int sh_pfc_gpio_to_enum(struct sh_pfc *pfc, unsigned gpio, int pos,
147 pinmux_enum_t *enum_idp);
148int sh_pfc_config_gpio(struct sh_pfc *pfc, unsigned gpio, int pinmux_type,
149 int cfg_mode);
150
151/* xxx */
152static inline int register_pinmux(struct pinmux_info *pip)
153{
154 struct sh_pfc *pfc = pip;
155 return register_sh_pfc(pfc);
156}
157
158enum { GPIO_CFG_DRYRUN, GPIO_CFG_REQ, GPIO_CFG_FREE };
126 159
127/* helper macro for port */ 160/* helper macro for port */
128#define PORT_1(fn, pfx, sfx) fn(pfx, sfx) 161#define PORT_1(fn, pfx, sfx) fn(pfx, sfx)
diff --git a/include/linux/shdma-base.h b/include/linux/shdma-base.h
new file mode 100644
index 000000000000..93f9821554b6
--- /dev/null
+++ b/include/linux/shdma-base.h
@@ -0,0 +1,124 @@
1/*
2 * Dmaengine driver base library for DMA controllers, found on SH-based SoCs
3 *
4 * extracted from shdma.c and headers
5 *
6 * Copyright (C) 2011-2012 Guennadi Liakhovetski <g.liakhovetski@gmx.de>
7 * Copyright (C) 2009 Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com>
8 * Copyright (C) 2009 Renesas Solutions, Inc. All rights reserved.
9 * Copyright (C) 2007 Freescale Semiconductor, Inc. All rights reserved.
10 *
11 * This is free software; you can redistribute it and/or modify
12 * it under the terms of version 2 of the GNU General Public License as
13 * published by the Free Software Foundation.
14 */
15
16#ifndef SHDMA_BASE_H
17#define SHDMA_BASE_H
18
19#include <linux/dmaengine.h>
20#include <linux/interrupt.h>
21#include <linux/list.h>
22#include <linux/types.h>
23
24/**
25 * shdma_pm_state - DMA channel PM state
26 * SHDMA_PM_ESTABLISHED: either idle or during data transfer
27 * SHDMA_PM_BUSY: during the transfer preparation, when we have to
28 * drop the lock temporarily
29 * SHDMA_PM_PENDING: transfers pending
30 */
31enum shdma_pm_state {
32 SHDMA_PM_ESTABLISHED,
33 SHDMA_PM_BUSY,
34 SHDMA_PM_PENDING,
35};
36
37struct device;
38
39/*
40 * Drivers, using this library are expected to embed struct shdma_dev,
41 * struct shdma_chan, struct shdma_desc, and struct shdma_slave
42 * in their respective device, channel, descriptor and slave objects.
43 */
44
45struct shdma_slave {
46 int slave_id;
47};
48
49struct shdma_desc {
50 struct list_head node;
51 struct dma_async_tx_descriptor async_tx;
52 enum dma_transfer_direction direction;
53 dma_cookie_t cookie;
54 int chunks;
55 int mark;
56};
57
58struct shdma_chan {
59 spinlock_t chan_lock; /* Channel operation lock */
60 struct list_head ld_queue; /* Link descriptors queue */
61 struct list_head ld_free; /* Free link descriptors */
62 struct dma_chan dma_chan; /* DMA channel */
63 struct device *dev; /* Channel device */
64 void *desc; /* buffer for descriptor array */
65 int desc_num; /* desc count */
66 size_t max_xfer_len; /* max transfer length */
67 int id; /* Raw id of this channel */
68 int irq; /* Channel IRQ */
69 int slave_id; /* Client ID for slave DMA */
70 enum shdma_pm_state pm_state;
71};
72
73/**
74 * struct shdma_ops - simple DMA driver operations
75 * desc_completed: return true, if this is the descriptor, that just has
76 * completed (atomic)
77 * halt_channel: stop DMA channel operation (atomic)
78 * channel_busy: return true, if the channel is busy (atomic)
79 * slave_addr: return slave DMA address
80 * desc_setup: set up the hardware specific descriptor portion (atomic)
81 * set_slave: bind channel to a slave
82 * setup_xfer: configure channel hardware for operation (atomic)
83 * start_xfer: start the DMA transfer (atomic)
84 * embedded_desc: return Nth struct shdma_desc pointer from the
85 * descriptor array
86 * chan_irq: process channel IRQ, return true if a transfer has
87 * completed (atomic)
88 */
89struct shdma_ops {
90 bool (*desc_completed)(struct shdma_chan *, struct shdma_desc *);
91 void (*halt_channel)(struct shdma_chan *);
92 bool (*channel_busy)(struct shdma_chan *);
93 dma_addr_t (*slave_addr)(struct shdma_chan *);
94 int (*desc_setup)(struct shdma_chan *, struct shdma_desc *,
95 dma_addr_t, dma_addr_t, size_t *);
96 int (*set_slave)(struct shdma_chan *, int, bool);
97 void (*setup_xfer)(struct shdma_chan *, int);
98 void (*start_xfer)(struct shdma_chan *, struct shdma_desc *);
99 struct shdma_desc *(*embedded_desc)(void *, int);
100 bool (*chan_irq)(struct shdma_chan *, int);
101};
102
103struct shdma_dev {
104 struct dma_device dma_dev;
105 struct shdma_chan **schan;
106 const struct shdma_ops *ops;
107 size_t desc_size;
108};
109
110#define shdma_for_each_chan(c, d, i) for (i = 0, c = (d)->schan[0]; \
111 i < (d)->dma_dev.chancnt; c = (d)->schan[++i])
112
113int shdma_request_irq(struct shdma_chan *, int,
114 unsigned long, const char *);
115void shdma_free_irq(struct shdma_chan *);
116bool shdma_reset(struct shdma_dev *sdev);
117void shdma_chan_probe(struct shdma_dev *sdev,
118 struct shdma_chan *schan, int id);
119void shdma_chan_remove(struct shdma_chan *schan);
120int shdma_init(struct device *dev, struct shdma_dev *sdev,
121 int chan_num);
122void shdma_cleanup(struct shdma_dev *sdev);
123
124#endif
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index b534a1be540a..d205c4be7f5b 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -225,14 +225,11 @@ enum {
225 /* device driver is going to provide hardware time stamp */ 225 /* device driver is going to provide hardware time stamp */
226 SKBTX_IN_PROGRESS = 1 << 2, 226 SKBTX_IN_PROGRESS = 1 << 2,
227 227
228 /* ensure the originating sk reference is available on driver level */
229 SKBTX_DRV_NEEDS_SK_REF = 1 << 3,
230
231 /* device driver supports TX zero-copy buffers */ 228 /* device driver supports TX zero-copy buffers */
232 SKBTX_DEV_ZEROCOPY = 1 << 4, 229 SKBTX_DEV_ZEROCOPY = 1 << 3,
233 230
234 /* generate wifi status information (where possible) */ 231 /* generate wifi status information (where possible) */
235 SKBTX_WIFI_STATUS = 1 << 5, 232 SKBTX_WIFI_STATUS = 1 << 4,
236}; 233};
237 234
238/* 235/*
@@ -1670,6 +1667,22 @@ static inline void skb_orphan(struct sk_buff *skb)
1670} 1667}
1671 1668
1672/** 1669/**
1670 * skb_orphan_frags - orphan the frags contained in a buffer
1671 * @skb: buffer to orphan frags from
1672 * @gfp_mask: allocation mask for replacement pages
1673 *
1674 * For each frag in the SKB which needs a destructor (i.e. has an
1675 * owner) create a copy of that frag and release the original
1676 * page by calling the destructor.
1677 */
1678static inline int skb_orphan_frags(struct sk_buff *skb, gfp_t gfp_mask)
1679{
1680 if (likely(!(skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY)))
1681 return 0;
1682 return skb_copy_ubufs(skb, gfp_mask);
1683}
1684
1685/**
1673 * __skb_queue_purge - empty a list 1686 * __skb_queue_purge - empty a list
1674 * @list: list to empty 1687 * @list: list to empty
1675 * 1688 *
diff --git a/include/linux/smp.h b/include/linux/smp.h
index 717fb746c9a8..dd6f06be3c9f 100644
--- a/include/linux/smp.h
+++ b/include/linux/smp.h
@@ -90,10 +90,6 @@ void kick_all_cpus_sync(void);
90void __init call_function_init(void); 90void __init call_function_init(void);
91void generic_smp_call_function_single_interrupt(void); 91void generic_smp_call_function_single_interrupt(void);
92void generic_smp_call_function_interrupt(void); 92void generic_smp_call_function_interrupt(void);
93void ipi_call_lock(void);
94void ipi_call_unlock(void);
95void ipi_call_lock_irq(void);
96void ipi_call_unlock_irq(void);
97#else 93#else
98static inline void call_function_init(void) { } 94static inline void call_function_init(void) { }
99#endif 95#endif
@@ -181,7 +177,6 @@ static inline int up_smp_call_function(smp_call_func_t func, void *info)
181 } while (0) 177 } while (0)
182 178
183static inline void smp_send_reschedule(int cpu) { } 179static inline void smp_send_reschedule(int cpu) { }
184#define num_booting_cpus() 1
185#define smp_prepare_boot_cpu() do {} while (0) 180#define smp_prepare_boot_cpu() do {} while (0)
186#define smp_call_function_many(mask, func, info, wait) \ 181#define smp_call_function_many(mask, func, info, wait) \
187 (up_smp_call_function(func, info)) 182 (up_smp_call_function(func, info))
diff --git a/include/linux/snmp.h b/include/linux/snmp.h
index 2e68f5ba0389..00bc189cb395 100644
--- a/include/linux/snmp.h
+++ b/include/linux/snmp.h
@@ -208,7 +208,6 @@ enum
208 LINUX_MIB_TCPDSACKOFOSENT, /* TCPDSACKOfoSent */ 208 LINUX_MIB_TCPDSACKOFOSENT, /* TCPDSACKOfoSent */
209 LINUX_MIB_TCPDSACKRECV, /* TCPDSACKRecv */ 209 LINUX_MIB_TCPDSACKRECV, /* TCPDSACKRecv */
210 LINUX_MIB_TCPDSACKOFORECV, /* TCPDSACKOfoRecv */ 210 LINUX_MIB_TCPDSACKOFORECV, /* TCPDSACKOfoRecv */
211 LINUX_MIB_TCPABORTONSYN, /* TCPAbortOnSyn */
212 LINUX_MIB_TCPABORTONDATA, /* TCPAbortOnData */ 211 LINUX_MIB_TCPABORTONDATA, /* TCPAbortOnData */
213 LINUX_MIB_TCPABORTONCLOSE, /* TCPAbortOnClose */ 212 LINUX_MIB_TCPABORTONCLOSE, /* TCPAbortOnClose */
214 LINUX_MIB_TCPABORTONMEMORY, /* TCPAbortOnMemory */ 213 LINUX_MIB_TCPABORTONMEMORY, /* TCPAbortOnMemory */
@@ -233,7 +232,13 @@ enum
233 LINUX_MIB_TCPREQQFULLDOCOOKIES, /* TCPReqQFullDoCookies */ 232 LINUX_MIB_TCPREQQFULLDOCOOKIES, /* TCPReqQFullDoCookies */
234 LINUX_MIB_TCPREQQFULLDROP, /* TCPReqQFullDrop */ 233 LINUX_MIB_TCPREQQFULLDROP, /* TCPReqQFullDrop */
235 LINUX_MIB_TCPRETRANSFAIL, /* TCPRetransFail */ 234 LINUX_MIB_TCPRETRANSFAIL, /* TCPRetransFail */
236 LINUX_MIB_TCPRCVCOALESCE, /* TCPRcvCoalesce */ 235 LINUX_MIB_TCPRCVCOALESCE, /* TCPRcvCoalesce */
236 LINUX_MIB_TCPOFOQUEUE, /* TCPOFOQueue */
237 LINUX_MIB_TCPOFODROP, /* TCPOFODrop */
238 LINUX_MIB_TCPOFOMERGE, /* TCPOFOMerge */
239 LINUX_MIB_TCPCHALLENGEACK, /* TCPChallengeACK */
240 LINUX_MIB_TCPSYNCHALLENGE, /* TCPSYNChallenge */
241 LINUX_MIB_TCPFASTOPENACTIVE, /* TCPFastOpenActive */
237 __LINUX_MIB_MAX 242 __LINUX_MIB_MAX
238}; 243};
239 244
diff --git a/include/linux/sock_diag.h b/include/linux/sock_diag.h
index db4bae78bda9..e3e395acc2fd 100644
--- a/include/linux/sock_diag.h
+++ b/include/linux/sock_diag.h
@@ -18,6 +18,7 @@ enum {
18 SK_MEMINFO_FWD_ALLOC, 18 SK_MEMINFO_FWD_ALLOC,
19 SK_MEMINFO_WMEM_QUEUED, 19 SK_MEMINFO_WMEM_QUEUED,
20 SK_MEMINFO_OPTMEM, 20 SK_MEMINFO_OPTMEM,
21 SK_MEMINFO_BACKLOG,
21 22
22 SK_MEMINFO_VARS, 23 SK_MEMINFO_VARS,
23}; 24};
@@ -43,6 +44,5 @@ void sock_diag_save_cookie(void *sk, __u32 *cookie);
43 44
44int sock_diag_put_meminfo(struct sock *sk, struct sk_buff *skb, int attr); 45int sock_diag_put_meminfo(struct sock *sk, struct sk_buff *skb, int attr);
45 46
46extern struct sock *sock_diag_nlsk;
47#endif /* KERNEL */ 47#endif /* KERNEL */
48#endif 48#endif
diff --git a/include/linux/socket.h b/include/linux/socket.h
index 25d6322fb635..ba7b2e817cfa 100644
--- a/include/linux/socket.h
+++ b/include/linux/socket.h
@@ -268,6 +268,7 @@ struct ucred {
268#define MSG_SENDPAGE_NOTLAST 0x20000 /* sendpage() internal : not the last page */ 268#define MSG_SENDPAGE_NOTLAST 0x20000 /* sendpage() internal : not the last page */
269#define MSG_EOF MSG_FIN 269#define MSG_EOF MSG_FIN
270 270
271#define MSG_FASTOPEN 0x20000000 /* Send data in TCP SYN */
271#define MSG_CMSG_CLOEXEC 0x40000000 /* Set close_on_exit for file 272#define MSG_CMSG_CLOEXEC 0x40000000 /* Set close_on_exit for file
272 descriptor received through 273 descriptor received through
273 SCM_RIGHTS */ 274 SCM_RIGHTS */
diff --git a/include/linux/spi/ad7879.h b/include/linux/spi/ad7879.h
index 6334cee1a3be..58368be0b4c0 100644
--- a/include/linux/spi/ad7879.h
+++ b/include/linux/spi/ad7879.h
@@ -12,6 +12,8 @@ struct ad7879_platform_data {
12 u16 y_min, y_max; 12 u16 y_min, y_max;
13 u16 pressure_min, pressure_max; 13 u16 pressure_min, pressure_max;
14 14
15 bool swap_xy; /* swap x and y axes */
16
15 /* [0..255] 0=OFF Starts at 1=550us and goes 17 /* [0..255] 0=OFF Starts at 1=550us and goes
16 * all the way to 9.440ms in steps of 35us. 18 * all the way to 9.440ms in steps of 35us.
17 */ 19 */
diff --git a/include/linux/spi/at86rf230.h b/include/linux/spi/at86rf230.h
new file mode 100644
index 000000000000..b2b1afbb3202
--- /dev/null
+++ b/include/linux/spi/at86rf230.h
@@ -0,0 +1,31 @@
1/*
2 * AT86RF230/RF231 driver
3 *
4 * Copyright (C) 2009-2012 Siemens AG
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2
8 * as published by the Free Software Foundation.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Written by:
20 * Dmitry Eremin-Solenikov <dmitry.baryshkov@siemens.com>
21 */
22#ifndef AT86RF230_H
23#define AT86RF230_H
24
25struct at86rf230_platform_data {
26 int rstn;
27 int slp_tr;
28 int dig2;
29};
30
31#endif
diff --git a/include/linux/spi/pxa2xx_spi.h b/include/linux/spi/pxa2xx_spi.h
index d3e1075f7b60..c73d1445c77e 100644
--- a/include/linux/spi/pxa2xx_spi.h
+++ b/include/linux/spi/pxa2xx_spi.h
@@ -43,7 +43,7 @@ struct pxa2xx_spi_chip {
43 void (*cs_control)(u32 command); 43 void (*cs_control)(u32 command);
44}; 44};
45 45
46#ifdef CONFIG_ARCH_PXA 46#if defined(CONFIG_ARCH_PXA) || defined(CONFIG_ARCH_MMP)
47 47
48#include <linux/clk.h> 48#include <linux/clk.h>
49#include <mach/dma.h> 49#include <mach/dma.h>
diff --git a/include/linux/splice.h b/include/linux/splice.h
index 26e5b613deda..09a545a7dfa3 100644
--- a/include/linux/splice.h
+++ b/include/linux/splice.h
@@ -51,7 +51,8 @@ struct partial_page {
51struct splice_pipe_desc { 51struct splice_pipe_desc {
52 struct page **pages; /* page map */ 52 struct page **pages; /* page map */
53 struct partial_page *partial; /* pages[] may not be contig */ 53 struct partial_page *partial; /* pages[] may not be contig */
54 int nr_pages; /* number of pages in map */ 54 int nr_pages; /* number of populated pages in map */
55 unsigned int nr_pages_max; /* pages[] & partial[] arrays size */
55 unsigned int flags; /* splice flags */ 56 unsigned int flags; /* splice flags */
56 const struct pipe_buf_operations *ops;/* ops associated with output pipe */ 57 const struct pipe_buf_operations *ops;/* ops associated with output pipe */
57 void (*spd_release)(struct splice_pipe_desc *, unsigned int); 58 void (*spd_release)(struct splice_pipe_desc *, unsigned int);
@@ -85,9 +86,8 @@ extern ssize_t splice_direct_to_actor(struct file *, struct splice_desc *,
85/* 86/*
86 * for dynamic pipe sizing 87 * for dynamic pipe sizing
87 */ 88 */
88extern int splice_grow_spd(struct pipe_inode_info *, struct splice_pipe_desc *); 89extern int splice_grow_spd(const struct pipe_inode_info *, struct splice_pipe_desc *);
89extern void splice_shrink_spd(struct pipe_inode_info *, 90extern void splice_shrink_spd(struct splice_pipe_desc *);
90 struct splice_pipe_desc *);
91extern void spd_release_page(struct splice_pipe_desc *, unsigned int); 91extern void spd_release_page(struct splice_pipe_desc *, unsigned int);
92 92
93extern const struct pipe_buf_operations page_cache_pipe_buf_ops; 93extern const struct pipe_buf_operations page_cache_pipe_buf_ops;
diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h
index bc14bd738ade..bb674c02f306 100644
--- a/include/linux/ssb/ssb.h
+++ b/include/linux/ssb/ssb.h
@@ -243,6 +243,7 @@ struct ssb_bus_ops {
243#define SSB_DEV_MINI_MACPHY 0x823 243#define SSB_DEV_MINI_MACPHY 0x823
244#define SSB_DEV_ARM_1176 0x824 244#define SSB_DEV_ARM_1176 0x824
245#define SSB_DEV_ARM_7TDMI 0x825 245#define SSB_DEV_ARM_7TDMI 0x825
246#define SSB_DEV_ARM_CM3 0x82A
246 247
247/* Vendor-ID values */ 248/* Vendor-ID values */
248#define SSB_VENDOR_BROADCOM 0x4243 249#define SSB_VENDOR_BROADCOM 0x4243
diff --git a/include/linux/suspend.h b/include/linux/suspend.h
index cd83059fb592..0c808d7fa579 100644
--- a/include/linux/suspend.h
+++ b/include/linux/suspend.h
@@ -408,6 +408,12 @@ static inline void unlock_system_sleep(void) {}
408 408
409#endif /* !CONFIG_PM_SLEEP */ 409#endif /* !CONFIG_PM_SLEEP */
410 410
411#ifdef CONFIG_PM_SLEEP_DEBUG
412extern bool pm_print_times_enabled;
413#else
414#define pm_print_times_enabled (false)
415#endif
416
411#ifdef CONFIG_PM_AUTOSLEEP 417#ifdef CONFIG_PM_AUTOSLEEP
412 418
413/* kernel/power/autosleep.c */ 419/* kernel/power/autosleep.c */
diff --git a/include/linux/task_work.h b/include/linux/task_work.h
index 294d5d5e90b1..fb46b03b1852 100644
--- a/include/linux/task_work.h
+++ b/include/linux/task_work.h
@@ -4,29 +4,21 @@
4#include <linux/list.h> 4#include <linux/list.h>
5#include <linux/sched.h> 5#include <linux/sched.h>
6 6
7struct task_work; 7typedef void (*task_work_func_t)(struct callback_head *);
8typedef void (*task_work_func_t)(struct task_work *);
9
10struct task_work {
11 struct hlist_node hlist;
12 task_work_func_t func;
13 void *data;
14};
15 8
16static inline void 9static inline void
17init_task_work(struct task_work *twork, task_work_func_t func, void *data) 10init_task_work(struct callback_head *twork, task_work_func_t func)
18{ 11{
19 twork->func = func; 12 twork->func = func;
20 twork->data = data;
21} 13}
22 14
23int task_work_add(struct task_struct *task, struct task_work *twork, bool); 15int task_work_add(struct task_struct *task, struct callback_head *twork, bool);
24struct task_work *task_work_cancel(struct task_struct *, task_work_func_t); 16struct callback_head *task_work_cancel(struct task_struct *, task_work_func_t);
25void task_work_run(void); 17void task_work_run(void);
26 18
27static inline void exit_task_work(struct task_struct *task) 19static inline void exit_task_work(struct task_struct *task)
28{ 20{
29 if (unlikely(!hlist_empty(&task->task_works))) 21 if (unlikely(task->task_works))
30 task_work_run(); 22 task_work_run();
31} 23}
32 24
diff --git a/include/linux/tcp.h b/include/linux/tcp.h
index 5f359dbfcdce..eb125a4c30b3 100644
--- a/include/linux/tcp.h
+++ b/include/linux/tcp.h
@@ -243,6 +243,16 @@ static inline unsigned int tcp_optlen(const struct sk_buff *skb)
243 return (tcp_hdr(skb)->doff - 5) * 4; 243 return (tcp_hdr(skb)->doff - 5) * 4;
244} 244}
245 245
246/* TCP Fast Open */
247#define TCP_FASTOPEN_COOKIE_MIN 4 /* Min Fast Open Cookie size in bytes */
248#define TCP_FASTOPEN_COOKIE_MAX 16 /* Max Fast Open Cookie size in bytes */
249
250/* TCP Fast Open Cookie as stored in memory */
251struct tcp_fastopen_cookie {
252 s8 len;
253 u8 val[TCP_FASTOPEN_COOKIE_MAX];
254};
255
246/* This defines a selective acknowledgement block. */ 256/* This defines a selective acknowledgement block. */
247struct tcp_sack_block_wire { 257struct tcp_sack_block_wire {
248 __be32 start_seq; 258 __be32 start_seq;
@@ -339,6 +349,9 @@ struct tcp_sock {
339 u32 rcv_tstamp; /* timestamp of last received ACK (for keepalives) */ 349 u32 rcv_tstamp; /* timestamp of last received ACK (for keepalives) */
340 u32 lsndtime; /* timestamp of last sent data packet (for restart window) */ 350 u32 lsndtime; /* timestamp of last sent data packet (for restart window) */
341 351
352 struct list_head tsq_node; /* anchor in tsq_tasklet.head list */
353 unsigned long tsq_flags;
354
342 /* Data for direct copy to user */ 355 /* Data for direct copy to user */
343 struct { 356 struct {
344 struct sk_buff_head prequeue; 357 struct sk_buff_head prequeue;
@@ -373,7 +386,9 @@ struct tcp_sock {
373 unused : 1; 386 unused : 1;
374 u8 repair_queue; 387 u8 repair_queue;
375 u8 do_early_retrans:1,/* Enable RFC5827 early-retransmit */ 388 u8 do_early_retrans:1,/* Enable RFC5827 early-retransmit */
376 early_retrans_delayed:1; /* Delayed ER timer installed */ 389 early_retrans_delayed:1, /* Delayed ER timer installed */
390 syn_data:1, /* SYN includes data */
391 syn_fastopen:1; /* SYN includes Fast Open option */
377 392
378/* RTT measurement */ 393/* RTT measurement */
379 u32 srtt; /* smoothed round trip time << 3 */ 394 u32 srtt; /* smoothed round trip time << 3 */
@@ -478,6 +493,9 @@ struct tcp_sock {
478 u32 probe_seq_start; 493 u32 probe_seq_start;
479 u32 probe_seq_end; 494 u32 probe_seq_end;
480 } mtu_probe; 495 } mtu_probe;
496 u32 mtu_info; /* We received an ICMP_FRAG_NEEDED / ICMPV6_PKT_TOOBIG
497 * while socket was owned by user.
498 */
481 499
482#ifdef CONFIG_TCP_MD5SIG 500#ifdef CONFIG_TCP_MD5SIG
483/* TCP AF-Specific parts; only used by MD5 Signature support so far */ 501/* TCP AF-Specific parts; only used by MD5 Signature support so far */
@@ -487,6 +505,9 @@ struct tcp_sock {
487 struct tcp_md5sig_info __rcu *md5sig_info; 505 struct tcp_md5sig_info __rcu *md5sig_info;
488#endif 506#endif
489 507
508/* TCP fastopen related information */
509 struct tcp_fastopen_request *fastopen_req;
510
490 /* When the cookie options are generated and exchanged, then this 511 /* When the cookie options are generated and exchanged, then this
491 * object holds a reference to them (cookie_values->kref). Also 512 * object holds a reference to them (cookie_values->kref). Also
492 * contains related tcp_cookie_transactions fields. 513 * contains related tcp_cookie_transactions fields.
@@ -494,6 +515,17 @@ struct tcp_sock {
494 struct tcp_cookie_values *cookie_values; 515 struct tcp_cookie_values *cookie_values;
495}; 516};
496 517
518enum tsq_flags {
519 TSQ_THROTTLED,
520 TSQ_QUEUED,
521 TCP_TSQ_DEFERRED, /* tcp_tasklet_func() found socket was owned */
522 TCP_WRITE_TIMER_DEFERRED, /* tcp_write_timer() found socket was owned */
523 TCP_DELACK_TIMER_DEFERRED, /* tcp_delack_timer() found socket was owned */
524 TCP_MTU_REDUCED_DEFERRED, /* tcp_v{4|6}_err() could not call
525 * tcp_v{4|6}_mtu_reduced()
526 */
527};
528
497static inline struct tcp_sock *tcp_sk(const struct sock *sk) 529static inline struct tcp_sock *tcp_sk(const struct sock *sk)
498{ 530{
499 return (struct tcp_sock *)sk; 531 return (struct tcp_sock *)sk;
@@ -507,7 +539,7 @@ struct tcp_timewait_sock {
507 u32 tw_ts_recent; 539 u32 tw_ts_recent;
508 long tw_ts_recent_stamp; 540 long tw_ts_recent_stamp;
509#ifdef CONFIG_TCP_MD5SIG 541#ifdef CONFIG_TCP_MD5SIG
510 struct tcp_md5sig_key *tw_md5_key; 542 struct tcp_md5sig_key *tw_md5_key;
511#endif 543#endif
512 /* Few sockets in timewait have cookies; in that case, then this 544 /* Few sockets in timewait have cookies; in that case, then this
513 * object holds a reference to them (tw_cookie_values->kref). 545 * object holds a reference to them (tw_cookie_values->kref).
diff --git a/include/linux/tick.h b/include/linux/tick.h
index ab8be90b5cc9..f37fceb69b73 100644
--- a/include/linux/tick.h
+++ b/include/linux/tick.h
@@ -31,10 +31,10 @@ enum tick_nohz_mode {
31 * struct tick_sched - sched tick emulation and no idle tick control/stats 31 * struct tick_sched - sched tick emulation and no idle tick control/stats
32 * @sched_timer: hrtimer to schedule the periodic tick in high 32 * @sched_timer: hrtimer to schedule the periodic tick in high
33 * resolution mode 33 * resolution mode
34 * @idle_tick: Store the last idle tick expiry time when the tick 34 * @last_tick: Store the last tick expiry time when the tick
35 * timer is modified for idle sleeps. This is necessary 35 * timer is modified for nohz sleeps. This is necessary
36 * to resume the tick timer operation in the timeline 36 * to resume the tick timer operation in the timeline
37 * when the CPU returns from idle 37 * when the CPU returns from nohz sleep.
38 * @tick_stopped: Indicator that the idle tick has been stopped 38 * @tick_stopped: Indicator that the idle tick has been stopped
39 * @idle_jiffies: jiffies at the entry to idle for idle time accounting 39 * @idle_jiffies: jiffies at the entry to idle for idle time accounting
40 * @idle_calls: Total number of idle calls 40 * @idle_calls: Total number of idle calls
@@ -51,7 +51,7 @@ struct tick_sched {
51 struct hrtimer sched_timer; 51 struct hrtimer sched_timer;
52 unsigned long check_clocks; 52 unsigned long check_clocks;
53 enum tick_nohz_mode nohz_mode; 53 enum tick_nohz_mode nohz_mode;
54 ktime_t idle_tick; 54 ktime_t last_tick;
55 int inidle; 55 int inidle;
56 int tick_stopped; 56 int tick_stopped;
57 unsigned long idle_jiffies; 57 unsigned long idle_jiffies;
diff --git a/include/linux/time-armada-370-xp.h b/include/linux/time-armada-370-xp.h
new file mode 100644
index 000000000000..dfdfdc03115b
--- /dev/null
+++ b/include/linux/time-armada-370-xp.h
@@ -0,0 +1,18 @@
1/*
2 * Marvell Armada 370/XP SoC timer handling.
3 *
4 * Copyright (C) 2012 Marvell
5 *
6 * Lior Amsalem <alior@marvell.com>
7 * Gregory CLEMENT <gregory.clement@free-electrons.com>
8 * Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
9 *
10 */
11#ifndef __TIME_ARMADA_370_XPPRCMU_H
12#define __TIME_ARMADA_370_XPPRCMU_H
13
14#include <linux/init.h>
15
16void __init armada_370_xp_timer_init(void);
17
18#endif
diff --git a/include/linux/tipc_config.h b/include/linux/tipc_config.h
index 9730b0e51e46..c98928420100 100644
--- a/include/linux/tipc_config.h
+++ b/include/linux/tipc_config.h
@@ -102,8 +102,8 @@
102#define TIPC_CMD_SET_LINK_TOL 0x4107 /* tx link_config, rx none */ 102#define TIPC_CMD_SET_LINK_TOL 0x4107 /* tx link_config, rx none */
103#define TIPC_CMD_SET_LINK_PRI 0x4108 /* tx link_config, rx none */ 103#define TIPC_CMD_SET_LINK_PRI 0x4108 /* tx link_config, rx none */
104#define TIPC_CMD_SET_LINK_WINDOW 0x4109 /* tx link_config, rx none */ 104#define TIPC_CMD_SET_LINK_WINDOW 0x4109 /* tx link_config, rx none */
105#define TIPC_CMD_SET_LOG_SIZE 0x410A /* tx unsigned, rx none */ 105#define TIPC_CMD_SET_LOG_SIZE 0x410A /* obsoleted */
106#define TIPC_CMD_DUMP_LOG 0x410B /* tx none, rx ultra_string */ 106#define TIPC_CMD_DUMP_LOG 0x410B /* obsoleted */
107#define TIPC_CMD_RESET_LINK_STATS 0x410C /* tx link_name, rx none */ 107#define TIPC_CMD_RESET_LINK_STATS 0x410C /* tx link_name, rx none */
108 108
109/* 109/*
diff --git a/include/linux/tracehook.h b/include/linux/tracehook.h
index 6a4d82bedb03..1e98b5530425 100644
--- a/include/linux/tracehook.h
+++ b/include/linux/tracehook.h
@@ -192,7 +192,7 @@ static inline void tracehook_notify_resume(struct pt_regs *regs)
192 * hlist_add_head(task->task_works); 192 * hlist_add_head(task->task_works);
193 */ 193 */
194 smp_mb__after_clear_bit(); 194 smp_mb__after_clear_bit();
195 if (unlikely(!hlist_empty(&current->task_works))) 195 if (unlikely(current->task_works))
196 task_work_run(); 196 task_work_run();
197} 197}
198 198
diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h
index bd96ecd0e05c..802de56c41e8 100644
--- a/include/linux/tracepoint.h
+++ b/include/linux/tracepoint.h
@@ -153,7 +153,7 @@ static inline void tracepoint_synchronize_unregister(void)
153 } \ 153 } \
154 static inline void trace_##name##_rcuidle(proto) \ 154 static inline void trace_##name##_rcuidle(proto) \
155 { \ 155 { \
156 if (static_branch(&__tracepoint_##name.key)) \ 156 if (static_key_false(&__tracepoint_##name.key)) \
157 __DO_TRACE(&__tracepoint_##name, \ 157 __DO_TRACE(&__tracepoint_##name, \
158 TP_PROTO(data_proto), \ 158 TP_PROTO(data_proto), \
159 TP_ARGS(data_args), \ 159 TP_ARGS(data_args), \
diff --git a/include/linux/types.h b/include/linux/types.h
index 9c1bd539ea70..bf0dd7524b2a 100644
--- a/include/linux/types.h
+++ b/include/linux/types.h
@@ -246,14 +246,15 @@ struct ustat {
246}; 246};
247 247
248/** 248/**
249 * struct rcu_head - callback structure for use with RCU 249 * struct callback_head - callback structure for use with RCU and task_work
250 * @next: next update requests in a list 250 * @next: next update requests in a list
251 * @func: actual update function to call after the grace period. 251 * @func: actual update function to call after the grace period.
252 */ 252 */
253struct rcu_head { 253struct callback_head {
254 struct rcu_head *next; 254 struct callback_head *next;
255 void (*func)(struct rcu_head *head); 255 void (*func)(struct callback_head *head);
256}; 256};
257#define rcu_head callback_head
257 258
258#endif /* __KERNEL__ */ 259#endif /* __KERNEL__ */
259#endif /* __ASSEMBLY__ */ 260#endif /* __ASSEMBLY__ */
diff --git a/include/linux/uhid.h b/include/linux/uhid.h
new file mode 100644
index 000000000000..9c6974f16966
--- /dev/null
+++ b/include/linux/uhid.h
@@ -0,0 +1,104 @@
1#ifndef __UHID_H_
2#define __UHID_H_
3
4/*
5 * User-space I/O driver support for HID subsystem
6 * Copyright (c) 2012 David Herrmann
7 */
8
9/*
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License as published by the Free
12 * Software Foundation; either version 2 of the License, or (at your option)
13 * any later version.
14 */
15
16/*
17 * Public header for user-space communication. We try to keep every structure
18 * aligned but to be safe we also use __attribute__((__packed__)). Therefore,
19 * the communication should be ABI compatible even between architectures.
20 */
21
22#include <linux/input.h>
23#include <linux/types.h>
24
25enum uhid_event_type {
26 UHID_CREATE,
27 UHID_DESTROY,
28 UHID_START,
29 UHID_STOP,
30 UHID_OPEN,
31 UHID_CLOSE,
32 UHID_OUTPUT,
33 UHID_OUTPUT_EV,
34 UHID_INPUT,
35 UHID_FEATURE,
36 UHID_FEATURE_ANSWER,
37};
38
39struct uhid_create_req {
40 __u8 name[128];
41 __u8 phys[64];
42 __u8 uniq[64];
43 __u8 __user *rd_data;
44 __u16 rd_size;
45
46 __u16 bus;
47 __u32 vendor;
48 __u32 product;
49 __u32 version;
50 __u32 country;
51} __attribute__((__packed__));
52
53#define UHID_DATA_MAX 4096
54
55enum uhid_report_type {
56 UHID_FEATURE_REPORT,
57 UHID_OUTPUT_REPORT,
58 UHID_INPUT_REPORT,
59};
60
61struct uhid_input_req {
62 __u8 data[UHID_DATA_MAX];
63 __u16 size;
64} __attribute__((__packed__));
65
66struct uhid_output_req {
67 __u8 data[UHID_DATA_MAX];
68 __u16 size;
69 __u8 rtype;
70} __attribute__((__packed__));
71
72struct uhid_output_ev_req {
73 __u16 type;
74 __u16 code;
75 __s32 value;
76} __attribute__((__packed__));
77
78struct uhid_feature_req {
79 __u32 id;
80 __u8 rnum;
81 __u8 rtype;
82} __attribute__((__packed__));
83
84struct uhid_feature_answer_req {
85 __u32 id;
86 __u16 err;
87 __u16 size;
88 __u8 data[UHID_DATA_MAX];
89};
90
91struct uhid_event {
92 __u32 type;
93
94 union {
95 struct uhid_create_req create;
96 struct uhid_input_req input;
97 struct uhid_output_req output;
98 struct uhid_output_ev_req output_ev;
99 struct uhid_feature_req feature;
100 struct uhid_feature_answer_req feature_answer;
101 } u;
102} __attribute__((__packed__));
103
104#endif /* __UHID_H_ */
diff --git a/include/linux/usb.h b/include/linux/usb.h
index dea39dc551d4..30d1ae38eab1 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -77,14 +77,15 @@ struct usb_host_endpoint {
77struct usb_host_interface { 77struct usb_host_interface {
78 struct usb_interface_descriptor desc; 78 struct usb_interface_descriptor desc;
79 79
80 int extralen;
81 unsigned char *extra; /* Extra descriptors */
82
80 /* array of desc.bNumEndpoint endpoints associated with this 83 /* array of desc.bNumEndpoint endpoints associated with this
81 * interface setting. these will be in no particular order. 84 * interface setting. these will be in no particular order.
82 */ 85 */
83 struct usb_host_endpoint *endpoint; 86 struct usb_host_endpoint *endpoint;
84 87
85 char *string; /* iInterface string, if present */ 88 char *string; /* iInterface string, if present */
86 unsigned char *extra; /* Extra descriptors */
87 int extralen;
88}; 89};
89 90
90enum usb_interface_condition { 91enum usb_interface_condition {
@@ -331,6 +332,11 @@ struct usb_bus {
331 u8 otg_port; /* 0, or number of OTG/HNP port */ 332 u8 otg_port; /* 0, or number of OTG/HNP port */
332 unsigned is_b_host:1; /* true during some HNP roleswitches */ 333 unsigned is_b_host:1; /* true during some HNP roleswitches */
333 unsigned b_hnp_enable:1; /* OTG: did A-Host enable HNP? */ 334 unsigned b_hnp_enable:1; /* OTG: did A-Host enable HNP? */
335 unsigned no_stop_on_short:1; /*
336 * Quirk: some controllers don't stop
337 * the ep queue on a short transfer
338 * with the URB_SHORT_NOT_OK flag set.
339 */
334 unsigned sg_tablesize; /* 0 or largest number of sg list entries */ 340 unsigned sg_tablesize; /* 0 or largest number of sg list entries */
335 341
336 int devnum_next; /* Next open device number in 342 int devnum_next; /* Next open device number in
@@ -556,7 +562,6 @@ struct usb_device {
556 struct usb3_lpm_parameters u1_params; 562 struct usb3_lpm_parameters u1_params;
557 struct usb3_lpm_parameters u2_params; 563 struct usb3_lpm_parameters u2_params;
558 unsigned lpm_disable_count; 564 unsigned lpm_disable_count;
559 unsigned hub_initiated_lpm_disable_count;
560}; 565};
561#define to_usb_device(d) container_of(d, struct usb_device, dev) 566#define to_usb_device(d) container_of(d, struct usb_device, dev)
562 567
@@ -629,6 +634,17 @@ extern void usb_enable_lpm(struct usb_device *udev);
629extern int usb_unlocked_disable_lpm(struct usb_device *udev); 634extern int usb_unlocked_disable_lpm(struct usb_device *udev);
630extern void usb_unlocked_enable_lpm(struct usb_device *udev); 635extern void usb_unlocked_enable_lpm(struct usb_device *udev);
631 636
637extern int usb_disable_ltm(struct usb_device *udev);
638extern void usb_enable_ltm(struct usb_device *udev);
639
640static inline bool usb_device_supports_ltm(struct usb_device *udev)
641{
642 if (udev->speed != USB_SPEED_SUPER || !udev->bos || !udev->bos->ss_cap)
643 return false;
644 return udev->bos->ss_cap->bmAttributes & USB_LTM_SUPPORT;
645}
646
647
632/*-------------------------------------------------------------------------*/ 648/*-------------------------------------------------------------------------*/
633 649
634/* for drivers using iso endpoints */ 650/* for drivers using iso endpoints */
@@ -777,6 +793,22 @@ static inline int usb_make_path(struct usb_device *dev, char *buf, size_t size)
777 .bInterfaceProtocol = (pr) 793 .bInterfaceProtocol = (pr)
778 794
779/** 795/**
796 * USB_DEVICE_INTERFACE_NUMBER - describe a usb device with a specific interface number
797 * @vend: the 16 bit USB Vendor ID
798 * @prod: the 16 bit USB Product ID
799 * @num: bInterfaceNumber value
800 *
801 * This macro is used to create a struct usb_device_id that matches a
802 * specific interface number of devices.
803 */
804#define USB_DEVICE_INTERFACE_NUMBER(vend, prod, num) \
805 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
806 USB_DEVICE_ID_MATCH_INT_NUMBER, \
807 .idVendor = (vend), \
808 .idProduct = (prod), \
809 .bInterfaceNumber = (num)
810
811/**
780 * USB_DEVICE_INFO - macro used to describe a class of usb devices 812 * USB_DEVICE_INFO - macro used to describe a class of usb devices
781 * @cl: bDeviceClass value 813 * @cl: bDeviceClass value
782 * @sc: bDeviceSubClass value 814 * @sc: bDeviceSubClass value
@@ -829,6 +861,27 @@ static inline int usb_make_path(struct usb_device *dev, char *buf, size_t size)
829 .bInterfaceSubClass = (sc), \ 861 .bInterfaceSubClass = (sc), \
830 .bInterfaceProtocol = (pr) 862 .bInterfaceProtocol = (pr)
831 863
864/**
865 * USB_VENDOR_AND_INTERFACE_INFO - describe a specific usb vendor with a class of usb interfaces
866 * @vend: the 16 bit USB Vendor ID
867 * @cl: bInterfaceClass value
868 * @sc: bInterfaceSubClass value
869 * @pr: bInterfaceProtocol value
870 *
871 * This macro is used to create a struct usb_device_id that matches a
872 * specific vendor with a specific class of interfaces.
873 *
874 * This is especially useful when explicitly matching devices that have
875 * vendor specific bDeviceClass values, but standards-compliant interfaces.
876 */
877#define USB_VENDOR_AND_INTERFACE_INFO(vend, cl, sc, pr) \
878 .match_flags = USB_DEVICE_ID_MATCH_INT_INFO \
879 | USB_DEVICE_ID_MATCH_VENDOR, \
880 .idVendor = (vend), \
881 .bInterfaceClass = (cl), \
882 .bInterfaceSubClass = (sc), \
883 .bInterfaceProtocol = (pr)
884
832/* ----------------------------------------------------------------------- */ 885/* ----------------------------------------------------------------------- */
833 886
834/* Stuff for dynamic usb ids */ 887/* Stuff for dynamic usb ids */
diff --git a/include/linux/usb/chipidea.h b/include/linux/usb/chipidea.h
index edb90d6cfd12..544825dde823 100644
--- a/include/linux/usb/chipidea.h
+++ b/include/linux/usb/chipidea.h
@@ -5,12 +5,15 @@
5#ifndef __LINUX_USB_CHIPIDEA_H 5#ifndef __LINUX_USB_CHIPIDEA_H
6#define __LINUX_USB_CHIPIDEA_H 6#define __LINUX_USB_CHIPIDEA_H
7 7
8#include <linux/usb/otg.h>
9
8struct ci13xxx; 10struct ci13xxx;
9struct ci13xxx_udc_driver { 11struct ci13xxx_platform_data {
10 const char *name; 12 const char *name;
11 /* offset of the capability registers */ 13 /* offset of the capability registers */
12 uintptr_t capoffset; 14 uintptr_t capoffset;
13 unsigned power_budget; 15 unsigned power_budget;
16 struct usb_phy *phy;
14 unsigned long flags; 17 unsigned long flags;
15#define CI13XXX_REGS_SHARED BIT(0) 18#define CI13XXX_REGS_SHARED BIT(0)
16#define CI13XXX_REQUIRE_TRANSCEIVER BIT(1) 19#define CI13XXX_REQUIRE_TRANSCEIVER BIT(1)
@@ -19,10 +22,17 @@ struct ci13xxx_udc_driver {
19 22
20#define CI13XXX_CONTROLLER_RESET_EVENT 0 23#define CI13XXX_CONTROLLER_RESET_EVENT 0
21#define CI13XXX_CONTROLLER_STOPPED_EVENT 1 24#define CI13XXX_CONTROLLER_STOPPED_EVENT 1
22 void (*notify_event) (struct ci13xxx *udc, unsigned event); 25 void (*notify_event) (struct ci13xxx *ci, unsigned event);
23}; 26};
24 27
25/* Default offset of capability registers */ 28/* Default offset of capability registers */
26#define DEF_CAPOFFSET 0x100 29#define DEF_CAPOFFSET 0x100
27 30
31/* Add ci13xxx device */
32struct platform_device *ci13xxx_add_device(struct device *dev,
33 struct resource *res, int nres,
34 struct ci13xxx_platform_data *platdata);
35/* Remove ci13xxx device */
36void ci13xxx_remove_device(struct platform_device *pdev);
37
28#endif 38#endif
diff --git a/include/linux/usb/ehci_def.h b/include/linux/usb/ehci_def.h
index 7cc95ee3606b..de4b9ed5d5dd 100644
--- a/include/linux/usb/ehci_def.h
+++ b/include/linux/usb/ehci_def.h
@@ -111,7 +111,13 @@ struct ehci_regs {
111 /* ASYNCLISTADDR: offset 0x18 */ 111 /* ASYNCLISTADDR: offset 0x18 */
112 u32 async_next; /* address of next async queue head */ 112 u32 async_next; /* address of next async queue head */
113 113
114 u32 reserved[9]; 114 u32 reserved1[2];
115
116 /* TXFILLTUNING: offset 0x24 */
117 u32 txfill_tuning; /* TX FIFO Tuning register */
118#define TXFIFO_DEFAULT (8<<16) /* FIFO burst threshold 8 */
119
120 u32 reserved2[6];
115 121
116 /* CONFIGFLAG: offset 0x40 */ 122 /* CONFIGFLAG: offset 0x40 */
117 u32 configured_flag; 123 u32 configured_flag;
@@ -155,26 +161,34 @@ struct ehci_regs {
155#define PORT_CSC (1<<1) /* connect status change */ 161#define PORT_CSC (1<<1) /* connect status change */
156#define PORT_CONNECT (1<<0) /* device connected */ 162#define PORT_CONNECT (1<<0) /* device connected */
157#define PORT_RWC_BITS (PORT_CSC | PORT_PEC | PORT_OCC) 163#define PORT_RWC_BITS (PORT_CSC | PORT_PEC | PORT_OCC)
158};
159 164
160#define USBMODE 0x68 /* USB Device mode */ 165 u32 reserved3[9];
166
167 /* USBMODE: offset 0x68 */
168 u32 usbmode; /* USB Device mode */
161#define USBMODE_SDIS (1<<3) /* Stream disable */ 169#define USBMODE_SDIS (1<<3) /* Stream disable */
162#define USBMODE_BE (1<<2) /* BE/LE endianness select */ 170#define USBMODE_BE (1<<2) /* BE/LE endianness select */
163#define USBMODE_CM_HC (3<<0) /* host controller mode */ 171#define USBMODE_CM_HC (3<<0) /* host controller mode */
164#define USBMODE_CM_IDLE (0<<0) /* idle state */ 172#define USBMODE_CM_IDLE (0<<0) /* idle state */
165 173
174 u32 reserved4[7];
175
166/* Moorestown has some non-standard registers, partially due to the fact that 176/* Moorestown has some non-standard registers, partially due to the fact that
167 * its EHCI controller has both TT and LPM support. HOSTPCx are extensions to 177 * its EHCI controller has both TT and LPM support. HOSTPCx are extensions to
168 * PORTSCx 178 * PORTSCx
169 */ 179 */
170#define HOSTPC0 0x84 /* HOSTPC extension */ 180 /* HOSTPC: offset 0x84 */
181 u32 hostpc[0]; /* HOSTPC extension */
171#define HOSTPC_PHCD (1<<22) /* Phy clock disable */ 182#define HOSTPC_PHCD (1<<22) /* Phy clock disable */
172#define HOSTPC_PSPD (3<<25) /* Port speed detection */ 183#define HOSTPC_PSPD (3<<25) /* Port speed detection */
173#define USBMODE_EX 0xc8 /* USB Device mode extension */ 184
185 u32 reserved5[17];
186
187 /* USBMODE_EX: offset 0xc8 */
188 u32 usbmode_ex; /* USB Device mode extension */
174#define USBMODE_EX_VBPS (1<<5) /* VBus Power Select On */ 189#define USBMODE_EX_VBPS (1<<5) /* VBus Power Select On */
175#define USBMODE_EX_HC (3<<0) /* host controller mode */ 190#define USBMODE_EX_HC (3<<0) /* host controller mode */
176#define TXFILLTUNING 0x24 /* TX FIFO Tuning register */ 191};
177#define TXFIFO_DEFAULT (8<<16) /* FIFO burst threshold 8 */
178 192
179/* Appendix C, Debug port ... intended for use with special "debug devices" 193/* Appendix C, Debug port ... intended for use with special "debug devices"
180 * that can help if there's no serial console. (nonstandard enumeration.) 194 * that can help if there's no serial console. (nonstandard enumeration.)
diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h
index 49b3ac29726a..c5fdb148fc02 100644
--- a/include/linux/usb/hcd.h
+++ b/include/linux/usb/hcd.h
@@ -93,6 +93,12 @@ struct usb_hcd {
93 */ 93 */
94 const struct hc_driver *driver; /* hw-specific hooks */ 94 const struct hc_driver *driver; /* hw-specific hooks */
95 95
96 /*
97 * OTG and some Host controllers need software interaction with phys;
98 * other external phys should be software-transparent
99 */
100 struct usb_phy *phy;
101
96 /* Flags that need to be manipulated atomically because they can 102 /* Flags that need to be manipulated atomically because they can
97 * change while the host controller is running. Always use 103 * change while the host controller is running. Always use
98 * set_bit() or clear_bit() to change their values. 104 * set_bit() or clear_bit() to change their values.
diff --git a/include/linux/usb/musb-omap.h b/include/linux/usb/musb-omap.h
new file mode 100644
index 000000000000..7774c5986f07
--- /dev/null
+++ b/include/linux/usb/musb-omap.h
@@ -0,0 +1,30 @@
1/*
2 * Copyright (C) 2011-2012 by Texas Instruments
3 *
4 * The Inventra Controller Driver for Linux is free software; you
5 * can redistribute it and/or modify it under the terms of the GNU
6 * General Public License version 2 as published by the Free Software
7 * Foundation.
8 */
9
10#ifndef __MUSB_OMAP_H__
11#define __MUSB_OMAP_H__
12
13enum omap_musb_vbus_id_status {
14 OMAP_MUSB_UNKNOWN = 0,
15 OMAP_MUSB_ID_GROUND,
16 OMAP_MUSB_ID_FLOAT,
17 OMAP_MUSB_VBUS_VALID,
18 OMAP_MUSB_VBUS_OFF,
19};
20
21#if (defined(CONFIG_USB_MUSB_OMAP2PLUS) || \
22 defined(CONFIG_USB_MUSB_OMAP2PLUS_MODULE))
23void omap_musb_mailbox(enum omap_musb_vbus_id_status status);
24#else
25static inline void omap_musb_mailbox(enum omap_musb_vbus_id_status status)
26{
27}
28#endif
29
30#endif /* __MUSB_OMAP_H__ */
diff --git a/include/linux/usb/otg.h b/include/linux/usb/otg.h
index 38ab3f46346f..45824be0a2f9 100644
--- a/include/linux/usb/otg.h
+++ b/include/linux/usb/otg.h
@@ -43,6 +43,13 @@ enum usb_phy_events {
43 USB_EVENT_ENUMERATED, /* gadget driver enumerated */ 43 USB_EVENT_ENUMERATED, /* gadget driver enumerated */
44}; 44};
45 45
46/* associate a type with PHY */
47enum usb_phy_type {
48 USB_PHY_TYPE_UNDEFINED,
49 USB_PHY_TYPE_USB2,
50 USB_PHY_TYPE_USB3,
51};
52
46struct usb_phy; 53struct usb_phy;
47 54
48/* for transceivers connected thru an ULPI interface, the user must 55/* for transceivers connected thru an ULPI interface, the user must
@@ -89,6 +96,7 @@ struct usb_phy {
89 const char *label; 96 const char *label;
90 unsigned int flags; 97 unsigned int flags;
91 98
99 enum usb_phy_type type;
92 enum usb_otg_state state; 100 enum usb_otg_state state;
93 enum usb_phy_events last_event; 101 enum usb_phy_events last_event;
94 102
@@ -105,6 +113,9 @@ struct usb_phy {
105 u16 port_status; 113 u16 port_status;
106 u16 port_change; 114 u16 port_change;
107 115
116 /* to support controllers that have multiple transceivers */
117 struct list_head head;
118
108 /* initialize/shutdown the OTG controller */ 119 /* initialize/shutdown the OTG controller */
109 int (*init)(struct usb_phy *x); 120 int (*init)(struct usb_phy *x);
110 void (*shutdown)(struct usb_phy *x); 121 void (*shutdown)(struct usb_phy *x);
@@ -117,11 +128,15 @@ struct usb_phy {
117 int (*set_suspend)(struct usb_phy *x, 128 int (*set_suspend)(struct usb_phy *x,
118 int suspend); 129 int suspend);
119 130
131 /* notify phy connect status change */
132 int (*notify_connect)(struct usb_phy *x, int port);
133 int (*notify_disconnect)(struct usb_phy *x, int port);
120}; 134};
121 135
122 136
123/* for board-specific init logic */ 137/* for board-specific init logic */
124extern int usb_set_transceiver(struct usb_phy *); 138extern int usb_add_phy(struct usb_phy *, enum usb_phy_type type);
139extern void usb_remove_phy(struct usb_phy *);
125 140
126#if defined(CONFIG_NOP_USB_XCEIV) || (defined(CONFIG_NOP_USB_XCEIV_MODULE) && defined(MODULE)) 141#if defined(CONFIG_NOP_USB_XCEIV) || (defined(CONFIG_NOP_USB_XCEIV_MODULE) && defined(MODULE))
127/* sometimes transceivers are accessed only through e.g. ULPI */ 142/* sometimes transceivers are accessed only through e.g. ULPI */
@@ -172,16 +187,29 @@ usb_phy_shutdown(struct usb_phy *x)
172 187
173/* for usb host and peripheral controller drivers */ 188/* for usb host and peripheral controller drivers */
174#ifdef CONFIG_USB_OTG_UTILS 189#ifdef CONFIG_USB_OTG_UTILS
175extern struct usb_phy *usb_get_transceiver(void); 190extern struct usb_phy *usb_get_phy(enum usb_phy_type type);
176extern void usb_put_transceiver(struct usb_phy *); 191extern struct usb_phy *devm_usb_get_phy(struct device *dev,
192 enum usb_phy_type type);
193extern void usb_put_phy(struct usb_phy *);
194extern void devm_usb_put_phy(struct device *dev, struct usb_phy *x);
177extern const char *otg_state_string(enum usb_otg_state state); 195extern const char *otg_state_string(enum usb_otg_state state);
178#else 196#else
179static inline struct usb_phy *usb_get_transceiver(void) 197static inline struct usb_phy *usb_get_phy(enum usb_phy_type type)
198{
199 return NULL;
200}
201
202static inline struct usb_phy *devm_usb_get_phy(struct device *dev,
203 enum usb_phy_type type)
180{ 204{
181 return NULL; 205 return NULL;
182} 206}
183 207
184static inline void usb_put_transceiver(struct usb_phy *x) 208static inline void usb_put_phy(struct usb_phy *x)
209{
210}
211
212static inline void devm_usb_put_phy(struct device *dev, struct usb_phy *x)
185{ 213{
186} 214}
187 215
@@ -252,6 +280,24 @@ usb_phy_set_suspend(struct usb_phy *x, int suspend)
252} 280}
253 281
254static inline int 282static inline int
283usb_phy_notify_connect(struct usb_phy *x, int port)
284{
285 if (x->notify_connect)
286 return x->notify_connect(x, port);
287 else
288 return 0;
289}
290
291static inline int
292usb_phy_notify_disconnect(struct usb_phy *x, int port)
293{
294 if (x->notify_disconnect)
295 return x->notify_disconnect(x, port);
296 else
297 return 0;
298}
299
300static inline int
255otg_start_srp(struct usb_otg *otg) 301otg_start_srp(struct usb_otg *otg)
256{ 302{
257 if (otg && otg->start_srp) 303 if (otg && otg->start_srp)
@@ -276,4 +322,15 @@ usb_unregister_notifier(struct usb_phy *x, struct notifier_block *nb)
276/* for OTG controller drivers (and maybe other stuff) */ 322/* for OTG controller drivers (and maybe other stuff) */
277extern int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num); 323extern int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num);
278 324
325static inline const char *usb_phy_type_string(enum usb_phy_type type)
326{
327 switch (type) {
328 case USB_PHY_TYPE_USB2:
329 return "USB2 PHY";
330 case USB_PHY_TYPE_USB3:
331 return "USB3 PHY";
332 default:
333 return "UNKNOWN PHY TYPE";
334 }
335}
279#endif /* __LINUX_USB_OTG_H */ 336#endif /* __LINUX_USB_OTG_H */
diff --git a/include/linux/usb/renesas_usbhs.h b/include/linux/usb/renesas_usbhs.h
index 547e59cc00ea..c5d36c65c33b 100644
--- a/include/linux/usb/renesas_usbhs.h
+++ b/include/linux/usb/renesas_usbhs.h
@@ -132,6 +132,14 @@ struct renesas_usbhs_driver_param {
132 * option: 132 * option:
133 * 133 *
134 * dma id for dmaengine 134 * dma id for dmaengine
135 * The data transfer direction on D0FIFO/D1FIFO should be
136 * fixed for keeping consistency.
137 * So, the platform id settings will be..
138 * .d0_tx_id = xx_TX,
139 * .d1_rx_id = xx_RX,
140 * or
141 * .d1_tx_id = xx_TX,
142 * .d0_rx_id = xx_RX,
135 */ 143 */
136 int d0_tx_id; 144 int d0_tx_id;
137 int d0_rx_id; 145 int d0_rx_id;
diff --git a/include/linux/usb/tilegx.h b/include/linux/usb/tilegx.h
new file mode 100644
index 000000000000..2d65e3435680
--- /dev/null
+++ b/include/linux/usb/tilegx.h
@@ -0,0 +1,34 @@
1/*
2 * Copyright 2012 Tilera Corporation. All Rights Reserved.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation, version 2.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
11 * NON INFRINGEMENT. See the GNU General Public License for
12 * more details.
13 *
14 * Structure to contain platform-specific data related to Tile-Gx USB
15 * controllers.
16 */
17
18#ifndef _LINUX_USB_TILEGX_H
19#define _LINUX_USB_TILEGX_H
20
21#include <gxio/usb_host.h>
22
23struct tilegx_usb_platform_data {
24 /* GXIO device index. */
25 int dev_index;
26
27 /* GXIO device context. */
28 gxio_usb_host_context_t usb_ctx;
29
30 /* Device IRQ. */
31 unsigned int irq;
32};
33
34#endif /* _LINUX_USB_TILEGX_H */
diff --git a/include/linux/usb/uas.h b/include/linux/usb/uas.h
index 9a988e413694..5499ab5c94bd 100644
--- a/include/linux/usb/uas.h
+++ b/include/linux/usb/uas.h
@@ -20,6 +20,28 @@ enum {
20 IU_ID_WRITE_READY = 0x07, 20 IU_ID_WRITE_READY = 0x07,
21}; 21};
22 22
23enum {
24 TMF_ABORT_TASK = 0x01,
25 TMF_ABORT_TASK_SET = 0x02,
26 TMF_CLEAR_TASK_SET = 0x04,
27 TMF_LOGICAL_UNIT_RESET = 0x08,
28 TMF_I_T_NEXUS_RESET = 0x10,
29 TMF_CLEAR_ACA = 0x40,
30 TMF_QUERY_TASK = 0x80,
31 TMF_QUERY_TASK_SET = 0x81,
32 TMF_QUERY_ASYNC_EVENT = 0x82,
33};
34
35enum {
36 RC_TMF_COMPLETE = 0x00,
37 RC_INVALID_INFO_UNIT = 0x02,
38 RC_TMF_NOT_SUPPORTED = 0x04,
39 RC_TMF_FAILED = 0x05,
40 RC_TMF_SUCCEEDED = 0x08,
41 RC_INCORRECT_LUN = 0x09,
42 RC_OVERLAPPED_TAG = 0x0a,
43};
44
23struct command_iu { 45struct command_iu {
24 __u8 iu_id; 46 __u8 iu_id;
25 __u8 rsvd1; 47 __u8 rsvd1;
@@ -32,6 +54,16 @@ struct command_iu {
32 __u8 cdb[16]; /* XXX: Overflow-checking tools may misunderstand */ 54 __u8 cdb[16]; /* XXX: Overflow-checking tools may misunderstand */
33}; 55};
34 56
57struct task_mgmt_iu {
58 __u8 iu_id;
59 __u8 rsvd1;
60 __be16 tag;
61 __u8 function;
62 __u8 rsvd2;
63 __be16 task_tag;
64 struct scsi_lun lun;
65};
66
35/* 67/*
36 * Also used for the Read Ready and Write Ready IUs since they have the 68 * Also used for the Read Ready and Write Ready IUs since they have the
37 * same first four bytes 69 * same first four bytes
@@ -47,6 +79,14 @@ struct sense_iu {
47 __u8 sense[SCSI_SENSE_BUFFERSIZE]; 79 __u8 sense[SCSI_SENSE_BUFFERSIZE];
48}; 80};
49 81
82struct response_ui {
83 __u8 iu_id;
84 __u8 rsvd1;
85 __be16 tag;
86 __be16 add_response_info;
87 __u8 response_code;
88};
89
50struct usb_pipe_usage_descriptor { 90struct usb_pipe_usage_descriptor {
51 __u8 bLength; 91 __u8 bLength;
52 __u8 bDescriptorType; 92 __u8 bDescriptorType;
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h
index 76f439647c4b..f87cf622317f 100644
--- a/include/linux/usb/usbnet.h
+++ b/include/linux/usb/usbnet.h
@@ -66,9 +66,8 @@ struct usbnet {
66# define EVENT_STS_SPLIT 3 66# define EVENT_STS_SPLIT 3
67# define EVENT_LINK_RESET 4 67# define EVENT_LINK_RESET 4
68# define EVENT_RX_PAUSED 5 68# define EVENT_RX_PAUSED 5
69# define EVENT_DEV_WAKING 6 69# define EVENT_DEV_ASLEEP 6
70# define EVENT_DEV_ASLEEP 7 70# define EVENT_DEV_OPEN 7
71# define EVENT_DEV_OPEN 8
72}; 71};
73 72
74static inline struct usb_driver *driver_of(struct usb_interface *intf) 73static inline struct usb_driver *driver_of(struct usb_interface *intf)
diff --git a/include/linux/usb_usual.h b/include/linux/usb_usual.h
index 17df3600bcef..e84e769aaddc 100644
--- a/include/linux/usb_usual.h
+++ b/include/linux/usb_usual.h
@@ -64,7 +64,9 @@
64 US_FLAG(NO_READ_CAPACITY_16, 0x00080000) \ 64 US_FLAG(NO_READ_CAPACITY_16, 0x00080000) \
65 /* cannot handle READ_CAPACITY_16 */ \ 65 /* cannot handle READ_CAPACITY_16 */ \
66 US_FLAG(INITIAL_READ10, 0x00100000) \ 66 US_FLAG(INITIAL_READ10, 0x00100000) \
67 /* Initial READ(10) (and others) must be retried */ 67 /* Initial READ(10) (and others) must be retried */ \
68 US_FLAG(WRITE_CACHE, 0x00200000) \
69 /* Write Cache status is not available */
68 70
69#define US_FLAG(name, value) US_FL_##name = value , 71#define US_FLAG(name, value) US_FL_##name = value ,
70enum { US_DO_ALL_FLAGS }; 72enum { US_DO_ALL_FLAGS };
diff --git a/include/linux/usbdevice_fs.h b/include/linux/usbdevice_fs.h
index 15591d2ea400..3b74666be027 100644
--- a/include/linux/usbdevice_fs.h
+++ b/include/linux/usbdevice_fs.h
@@ -125,6 +125,12 @@ struct usbdevfs_hub_portinfo {
125 char port [127]; /* e.g. port 3 connects to device 27 */ 125 char port [127]; /* e.g. port 3 connects to device 27 */
126}; 126};
127 127
128/* Device capability flags */
129#define USBDEVFS_CAP_ZERO_PACKET 0x01
130#define USBDEVFS_CAP_BULK_CONTINUATION 0x02
131#define USBDEVFS_CAP_NO_PACKET_SIZE_LIM 0x04
132#define USBDEVFS_CAP_BULK_SCATTER_GATHER 0x08
133
128#ifdef __KERNEL__ 134#ifdef __KERNEL__
129#ifdef CONFIG_COMPAT 135#ifdef CONFIG_COMPAT
130#include <linux/compat.h> 136#include <linux/compat.h>
@@ -204,4 +210,6 @@ struct usbdevfs_ioctl32 {
204#define USBDEVFS_CONNECT _IO('U', 23) 210#define USBDEVFS_CONNECT _IO('U', 23)
205#define USBDEVFS_CLAIM_PORT _IOR('U', 24, unsigned int) 211#define USBDEVFS_CLAIM_PORT _IOR('U', 24, unsigned int)
206#define USBDEVFS_RELEASE_PORT _IOR('U', 25, unsigned int) 212#define USBDEVFS_RELEASE_PORT _IOR('U', 25, unsigned int)
213#define USBDEVFS_GET_CAPABILITIES _IOR('U', 26, __u32)
214
207#endif /* _LINUX_USBDEVICE_FS_H */ 215#endif /* _LINUX_USBDEVICE_FS_H */
diff --git a/include/linux/vga_switcheroo.h b/include/linux/vga_switcheroo.h
index 60da41fe9dc2..ddb419cf4530 100644
--- a/include/linux/vga_switcheroo.h
+++ b/include/linux/vga_switcheroo.h
@@ -7,8 +7,13 @@
7 * vga_switcheroo.h - Support for laptop with dual GPU using one set of outputs 7 * vga_switcheroo.h - Support for laptop with dual GPU using one set of outputs
8 */ 8 */
9 9
10#ifndef _LINUX_VGA_SWITCHEROO_H_
11#define _LINUX_VGA_SWITCHEROO_H_
12
10#include <linux/fb.h> 13#include <linux/fb.h>
11 14
15struct pci_dev;
16
12enum vga_switcheroo_state { 17enum vga_switcheroo_state {
13 VGA_SWITCHEROO_OFF, 18 VGA_SWITCHEROO_OFF,
14 VGA_SWITCHEROO_ON, 19 VGA_SWITCHEROO_ON,
@@ -71,3 +76,4 @@ static inline int vga_switcheroo_get_client_state(struct pci_dev *dev) { return
71 76
72 77
73#endif 78#endif
79#endif /* _LINUX_VGA_SWITCHEROO_H_ */
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
index 370d11106c11..2039c5d3292e 100644
--- a/include/linux/videodev2.h
+++ b/include/linux/videodev2.h
@@ -2640,9 +2640,9 @@ struct v4l2_create_buffers {
2640 2640
2641/* Experimental, these three ioctls may change over the next couple of kernel 2641/* Experimental, these three ioctls may change over the next couple of kernel
2642 versions. */ 2642 versions. */
2643#define VIDIOC_ENUM_DV_TIMINGS _IOWR('V', 96, struct v4l2_enum_dv_timings) 2643#define VIDIOC_ENUM_DV_TIMINGS _IOWR('V', 98, struct v4l2_enum_dv_timings)
2644#define VIDIOC_QUERY_DV_TIMINGS _IOR('V', 97, struct v4l2_dv_timings) 2644#define VIDIOC_QUERY_DV_TIMINGS _IOR('V', 99, struct v4l2_dv_timings)
2645#define VIDIOC_DV_TIMINGS_CAP _IOWR('V', 98, struct v4l2_dv_timings_cap) 2645#define VIDIOC_DV_TIMINGS_CAP _IOWR('V', 100, struct v4l2_dv_timings_cap)
2646 2646
2647/* Reminder: when adding new ioctls please add support for them to 2647/* Reminder: when adding new ioctls please add support for them to
2648 drivers/media/video/v4l2-compat-ioctl32.c as well! */ 2648 drivers/media/video/v4l2-compat-ioctl32.c as well! */
diff --git a/include/linux/virtio.h b/include/linux/virtio.h
index 8efd28ae5597..a1ba8bbd9fbe 100644
--- a/include/linux/virtio.h
+++ b/include/linux/virtio.h
@@ -92,6 +92,7 @@ struct virtio_driver {
92 const unsigned int *feature_table; 92 const unsigned int *feature_table;
93 unsigned int feature_table_size; 93 unsigned int feature_table_size;
94 int (*probe)(struct virtio_device *dev); 94 int (*probe)(struct virtio_device *dev);
95 void (*scan)(struct virtio_device *dev);
95 void (*remove)(struct virtio_device *dev); 96 void (*remove)(struct virtio_device *dev);
96 void (*config_changed)(struct virtio_device *dev); 97 void (*config_changed)(struct virtio_device *dev);
97#ifdef CONFIG_PM 98#ifdef CONFIG_PM
diff --git a/include/linux/virtio_scsi.h b/include/linux/virtio_scsi.h
index 8ddeafdc0546..dc8d305b0e05 100644
--- a/include/linux/virtio_scsi.h
+++ b/include/linux/virtio_scsi.h
@@ -69,6 +69,10 @@ struct virtio_scsi_config {
69 u32 max_lun; 69 u32 max_lun;
70} __packed; 70} __packed;
71 71
72/* Feature Bits */
73#define VIRTIO_SCSI_F_INOUT 0
74#define VIRTIO_SCSI_F_HOTPLUG 1
75
72/* Response codes */ 76/* Response codes */
73#define VIRTIO_SCSI_S_OK 0 77#define VIRTIO_SCSI_S_OK 0
74#define VIRTIO_SCSI_S_OVERRUN 1 78#define VIRTIO_SCSI_S_OVERRUN 1
@@ -105,6 +109,11 @@ struct virtio_scsi_config {
105#define VIRTIO_SCSI_T_TRANSPORT_RESET 1 109#define VIRTIO_SCSI_T_TRANSPORT_RESET 1
106#define VIRTIO_SCSI_T_ASYNC_NOTIFY 2 110#define VIRTIO_SCSI_T_ASYNC_NOTIFY 2
107 111
112/* Reasons of transport reset event */
113#define VIRTIO_SCSI_EVT_RESET_HARD 0
114#define VIRTIO_SCSI_EVT_RESET_RESCAN 1
115#define VIRTIO_SCSI_EVT_RESET_REMOVED 2
116
108#define VIRTIO_SCSI_S_SIMPLE 0 117#define VIRTIO_SCSI_S_SIMPLE 0
109#define VIRTIO_SCSI_S_ORDERED 1 118#define VIRTIO_SCSI_S_ORDERED 1
110#define VIRTIO_SCSI_S_HEAD 2 119#define VIRTIO_SCSI_S_HEAD 2
diff --git a/include/net/addrconf.h b/include/net/addrconf.h
index f2b801c4b555..089a09d001d1 100644
--- a/include/net/addrconf.h
+++ b/include/net/addrconf.h
@@ -46,7 +46,8 @@ struct prefix_info {
46#include <net/if_inet6.h> 46#include <net/if_inet6.h>
47#include <net/ipv6.h> 47#include <net/ipv6.h>
48 48
49#define IN6_ADDR_HSIZE 16 49#define IN6_ADDR_HSIZE_SHIFT 4
50#define IN6_ADDR_HSIZE (1 << IN6_ADDR_HSIZE_SHIFT)
50 51
51extern int addrconf_init(void); 52extern int addrconf_init(void);
52extern void addrconf_cleanup(void); 53extern void addrconf_cleanup(void);
diff --git a/include/net/af_unix.h b/include/net/af_unix.h
index 2ee33da36a7a..b5f8988e4283 100644
--- a/include/net/af_unix.h
+++ b/include/net/af_unix.h
@@ -14,10 +14,11 @@ extern struct sock *unix_get_socket(struct file *filp);
14extern struct sock *unix_peer_get(struct sock *); 14extern struct sock *unix_peer_get(struct sock *);
15 15
16#define UNIX_HASH_SIZE 256 16#define UNIX_HASH_SIZE 256
17#define UNIX_HASH_BITS 8
17 18
18extern unsigned int unix_tot_inflight; 19extern unsigned int unix_tot_inflight;
19extern spinlock_t unix_table_lock; 20extern spinlock_t unix_table_lock;
20extern struct hlist_head unix_socket_table[UNIX_HASH_SIZE + 1]; 21extern struct hlist_head unix_socket_table[2 * UNIX_HASH_SIZE];
21 22
22struct unix_address { 23struct unix_address {
23 atomic_t refcnt; 24 atomic_t refcnt;
diff --git a/include/net/arp.h b/include/net/arp.h
index 4a1f3fb562eb..7f7df93f37cd 100644
--- a/include/net/arp.h
+++ b/include/net/arp.h
@@ -15,24 +15,31 @@ static inline u32 arp_hashfn(u32 key, const struct net_device *dev, u32 hash_rnd
15 return val * hash_rnd; 15 return val * hash_rnd;
16} 16}
17 17
18static inline struct neighbour *__ipv4_neigh_lookup(struct net_device *dev, u32 key) 18static inline struct neighbour *__ipv4_neigh_lookup_noref(struct net_device *dev, u32 key)
19{ 19{
20 struct neigh_hash_table *nht; 20 struct neigh_hash_table *nht = rcu_dereference_bh(arp_tbl.nht);
21 struct neighbour *n; 21 struct neighbour *n;
22 u32 hash_val; 22 u32 hash_val;
23 23
24 rcu_read_lock_bh();
25 nht = rcu_dereference_bh(arp_tbl.nht);
26 hash_val = arp_hashfn(key, dev, nht->hash_rnd[0]) >> (32 - nht->hash_shift); 24 hash_val = arp_hashfn(key, dev, nht->hash_rnd[0]) >> (32 - nht->hash_shift);
27 for (n = rcu_dereference_bh(nht->hash_buckets[hash_val]); 25 for (n = rcu_dereference_bh(nht->hash_buckets[hash_val]);
28 n != NULL; 26 n != NULL;
29 n = rcu_dereference_bh(n->next)) { 27 n = rcu_dereference_bh(n->next)) {
30 if (n->dev == dev && *(u32 *)n->primary_key == key) { 28 if (n->dev == dev && *(u32 *)n->primary_key == key)
31 if (!atomic_inc_not_zero(&n->refcnt)) 29 return n;
32 n = NULL;
33 break;
34 }
35 } 30 }
31
32 return NULL;
33}
34
35static inline struct neighbour *__ipv4_neigh_lookup(struct net_device *dev, u32 key)
36{
37 struct neighbour *n;
38
39 rcu_read_lock_bh();
40 n = __ipv4_neigh_lookup_noref(dev, key);
41 if (n && !atomic_inc_not_zero(&n->refcnt))
42 n = NULL;
36 rcu_read_unlock_bh(); 43 rcu_read_unlock_bh();
37 44
38 return n; 45 return n;
diff --git a/include/net/bluetooth/a2mp.h b/include/net/bluetooth/a2mp.h
new file mode 100644
index 000000000000..6a76e0a0705e
--- /dev/null
+++ b/include/net/bluetooth/a2mp.h
@@ -0,0 +1,126 @@
1/*
2 Copyright (c) 2010,2011 Code Aurora Forum. All rights reserved.
3 Copyright (c) 2011,2012 Intel Corp.
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License version 2 and
7 only version 2 as published by the Free Software Foundation.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13*/
14
15#ifndef __A2MP_H
16#define __A2MP_H
17
18#include <net/bluetooth/l2cap.h>
19
20#define A2MP_FEAT_EXT 0x8000
21
22struct amp_mgr {
23 struct l2cap_conn *l2cap_conn;
24 struct l2cap_chan *a2mp_chan;
25 struct kref kref;
26 __u8 ident;
27 __u8 handle;
28 unsigned long flags;
29};
30
31struct a2mp_cmd {
32 __u8 code;
33 __u8 ident;
34 __le16 len;
35 __u8 data[0];
36} __packed;
37
38/* A2MP command codes */
39#define A2MP_COMMAND_REJ 0x01
40struct a2mp_cmd_rej {
41 __le16 reason;
42 __u8 data[0];
43} __packed;
44
45#define A2MP_DISCOVER_REQ 0x02
46struct a2mp_discov_req {
47 __le16 mtu;
48 __le16 ext_feat;
49} __packed;
50
51struct a2mp_cl {
52 __u8 id;
53 __u8 type;
54 __u8 status;
55} __packed;
56
57#define A2MP_DISCOVER_RSP 0x03
58struct a2mp_discov_rsp {
59 __le16 mtu;
60 __le16 ext_feat;
61 struct a2mp_cl cl[0];
62} __packed;
63
64#define A2MP_CHANGE_NOTIFY 0x04
65#define A2MP_CHANGE_RSP 0x05
66
67#define A2MP_GETINFO_REQ 0x06
68struct a2mp_info_req {
69 __u8 id;
70} __packed;
71
72#define A2MP_GETINFO_RSP 0x07
73struct a2mp_info_rsp {
74 __u8 id;
75 __u8 status;
76 __le32 total_bw;
77 __le32 max_bw;
78 __le32 min_latency;
79 __le16 pal_cap;
80 __le16 assoc_size;
81} __packed;
82
83#define A2MP_GETAMPASSOC_REQ 0x08
84struct a2mp_amp_assoc_req {
85 __u8 id;
86} __packed;
87
88#define A2MP_GETAMPASSOC_RSP 0x09
89struct a2mp_amp_assoc_rsp {
90 __u8 id;
91 __u8 status;
92 __u8 amp_assoc[0];
93} __packed;
94
95#define A2MP_CREATEPHYSLINK_REQ 0x0A
96#define A2MP_DISCONNPHYSLINK_REQ 0x0C
97struct a2mp_physlink_req {
98 __u8 local_id;
99 __u8 remote_id;
100 __u8 amp_assoc[0];
101} __packed;
102
103#define A2MP_CREATEPHYSLINK_RSP 0x0B
104#define A2MP_DISCONNPHYSLINK_RSP 0x0D
105struct a2mp_physlink_rsp {
106 __u8 local_id;
107 __u8 remote_id;
108 __u8 status;
109} __packed;
110
111/* A2MP response status */
112#define A2MP_STATUS_SUCCESS 0x00
113#define A2MP_STATUS_INVALID_CTRL_ID 0x01
114#define A2MP_STATUS_UNABLE_START_LINK_CREATION 0x02
115#define A2MP_STATUS_NO_PHYSICAL_LINK_EXISTS 0x02
116#define A2MP_STATUS_COLLISION_OCCURED 0x03
117#define A2MP_STATUS_DISCONN_REQ_RECVD 0x04
118#define A2MP_STATUS_PHYS_LINK_EXISTS 0x05
119#define A2MP_STATUS_SECURITY_VIOLATION 0x06
120
121void amp_mgr_get(struct amp_mgr *mgr);
122int amp_mgr_put(struct amp_mgr *mgr);
123struct l2cap_chan *a2mp_channel_create(struct l2cap_conn *conn,
124 struct sk_buff *skb);
125
126#endif /* __A2MP_H */
diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h
index 961669b648fd..565d4bee1e49 100644
--- a/include/net/bluetooth/bluetooth.h
+++ b/include/net/bluetooth/bluetooth.h
@@ -1,4 +1,4 @@
1/* 1/*
2 BlueZ - Bluetooth protocol stack for Linux 2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated 3 Copyright (C) 2000-2001 Qualcomm Incorporated
4 4
@@ -12,22 +12,19 @@
12 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 12 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. 13 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY 14 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 15 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 19
20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22 SOFTWARE IS DISCLAIMED. 22 SOFTWARE IS DISCLAIMED.
23*/ 23*/
24 24
25#ifndef __BLUETOOTH_H 25#ifndef __BLUETOOTH_H
26#define __BLUETOOTH_H 26#define __BLUETOOTH_H
27 27
28#include <asm/types.h>
29#include <asm/byteorder.h>
30#include <linux/list.h>
31#include <linux/poll.h> 28#include <linux/poll.h>
32#include <net/sock.h> 29#include <net/sock.h>
33 30
@@ -168,8 +165,8 @@ typedef struct {
168#define BDADDR_LE_PUBLIC 0x01 165#define BDADDR_LE_PUBLIC 0x01
169#define BDADDR_LE_RANDOM 0x02 166#define BDADDR_LE_RANDOM 0x02
170 167
171#define BDADDR_ANY (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}}) 168#define BDADDR_ANY (&(bdaddr_t) {{0, 0, 0, 0, 0, 0} })
172#define BDADDR_LOCAL (&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff}}) 169#define BDADDR_LOCAL (&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff} })
173 170
174/* Copy, swap, convert BD Address */ 171/* Copy, swap, convert BD Address */
175static inline int bacmp(bdaddr_t *ba1, bdaddr_t *ba2) 172static inline int bacmp(bdaddr_t *ba1, bdaddr_t *ba2)
@@ -215,7 +212,7 @@ int bt_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
215 struct msghdr *msg, size_t len, int flags); 212 struct msghdr *msg, size_t len, int flags);
216int bt_sock_stream_recvmsg(struct kiocb *iocb, struct socket *sock, 213int bt_sock_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
217 struct msghdr *msg, size_t len, int flags); 214 struct msghdr *msg, size_t len, int flags);
218uint bt_sock_poll(struct file * file, struct socket *sock, poll_table *wait); 215uint bt_sock_poll(struct file *file, struct socket *sock, poll_table *wait);
219int bt_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg); 216int bt_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
220int bt_sock_wait_state(struct sock *sk, int state, unsigned long timeo); 217int bt_sock_wait_state(struct sock *sk, int state, unsigned long timeo);
221 218
@@ -225,12 +222,12 @@ struct sock *bt_accept_dequeue(struct sock *parent, struct socket *newsock);
225 222
226/* Skb helpers */ 223/* Skb helpers */
227struct l2cap_ctrl { 224struct l2cap_ctrl {
228 unsigned int sframe : 1, 225 unsigned int sframe:1,
229 poll : 1, 226 poll:1,
230 final : 1, 227 final:1,
231 fcs : 1, 228 fcs:1,
232 sar : 2, 229 sar:2,
233 super : 2; 230 super:2;
234 __u16 reqseq; 231 __u16 reqseq;
235 __u16 txseq; 232 __u16 txseq;
236 __u8 retries; 233 __u8 retries;
@@ -249,7 +246,8 @@ static inline struct sk_buff *bt_skb_alloc(unsigned int len, gfp_t how)
249{ 246{
250 struct sk_buff *skb; 247 struct sk_buff *skb;
251 248
252 if ((skb = alloc_skb(len + BT_SKB_RESERVE, how))) { 249 skb = alloc_skb(len + BT_SKB_RESERVE, how);
250 if (skb) {
253 skb_reserve(skb, BT_SKB_RESERVE); 251 skb_reserve(skb, BT_SKB_RESERVE);
254 bt_cb(skb)->incoming = 0; 252 bt_cb(skb)->incoming = 0;
255 } 253 }
@@ -261,7 +259,8 @@ static inline struct sk_buff *bt_skb_send_alloc(struct sock *sk,
261{ 259{
262 struct sk_buff *skb; 260 struct sk_buff *skb;
263 261
264 if ((skb = sock_alloc_send_skb(sk, len + BT_SKB_RESERVE, nb, err))) { 262 skb = sock_alloc_send_skb(sk, len + BT_SKB_RESERVE, nb, err);
263 if (skb) {
265 skb_reserve(skb, BT_SKB_RESERVE); 264 skb_reserve(skb, BT_SKB_RESERVE);
266 bt_cb(skb)->incoming = 0; 265 bt_cb(skb)->incoming = 0;
267 } 266 }
diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index 66a7b579e31c..ccd723e0f783 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -30,6 +30,9 @@
30#define HCI_MAX_EVENT_SIZE 260 30#define HCI_MAX_EVENT_SIZE 260
31#define HCI_MAX_FRAME_SIZE (HCI_MAX_ACL_SIZE + 4) 31#define HCI_MAX_FRAME_SIZE (HCI_MAX_ACL_SIZE + 4)
32 32
33#define HCI_LINK_KEY_SIZE 16
34#define HCI_AMP_LINK_KEY_SIZE (2 * HCI_LINK_KEY_SIZE)
35
33/* HCI dev events */ 36/* HCI dev events */
34#define HCI_DEV_REG 1 37#define HCI_DEV_REG 1
35#define HCI_DEV_UNREG 2 38#define HCI_DEV_UNREG 2
@@ -56,9 +59,12 @@
56#define HCI_BREDR 0x00 59#define HCI_BREDR 0x00
57#define HCI_AMP 0x01 60#define HCI_AMP 0x01
58 61
62/* First BR/EDR Controller shall have ID = 0 */
63#define HCI_BREDR_ID 0
64
59/* HCI device quirks */ 65/* HCI device quirks */
60enum { 66enum {
61 HCI_QUIRK_NO_RESET, 67 HCI_QUIRK_RESET_ON_CLOSE,
62 HCI_QUIRK_RAW_DEVICE, 68 HCI_QUIRK_RAW_DEVICE,
63 HCI_QUIRK_FIXUP_BUFFER_SIZE 69 HCI_QUIRK_FIXUP_BUFFER_SIZE
64}; 70};
@@ -133,13 +139,12 @@ enum {
133#define HCIINQUIRY _IOR('H', 240, int) 139#define HCIINQUIRY _IOR('H', 240, int)
134 140
135/* HCI timeouts */ 141/* HCI timeouts */
136#define HCI_CONNECT_TIMEOUT (40000) /* 40 seconds */ 142#define HCI_DISCONN_TIMEOUT msecs_to_jiffies(2000) /* 2 seconds */
137#define HCI_DISCONN_TIMEOUT (2000) /* 2 seconds */ 143#define HCI_PAIRING_TIMEOUT msecs_to_jiffies(60000) /* 60 seconds */
138#define HCI_PAIRING_TIMEOUT (60000) /* 60 seconds */ 144#define HCI_INIT_TIMEOUT msecs_to_jiffies(10000) /* 10 seconds */
139#define HCI_IDLE_TIMEOUT (6000) /* 6 seconds */ 145#define HCI_CMD_TIMEOUT msecs_to_jiffies(1000) /* 1 second */
140#define HCI_INIT_TIMEOUT (10000) /* 10 seconds */ 146#define HCI_ACL_TX_TIMEOUT msecs_to_jiffies(45000) /* 45 seconds */
141#define HCI_CMD_TIMEOUT (1000) /* 1 seconds */ 147#define HCI_AUTO_OFF_TIMEOUT msecs_to_jiffies(2000) /* 2 seconds */
142#define HCI_ACL_TX_TIMEOUT (45000) /* 45 seconds */
143 148
144/* HCI data types */ 149/* HCI data types */
145#define HCI_COMMAND_PKT 0x01 150#define HCI_COMMAND_PKT 0x01
@@ -371,7 +376,7 @@ struct hci_cp_reject_conn_req {
371#define HCI_OP_LINK_KEY_REPLY 0x040b 376#define HCI_OP_LINK_KEY_REPLY 0x040b
372struct hci_cp_link_key_reply { 377struct hci_cp_link_key_reply {
373 bdaddr_t bdaddr; 378 bdaddr_t bdaddr;
374 __u8 link_key[16]; 379 __u8 link_key[HCI_LINK_KEY_SIZE];
375} __packed; 380} __packed;
376 381
377#define HCI_OP_LINK_KEY_NEG_REPLY 0x040c 382#define HCI_OP_LINK_KEY_NEG_REPLY 0x040c
@@ -523,6 +528,28 @@ struct hci_cp_io_capability_neg_reply {
523 __u8 reason; 528 __u8 reason;
524} __packed; 529} __packed;
525 530
531#define HCI_OP_CREATE_PHY_LINK 0x0435
532struct hci_cp_create_phy_link {
533 __u8 phy_handle;
534 __u8 key_len;
535 __u8 key_type;
536 __u8 key[HCI_AMP_LINK_KEY_SIZE];
537} __packed;
538
539#define HCI_OP_ACCEPT_PHY_LINK 0x0436
540struct hci_cp_accept_phy_link {
541 __u8 phy_handle;
542 __u8 key_len;
543 __u8 key_type;
544 __u8 key[HCI_AMP_LINK_KEY_SIZE];
545} __packed;
546
547#define HCI_OP_DISCONN_PHY_LINK 0x0437
548struct hci_cp_disconn_phy_link {
549 __u8 phy_handle;
550 __u8 reason;
551} __packed;
552
526#define HCI_OP_SNIFF_MODE 0x0803 553#define HCI_OP_SNIFF_MODE 0x0803
527struct hci_cp_sniff_mode { 554struct hci_cp_sniff_mode {
528 __le16 handle; 555 __le16 handle;
@@ -818,6 +845,31 @@ struct hci_rp_read_local_amp_info {
818 __le32 be_flush_to; 845 __le32 be_flush_to;
819} __packed; 846} __packed;
820 847
848#define HCI_OP_READ_LOCAL_AMP_ASSOC 0x140a
849struct hci_cp_read_local_amp_assoc {
850 __u8 phy_handle;
851 __le16 len_so_far;
852 __le16 max_len;
853} __packed;
854struct hci_rp_read_local_amp_assoc {
855 __u8 status;
856 __u8 phy_handle;
857 __le16 rem_len;
858 __u8 frag[0];
859} __packed;
860
861#define HCI_OP_WRITE_REMOTE_AMP_ASSOC 0x140b
862struct hci_cp_write_remote_amp_assoc {
863 __u8 phy_handle;
864 __le16 len_so_far;
865 __le16 rem_len;
866 __u8 frag[0];
867} __packed;
868struct hci_rp_write_remote_amp_assoc {
869 __u8 status;
870 __u8 phy_handle;
871} __packed;
872
821#define HCI_OP_LE_SET_EVENT_MASK 0x2001 873#define HCI_OP_LE_SET_EVENT_MASK 0x2001
822struct hci_cp_le_set_event_mask { 874struct hci_cp_le_set_event_mask {
823 __u8 mask[8]; 875 __u8 mask[8];
@@ -1048,7 +1100,7 @@ struct hci_ev_link_key_req {
1048#define HCI_EV_LINK_KEY_NOTIFY 0x18 1100#define HCI_EV_LINK_KEY_NOTIFY 0x18
1049struct hci_ev_link_key_notify { 1101struct hci_ev_link_key_notify {
1050 bdaddr_t bdaddr; 1102 bdaddr_t bdaddr;
1051 __u8 link_key[16]; 1103 __u8 link_key[HCI_LINK_KEY_SIZE];
1052 __u8 key_type; 1104 __u8 key_type;
1053} __packed; 1105} __packed;
1054 1106
@@ -1144,6 +1196,12 @@ struct extended_inquiry_info {
1144 __u8 data[240]; 1196 __u8 data[240];
1145} __packed; 1197} __packed;
1146 1198
1199#define HCI_EV_KEY_REFRESH_COMPLETE 0x30
1200struct hci_ev_key_refresh_complete {
1201 __u8 status;
1202 __le16 handle;
1203} __packed;
1204
1147#define HCI_EV_IO_CAPA_REQUEST 0x31 1205#define HCI_EV_IO_CAPA_REQUEST 0x31
1148struct hci_ev_io_capa_request { 1206struct hci_ev_io_capa_request {
1149 bdaddr_t bdaddr; 1207 bdaddr_t bdaddr;
@@ -1190,6 +1248,39 @@ struct hci_ev_le_meta {
1190 __u8 subevent; 1248 __u8 subevent;
1191} __packed; 1249} __packed;
1192 1250
1251#define HCI_EV_PHY_LINK_COMPLETE 0x40
1252struct hci_ev_phy_link_complete {
1253 __u8 status;
1254 __u8 phy_handle;
1255} __packed;
1256
1257#define HCI_EV_CHANNEL_SELECTED 0x41
1258struct hci_ev_channel_selected {
1259 __u8 phy_handle;
1260} __packed;
1261
1262#define HCI_EV_DISCONN_PHY_LINK_COMPLETE 0x42
1263struct hci_ev_disconn_phy_link_complete {
1264 __u8 status;
1265 __u8 phy_handle;
1266 __u8 reason;
1267} __packed;
1268
1269#define HCI_EV_LOGICAL_LINK_COMPLETE 0x45
1270struct hci_ev_logical_link_complete {
1271 __u8 status;
1272 __le16 handle;
1273 __u8 phy_handle;
1274 __u8 flow_spec_id;
1275} __packed;
1276
1277#define HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE 0x46
1278struct hci_ev_disconn_logical_link_complete {
1279 __u8 status;
1280 __le16 handle;
1281 __u8 reason;
1282} __packed;
1283
1193#define HCI_EV_NUM_COMP_BLOCKS 0x48 1284#define HCI_EV_NUM_COMP_BLOCKS 0x48
1194struct hci_comp_blocks_info { 1285struct hci_comp_blocks_info {
1195 __le16 handle; 1286 __le16 handle;
@@ -1290,7 +1381,6 @@ struct hci_sco_hdr {
1290 __u8 dlen; 1381 __u8 dlen;
1291} __packed; 1382} __packed;
1292 1383
1293#include <linux/skbuff.h>
1294static inline struct hci_event_hdr *hci_event_hdr(const struct sk_buff *skb) 1384static inline struct hci_event_hdr *hci_event_hdr(const struct sk_buff *skb)
1295{ 1385{
1296 return (struct hci_event_hdr *) skb->data; 1386 return (struct hci_event_hdr *) skb->data;
@@ -1307,12 +1397,12 @@ static inline struct hci_sco_hdr *hci_sco_hdr(const struct sk_buff *skb)
1307} 1397}
1308 1398
1309/* Command opcode pack/unpack */ 1399/* Command opcode pack/unpack */
1310#define hci_opcode_pack(ogf, ocf) (__u16) ((ocf & 0x03ff)|(ogf << 10)) 1400#define hci_opcode_pack(ogf, ocf) ((__u16) ((ocf & 0x03ff)|(ogf << 10)))
1311#define hci_opcode_ogf(op) (op >> 10) 1401#define hci_opcode_ogf(op) (op >> 10)
1312#define hci_opcode_ocf(op) (op & 0x03ff) 1402#define hci_opcode_ocf(op) (op & 0x03ff)
1313 1403
1314/* ACL handle and flags pack/unpack */ 1404/* ACL handle and flags pack/unpack */
1315#define hci_handle_pack(h, f) (__u16) ((h & 0x0fff)|(f << 12)) 1405#define hci_handle_pack(h, f) ((__u16) ((h & 0x0fff)|(f << 12)))
1316#define hci_handle(h) (h & 0x0fff) 1406#define hci_handle(h) (h & 0x0fff)
1317#define hci_flags(h) (h >> 12) 1407#define hci_flags(h) (h >> 12)
1318 1408
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
index 9fc7728f94e4..475b8c04ba52 100644
--- a/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -25,7 +25,6 @@
25#ifndef __HCI_CORE_H 25#ifndef __HCI_CORE_H
26#define __HCI_CORE_H 26#define __HCI_CORE_H
27 27
28#include <linux/interrupt.h>
29#include <net/bluetooth/hci.h> 28#include <net/bluetooth/hci.h>
30 29
31/* HCI priority */ 30/* HCI priority */
@@ -65,7 +64,7 @@ struct discovery_state {
65 DISCOVERY_RESOLVING, 64 DISCOVERY_RESOLVING,
66 DISCOVERY_STOPPING, 65 DISCOVERY_STOPPING,
67 } state; 66 } state;
68 struct list_head all; /* All devices found during inquiry */ 67 struct list_head all; /* All devices found during inquiry */
69 struct list_head unknown; /* Name state not known */ 68 struct list_head unknown; /* Name state not known */
70 struct list_head resolve; /* Name needs to be resolved */ 69 struct list_head resolve; /* Name needs to be resolved */
71 __u32 timestamp; 70 __u32 timestamp;
@@ -105,7 +104,7 @@ struct link_key {
105 struct list_head list; 104 struct list_head list;
106 bdaddr_t bdaddr; 105 bdaddr_t bdaddr;
107 u8 type; 106 u8 type;
108 u8 val[16]; 107 u8 val[HCI_LINK_KEY_SIZE];
109 u8 pin_len; 108 u8 pin_len;
110}; 109};
111 110
@@ -333,6 +332,7 @@ struct hci_conn {
333 void *l2cap_data; 332 void *l2cap_data;
334 void *sco_data; 333 void *sco_data;
335 void *smp_conn; 334 void *smp_conn;
335 struct amp_mgr *amp_mgr;
336 336
337 struct hci_conn *link; 337 struct hci_conn *link;
338 338
@@ -360,7 +360,8 @@ extern int l2cap_connect_cfm(struct hci_conn *hcon, u8 status);
360extern int l2cap_disconn_ind(struct hci_conn *hcon); 360extern int l2cap_disconn_ind(struct hci_conn *hcon);
361extern int l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason); 361extern int l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason);
362extern int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt); 362extern int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt);
363extern int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags); 363extern int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb,
364 u16 flags);
364 365
365extern int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr); 366extern int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr);
366extern int sco_connect_cfm(struct hci_conn *hcon, __u8 status); 367extern int sco_connect_cfm(struct hci_conn *hcon, __u8 status);
@@ -429,8 +430,8 @@ enum {
429static inline bool hci_conn_ssp_enabled(struct hci_conn *conn) 430static inline bool hci_conn_ssp_enabled(struct hci_conn *conn)
430{ 431{
431 struct hci_dev *hdev = conn->hdev; 432 struct hci_dev *hdev = conn->hdev;
432 return (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags) && 433 return test_bit(HCI_SSP_ENABLED, &hdev->dev_flags) &&
433 test_bit(HCI_CONN_SSP_ENABLED, &conn->flags)); 434 test_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
434} 435}
435 436
436static inline void hci_conn_hash_init(struct hci_dev *hdev) 437static inline void hci_conn_hash_init(struct hci_dev *hdev)
@@ -586,18 +587,24 @@ void hci_conn_put_device(struct hci_conn *conn);
586 587
587static inline void hci_conn_hold(struct hci_conn *conn) 588static inline void hci_conn_hold(struct hci_conn *conn)
588{ 589{
590 BT_DBG("hcon %p refcnt %d -> %d", conn, atomic_read(&conn->refcnt),
591 atomic_read(&conn->refcnt) + 1);
592
589 atomic_inc(&conn->refcnt); 593 atomic_inc(&conn->refcnt);
590 cancel_delayed_work(&conn->disc_work); 594 cancel_delayed_work(&conn->disc_work);
591} 595}
592 596
593static inline void hci_conn_put(struct hci_conn *conn) 597static inline void hci_conn_put(struct hci_conn *conn)
594{ 598{
599 BT_DBG("hcon %p refcnt %d -> %d", conn, atomic_read(&conn->refcnt),
600 atomic_read(&conn->refcnt) - 1);
601
595 if (atomic_dec_and_test(&conn->refcnt)) { 602 if (atomic_dec_and_test(&conn->refcnt)) {
596 unsigned long timeo; 603 unsigned long timeo;
597 if (conn->type == ACL_LINK || conn->type == LE_LINK) { 604 if (conn->type == ACL_LINK || conn->type == LE_LINK) {
598 del_timer(&conn->idle_timer); 605 del_timer(&conn->idle_timer);
599 if (conn->state == BT_CONNECTED) { 606 if (conn->state == BT_CONNECTED) {
600 timeo = msecs_to_jiffies(conn->disc_timeout); 607 timeo = conn->disc_timeout;
601 if (!conn->out) 608 if (!conn->out)
602 timeo *= 2; 609 timeo *= 2;
603 } else { 610 } else {
@@ -640,6 +647,19 @@ static inline void hci_set_drvdata(struct hci_dev *hdev, void *data)
640 dev_set_drvdata(&hdev->dev, data); 647 dev_set_drvdata(&hdev->dev, data);
641} 648}
642 649
650/* hci_dev_list shall be locked */
651static inline uint8_t __hci_num_ctrl(void)
652{
653 uint8_t count = 0;
654 struct list_head *p;
655
656 list_for_each(p, &hci_dev_list) {
657 count++;
658 }
659
660 return count;
661}
662
643struct hci_dev *hci_dev_get(int index); 663struct hci_dev *hci_dev_get(int index);
644struct hci_dev *hci_get_route(bdaddr_t *src, bdaddr_t *dst); 664struct hci_dev *hci_get_route(bdaddr_t *src, bdaddr_t *dst);
645 665
@@ -661,7 +681,8 @@ int hci_get_conn_info(struct hci_dev *hdev, void __user *arg);
661int hci_get_auth_info(struct hci_dev *hdev, void __user *arg); 681int hci_get_auth_info(struct hci_dev *hdev, void __user *arg);
662int hci_inquiry(void __user *arg); 682int hci_inquiry(void __user *arg);
663 683
664struct bdaddr_list *hci_blacklist_lookup(struct hci_dev *hdev, bdaddr_t *bdaddr); 684struct bdaddr_list *hci_blacklist_lookup(struct hci_dev *hdev,
685 bdaddr_t *bdaddr);
665int hci_blacklist_clear(struct hci_dev *hdev); 686int hci_blacklist_clear(struct hci_dev *hdev);
666int hci_blacklist_add(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type); 687int hci_blacklist_add(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);
667int hci_blacklist_del(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type); 688int hci_blacklist_del(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);
diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
index 1c7d1cd5e679..a7679f8913d2 100644
--- a/include/net/bluetooth/l2cap.h
+++ b/include/net/bluetooth/l2cap.h
@@ -40,11 +40,11 @@
40#define L2CAP_DEFAULT_MONITOR_TO 12000 /* 12 seconds */ 40#define L2CAP_DEFAULT_MONITOR_TO 12000 /* 12 seconds */
41#define L2CAP_DEFAULT_MAX_PDU_SIZE 1009 /* Sized for 3-DH5 packet */ 41#define L2CAP_DEFAULT_MAX_PDU_SIZE 1009 /* Sized for 3-DH5 packet */
42#define L2CAP_DEFAULT_ACK_TO 200 42#define L2CAP_DEFAULT_ACK_TO 200
43#define L2CAP_LE_DEFAULT_MTU 23
44#define L2CAP_DEFAULT_MAX_SDU_SIZE 0xFFFF 43#define L2CAP_DEFAULT_MAX_SDU_SIZE 0xFFFF
45#define L2CAP_DEFAULT_SDU_ITIME 0xFFFFFFFF 44#define L2CAP_DEFAULT_SDU_ITIME 0xFFFFFFFF
46#define L2CAP_DEFAULT_ACC_LAT 0xFFFFFFFF 45#define L2CAP_DEFAULT_ACC_LAT 0xFFFFFFFF
47#define L2CAP_BREDR_MAX_PAYLOAD 1019 /* 3-DH5 packet */ 46#define L2CAP_BREDR_MAX_PAYLOAD 1019 /* 3-DH5 packet */
47#define L2CAP_LE_MIN_MTU 23
48 48
49#define L2CAP_DISC_TIMEOUT msecs_to_jiffies(100) 49#define L2CAP_DISC_TIMEOUT msecs_to_jiffies(100)
50#define L2CAP_DISC_REJ_TIMEOUT msecs_to_jiffies(5000) 50#define L2CAP_DISC_REJ_TIMEOUT msecs_to_jiffies(5000)
@@ -52,6 +52,8 @@
52#define L2CAP_CONN_TIMEOUT msecs_to_jiffies(40000) 52#define L2CAP_CONN_TIMEOUT msecs_to_jiffies(40000)
53#define L2CAP_INFO_TIMEOUT msecs_to_jiffies(4000) 53#define L2CAP_INFO_TIMEOUT msecs_to_jiffies(4000)
54 54
55#define L2CAP_A2MP_DEFAULT_MTU 670
56
55/* L2CAP socket address */ 57/* L2CAP socket address */
56struct sockaddr_l2 { 58struct sockaddr_l2 {
57 sa_family_t l2_family; 59 sa_family_t l2_family;
@@ -229,9 +231,14 @@ struct l2cap_conn_rsp {
229 __le16 status; 231 __le16 status;
230} __packed; 232} __packed;
231 233
234/* protocol/service multiplexer (PSM) */
235#define L2CAP_PSM_SDP 0x0001
236#define L2CAP_PSM_RFCOMM 0x0003
237
232/* channel indentifier */ 238/* channel indentifier */
233#define L2CAP_CID_SIGNALING 0x0001 239#define L2CAP_CID_SIGNALING 0x0001
234#define L2CAP_CID_CONN_LESS 0x0002 240#define L2CAP_CID_CONN_LESS 0x0002
241#define L2CAP_CID_A2MP 0x0003
235#define L2CAP_CID_LE_DATA 0x0004 242#define L2CAP_CID_LE_DATA 0x0004
236#define L2CAP_CID_LE_SIGNALING 0x0005 243#define L2CAP_CID_LE_SIGNALING 0x0005
237#define L2CAP_CID_SMP 0x0006 244#define L2CAP_CID_SMP 0x0006
@@ -271,6 +278,9 @@ struct l2cap_conf_rsp {
271#define L2CAP_CONF_PENDING 0x0004 278#define L2CAP_CONF_PENDING 0x0004
272#define L2CAP_CONF_EFS_REJECT 0x0005 279#define L2CAP_CONF_EFS_REJECT 0x0005
273 280
281/* configuration req/rsp continuation flag */
282#define L2CAP_CONF_FLAG_CONTINUATION 0x0001
283
274struct l2cap_conf_opt { 284struct l2cap_conf_opt {
275 __u8 type; 285 __u8 type;
276 __u8 len; 286 __u8 len;
@@ -419,11 +429,6 @@ struct l2cap_seq_list {
419#define L2CAP_SEQ_LIST_CLEAR 0xFFFF 429#define L2CAP_SEQ_LIST_CLEAR 0xFFFF
420#define L2CAP_SEQ_LIST_TAIL 0x8000 430#define L2CAP_SEQ_LIST_TAIL 0x8000
421 431
422struct srej_list {
423 __u16 tx_seq;
424 struct list_head list;
425};
426
427struct l2cap_chan { 432struct l2cap_chan {
428 struct sock *sk; 433 struct sock *sk;
429 434
@@ -459,6 +464,7 @@ struct l2cap_chan {
459 464
460 __u16 tx_win; 465 __u16 tx_win;
461 __u16 tx_win_max; 466 __u16 tx_win_max;
467 __u16 ack_win;
462 __u8 max_tx; 468 __u8 max_tx;
463 __u16 retrans_timeout; 469 __u16 retrans_timeout;
464 __u16 monitor_timeout; 470 __u16 monitor_timeout;
@@ -475,14 +481,12 @@ struct l2cap_chan {
475 __u16 expected_ack_seq; 481 __u16 expected_ack_seq;
476 __u16 expected_tx_seq; 482 __u16 expected_tx_seq;
477 __u16 buffer_seq; 483 __u16 buffer_seq;
478 __u16 buffer_seq_srej;
479 __u16 srej_save_reqseq; 484 __u16 srej_save_reqseq;
480 __u16 last_acked_seq; 485 __u16 last_acked_seq;
481 __u16 frames_sent; 486 __u16 frames_sent;
482 __u16 unacked_frames; 487 __u16 unacked_frames;
483 __u8 retry_count; 488 __u8 retry_count;
484 __u16 srej_queue_next; 489 __u16 srej_queue_next;
485 __u8 num_acked;
486 __u16 sdu_len; 490 __u16 sdu_len;
487 struct sk_buff *sdu; 491 struct sk_buff *sdu;
488 struct sk_buff *sdu_last_frag; 492 struct sk_buff *sdu_last_frag;
@@ -515,7 +519,6 @@ struct l2cap_chan {
515 struct sk_buff_head srej_q; 519 struct sk_buff_head srej_q;
516 struct l2cap_seq_list srej_list; 520 struct l2cap_seq_list srej_list;
517 struct l2cap_seq_list retrans_list; 521 struct l2cap_seq_list retrans_list;
518 struct list_head srej_l;
519 522
520 struct list_head list; 523 struct list_head list;
521 struct list_head global_l; 524 struct list_head global_l;
@@ -528,10 +531,14 @@ struct l2cap_chan {
528struct l2cap_ops { 531struct l2cap_ops {
529 char *name; 532 char *name;
530 533
531 struct l2cap_chan *(*new_connection) (void *data); 534 struct l2cap_chan *(*new_connection) (struct l2cap_chan *chan);
532 int (*recv) (void *data, struct sk_buff *skb); 535 int (*recv) (struct l2cap_chan * chan,
533 void (*close) (void *data); 536 struct sk_buff *skb);
534 void (*state_change) (void *data, int state); 537 void (*teardown) (struct l2cap_chan *chan, int err);
538 void (*close) (struct l2cap_chan *chan);
539 void (*state_change) (struct l2cap_chan *chan,
540 int state);
541 void (*ready) (struct l2cap_chan *chan);
535 struct sk_buff *(*alloc_skb) (struct l2cap_chan *chan, 542 struct sk_buff *(*alloc_skb) (struct l2cap_chan *chan,
536 unsigned long len, int nb); 543 unsigned long len, int nb);
537}; 544};
@@ -575,6 +582,7 @@ struct l2cap_conn {
575#define L2CAP_CHAN_RAW 1 582#define L2CAP_CHAN_RAW 1
576#define L2CAP_CHAN_CONN_LESS 2 583#define L2CAP_CHAN_CONN_LESS 2
577#define L2CAP_CHAN_CONN_ORIENTED 3 584#define L2CAP_CHAN_CONN_ORIENTED 3
585#define L2CAP_CHAN_CONN_FIX_A2MP 4
578 586
579/* ----- L2CAP socket info ----- */ 587/* ----- L2CAP socket info ----- */
580#define l2cap_pi(sk) ((struct l2cap_pinfo *) sk) 588#define l2cap_pi(sk) ((struct l2cap_pinfo *) sk)
@@ -597,6 +605,7 @@ enum {
597 CONF_EWS_RECV, 605 CONF_EWS_RECV,
598 CONF_LOC_CONF_PEND, 606 CONF_LOC_CONF_PEND,
599 CONF_REM_CONF_PEND, 607 CONF_REM_CONF_PEND,
608 CONF_NOT_COMPLETE,
600}; 609};
601 610
602#define L2CAP_CONF_MAX_CONF_REQ 2 611#define L2CAP_CONF_MAX_CONF_REQ 2
@@ -664,11 +673,15 @@ enum {
664 673
665static inline void l2cap_chan_hold(struct l2cap_chan *c) 674static inline void l2cap_chan_hold(struct l2cap_chan *c)
666{ 675{
676 BT_DBG("chan %p orig refcnt %d", c, atomic_read(&c->refcnt));
677
667 atomic_inc(&c->refcnt); 678 atomic_inc(&c->refcnt);
668} 679}
669 680
670static inline void l2cap_chan_put(struct l2cap_chan *c) 681static inline void l2cap_chan_put(struct l2cap_chan *c)
671{ 682{
683 BT_DBG("chan %p orig refcnt %d", c, atomic_read(&c->refcnt));
684
672 if (atomic_dec_and_test(&c->refcnt)) 685 if (atomic_dec_and_test(&c->refcnt))
673 kfree(c); 686 kfree(c);
674} 687}
@@ -713,11 +726,7 @@ static inline bool l2cap_clear_timer(struct l2cap_chan *chan,
713 726
714#define __set_chan_timer(c, t) l2cap_set_timer(c, &c->chan_timer, (t)) 727#define __set_chan_timer(c, t) l2cap_set_timer(c, &c->chan_timer, (t))
715#define __clear_chan_timer(c) l2cap_clear_timer(c, &c->chan_timer) 728#define __clear_chan_timer(c) l2cap_clear_timer(c, &c->chan_timer)
716#define __set_retrans_timer(c) l2cap_set_timer(c, &c->retrans_timer, \
717 msecs_to_jiffies(L2CAP_DEFAULT_RETRANS_TO));
718#define __clear_retrans_timer(c) l2cap_clear_timer(c, &c->retrans_timer) 729#define __clear_retrans_timer(c) l2cap_clear_timer(c, &c->retrans_timer)
719#define __set_monitor_timer(c) l2cap_set_timer(c, &c->monitor_timer, \
720 msecs_to_jiffies(L2CAP_DEFAULT_MONITOR_TO));
721#define __clear_monitor_timer(c) l2cap_clear_timer(c, &c->monitor_timer) 730#define __clear_monitor_timer(c) l2cap_clear_timer(c, &c->monitor_timer)
722#define __set_ack_timer(c) l2cap_set_timer(c, &chan->ack_timer, \ 731#define __set_ack_timer(c) l2cap_set_timer(c, &chan->ack_timer, \
723 msecs_to_jiffies(L2CAP_DEFAULT_ACK_TO)); 732 msecs_to_jiffies(L2CAP_DEFAULT_ACK_TO));
@@ -736,173 +745,17 @@ static inline __u16 __next_seq(struct l2cap_chan *chan, __u16 seq)
736 return (seq + 1) % (chan->tx_win_max + 1); 745 return (seq + 1) % (chan->tx_win_max + 1);
737} 746}
738 747
739static inline int l2cap_tx_window_full(struct l2cap_chan *ch) 748static inline struct l2cap_chan *l2cap_chan_no_new_connection(struct l2cap_chan *chan)
740{
741 int sub;
742
743 sub = (ch->next_tx_seq - ch->expected_ack_seq) % 64;
744
745 if (sub < 0)
746 sub += 64;
747
748 return sub == ch->remote_tx_win;
749}
750
751static inline __u16 __get_reqseq(struct l2cap_chan *chan, __u32 ctrl)
752{
753 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
754 return (ctrl & L2CAP_EXT_CTRL_REQSEQ) >>
755 L2CAP_EXT_CTRL_REQSEQ_SHIFT;
756 else
757 return (ctrl & L2CAP_CTRL_REQSEQ) >> L2CAP_CTRL_REQSEQ_SHIFT;
758}
759
760static inline __u32 __set_reqseq(struct l2cap_chan *chan, __u32 reqseq)
761{
762 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
763 return (reqseq << L2CAP_EXT_CTRL_REQSEQ_SHIFT) &
764 L2CAP_EXT_CTRL_REQSEQ;
765 else
766 return (reqseq << L2CAP_CTRL_REQSEQ_SHIFT) & L2CAP_CTRL_REQSEQ;
767}
768
769static inline __u16 __get_txseq(struct l2cap_chan *chan, __u32 ctrl)
770{
771 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
772 return (ctrl & L2CAP_EXT_CTRL_TXSEQ) >>
773 L2CAP_EXT_CTRL_TXSEQ_SHIFT;
774 else
775 return (ctrl & L2CAP_CTRL_TXSEQ) >> L2CAP_CTRL_TXSEQ_SHIFT;
776}
777
778static inline __u32 __set_txseq(struct l2cap_chan *chan, __u32 txseq)
779{
780 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
781 return (txseq << L2CAP_EXT_CTRL_TXSEQ_SHIFT) &
782 L2CAP_EXT_CTRL_TXSEQ;
783 else
784 return (txseq << L2CAP_CTRL_TXSEQ_SHIFT) & L2CAP_CTRL_TXSEQ;
785}
786
787static inline bool __is_sframe(struct l2cap_chan *chan, __u32 ctrl)
788{
789 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
790 return ctrl & L2CAP_EXT_CTRL_FRAME_TYPE;
791 else
792 return ctrl & L2CAP_CTRL_FRAME_TYPE;
793}
794
795static inline __u32 __set_sframe(struct l2cap_chan *chan)
796{
797 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
798 return L2CAP_EXT_CTRL_FRAME_TYPE;
799 else
800 return L2CAP_CTRL_FRAME_TYPE;
801}
802
803static inline __u8 __get_ctrl_sar(struct l2cap_chan *chan, __u32 ctrl)
804{ 749{
805 if (test_bit(FLAG_EXT_CTRL, &chan->flags)) 750 return NULL;
806 return (ctrl & L2CAP_EXT_CTRL_SAR) >> L2CAP_EXT_CTRL_SAR_SHIFT;
807 else
808 return (ctrl & L2CAP_CTRL_SAR) >> L2CAP_CTRL_SAR_SHIFT;
809} 751}
810 752
811static inline __u32 __set_ctrl_sar(struct l2cap_chan *chan, __u32 sar) 753static inline void l2cap_chan_no_teardown(struct l2cap_chan *chan, int err)
812{ 754{
813 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
814 return (sar << L2CAP_EXT_CTRL_SAR_SHIFT) & L2CAP_EXT_CTRL_SAR;
815 else
816 return (sar << L2CAP_CTRL_SAR_SHIFT) & L2CAP_CTRL_SAR;
817} 755}
818 756
819static inline bool __is_sar_start(struct l2cap_chan *chan, __u32 ctrl) 757static inline void l2cap_chan_no_ready(struct l2cap_chan *chan)
820{ 758{
821 return __get_ctrl_sar(chan, ctrl) == L2CAP_SAR_START;
822}
823
824static inline __u32 __get_sar_mask(struct l2cap_chan *chan)
825{
826 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
827 return L2CAP_EXT_CTRL_SAR;
828 else
829 return L2CAP_CTRL_SAR;
830}
831
832static inline __u8 __get_ctrl_super(struct l2cap_chan *chan, __u32 ctrl)
833{
834 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
835 return (ctrl & L2CAP_EXT_CTRL_SUPERVISE) >>
836 L2CAP_EXT_CTRL_SUPER_SHIFT;
837 else
838 return (ctrl & L2CAP_CTRL_SUPERVISE) >> L2CAP_CTRL_SUPER_SHIFT;
839}
840
841static inline __u32 __set_ctrl_super(struct l2cap_chan *chan, __u32 super)
842{
843 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
844 return (super << L2CAP_EXT_CTRL_SUPER_SHIFT) &
845 L2CAP_EXT_CTRL_SUPERVISE;
846 else
847 return (super << L2CAP_CTRL_SUPER_SHIFT) &
848 L2CAP_CTRL_SUPERVISE;
849}
850
851static inline __u32 __set_ctrl_final(struct l2cap_chan *chan)
852{
853 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
854 return L2CAP_EXT_CTRL_FINAL;
855 else
856 return L2CAP_CTRL_FINAL;
857}
858
859static inline bool __is_ctrl_final(struct l2cap_chan *chan, __u32 ctrl)
860{
861 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
862 return ctrl & L2CAP_EXT_CTRL_FINAL;
863 else
864 return ctrl & L2CAP_CTRL_FINAL;
865}
866
867static inline __u32 __set_ctrl_poll(struct l2cap_chan *chan)
868{
869 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
870 return L2CAP_EXT_CTRL_POLL;
871 else
872 return L2CAP_CTRL_POLL;
873}
874
875static inline bool __is_ctrl_poll(struct l2cap_chan *chan, __u32 ctrl)
876{
877 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
878 return ctrl & L2CAP_EXT_CTRL_POLL;
879 else
880 return ctrl & L2CAP_CTRL_POLL;
881}
882
883static inline __u32 __get_control(struct l2cap_chan *chan, void *p)
884{
885 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
886 return get_unaligned_le32(p);
887 else
888 return get_unaligned_le16(p);
889}
890
891static inline void __put_control(struct l2cap_chan *chan, __u32 control,
892 void *p)
893{
894 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
895 return put_unaligned_le32(control, p);
896 else
897 return put_unaligned_le16(control, p);
898}
899
900static inline __u8 __ctrl_size(struct l2cap_chan *chan)
901{
902 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
903 return L2CAP_EXT_HDR_SIZE - L2CAP_HDR_SIZE;
904 else
905 return L2CAP_ENH_HDR_SIZE - L2CAP_HDR_SIZE;
906} 759}
907 760
908extern bool disable_ertm; 761extern bool disable_ertm;
@@ -926,5 +779,8 @@ int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len,
926void l2cap_chan_busy(struct l2cap_chan *chan, int busy); 779void l2cap_chan_busy(struct l2cap_chan *chan, int busy);
927int l2cap_chan_check_security(struct l2cap_chan *chan); 780int l2cap_chan_check_security(struct l2cap_chan *chan);
928void l2cap_chan_set_defaults(struct l2cap_chan *chan); 781void l2cap_chan_set_defaults(struct l2cap_chan *chan);
782int l2cap_ertm_init(struct l2cap_chan *chan);
783void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan);
784void l2cap_chan_del(struct l2cap_chan *chan, int err);
929 785
930#endif /* __L2CAP_H */ 786#endif /* __L2CAP_H */
diff --git a/include/net/bluetooth/mgmt.h b/include/net/bluetooth/mgmt.h
index 23fd0546fccb..4348ee8bda69 100644
--- a/include/net/bluetooth/mgmt.h
+++ b/include/net/bluetooth/mgmt.h
@@ -444,7 +444,7 @@ struct mgmt_ev_auth_failed {
444struct mgmt_ev_device_found { 444struct mgmt_ev_device_found {
445 struct mgmt_addr_info addr; 445 struct mgmt_addr_info addr;
446 __s8 rssi; 446 __s8 rssi;
447 __u8 flags[4]; 447 __le32 flags;
448 __le16 eir_len; 448 __le16 eir_len;
449 __u8 eir[0]; 449 __u8 eir[0];
450} __packed; 450} __packed;
diff --git a/include/net/caif/caif_hsi.h b/include/net/caif/caif_hsi.h
index 439dadc8102f..bcb9cc3ce98b 100644
--- a/include/net/caif/caif_hsi.h
+++ b/include/net/caif/caif_hsi.h
@@ -93,25 +93,25 @@ struct cfhsi_desc {
93#endif 93#endif
94 94
95/* Structure implemented by the CAIF HSI driver. */ 95/* Structure implemented by the CAIF HSI driver. */
96struct cfhsi_drv { 96struct cfhsi_cb_ops {
97 void (*tx_done_cb) (struct cfhsi_drv *drv); 97 void (*tx_done_cb) (struct cfhsi_cb_ops *drv);
98 void (*rx_done_cb) (struct cfhsi_drv *drv); 98 void (*rx_done_cb) (struct cfhsi_cb_ops *drv);
99 void (*wake_up_cb) (struct cfhsi_drv *drv); 99 void (*wake_up_cb) (struct cfhsi_cb_ops *drv);
100 void (*wake_down_cb) (struct cfhsi_drv *drv); 100 void (*wake_down_cb) (struct cfhsi_cb_ops *drv);
101}; 101};
102 102
103/* Structure implemented by HSI device. */ 103/* Structure implemented by HSI device. */
104struct cfhsi_dev { 104struct cfhsi_ops {
105 int (*cfhsi_up) (struct cfhsi_dev *dev); 105 int (*cfhsi_up) (struct cfhsi_ops *dev);
106 int (*cfhsi_down) (struct cfhsi_dev *dev); 106 int (*cfhsi_down) (struct cfhsi_ops *dev);
107 int (*cfhsi_tx) (u8 *ptr, int len, struct cfhsi_dev *dev); 107 int (*cfhsi_tx) (u8 *ptr, int len, struct cfhsi_ops *dev);
108 int (*cfhsi_rx) (u8 *ptr, int len, struct cfhsi_dev *dev); 108 int (*cfhsi_rx) (u8 *ptr, int len, struct cfhsi_ops *dev);
109 int (*cfhsi_wake_up) (struct cfhsi_dev *dev); 109 int (*cfhsi_wake_up) (struct cfhsi_ops *dev);
110 int (*cfhsi_wake_down) (struct cfhsi_dev *dev); 110 int (*cfhsi_wake_down) (struct cfhsi_ops *dev);
111 int (*cfhsi_get_peer_wake) (struct cfhsi_dev *dev, bool *status); 111 int (*cfhsi_get_peer_wake) (struct cfhsi_ops *dev, bool *status);
112 int (*cfhsi_fifo_occupancy)(struct cfhsi_dev *dev, size_t *occupancy); 112 int (*cfhsi_fifo_occupancy) (struct cfhsi_ops *dev, size_t *occupancy);
113 int (*cfhsi_rx_cancel)(struct cfhsi_dev *dev); 113 int (*cfhsi_rx_cancel)(struct cfhsi_ops *dev);
114 struct cfhsi_drv *drv; 114 struct cfhsi_cb_ops *cb_ops;
115}; 115};
116 116
117/* Structure holds status of received CAIF frames processing */ 117/* Structure holds status of received CAIF frames processing */
@@ -132,17 +132,26 @@ enum {
132 CFHSI_PRIO_LAST, 132 CFHSI_PRIO_LAST,
133}; 133};
134 134
135struct cfhsi_config {
136 u32 inactivity_timeout;
137 u32 aggregation_timeout;
138 u32 head_align;
139 u32 tail_align;
140 u32 q_high_mark;
141 u32 q_low_mark;
142};
143
135/* Structure implemented by CAIF HSI drivers. */ 144/* Structure implemented by CAIF HSI drivers. */
136struct cfhsi { 145struct cfhsi {
137 struct caif_dev_common cfdev; 146 struct caif_dev_common cfdev;
138 struct net_device *ndev; 147 struct net_device *ndev;
139 struct platform_device *pdev; 148 struct platform_device *pdev;
140 struct sk_buff_head qhead[CFHSI_PRIO_LAST]; 149 struct sk_buff_head qhead[CFHSI_PRIO_LAST];
141 struct cfhsi_drv drv; 150 struct cfhsi_cb_ops cb_ops;
142 struct cfhsi_dev *dev; 151 struct cfhsi_ops *ops;
143 int tx_state; 152 int tx_state;
144 struct cfhsi_rx_state rx_state; 153 struct cfhsi_rx_state rx_state;
145 unsigned long inactivity_timeout; 154 struct cfhsi_config cfg;
146 int rx_len; 155 int rx_len;
147 u8 *rx_ptr; 156 u8 *rx_ptr;
148 u8 *tx_buf; 157 u8 *tx_buf;
@@ -150,8 +159,6 @@ struct cfhsi {
150 u8 *rx_flip_buf; 159 u8 *rx_flip_buf;
151 spinlock_t lock; 160 spinlock_t lock;
152 int flow_off_sent; 161 int flow_off_sent;
153 u32 q_low_mark;
154 u32 q_high_mark;
155 struct list_head list; 162 struct list_head list;
156 struct work_struct wake_up_work; 163 struct work_struct wake_up_work;
157 struct work_struct wake_down_work; 164 struct work_struct wake_down_work;
@@ -164,13 +171,31 @@ struct cfhsi {
164 struct timer_list rx_slowpath_timer; 171 struct timer_list rx_slowpath_timer;
165 172
166 /* TX aggregation */ 173 /* TX aggregation */
167 unsigned long aggregation_timeout;
168 int aggregation_len; 174 int aggregation_len;
169 struct timer_list aggregation_timer; 175 struct timer_list aggregation_timer;
170 176
171 unsigned long bits; 177 unsigned long bits;
172}; 178};
173
174extern struct platform_driver cfhsi_driver; 179extern struct platform_driver cfhsi_driver;
175 180
181/**
182 * enum ifla_caif_hsi - CAIF HSI NetlinkRT parameters.
183 * @IFLA_CAIF_HSI_INACTIVITY_TOUT: Inactivity timeout before
184 * taking the HSI wakeline down, in milliseconds.
185 * When using RT Netlink to create, destroy or configure a CAIF HSI interface,
186 * enum ifla_caif_hsi is used to specify the configuration attributes.
187 */
188enum ifla_caif_hsi {
189 __IFLA_CAIF_HSI_UNSPEC,
190 __IFLA_CAIF_HSI_INACTIVITY_TOUT,
191 __IFLA_CAIF_HSI_AGGREGATION_TOUT,
192 __IFLA_CAIF_HSI_HEAD_ALIGN,
193 __IFLA_CAIF_HSI_TAIL_ALIGN,
194 __IFLA_CAIF_HSI_QHIGH_WATERMARK,
195 __IFLA_CAIF_HSI_QLOW_WATERMARK,
196 __IFLA_CAIF_HSI_MAX
197};
198
199extern struct cfhsi_ops *cfhsi_get_ops(void);
200
176#endif /* CAIF_HSI_H_ */ 201#endif /* CAIF_HSI_H_ */
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 0289d4ce7070..493fa0c79005 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -70,11 +70,13 @@
70 * 70 *
71 * @IEEE80211_BAND_2GHZ: 2.4GHz ISM band 71 * @IEEE80211_BAND_2GHZ: 2.4GHz ISM band
72 * @IEEE80211_BAND_5GHZ: around 5GHz band (4.9-5.7) 72 * @IEEE80211_BAND_5GHZ: around 5GHz band (4.9-5.7)
73 * @IEEE80211_BAND_60GHZ: around 60 GHz band (58.32 - 64.80 GHz)
73 * @IEEE80211_NUM_BANDS: number of defined bands 74 * @IEEE80211_NUM_BANDS: number of defined bands
74 */ 75 */
75enum ieee80211_band { 76enum ieee80211_band {
76 IEEE80211_BAND_2GHZ = NL80211_BAND_2GHZ, 77 IEEE80211_BAND_2GHZ = NL80211_BAND_2GHZ,
77 IEEE80211_BAND_5GHZ = NL80211_BAND_5GHZ, 78 IEEE80211_BAND_5GHZ = NL80211_BAND_5GHZ,
79 IEEE80211_BAND_60GHZ = NL80211_BAND_60GHZ,
78 80
79 /* keep last */ 81 /* keep last */
80 IEEE80211_NUM_BANDS 82 IEEE80211_NUM_BANDS
@@ -211,6 +213,22 @@ struct ieee80211_sta_ht_cap {
211}; 213};
212 214
213/** 215/**
216 * struct ieee80211_sta_vht_cap - STA's VHT capabilities
217 *
218 * This structure describes most essential parameters needed
219 * to describe 802.11ac VHT capabilities for an STA.
220 *
221 * @vht_supported: is VHT supported by the STA
222 * @cap: VHT capabilities map as described in 802.11ac spec
223 * @vht_mcs: Supported VHT MCS rates
224 */
225struct ieee80211_sta_vht_cap {
226 bool vht_supported;
227 u32 cap; /* use IEEE80211_VHT_CAP_ */
228 struct ieee80211_vht_mcs_info vht_mcs;
229};
230
231/**
214 * struct ieee80211_supported_band - frequency band definition 232 * struct ieee80211_supported_band - frequency band definition
215 * 233 *
216 * This structure describes a frequency band a wiphy 234 * This structure describes a frequency band a wiphy
@@ -233,6 +251,7 @@ struct ieee80211_supported_band {
233 int n_channels; 251 int n_channels;
234 int n_bitrates; 252 int n_bitrates;
235 struct ieee80211_sta_ht_cap ht_cap; 253 struct ieee80211_sta_ht_cap ht_cap;
254 struct ieee80211_sta_vht_cap vht_cap;
236}; 255};
237 256
238/* 257/*
@@ -404,6 +423,8 @@ struct cfg80211_beacon_data {
404 * 423 *
405 * Used to configure an AP interface. 424 * Used to configure an AP interface.
406 * 425 *
426 * @channel: the channel to start the AP on
427 * @channel_type: the channel type to use
407 * @beacon: beacon data 428 * @beacon: beacon data
408 * @beacon_interval: beacon interval 429 * @beacon_interval: beacon interval
409 * @dtim_period: DTIM period 430 * @dtim_period: DTIM period
@@ -417,6 +438,9 @@ struct cfg80211_beacon_data {
417 * @inactivity_timeout: time in seconds to determine station's inactivity. 438 * @inactivity_timeout: time in seconds to determine station's inactivity.
418 */ 439 */
419struct cfg80211_ap_settings { 440struct cfg80211_ap_settings {
441 struct ieee80211_channel *channel;
442 enum nl80211_channel_type channel_type;
443
420 struct cfg80211_beacon_data beacon; 444 struct cfg80211_beacon_data beacon;
421 445
422 int beacon_interval, dtim_period; 446 int beacon_interval, dtim_period;
@@ -556,11 +580,13 @@ enum station_info_flags {
556 * @RATE_INFO_FLAGS_MCS: @tx_bitrate_mcs filled 580 * @RATE_INFO_FLAGS_MCS: @tx_bitrate_mcs filled
557 * @RATE_INFO_FLAGS_40_MHZ_WIDTH: 40 Mhz width transmission 581 * @RATE_INFO_FLAGS_40_MHZ_WIDTH: 40 Mhz width transmission
558 * @RATE_INFO_FLAGS_SHORT_GI: 400ns guard interval 582 * @RATE_INFO_FLAGS_SHORT_GI: 400ns guard interval
583 * @RATE_INFO_FLAGS_60G: 60gHz MCS
559 */ 584 */
560enum rate_info_flags { 585enum rate_info_flags {
561 RATE_INFO_FLAGS_MCS = 1<<0, 586 RATE_INFO_FLAGS_MCS = 1<<0,
562 RATE_INFO_FLAGS_40_MHZ_WIDTH = 1<<1, 587 RATE_INFO_FLAGS_40_MHZ_WIDTH = 1<<1,
563 RATE_INFO_FLAGS_SHORT_GI = 1<<2, 588 RATE_INFO_FLAGS_SHORT_GI = 1<<2,
589 RATE_INFO_FLAGS_60G = 1<<3,
564}; 590};
565 591
566/** 592/**
@@ -622,10 +648,10 @@ struct sta_bss_parameters {
622 * @llid: mesh local link id 648 * @llid: mesh local link id
623 * @plid: mesh peer link id 649 * @plid: mesh peer link id
624 * @plink_state: mesh peer link state 650 * @plink_state: mesh peer link state
625 * @signal: the signal strength, type depends on the wiphy's signal_type 651 * @signal: The signal strength, type depends on the wiphy's signal_type.
626 NOTE: For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_. 652 * For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.
627 * @signal_avg: avg signal strength, type depends on the wiphy's signal_type 653 * @signal_avg: Average signal strength, type depends on the wiphy's signal_type.
628 NOTE: For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_. 654 * For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.
629 * @txrate: current unicast bitrate from this station 655 * @txrate: current unicast bitrate from this station
630 * @rxrate: current unicast bitrate to this station 656 * @rxrate: current unicast bitrate to this station
631 * @rx_packets: packets received from this station 657 * @rx_packets: packets received from this station
@@ -785,47 +811,101 @@ struct bss_parameters {
785 int ht_opmode; 811 int ht_opmode;
786}; 812};
787 813
788/* 814/**
789 * struct mesh_config - 802.11s mesh configuration 815 * struct mesh_config - 802.11s mesh configuration
790 * 816 *
791 * These parameters can be changed while the mesh is active. 817 * These parameters can be changed while the mesh is active.
818 *
819 * @dot11MeshRetryTimeout: the initial retry timeout in millisecond units used
820 * by the Mesh Peering Open message
821 * @dot11MeshConfirmTimeout: the initial retry timeout in millisecond units
822 * used by the Mesh Peering Open message
823 * @dot11MeshHoldingTimeout: the confirm timeout in millisecond units used by
824 * the mesh peering management to close a mesh peering
825 * @dot11MeshMaxPeerLinks: the maximum number of peer links allowed on this
826 * mesh interface
827 * @dot11MeshMaxRetries: the maximum number of peer link open retries that can
828 * be sent to establish a new peer link instance in a mesh
829 * @dot11MeshTTL: the value of TTL field set at a source mesh STA
830 * @element_ttl: the value of TTL field set at a mesh STA for path selection
831 * elements
832 * @auto_open_plinks: whether we should automatically open peer links when we
833 * detect compatible mesh peers
834 * @dot11MeshNbrOffsetMaxNeighbor: the maximum number of neighbors to
835 * synchronize to for 11s default synchronization method
836 * @dot11MeshHWMPmaxPREQretries: the number of action frames containing a PREQ
837 * that an originator mesh STA can send to a particular path target
838 * @path_refresh_time: how frequently to refresh mesh paths in milliseconds
839 * @min_discovery_timeout: the minimum length of time to wait until giving up on
840 * a path discovery in milliseconds
841 * @dot11MeshHWMPactivePathTimeout: the time (in TUs) for which mesh STAs
842 * receiving a PREQ shall consider the forwarding information from the
843 * root to be valid. (TU = time unit)
844 * @dot11MeshHWMPpreqMinInterval: the minimum interval of time (in TUs) during
845 * which a mesh STA can send only one action frame containing a PREQ
846 * element
847 * @dot11MeshHWMPperrMinInterval: the minimum interval of time (in TUs) during
848 * which a mesh STA can send only one Action frame containing a PERR
849 * element
850 * @dot11MeshHWMPnetDiameterTraversalTime: the interval of time (in TUs) that
851 * it takes for an HWMP information element to propagate across the mesh
852 * @dot11MeshHWMPRootMode: the configuration of a mesh STA as root mesh STA
853 * @dot11MeshHWMPRannInterval: the interval of time (in TUs) between root
854 * announcements are transmitted
855 * @dot11MeshGateAnnouncementProtocol: whether to advertise that this mesh
856 * station has access to a broader network beyond the MBSS. (This is
857 * missnamed in draft 12.0: dot11MeshGateAnnouncementProtocol set to true
858 * only means that the station will announce others it's a mesh gate, but
859 * not necessarily using the gate announcement protocol. Still keeping the
860 * same nomenclature to be in sync with the spec)
861 * @dot11MeshForwarding: whether the Mesh STA is forwarding or non-forwarding
862 * entity (default is TRUE - forwarding entity)
863 * @rssi_threshold: the threshold for average signal strength of candidate
864 * station to establish a peer link
865 * @ht_opmode: mesh HT protection mode
866 *
867 * @dot11MeshHWMPactivePathToRootTimeout: The time (in TUs) for which mesh STAs
868 * receiving a proactive PREQ shall consider the forwarding information to
869 * the root mesh STA to be valid.
870 *
871 * @dot11MeshHWMProotInterval: The interval of time (in TUs) between proactive
872 * PREQs are transmitted.
873 * @dot11MeshHWMPconfirmationInterval: The minimum interval of time (in TUs)
874 * during which a mesh STA can send only one Action frame containing
875 * a PREQ element for root path confirmation.
792 */ 876 */
793struct mesh_config { 877struct mesh_config {
794 /* Timeouts in ms */
795 /* Mesh plink management parameters */
796 u16 dot11MeshRetryTimeout; 878 u16 dot11MeshRetryTimeout;
797 u16 dot11MeshConfirmTimeout; 879 u16 dot11MeshConfirmTimeout;
798 u16 dot11MeshHoldingTimeout; 880 u16 dot11MeshHoldingTimeout;
799 u16 dot11MeshMaxPeerLinks; 881 u16 dot11MeshMaxPeerLinks;
800 u8 dot11MeshMaxRetries; 882 u8 dot11MeshMaxRetries;
801 u8 dot11MeshTTL; 883 u8 dot11MeshTTL;
802 /* ttl used in path selection information elements */ 884 u8 element_ttl;
803 u8 element_ttl;
804 bool auto_open_plinks; 885 bool auto_open_plinks;
805 /* neighbor offset synchronization */
806 u32 dot11MeshNbrOffsetMaxNeighbor; 886 u32 dot11MeshNbrOffsetMaxNeighbor;
807 /* HWMP parameters */ 887 u8 dot11MeshHWMPmaxPREQretries;
808 u8 dot11MeshHWMPmaxPREQretries;
809 u32 path_refresh_time; 888 u32 path_refresh_time;
810 u16 min_discovery_timeout; 889 u16 min_discovery_timeout;
811 u32 dot11MeshHWMPactivePathTimeout; 890 u32 dot11MeshHWMPactivePathTimeout;
812 u16 dot11MeshHWMPpreqMinInterval; 891 u16 dot11MeshHWMPpreqMinInterval;
813 u16 dot11MeshHWMPperrMinInterval; 892 u16 dot11MeshHWMPperrMinInterval;
814 u16 dot11MeshHWMPnetDiameterTraversalTime; 893 u16 dot11MeshHWMPnetDiameterTraversalTime;
815 u8 dot11MeshHWMPRootMode; 894 u8 dot11MeshHWMPRootMode;
816 u16 dot11MeshHWMPRannInterval; 895 u16 dot11MeshHWMPRannInterval;
817 /* This is missnamed in draft 12.0: dot11MeshGateAnnouncementProtocol 896 bool dot11MeshGateAnnouncementProtocol;
818 * set to true only means that the station will announce others it's a
819 * mesh gate, but not necessarily using the gate announcement protocol.
820 * Still keeping the same nomenclature to be in sync with the spec. */
821 bool dot11MeshGateAnnouncementProtocol;
822 bool dot11MeshForwarding; 897 bool dot11MeshForwarding;
823 s32 rssi_threshold; 898 s32 rssi_threshold;
824 u16 ht_opmode; 899 u16 ht_opmode;
900 u32 dot11MeshHWMPactivePathToRootTimeout;
901 u16 dot11MeshHWMProotInterval;
902 u16 dot11MeshHWMPconfirmationInterval;
825}; 903};
826 904
827/** 905/**
828 * struct mesh_setup - 802.11s mesh setup configuration 906 * struct mesh_setup - 802.11s mesh setup configuration
907 * @channel: the channel to start the mesh network on
908 * @channel_type: the channel type to use
829 * @mesh_id: the mesh ID 909 * @mesh_id: the mesh ID
830 * @mesh_id_len: length of the mesh ID, at least 1 and at most 32 bytes 910 * @mesh_id_len: length of the mesh ID, at least 1 and at most 32 bytes
831 * @sync_method: which synchronization method to use 911 * @sync_method: which synchronization method to use
@@ -840,6 +920,8 @@ struct mesh_config {
840 * These parameters are fixed when the mesh is created. 920 * These parameters are fixed when the mesh is created.
841 */ 921 */
842struct mesh_setup { 922struct mesh_setup {
923 struct ieee80211_channel *channel;
924 enum nl80211_channel_type channel_type;
843 const u8 *mesh_id; 925 const u8 *mesh_id;
844 u8 mesh_id_len; 926 u8 mesh_id_len;
845 u8 sync_method; 927 u8 sync_method;
@@ -917,7 +999,7 @@ struct cfg80211_ssid {
917 * @ie_len: length of ie in octets 999 * @ie_len: length of ie in octets
918 * @rates: bitmap of rates to advertise for each band 1000 * @rates: bitmap of rates to advertise for each band
919 * @wiphy: the wiphy this was for 1001 * @wiphy: the wiphy this was for
920 * @dev: the interface 1002 * @wdev: the wireless device to scan for
921 * @aborted: (internal) scan request was notified as aborted 1003 * @aborted: (internal) scan request was notified as aborted
922 * @no_cck: used to send probe requests at non CCK rate in 2GHz band 1004 * @no_cck: used to send probe requests at non CCK rate in 2GHz band
923 */ 1005 */
@@ -930,9 +1012,10 @@ struct cfg80211_scan_request {
930 1012
931 u32 rates[IEEE80211_NUM_BANDS]; 1013 u32 rates[IEEE80211_NUM_BANDS];
932 1014
1015 struct wireless_dev *wdev;
1016
933 /* internal */ 1017 /* internal */
934 struct wiphy *wiphy; 1018 struct wiphy *wiphy;
935 struct net_device *dev;
936 bool aborted; 1019 bool aborted;
937 bool no_cck; 1020 bool no_cck;
938 1021
@@ -966,6 +1049,7 @@ struct cfg80211_match_set {
966 * @wiphy: the wiphy this was for 1049 * @wiphy: the wiphy this was for
967 * @dev: the interface 1050 * @dev: the interface
968 * @channels: channels to scan 1051 * @channels: channels to scan
1052 * @rssi_thold: don't report scan results below this threshold (in s32 dBm)
969 */ 1053 */
970struct cfg80211_sched_scan_request { 1054struct cfg80211_sched_scan_request {
971 struct cfg80211_ssid *ssids; 1055 struct cfg80211_ssid *ssids;
@@ -976,6 +1060,7 @@ struct cfg80211_sched_scan_request {
976 size_t ie_len; 1060 size_t ie_len;
977 struct cfg80211_match_set *match_sets; 1061 struct cfg80211_match_set *match_sets;
978 int n_match_sets; 1062 int n_match_sets;
1063 s32 rssi_thold;
979 1064
980 /* internal */ 1065 /* internal */
981 struct wiphy *wiphy; 1066 struct wiphy *wiphy;
@@ -1351,10 +1436,10 @@ struct cfg80211_gtk_rekey_data {
1351 * 1436 *
1352 * @add_virtual_intf: create a new virtual interface with the given name, 1437 * @add_virtual_intf: create a new virtual interface with the given name,
1353 * must set the struct wireless_dev's iftype. Beware: You must create 1438 * must set the struct wireless_dev's iftype. Beware: You must create
1354 * the new netdev in the wiphy's network namespace! Returns the netdev, 1439 * the new netdev in the wiphy's network namespace! Returns the struct
1355 * or an ERR_PTR. 1440 * wireless_dev, or an ERR_PTR.
1356 * 1441 *
1357 * @del_virtual_intf: remove the virtual interface determined by ifindex. 1442 * @del_virtual_intf: remove the virtual interface
1358 * 1443 *
1359 * @change_virtual_intf: change type/configuration of virtual interface, 1444 * @change_virtual_intf: change type/configuration of virtual interface,
1360 * keep the struct wireless_dev's iftype updated. 1445 * keep the struct wireless_dev's iftype updated.
@@ -1411,14 +1496,14 @@ struct cfg80211_gtk_rekey_data {
1411 * 1496 *
1412 * @set_txq_params: Set TX queue parameters 1497 * @set_txq_params: Set TX queue parameters
1413 * 1498 *
1414 * @set_channel: Set channel for a given wireless interface. Some devices 1499 * @libertas_set_mesh_channel: Only for backward compatibility for libertas,
1415 * may support multi-channel operation (by channel hopping) so cfg80211 1500 * as it doesn't implement join_mesh and needs to set the channel to
1416 * doesn't verify much. Note, however, that the passed netdev may be 1501 * join the mesh instead.
1417 * %NULL as well if the user requested changing the channel for the 1502 *
1418 * device itself, or for a monitor interface. 1503 * @set_monitor_channel: Set the monitor mode channel for the device. If other
1419 * @get_channel: Get the current operating channel, should return %NULL if 1504 * interfaces are active this callback should reject the configuration.
1420 * there's no single defined operating channel if for example the 1505 * If no interfaces are active or the device is down, the channel should
1421 * device implements channel hopping for multi-channel virtual interfaces. 1506 * be stored for when a monitor interface becomes active.
1422 * 1507 *
1423 * @scan: Request to do a scan. If returning zero, the scan request is given 1508 * @scan: Request to do a scan. If returning zero, the scan request is given
1424 * the driver, and will be valid until passed to cfg80211_scan_done(). 1509 * the driver, and will be valid until passed to cfg80211_scan_done().
@@ -1488,6 +1573,8 @@ struct cfg80211_gtk_rekey_data {
1488 * @set_power_mgmt: Configure WLAN power management. A timeout value of -1 1573 * @set_power_mgmt: Configure WLAN power management. A timeout value of -1
1489 * allows the driver to adjust the dynamic ps timeout value. 1574 * allows the driver to adjust the dynamic ps timeout value.
1490 * @set_cqm_rssi_config: Configure connection quality monitor RSSI threshold. 1575 * @set_cqm_rssi_config: Configure connection quality monitor RSSI threshold.
1576 * @set_cqm_txe_config: Configure connection quality monitor TX error
1577 * thresholds.
1491 * @sched_scan_start: Tell the driver to start a scheduled scan. 1578 * @sched_scan_start: Tell the driver to start a scheduled scan.
1492 * @sched_scan_stop: Tell the driver to stop an ongoing scheduled 1579 * @sched_scan_stop: Tell the driver to stop an ongoing scheduled
1493 * scan. The driver_initiated flag specifies whether the driver 1580 * scan. The driver_initiated flag specifies whether the driver
@@ -1525,18 +1612,23 @@ struct cfg80211_gtk_rekey_data {
1525 * @get_et_strings: Ethtool API to get a set of strings to describe stats 1612 * @get_et_strings: Ethtool API to get a set of strings to describe stats
1526 * and perhaps other supported types of ethtool data-sets. 1613 * and perhaps other supported types of ethtool data-sets.
1527 * See @ethtool_ops.get_strings 1614 * See @ethtool_ops.get_strings
1615 *
1616 * @get_channel: Get the current operating channel for the virtual interface.
1617 * For monitor interfaces, it should return %NULL unless there's a single
1618 * current monitoring channel.
1528 */ 1619 */
1529struct cfg80211_ops { 1620struct cfg80211_ops {
1530 int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow); 1621 int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow);
1531 int (*resume)(struct wiphy *wiphy); 1622 int (*resume)(struct wiphy *wiphy);
1532 void (*set_wakeup)(struct wiphy *wiphy, bool enabled); 1623 void (*set_wakeup)(struct wiphy *wiphy, bool enabled);
1533 1624
1534 struct net_device * (*add_virtual_intf)(struct wiphy *wiphy, 1625 struct wireless_dev * (*add_virtual_intf)(struct wiphy *wiphy,
1535 char *name, 1626 char *name,
1536 enum nl80211_iftype type, 1627 enum nl80211_iftype type,
1537 u32 *flags, 1628 u32 *flags,
1538 struct vif_params *params); 1629 struct vif_params *params);
1539 int (*del_virtual_intf)(struct wiphy *wiphy, struct net_device *dev); 1630 int (*del_virtual_intf)(struct wiphy *wiphy,
1631 struct wireless_dev *wdev);
1540 int (*change_virtual_intf)(struct wiphy *wiphy, 1632 int (*change_virtual_intf)(struct wiphy *wiphy,
1541 struct net_device *dev, 1633 struct net_device *dev,
1542 enum nl80211_iftype type, u32 *flags, 1634 enum nl80211_iftype type, u32 *flags,
@@ -1605,11 +1697,15 @@ struct cfg80211_ops {
1605 int (*set_txq_params)(struct wiphy *wiphy, struct net_device *dev, 1697 int (*set_txq_params)(struct wiphy *wiphy, struct net_device *dev,
1606 struct ieee80211_txq_params *params); 1698 struct ieee80211_txq_params *params);
1607 1699
1608 int (*set_channel)(struct wiphy *wiphy, struct net_device *dev, 1700 int (*libertas_set_mesh_channel)(struct wiphy *wiphy,
1609 struct ieee80211_channel *chan, 1701 struct net_device *dev,
1610 enum nl80211_channel_type channel_type); 1702 struct ieee80211_channel *chan);
1703
1704 int (*set_monitor_channel)(struct wiphy *wiphy,
1705 struct ieee80211_channel *chan,
1706 enum nl80211_channel_type channel_type);
1611 1707
1612 int (*scan)(struct wiphy *wiphy, struct net_device *dev, 1708 int (*scan)(struct wiphy *wiphy,
1613 struct cfg80211_scan_request *request); 1709 struct cfg80211_scan_request *request);
1614 1710
1615 int (*auth)(struct wiphy *wiphy, struct net_device *dev, 1711 int (*auth)(struct wiphy *wiphy, struct net_device *dev,
@@ -1663,23 +1759,23 @@ struct cfg80211_ops {
1663 int (*flush_pmksa)(struct wiphy *wiphy, struct net_device *netdev); 1759 int (*flush_pmksa)(struct wiphy *wiphy, struct net_device *netdev);
1664 1760
1665 int (*remain_on_channel)(struct wiphy *wiphy, 1761 int (*remain_on_channel)(struct wiphy *wiphy,
1666 struct net_device *dev, 1762 struct wireless_dev *wdev,
1667 struct ieee80211_channel *chan, 1763 struct ieee80211_channel *chan,
1668 enum nl80211_channel_type channel_type, 1764 enum nl80211_channel_type channel_type,
1669 unsigned int duration, 1765 unsigned int duration,
1670 u64 *cookie); 1766 u64 *cookie);
1671 int (*cancel_remain_on_channel)(struct wiphy *wiphy, 1767 int (*cancel_remain_on_channel)(struct wiphy *wiphy,
1672 struct net_device *dev, 1768 struct wireless_dev *wdev,
1673 u64 cookie); 1769 u64 cookie);
1674 1770
1675 int (*mgmt_tx)(struct wiphy *wiphy, struct net_device *dev, 1771 int (*mgmt_tx)(struct wiphy *wiphy, struct wireless_dev *wdev,
1676 struct ieee80211_channel *chan, bool offchan, 1772 struct ieee80211_channel *chan, bool offchan,
1677 enum nl80211_channel_type channel_type, 1773 enum nl80211_channel_type channel_type,
1678 bool channel_type_valid, unsigned int wait, 1774 bool channel_type_valid, unsigned int wait,
1679 const u8 *buf, size_t len, bool no_cck, 1775 const u8 *buf, size_t len, bool no_cck,
1680 bool dont_wait_for_ack, u64 *cookie); 1776 bool dont_wait_for_ack, u64 *cookie);
1681 int (*mgmt_tx_cancel_wait)(struct wiphy *wiphy, 1777 int (*mgmt_tx_cancel_wait)(struct wiphy *wiphy,
1682 struct net_device *dev, 1778 struct wireless_dev *wdev,
1683 u64 cookie); 1779 u64 cookie);
1684 1780
1685 int (*set_power_mgmt)(struct wiphy *wiphy, struct net_device *dev, 1781 int (*set_power_mgmt)(struct wiphy *wiphy, struct net_device *dev,
@@ -1689,8 +1785,12 @@ struct cfg80211_ops {
1689 struct net_device *dev, 1785 struct net_device *dev,
1690 s32 rssi_thold, u32 rssi_hyst); 1786 s32 rssi_thold, u32 rssi_hyst);
1691 1787
1788 int (*set_cqm_txe_config)(struct wiphy *wiphy,
1789 struct net_device *dev,
1790 u32 rate, u32 pkts, u32 intvl);
1791
1692 void (*mgmt_frame_register)(struct wiphy *wiphy, 1792 void (*mgmt_frame_register)(struct wiphy *wiphy,
1693 struct net_device *dev, 1793 struct wireless_dev *wdev,
1694 u16 frame_type, bool reg); 1794 u16 frame_type, bool reg);
1695 1795
1696 int (*set_antenna)(struct wiphy *wiphy, u32 tx_ant, u32 rx_ant); 1796 int (*set_antenna)(struct wiphy *wiphy, u32 tx_ant, u32 rx_ant);
@@ -1721,15 +1821,17 @@ struct cfg80211_ops {
1721 struct net_device *dev, 1821 struct net_device *dev,
1722 u16 noack_map); 1822 u16 noack_map);
1723 1823
1724 struct ieee80211_channel *(*get_channel)(struct wiphy *wiphy,
1725 enum nl80211_channel_type *type);
1726
1727 int (*get_et_sset_count)(struct wiphy *wiphy, 1824 int (*get_et_sset_count)(struct wiphy *wiphy,
1728 struct net_device *dev, int sset); 1825 struct net_device *dev, int sset);
1729 void (*get_et_stats)(struct wiphy *wiphy, struct net_device *dev, 1826 void (*get_et_stats)(struct wiphy *wiphy, struct net_device *dev,
1730 struct ethtool_stats *stats, u64 *data); 1827 struct ethtool_stats *stats, u64 *data);
1731 void (*get_et_strings)(struct wiphy *wiphy, struct net_device *dev, 1828 void (*get_et_strings)(struct wiphy *wiphy, struct net_device *dev,
1732 u32 sset, u8 *data); 1829 u32 sset, u8 *data);
1830
1831 struct ieee80211_channel *
1832 (*get_channel)(struct wiphy *wiphy,
1833 struct wireless_dev *wdev,
1834 enum nl80211_channel_type *type);
1733}; 1835};
1734 1836
1735/* 1837/*
@@ -2083,7 +2185,9 @@ struct wiphy {
2083 char fw_version[ETHTOOL_BUSINFO_LEN]; 2185 char fw_version[ETHTOOL_BUSINFO_LEN];
2084 u32 hw_version; 2186 u32 hw_version;
2085 2187
2188#ifdef CONFIG_PM
2086 struct wiphy_wowlan_support wowlan; 2189 struct wiphy_wowlan_support wowlan;
2190#endif
2087 2191
2088 u16 max_remain_on_channel_duration; 2192 u16 max_remain_on_channel_duration;
2089 2193
@@ -2250,20 +2354,31 @@ struct cfg80211_internal_bss;
2250struct cfg80211_cached_keys; 2354struct cfg80211_cached_keys;
2251 2355
2252/** 2356/**
2253 * struct wireless_dev - wireless per-netdev state 2357 * struct wireless_dev - wireless device state
2358 *
2359 * For netdevs, this structure must be allocated by the driver
2360 * that uses the ieee80211_ptr field in struct net_device (this
2361 * is intentional so it can be allocated along with the netdev.)
2362 * It need not be registered then as netdev registration will
2363 * be intercepted by cfg80211 to see the new wireless device.
2254 * 2364 *
2255 * This structure must be allocated by the driver/stack 2365 * For non-netdev uses, it must also be allocated by the driver
2256 * that uses the ieee80211_ptr field in struct net_device 2366 * in response to the cfg80211 callbacks that require it, as
2257 * (this is intentional so it can be allocated along with 2367 * there's no netdev registration in that case it may not be
2258 * the netdev.) 2368 * allocated outside of callback operations that return it.
2259 * 2369 *
2260 * @wiphy: pointer to hardware description 2370 * @wiphy: pointer to hardware description
2261 * @iftype: interface type 2371 * @iftype: interface type
2262 * @list: (private) Used to collect the interfaces 2372 * @list: (private) Used to collect the interfaces
2263 * @netdev: (private) Used to reference back to the netdev 2373 * @netdev: (private) Used to reference back to the netdev, may be %NULL
2374 * @identifier: (private) Identifier used in nl80211 to identify this
2375 * wireless device if it has no netdev
2264 * @current_bss: (private) Used by the internal configuration code 2376 * @current_bss: (private) Used by the internal configuration code
2265 * @channel: (private) Used by the internal configuration code to track 2377 * @channel: (private) Used by the internal configuration code to track
2266 * user-set AP, monitor and WDS channels for wireless extensions 2378 * the user-set AP, monitor and WDS channel
2379 * @preset_chan: (private) Used by the internal configuration code to
2380 * track the channel to be used for AP later
2381 * @preset_chantype: (private) the corresponding channel type
2267 * @bssid: (private) Used by the internal configuration code 2382 * @bssid: (private) Used by the internal configuration code
2268 * @ssid: (private) Used by the internal configuration code 2383 * @ssid: (private) Used by the internal configuration code
2269 * @ssid_len: (private) Used by the internal configuration code 2384 * @ssid_len: (private) Used by the internal configuration code
@@ -2289,6 +2404,8 @@ struct wireless_dev {
2289 struct list_head list; 2404 struct list_head list;
2290 struct net_device *netdev; 2405 struct net_device *netdev;
2291 2406
2407 u32 identifier;
2408
2292 struct list_head mgmt_registrations; 2409 struct list_head mgmt_registrations;
2293 spinlock_t mgmt_registrations_lock; 2410 spinlock_t mgmt_registrations_lock;
2294 2411
@@ -2313,8 +2430,14 @@ struct wireless_dev {
2313 spinlock_t event_lock; 2430 spinlock_t event_lock;
2314 2431
2315 struct cfg80211_internal_bss *current_bss; /* associated / joined */ 2432 struct cfg80211_internal_bss *current_bss; /* associated / joined */
2433 struct ieee80211_channel *preset_chan;
2434 enum nl80211_channel_type preset_chantype;
2435
2436 /* for AP and mesh channel tracking */
2316 struct ieee80211_channel *channel; 2437 struct ieee80211_channel *channel;
2317 2438
2439 bool ibss_fixed;
2440
2318 bool ps; 2441 bool ps;
2319 int ps_timeout; 2442 int ps_timeout;
2320 2443
@@ -3169,7 +3292,7 @@ void cfg80211_disconnected(struct net_device *dev, u16 reason,
3169 3292
3170/** 3293/**
3171 * cfg80211_ready_on_channel - notification of remain_on_channel start 3294 * cfg80211_ready_on_channel - notification of remain_on_channel start
3172 * @dev: network device 3295 * @wdev: wireless device
3173 * @cookie: the request cookie 3296 * @cookie: the request cookie
3174 * @chan: The current channel (from remain_on_channel request) 3297 * @chan: The current channel (from remain_on_channel request)
3175 * @channel_type: Channel type 3298 * @channel_type: Channel type
@@ -3177,21 +3300,20 @@ void cfg80211_disconnected(struct net_device *dev, u16 reason,
3177 * channel 3300 * channel
3178 * @gfp: allocation flags 3301 * @gfp: allocation flags
3179 */ 3302 */
3180void cfg80211_ready_on_channel(struct net_device *dev, u64 cookie, 3303void cfg80211_ready_on_channel(struct wireless_dev *wdev, u64 cookie,
3181 struct ieee80211_channel *chan, 3304 struct ieee80211_channel *chan,
3182 enum nl80211_channel_type channel_type, 3305 enum nl80211_channel_type channel_type,
3183 unsigned int duration, gfp_t gfp); 3306 unsigned int duration, gfp_t gfp);
3184 3307
3185/** 3308/**
3186 * cfg80211_remain_on_channel_expired - remain_on_channel duration expired 3309 * cfg80211_remain_on_channel_expired - remain_on_channel duration expired
3187 * @dev: network device 3310 * @wdev: wireless device
3188 * @cookie: the request cookie 3311 * @cookie: the request cookie
3189 * @chan: The current channel (from remain_on_channel request) 3312 * @chan: The current channel (from remain_on_channel request)
3190 * @channel_type: Channel type 3313 * @channel_type: Channel type
3191 * @gfp: allocation flags 3314 * @gfp: allocation flags
3192 */ 3315 */
3193void cfg80211_remain_on_channel_expired(struct net_device *dev, 3316void cfg80211_remain_on_channel_expired(struct wireless_dev *wdev, u64 cookie,
3194 u64 cookie,
3195 struct ieee80211_channel *chan, 3317 struct ieee80211_channel *chan,
3196 enum nl80211_channel_type channel_type, 3318 enum nl80211_channel_type channel_type,
3197 gfp_t gfp); 3319 gfp_t gfp);
@@ -3219,7 +3341,7 @@ void cfg80211_del_sta(struct net_device *dev, const u8 *mac_addr, gfp_t gfp);
3219 3341
3220/** 3342/**
3221 * cfg80211_rx_mgmt - notification of received, unprocessed management frame 3343 * cfg80211_rx_mgmt - notification of received, unprocessed management frame
3222 * @dev: network device 3344 * @wdev: wireless device receiving the frame
3223 * @freq: Frequency on which the frame was received in MHz 3345 * @freq: Frequency on which the frame was received in MHz
3224 * @sig_dbm: signal strength in mBm, or 0 if unknown 3346 * @sig_dbm: signal strength in mBm, or 0 if unknown
3225 * @buf: Management frame (header + body) 3347 * @buf: Management frame (header + body)
@@ -3234,12 +3356,12 @@ void cfg80211_del_sta(struct net_device *dev, const u8 *mac_addr, gfp_t gfp);
3234 * This function is called whenever an Action frame is received for a station 3356 * This function is called whenever an Action frame is received for a station
3235 * mode interface, but is not processed in kernel. 3357 * mode interface, but is not processed in kernel.
3236 */ 3358 */
3237bool cfg80211_rx_mgmt(struct net_device *dev, int freq, int sig_dbm, 3359bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq, int sig_dbm,
3238 const u8 *buf, size_t len, gfp_t gfp); 3360 const u8 *buf, size_t len, gfp_t gfp);
3239 3361
3240/** 3362/**
3241 * cfg80211_mgmt_tx_status - notification of TX status for management frame 3363 * cfg80211_mgmt_tx_status - notification of TX status for management frame
3242 * @dev: network device 3364 * @wdev: wireless device receiving the frame
3243 * @cookie: Cookie returned by cfg80211_ops::mgmt_tx() 3365 * @cookie: Cookie returned by cfg80211_ops::mgmt_tx()
3244 * @buf: Management frame (header + body) 3366 * @buf: Management frame (header + body)
3245 * @len: length of the frame data 3367 * @len: length of the frame data
@@ -3250,7 +3372,7 @@ bool cfg80211_rx_mgmt(struct net_device *dev, int freq, int sig_dbm,
3250 * transmitted with cfg80211_ops::mgmt_tx() to report the TX status of the 3372 * transmitted with cfg80211_ops::mgmt_tx() to report the TX status of the
3251 * transmission attempt. 3373 * transmission attempt.
3252 */ 3374 */
3253void cfg80211_mgmt_tx_status(struct net_device *dev, u64 cookie, 3375void cfg80211_mgmt_tx_status(struct wireless_dev *wdev, u64 cookie,
3254 const u8 *buf, size_t len, bool ack, gfp_t gfp); 3376 const u8 *buf, size_t len, bool ack, gfp_t gfp);
3255 3377
3256 3378
@@ -3280,6 +3402,21 @@ void cfg80211_cqm_pktloss_notify(struct net_device *dev,
3280 const u8 *peer, u32 num_packets, gfp_t gfp); 3402 const u8 *peer, u32 num_packets, gfp_t gfp);
3281 3403
3282/** 3404/**
3405 * cfg80211_cqm_txe_notify - TX error rate event
3406 * @dev: network device
3407 * @peer: peer's MAC address
3408 * @num_packets: how many packets were lost
3409 * @rate: % of packets which failed transmission
3410 * @intvl: interval (in s) over which the TX failure threshold was breached.
3411 * @gfp: context flags
3412 *
3413 * Notify userspace when configured % TX failures over number of packets in a
3414 * given interval is exceeded.
3415 */
3416void cfg80211_cqm_txe_notify(struct net_device *dev, const u8 *peer,
3417 u32 num_packets, u32 rate, u32 intvl, gfp_t gfp);
3418
3419/**
3283 * cfg80211_gtk_rekey_notify - notify userspace about driver rekeying 3420 * cfg80211_gtk_rekey_notify - notify userspace about driver rekeying
3284 * @dev: network device 3421 * @dev: network device
3285 * @bssid: BSSID of AP (to avoid races) 3422 * @bssid: BSSID of AP (to avoid races)
@@ -3359,11 +3496,14 @@ void cfg80211_report_obss_beacon(struct wiphy *wiphy,
3359 const u8 *frame, size_t len, 3496 const u8 *frame, size_t len,
3360 int freq, int sig_dbm, gfp_t gfp); 3497 int freq, int sig_dbm, gfp_t gfp);
3361 3498
3362/* 3499/**
3363 * cfg80211_can_beacon_sec_chan - test if ht40 on extension channel can be used 3500 * cfg80211_can_beacon_sec_chan - test if ht40 on extension channel can be used
3364 * @wiphy: the wiphy 3501 * @wiphy: the wiphy
3365 * @chan: main channel 3502 * @chan: main channel
3366 * @channel_type: HT mode 3503 * @channel_type: HT mode
3504 *
3505 * This function returns true if there is no secondary channel or the secondary
3506 * channel can be used for beaconing (i.e. is not a radar channel etc.)
3367 */ 3507 */
3368bool cfg80211_can_beacon_sec_chan(struct wiphy *wiphy, 3508bool cfg80211_can_beacon_sec_chan(struct wiphy *wiphy,
3369 struct ieee80211_channel *chan, 3509 struct ieee80211_channel *chan,
@@ -3386,7 +3526,7 @@ void cfg80211_ch_switch_notify(struct net_device *dev, int freq,
3386 * 3526 *
3387 * return 0 if MCS index >= 32 3527 * return 0 if MCS index >= 32
3388 */ 3528 */
3389u16 cfg80211_calculate_bitrate(struct rate_info *rate); 3529u32 cfg80211_calculate_bitrate(struct rate_info *rate);
3390 3530
3391/* Logging, debugging and troubleshooting/diagnostic helpers. */ 3531/* Logging, debugging and troubleshooting/diagnostic helpers. */
3392 3532
diff --git a/include/net/dn_route.h b/include/net/dn_route.h
index c507e05d172f..4f7d6a182381 100644
--- a/include/net/dn_route.h
+++ b/include/net/dn_route.h
@@ -67,6 +67,8 @@ extern void dn_rt_cache_flush(int delay);
67struct dn_route { 67struct dn_route {
68 struct dst_entry dst; 68 struct dst_entry dst;
69 69
70 struct neighbour *n;
71
70 struct flowidn fld; 72 struct flowidn fld;
71 73
72 __le16 rt_saddr; 74 __le16 rt_saddr;
diff --git a/include/net/dst.h b/include/net/dst.h
index 8197eadca819..baf597890064 100644
--- a/include/net/dst.h
+++ b/include/net/dst.h
@@ -42,16 +42,16 @@ struct dst_entry {
42 struct dst_entry *from; 42 struct dst_entry *from;
43 }; 43 };
44 struct dst_entry *path; 44 struct dst_entry *path;
45 struct neighbour __rcu *_neighbour; 45 void *__pad0;
46#ifdef CONFIG_XFRM 46#ifdef CONFIG_XFRM
47 struct xfrm_state *xfrm; 47 struct xfrm_state *xfrm;
48#else 48#else
49 void *__pad1; 49 void *__pad1;
50#endif 50#endif
51 int (*input)(struct sk_buff*); 51 int (*input)(struct sk_buff *);
52 int (*output)(struct sk_buff*); 52 int (*output)(struct sk_buff *);
53 53
54 int flags; 54 unsigned short flags;
55#define DST_HOST 0x0001 55#define DST_HOST 0x0001
56#define DST_NOXFRM 0x0002 56#define DST_NOXFRM 0x0002
57#define DST_NOPOLICY 0x0004 57#define DST_NOPOLICY 0x0004
@@ -62,8 +62,23 @@ struct dst_entry {
62#define DST_FAKE_RTABLE 0x0080 62#define DST_FAKE_RTABLE 0x0080
63#define DST_XFRM_TUNNEL 0x0100 63#define DST_XFRM_TUNNEL 0x0100
64 64
65 unsigned short pending_confirm;
66
65 short error; 67 short error;
68
69 /* A non-zero value of dst->obsolete forces by-hand validation
70 * of the route entry. Positive values are set by the generic
71 * dst layer to indicate that the entry has been forcefully
72 * destroyed.
73 *
74 * Negative values are used by the implementation layer code to
75 * force invocation of the dst_ops->check() method.
76 */
66 short obsolete; 77 short obsolete;
78#define DST_OBSOLETE_NONE 0
79#define DST_OBSOLETE_DEAD 2
80#define DST_OBSOLETE_FORCE_CHK -1
81#define DST_OBSOLETE_KILL -2
67 unsigned short header_len; /* more space at head required */ 82 unsigned short header_len; /* more space at head required */
68 unsigned short trailer_len; /* space to reserve at tail */ 83 unsigned short trailer_len; /* space to reserve at tail */
69#ifdef CONFIG_IP_ROUTE_CLASSID 84#ifdef CONFIG_IP_ROUTE_CLASSID
@@ -94,21 +109,6 @@ struct dst_entry {
94 }; 109 };
95}; 110};
96 111
97static inline struct neighbour *dst_get_neighbour_noref(struct dst_entry *dst)
98{
99 return rcu_dereference(dst->_neighbour);
100}
101
102static inline struct neighbour *dst_get_neighbour_noref_raw(struct dst_entry *dst)
103{
104 return rcu_dereference_raw(dst->_neighbour);
105}
106
107static inline void dst_set_neighbour(struct dst_entry *dst, struct neighbour *neigh)
108{
109 rcu_assign_pointer(dst->_neighbour, neigh);
110}
111
112extern u32 *dst_cow_metrics_generic(struct dst_entry *dst, unsigned long old); 112extern u32 *dst_cow_metrics_generic(struct dst_entry *dst, unsigned long old);
113extern const u32 dst_default_metrics[RTAX_MAX]; 113extern const u32 dst_default_metrics[RTAX_MAX];
114 114
@@ -222,12 +222,6 @@ static inline unsigned long dst_metric_rtt(const struct dst_entry *dst, int metr
222 return msecs_to_jiffies(dst_metric(dst, metric)); 222 return msecs_to_jiffies(dst_metric(dst, metric));
223} 223}
224 224
225static inline void set_dst_metric_rtt(struct dst_entry *dst, int metric,
226 unsigned long rtt)
227{
228 dst_metric_set(dst, metric, jiffies_to_msecs(rtt));
229}
230
231static inline u32 225static inline u32
232dst_allfrag(const struct dst_entry *dst) 226dst_allfrag(const struct dst_entry *dst)
233{ 227{
@@ -241,7 +235,7 @@ dst_metric_locked(const struct dst_entry *dst, int metric)
241 return dst_metric(dst, RTAX_LOCK) & (1<<metric); 235 return dst_metric(dst, RTAX_LOCK) & (1<<metric);
242} 236}
243 237
244static inline void dst_hold(struct dst_entry * dst) 238static inline void dst_hold(struct dst_entry *dst)
245{ 239{
246 /* 240 /*
247 * If your kernel compilation stops here, please check 241 * If your kernel compilation stops here, please check
@@ -264,8 +258,7 @@ static inline void dst_use_noref(struct dst_entry *dst, unsigned long time)
264 dst->lastuse = time; 258 dst->lastuse = time;
265} 259}
266 260
267static inline 261static inline struct dst_entry *dst_clone(struct dst_entry *dst)
268struct dst_entry * dst_clone(struct dst_entry * dst)
269{ 262{
270 if (dst) 263 if (dst)
271 atomic_inc(&dst->__refcnt); 264 atomic_inc(&dst->__refcnt);
@@ -371,14 +364,15 @@ static inline struct dst_entry *skb_dst_pop(struct sk_buff *skb)
371} 364}
372 365
373extern int dst_discard(struct sk_buff *skb); 366extern int dst_discard(struct sk_buff *skb);
374extern void *dst_alloc(struct dst_ops * ops, struct net_device *dev, 367extern void *dst_alloc(struct dst_ops *ops, struct net_device *dev,
375 int initial_ref, int initial_obsolete, int flags); 368 int initial_ref, int initial_obsolete,
376extern void __dst_free(struct dst_entry * dst); 369 unsigned short flags);
377extern struct dst_entry *dst_destroy(struct dst_entry * dst); 370extern void __dst_free(struct dst_entry *dst);
371extern struct dst_entry *dst_destroy(struct dst_entry *dst);
378 372
379static inline void dst_free(struct dst_entry * dst) 373static inline void dst_free(struct dst_entry *dst)
380{ 374{
381 if (dst->obsolete > 1) 375 if (dst->obsolete > 0)
382 return; 376 return;
383 if (!atomic_read(&dst->__refcnt)) { 377 if (!atomic_read(&dst->__refcnt)) {
384 dst = dst_destroy(dst); 378 dst = dst_destroy(dst);
@@ -396,19 +390,35 @@ static inline void dst_rcu_free(struct rcu_head *head)
396 390
397static inline void dst_confirm(struct dst_entry *dst) 391static inline void dst_confirm(struct dst_entry *dst)
398{ 392{
399 if (dst) { 393 dst->pending_confirm = 1;
400 struct neighbour *n; 394}
401 395
402 rcu_read_lock(); 396static inline int dst_neigh_output(struct dst_entry *dst, struct neighbour *n,
403 n = dst_get_neighbour_noref(dst); 397 struct sk_buff *skb)
404 neigh_confirm(n); 398{
405 rcu_read_unlock(); 399 struct hh_cache *hh;
400
401 if (unlikely(dst->pending_confirm)) {
402 n->confirmed = jiffies;
403 dst->pending_confirm = 0;
406 } 404 }
405
406 hh = &n->hh;
407 if ((n->nud_state & NUD_CONNECTED) && hh->hh_len)
408 return neigh_hh_output(hh, skb);
409 else
410 return n->output(n, skb);
407} 411}
408 412
409static inline struct neighbour *dst_neigh_lookup(const struct dst_entry *dst, const void *daddr) 413static inline struct neighbour *dst_neigh_lookup(const struct dst_entry *dst, const void *daddr)
410{ 414{
411 return dst->ops->neigh_lookup(dst, daddr); 415 return dst->ops->neigh_lookup(dst, NULL, daddr);
416}
417
418static inline struct neighbour *dst_neigh_lookup_skb(const struct dst_entry *dst,
419 struct sk_buff *skb)
420{
421 return dst->ops->neigh_lookup(dst, skb, NULL);
412} 422}
413 423
414static inline void dst_link_failure(struct sk_buff *skb) 424static inline void dst_link_failure(struct sk_buff *skb)
diff --git a/include/net/dst_ops.h b/include/net/dst_ops.h
index 3682a0a076c1..2f26dfb8450e 100644
--- a/include/net/dst_ops.h
+++ b/include/net/dst_ops.h
@@ -8,6 +8,7 @@ struct dst_entry;
8struct kmem_cachep; 8struct kmem_cachep;
9struct net_device; 9struct net_device;
10struct sk_buff; 10struct sk_buff;
11struct sock;
11 12
12struct dst_ops { 13struct dst_ops {
13 unsigned short family; 14 unsigned short family;
@@ -24,9 +25,14 @@ struct dst_ops {
24 struct net_device *dev, int how); 25 struct net_device *dev, int how);
25 struct dst_entry * (*negative_advice)(struct dst_entry *); 26 struct dst_entry * (*negative_advice)(struct dst_entry *);
26 void (*link_failure)(struct sk_buff *); 27 void (*link_failure)(struct sk_buff *);
27 void (*update_pmtu)(struct dst_entry *dst, u32 mtu); 28 void (*update_pmtu)(struct dst_entry *dst, struct sock *sk,
29 struct sk_buff *skb, u32 mtu);
30 void (*redirect)(struct dst_entry *dst, struct sock *sk,
31 struct sk_buff *skb);
28 int (*local_out)(struct sk_buff *skb); 32 int (*local_out)(struct sk_buff *skb);
29 struct neighbour * (*neigh_lookup)(const struct dst_entry *dst, const void *daddr); 33 struct neighbour * (*neigh_lookup)(const struct dst_entry *dst,
34 struct sk_buff *skb,
35 const void *daddr);
30 36
31 struct kmem_cache *kmem_cachep; 37 struct kmem_cache *kmem_cachep;
32 38
diff --git a/include/net/fib_rules.h b/include/net/fib_rules.h
index 075f1e3a0fed..e361f4882426 100644
--- a/include/net/fib_rules.h
+++ b/include/net/fib_rules.h
@@ -52,6 +52,7 @@ struct fib_rules_ops {
52 struct sk_buff *, 52 struct sk_buff *,
53 struct fib_rule_hdr *, 53 struct fib_rule_hdr *,
54 struct nlattr **); 54 struct nlattr **);
55 void (*delete)(struct fib_rule *);
55 int (*compare)(struct fib_rule *, 56 int (*compare)(struct fib_rule *,
56 struct fib_rule_hdr *, 57 struct fib_rule_hdr *,
57 struct nlattr **); 58 struct nlattr **);
diff --git a/include/net/flow.h b/include/net/flow.h
index 6c469dbdb917..e1dd5082ec7e 100644
--- a/include/net/flow.h
+++ b/include/net/flow.h
@@ -20,8 +20,7 @@ struct flowi_common {
20 __u8 flowic_proto; 20 __u8 flowic_proto;
21 __u8 flowic_flags; 21 __u8 flowic_flags;
22#define FLOWI_FLAG_ANYSRC 0x01 22#define FLOWI_FLAG_ANYSRC 0x01
23#define FLOWI_FLAG_PRECOW_METRICS 0x02 23#define FLOWI_FLAG_CAN_SLEEP 0x02
24#define FLOWI_FLAG_CAN_SLEEP 0x04
25 __u32 flowic_secid; 24 __u32 flowic_secid;
26}; 25};
27 26
diff --git a/include/net/genetlink.h b/include/net/genetlink.h
index ccb68880abf5..48905cd3884c 100644
--- a/include/net/genetlink.h
+++ b/include/net/genetlink.h
@@ -5,6 +5,8 @@
5#include <net/netlink.h> 5#include <net/netlink.h>
6#include <net/net_namespace.h> 6#include <net/net_namespace.h>
7 7
8#define GENLMSG_DEFAULT_SIZE (NLMSG_DEFAULT_SIZE - GENL_HDRLEN)
9
8/** 10/**
9 * struct genl_multicast_group - generic netlink multicast group 11 * struct genl_multicast_group - generic netlink multicast group
10 * @name: name of the multicast group, names are per-family 12 * @name: name of the multicast group, names are per-family
diff --git a/include/net/inet6_connection_sock.h b/include/net/inet6_connection_sock.h
index 1866a676c810..04642c920431 100644
--- a/include/net/inet6_connection_sock.h
+++ b/include/net/inet6_connection_sock.h
@@ -26,6 +26,7 @@ extern int inet6_csk_bind_conflict(const struct sock *sk,
26 const struct inet_bind_bucket *tb, bool relax); 26 const struct inet_bind_bucket *tb, bool relax);
27 27
28extern struct dst_entry* inet6_csk_route_req(struct sock *sk, 28extern struct dst_entry* inet6_csk_route_req(struct sock *sk,
29 struct flowi6 *fl6,
29 const struct request_sock *req); 30 const struct request_sock *req);
30 31
31extern struct request_sock *inet6_csk_search_req(const struct sock *sk, 32extern struct request_sock *inet6_csk_search_req(const struct sock *sk,
@@ -42,4 +43,6 @@ extern void inet6_csk_reqsk_queue_hash_add(struct sock *sk,
42extern void inet6_csk_addr2sockaddr(struct sock *sk, struct sockaddr *uaddr); 43extern void inet6_csk_addr2sockaddr(struct sock *sk, struct sockaddr *uaddr);
43 44
44extern int inet6_csk_xmit(struct sk_buff *skb, struct flowi *fl); 45extern int inet6_csk_xmit(struct sk_buff *skb, struct flowi *fl);
46
47extern struct dst_entry *inet6_csk_update_pmtu(struct sock *sk, u32 mtu);
45#endif /* _INET6_CONNECTION_SOCK_H */ 48#endif /* _INET6_CONNECTION_SOCK_H */
diff --git a/include/net/inet_common.h b/include/net/inet_common.h
index 22fac9892b16..234008782c8c 100644
--- a/include/net/inet_common.h
+++ b/include/net/inet_common.h
@@ -14,9 +14,11 @@ struct sockaddr;
14struct socket; 14struct socket;
15 15
16extern int inet_release(struct socket *sock); 16extern int inet_release(struct socket *sock);
17extern int inet_stream_connect(struct socket *sock, struct sockaddr * uaddr, 17extern int inet_stream_connect(struct socket *sock, struct sockaddr *uaddr,
18 int addr_len, int flags); 18 int addr_len, int flags);
19extern int inet_dgram_connect(struct socket *sock, struct sockaddr * uaddr, 19extern int __inet_stream_connect(struct socket *sock, struct sockaddr *uaddr,
20 int addr_len, int flags);
21extern int inet_dgram_connect(struct socket *sock, struct sockaddr *uaddr,
20 int addr_len, int flags); 22 int addr_len, int flags);
21extern int inet_accept(struct socket *sock, struct socket *newsock, int flags); 23extern int inet_accept(struct socket *sock, struct socket *newsock, int flags);
22extern int inet_sendmsg(struct kiocb *iocb, struct socket *sock, 24extern int inet_sendmsg(struct kiocb *iocb, struct socket *sock,
diff --git a/include/net/inet_connection_sock.h b/include/net/inet_connection_sock.h
index 7d83f90f203f..5ee66f517b4f 100644
--- a/include/net/inet_connection_sock.h
+++ b/include/net/inet_connection_sock.h
@@ -43,7 +43,6 @@ struct inet_connection_sock_af_ops {
43 struct sock *(*syn_recv_sock)(struct sock *sk, struct sk_buff *skb, 43 struct sock *(*syn_recv_sock)(struct sock *sk, struct sk_buff *skb,
44 struct request_sock *req, 44 struct request_sock *req,
45 struct dst_entry *dst); 45 struct dst_entry *dst);
46 struct inet_peer *(*get_peer)(struct sock *sk, bool *release_it);
47 u16 net_header_len; 46 u16 net_header_len;
48 u16 net_frag_header_len; 47 u16 net_frag_header_len;
49 u16 sockaddr_len; 48 u16 sockaddr_len;
@@ -337,4 +336,6 @@ extern int inet_csk_compat_getsockopt(struct sock *sk, int level, int optname,
337 char __user *optval, int __user *optlen); 336 char __user *optval, int __user *optlen);
338extern int inet_csk_compat_setsockopt(struct sock *sk, int level, int optname, 337extern int inet_csk_compat_setsockopt(struct sock *sk, int level, int optname,
339 char __user *optval, unsigned int optlen); 338 char __user *optval, unsigned int optlen);
339
340extern struct dst_entry *inet_csk_update_pmtu(struct sock *sk, u32 mtu);
340#endif /* _INET_CONNECTION_SOCK_H */ 341#endif /* _INET_CONNECTION_SOCK_H */
diff --git a/include/net/inet_hashtables.h b/include/net/inet_hashtables.h
index 808fc5f76b03..54be0287eb98 100644
--- a/include/net/inet_hashtables.h
+++ b/include/net/inet_hashtables.h
@@ -379,10 +379,10 @@ static inline struct sock *__inet_lookup_skb(struct inet_hashinfo *hashinfo,
379 const __be16 sport, 379 const __be16 sport,
380 const __be16 dport) 380 const __be16 dport)
381{ 381{
382 struct sock *sk; 382 struct sock *sk = skb_steal_sock(skb);
383 const struct iphdr *iph = ip_hdr(skb); 383 const struct iphdr *iph = ip_hdr(skb);
384 384
385 if (unlikely(sk = skb_steal_sock(skb))) 385 if (sk)
386 return sk; 386 return sk;
387 else 387 else
388 return __inet_lookup(dev_net(skb_dst(skb)->dev), hashinfo, 388 return __inet_lookup(dev_net(skb_dst(skb)->dev), hashinfo,
diff --git a/include/net/inet_sock.h b/include/net/inet_sock.h
index ae17e1352d7e..613cfa401672 100644
--- a/include/net/inet_sock.h
+++ b/include/net/inet_sock.h
@@ -172,6 +172,7 @@ struct inet_sock {
172 int uc_index; 172 int uc_index;
173 int mc_index; 173 int mc_index;
174 __be32 mc_addr; 174 __be32 mc_addr;
175 int rx_dst_ifindex;
175 struct ip_mc_socklist __rcu *mc_list; 176 struct ip_mc_socklist __rcu *mc_list;
176 struct inet_cork_full cork; 177 struct inet_cork_full cork;
177}; 178};
@@ -245,8 +246,6 @@ static inline __u8 inet_sk_flowi_flags(const struct sock *sk)
245 246
246 if (inet_sk(sk)->transparent || inet_sk(sk)->hdrincl) 247 if (inet_sk(sk)->transparent || inet_sk(sk)->hdrincl)
247 flags |= FLOWI_FLAG_ANYSRC; 248 flags |= FLOWI_FLAG_ANYSRC;
248 if (sk->sk_protocol == IPPROTO_TCP)
249 flags |= FLOWI_FLAG_PRECOW_METRICS;
250 return flags; 249 return flags;
251} 250}
252 251
diff --git a/include/net/inetpeer.h b/include/net/inetpeer.h
index 2040bff945d4..53f464d7cddc 100644
--- a/include/net/inetpeer.h
+++ b/include/net/inetpeer.h
@@ -36,25 +36,19 @@ struct inet_peer {
36 u32 metrics[RTAX_MAX]; 36 u32 metrics[RTAX_MAX];
37 u32 rate_tokens; /* rate limiting for ICMP */ 37 u32 rate_tokens; /* rate limiting for ICMP */
38 unsigned long rate_last; 38 unsigned long rate_last;
39 unsigned long pmtu_expires;
40 u32 pmtu_orig;
41 u32 pmtu_learned;
42 struct inetpeer_addr_base redirect_learned;
43 union { 39 union {
44 struct list_head gc_list; 40 struct list_head gc_list;
45 struct rcu_head gc_rcu; 41 struct rcu_head gc_rcu;
46 }; 42 };
47 /* 43 /*
48 * Once inet_peer is queued for deletion (refcnt == -1), following fields 44 * Once inet_peer is queued for deletion (refcnt == -1), following fields
49 * are not available: rid, ip_id_count, tcp_ts, tcp_ts_stamp 45 * are not available: rid, ip_id_count
50 * We can share memory with rcu_head to help keep inet_peer small. 46 * We can share memory with rcu_head to help keep inet_peer small.
51 */ 47 */
52 union { 48 union {
53 struct { 49 struct {
54 atomic_t rid; /* Frag reception counter */ 50 atomic_t rid; /* Frag reception counter */
55 atomic_t ip_id_count; /* IP ID for the next packet */ 51 atomic_t ip_id_count; /* IP ID for the next packet */
56 __u32 tcp_ts;
57 __u32 tcp_ts_stamp;
58 }; 52 };
59 struct rcu_head rcu; 53 struct rcu_head rcu;
60 struct inet_peer *gc_next; 54 struct inet_peer *gc_next;
@@ -65,6 +59,69 @@ struct inet_peer {
65 atomic_t refcnt; 59 atomic_t refcnt;
66}; 60};
67 61
62struct inet_peer_base {
63 struct inet_peer __rcu *root;
64 seqlock_t lock;
65 u32 flush_seq;
66 int total;
67};
68
69#define INETPEER_BASE_BIT 0x1UL
70
71static inline struct inet_peer *inetpeer_ptr(unsigned long val)
72{
73 BUG_ON(val & INETPEER_BASE_BIT);
74 return (struct inet_peer *) val;
75}
76
77static inline struct inet_peer_base *inetpeer_base_ptr(unsigned long val)
78{
79 if (!(val & INETPEER_BASE_BIT))
80 return NULL;
81 val &= ~INETPEER_BASE_BIT;
82 return (struct inet_peer_base *) val;
83}
84
85static inline bool inetpeer_ptr_is_peer(unsigned long val)
86{
87 return !(val & INETPEER_BASE_BIT);
88}
89
90static inline void __inetpeer_ptr_set_peer(unsigned long *val, struct inet_peer *peer)
91{
92 /* This implicitly clears INETPEER_BASE_BIT */
93 *val = (unsigned long) peer;
94}
95
96static inline bool inetpeer_ptr_set_peer(unsigned long *ptr, struct inet_peer *peer)
97{
98 unsigned long val = (unsigned long) peer;
99 unsigned long orig = *ptr;
100
101 if (!(orig & INETPEER_BASE_BIT) ||
102 cmpxchg(ptr, orig, val) != orig)
103 return false;
104 return true;
105}
106
107static inline void inetpeer_init_ptr(unsigned long *ptr, struct inet_peer_base *base)
108{
109 *ptr = (unsigned long) base | INETPEER_BASE_BIT;
110}
111
112static inline void inetpeer_transfer_peer(unsigned long *to, unsigned long *from)
113{
114 unsigned long val = *from;
115
116 *to = val;
117 if (inetpeer_ptr_is_peer(val)) {
118 struct inet_peer *peer = inetpeer_ptr(val);
119 atomic_inc(&peer->refcnt);
120 }
121}
122
123extern void inet_peer_base_init(struct inet_peer_base *);
124
68void inet_initpeers(void) __init; 125void inet_initpeers(void) __init;
69 126
70#define INETPEER_METRICS_NEW (~(u32) 0) 127#define INETPEER_METRICS_NEW (~(u32) 0)
@@ -75,31 +132,38 @@ static inline bool inet_metrics_new(const struct inet_peer *p)
75} 132}
76 133
77/* can be called with or without local BH being disabled */ 134/* can be called with or without local BH being disabled */
78struct inet_peer *inet_getpeer(const struct inetpeer_addr *daddr, int create); 135struct inet_peer *inet_getpeer(struct inet_peer_base *base,
136 const struct inetpeer_addr *daddr,
137 int create);
79 138
80static inline struct inet_peer *inet_getpeer_v4(__be32 v4daddr, int create) 139static inline struct inet_peer *inet_getpeer_v4(struct inet_peer_base *base,
140 __be32 v4daddr,
141 int create)
81{ 142{
82 struct inetpeer_addr daddr; 143 struct inetpeer_addr daddr;
83 144
84 daddr.addr.a4 = v4daddr; 145 daddr.addr.a4 = v4daddr;
85 daddr.family = AF_INET; 146 daddr.family = AF_INET;
86 return inet_getpeer(&daddr, create); 147 return inet_getpeer(base, &daddr, create);
87} 148}
88 149
89static inline struct inet_peer *inet_getpeer_v6(const struct in6_addr *v6daddr, int create) 150static inline struct inet_peer *inet_getpeer_v6(struct inet_peer_base *base,
151 const struct in6_addr *v6daddr,
152 int create)
90{ 153{
91 struct inetpeer_addr daddr; 154 struct inetpeer_addr daddr;
92 155
93 *(struct in6_addr *)daddr.addr.a6 = *v6daddr; 156 *(struct in6_addr *)daddr.addr.a6 = *v6daddr;
94 daddr.family = AF_INET6; 157 daddr.family = AF_INET6;
95 return inet_getpeer(&daddr, create); 158 return inet_getpeer(base, &daddr, create);
96} 159}
97 160
98/* can be called from BH context or outside */ 161/* can be called from BH context or outside */
99extern void inet_putpeer(struct inet_peer *p); 162extern void inet_putpeer(struct inet_peer *p);
100extern bool inet_peer_xrlim_allow(struct inet_peer *peer, int timeout); 163extern bool inet_peer_xrlim_allow(struct inet_peer *peer, int timeout);
101 164
102extern void inetpeer_invalidate_tree(int family); 165extern void inetpeer_invalidate_tree(struct inet_peer_base *);
166extern void inetpeer_invalidate_family(int family);
103 167
104/* 168/*
105 * temporary check to make sure we dont access rid, ip_id_count, tcp_ts, 169 * temporary check to make sure we dont access rid, ip_id_count, tcp_ts,
diff --git a/include/net/ip.h b/include/net/ip.h
index 83e0619f59d0..bd5e444a19ce 100644
--- a/include/net/ip.h
+++ b/include/net/ip.h
@@ -158,8 +158,9 @@ static inline __u8 ip_reply_arg_flowi_flags(const struct ip_reply_arg *arg)
158 return (arg->flags & IP_REPLY_ARG_NOSRCCHECK) ? FLOWI_FLAG_ANYSRC : 0; 158 return (arg->flags & IP_REPLY_ARG_NOSRCCHECK) ? FLOWI_FLAG_ANYSRC : 0;
159} 159}
160 160
161void ip_send_reply(struct sock *sk, struct sk_buff *skb, __be32 daddr, 161void ip_send_unicast_reply(struct net *net, struct sk_buff *skb, __be32 daddr,
162 const struct ip_reply_arg *arg, unsigned int len); 162 __be32 saddr, const struct ip_reply_arg *arg,
163 unsigned int len);
163 164
164struct ipv4_config { 165struct ipv4_config {
165 int log_martians; 166 int log_martians;
@@ -210,6 +211,9 @@ extern int inet_peer_threshold;
210extern int inet_peer_minttl; 211extern int inet_peer_minttl;
211extern int inet_peer_maxttl; 212extern int inet_peer_maxttl;
212 213
214/* From ip_input.c */
215extern int sysctl_ip_early_demux;
216
213/* From ip_output.c */ 217/* From ip_output.c */
214extern int sysctl_ip_dynaddr; 218extern int sysctl_ip_dynaddr;
215 219
diff --git a/include/net/ip6_fib.h b/include/net/ip6_fib.h
index 0ae759a6c76e..0fedbd8d747a 100644
--- a/include/net/ip6_fib.h
+++ b/include/net/ip6_fib.h
@@ -86,6 +86,8 @@ struct fib6_table;
86struct rt6_info { 86struct rt6_info {
87 struct dst_entry dst; 87 struct dst_entry dst;
88 88
89 struct neighbour *n;
90
89 /* 91 /*
90 * Tail elements of dst_entry (__refcnt etc.) 92 * Tail elements of dst_entry (__refcnt etc.)
91 * and these elements (rarely used in hot path) are in 93 * and these elements (rarely used in hot path) are in
@@ -107,7 +109,7 @@ struct rt6_info {
107 u32 rt6i_peer_genid; 109 u32 rt6i_peer_genid;
108 110
109 struct inet6_dev *rt6i_idev; 111 struct inet6_dev *rt6i_idev;
110 struct inet_peer *rt6i_peer; 112 unsigned long _rt6i_peer;
111 113
112#ifdef CONFIG_XFRM 114#ifdef CONFIG_XFRM
113 u32 rt6i_flow_cache_genid; 115 u32 rt6i_flow_cache_genid;
@@ -118,6 +120,36 @@ struct rt6_info {
118 u8 rt6i_protocol; 120 u8 rt6i_protocol;
119}; 121};
120 122
123static inline struct inet_peer *rt6_peer_ptr(struct rt6_info *rt)
124{
125 return inetpeer_ptr(rt->_rt6i_peer);
126}
127
128static inline bool rt6_has_peer(struct rt6_info *rt)
129{
130 return inetpeer_ptr_is_peer(rt->_rt6i_peer);
131}
132
133static inline void __rt6_set_peer(struct rt6_info *rt, struct inet_peer *peer)
134{
135 __inetpeer_ptr_set_peer(&rt->_rt6i_peer, peer);
136}
137
138static inline bool rt6_set_peer(struct rt6_info *rt, struct inet_peer *peer)
139{
140 return inetpeer_ptr_set_peer(&rt->_rt6i_peer, peer);
141}
142
143static inline void rt6_init_peer(struct rt6_info *rt, struct inet_peer_base *base)
144{
145 inetpeer_init_ptr(&rt->_rt6i_peer, base);
146}
147
148static inline void rt6_transfer_peer(struct rt6_info *rt, struct rt6_info *ort)
149{
150 inetpeer_transfer_peer(&rt->_rt6i_peer, &ort->_rt6i_peer);
151}
152
121static inline struct inet6_dev *ip6_dst_idev(struct dst_entry *dst) 153static inline struct inet6_dev *ip6_dst_idev(struct dst_entry *dst)
122{ 154{
123 return ((struct rt6_info *)dst)->rt6i_idev; 155 return ((struct rt6_info *)dst)->rt6i_idev;
@@ -207,6 +239,7 @@ struct fib6_table {
207 u32 tb6_id; 239 u32 tb6_id;
208 rwlock_t tb6_lock; 240 rwlock_t tb6_lock;
209 struct fib6_node tb6_root; 241 struct fib6_node tb6_root;
242 struct inet_peer_base tb6_peers;
210}; 243};
211 244
212#define RT6_TABLE_UNSPEC RT_TABLE_UNSPEC 245#define RT6_TABLE_UNSPEC RT_TABLE_UNSPEC
diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h
index 37c1a1ed82c1..5fa2af00634a 100644
--- a/include/net/ip6_route.h
+++ b/include/net/ip6_route.h
@@ -53,16 +53,25 @@ static inline unsigned int rt6_flags2srcprefs(int flags)
53 return (flags >> 3) & 7; 53 return (flags >> 3) & 7;
54} 54}
55 55
56extern void rt6_bind_peer(struct rt6_info *rt, 56extern void rt6_bind_peer(struct rt6_info *rt, int create);
57 int create); 57
58static inline struct inet_peer *__rt6_get_peer(struct rt6_info *rt, int create)
59{
60 if (rt6_has_peer(rt))
61 return rt6_peer_ptr(rt);
62
63 rt6_bind_peer(rt, create);
64 return (rt6_has_peer(rt) ? rt6_peer_ptr(rt) : NULL);
65}
58 66
59static inline struct inet_peer *rt6_get_peer(struct rt6_info *rt) 67static inline struct inet_peer *rt6_get_peer(struct rt6_info *rt)
60{ 68{
61 if (rt->rt6i_peer) 69 return __rt6_get_peer(rt, 0);
62 return rt->rt6i_peer; 70}
63 71
64 rt6_bind_peer(rt, 0); 72static inline struct inet_peer *rt6_get_peer_create(struct rt6_info *rt)
65 return rt->rt6i_peer; 73{
74 return __rt6_get_peer(rt, 1);
66} 75}
67 76
68extern void ip6_route_input(struct sk_buff *skb); 77extern void ip6_route_input(struct sk_buff *skb);
@@ -124,17 +133,12 @@ extern int rt6_route_rcv(struct net_device *dev,
124 u8 *opt, int len, 133 u8 *opt, int len,
125 const struct in6_addr *gwaddr); 134 const struct in6_addr *gwaddr);
126 135
127extern void rt6_redirect(const struct in6_addr *dest, 136extern void ip6_update_pmtu(struct sk_buff *skb, struct net *net, __be32 mtu,
128 const struct in6_addr *src, 137 int oif, u32 mark);
129 const struct in6_addr *saddr, 138extern void ip6_sk_update_pmtu(struct sk_buff *skb, struct sock *sk,
130 struct neighbour *neigh, 139 __be32 mtu);
131 u8 *lladdr, 140extern void ip6_redirect(struct sk_buff *skb, struct net *net, int oif, u32 mark);
132 int on_link); 141extern void ip6_sk_redirect(struct sk_buff *skb, struct sock *sk);
133
134extern void rt6_pmtu_discovery(const struct in6_addr *daddr,
135 const struct in6_addr *saddr,
136 struct net_device *dev,
137 u32 pmtu);
138 142
139struct netlink_callback; 143struct netlink_callback;
140 144
@@ -154,7 +158,8 @@ extern void rt6_remove_prefsrc(struct inet6_ifaddr *ifp);
154 * Store a destination cache entry in a socket 158 * Store a destination cache entry in a socket
155 */ 159 */
156static inline void __ip6_dst_store(struct sock *sk, struct dst_entry *dst, 160static inline void __ip6_dst_store(struct sock *sk, struct dst_entry *dst,
157 struct in6_addr *daddr, struct in6_addr *saddr) 161 const struct in6_addr *daddr,
162 const struct in6_addr *saddr)
158{ 163{
159 struct ipv6_pinfo *np = inet6_sk(sk); 164 struct ipv6_pinfo *np = inet6_sk(sk);
160 struct rt6_info *rt = (struct rt6_info *) dst; 165 struct rt6_info *rt = (struct rt6_info *) dst;
diff --git a/include/net/ip6_tunnel.h b/include/net/ip6_tunnel.h
index fc73e667b50e..358fb86f57eb 100644
--- a/include/net/ip6_tunnel.h
+++ b/include/net/ip6_tunnel.h
@@ -9,6 +9,8 @@
9#define IP6_TNL_F_CAP_XMIT 0x10000 9#define IP6_TNL_F_CAP_XMIT 0x10000
10/* capable of receiving packets */ 10/* capable of receiving packets */
11#define IP6_TNL_F_CAP_RCV 0x20000 11#define IP6_TNL_F_CAP_RCV 0x20000
12/* determine capability on a per-packet basis */
13#define IP6_TNL_F_CAP_PER_PACKET 0x40000
12 14
13/* IPv6 tunnel */ 15/* IPv6 tunnel */
14 16
diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h
index 78df0866cc38..e69c3a47153d 100644
--- a/include/net/ip_fib.h
+++ b/include/net/ip_fib.h
@@ -18,7 +18,9 @@
18 18
19#include <net/flow.h> 19#include <net/flow.h>
20#include <linux/seq_file.h> 20#include <linux/seq_file.h>
21#include <linux/rcupdate.h>
21#include <net/fib_rules.h> 22#include <net/fib_rules.h>
23#include <net/inetpeer.h>
22 24
23struct fib_config { 25struct fib_config {
24 u8 fc_dst_len; 26 u8 fc_dst_len;
@@ -44,6 +46,23 @@ struct fib_config {
44 }; 46 };
45 47
46struct fib_info; 48struct fib_info;
49struct rtable;
50
51struct fib_nh_exception {
52 struct fib_nh_exception __rcu *fnhe_next;
53 __be32 fnhe_daddr;
54 u32 fnhe_pmtu;
55 __be32 fnhe_gw;
56 unsigned long fnhe_expires;
57 unsigned long fnhe_stamp;
58};
59
60struct fnhe_hash_bucket {
61 struct fib_nh_exception __rcu *chain;
62};
63
64#define FNHE_HASH_SIZE 2048
65#define FNHE_RECLAIM_DEPTH 5
47 66
48struct fib_nh { 67struct fib_nh {
49 struct net_device *nh_dev; 68 struct net_device *nh_dev;
@@ -62,6 +81,9 @@ struct fib_nh {
62 __be32 nh_gw; 81 __be32 nh_gw;
63 __be32 nh_saddr; 82 __be32 nh_saddr;
64 int nh_saddr_genid; 83 int nh_saddr_genid;
84 struct rtable *nh_rth_output;
85 struct rtable *nh_rth_input;
86 struct fnhe_hash_bucket *nh_exceptions;
65}; 87};
66 88
67/* 89/*
@@ -105,12 +127,10 @@ struct fib_result {
105 unsigned char nh_sel; 127 unsigned char nh_sel;
106 unsigned char type; 128 unsigned char type;
107 unsigned char scope; 129 unsigned char scope;
130 u32 tclassid;
108 struct fib_info *fi; 131 struct fib_info *fi;
109 struct fib_table *table; 132 struct fib_table *table;
110 struct list_head *fa_head; 133 struct list_head *fa_head;
111#ifdef CONFIG_IP_MULTIPLE_TABLES
112 struct fib_rule *r;
113#endif
114}; 134};
115 135
116struct fib_result_nl { 136struct fib_result_nl {
@@ -157,11 +177,11 @@ extern __be32 fib_info_update_nh_saddr(struct net *net, struct fib_nh *nh);
157 FIB_RES_SADDR(net, res)) 177 FIB_RES_SADDR(net, res))
158 178
159struct fib_table { 179struct fib_table {
160 struct hlist_node tb_hlist; 180 struct hlist_node tb_hlist;
161 u32 tb_id; 181 u32 tb_id;
162 int tb_default; 182 int tb_default;
163 int tb_num_default; 183 int tb_num_default;
164 unsigned long tb_data[0]; 184 unsigned long tb_data[0];
165}; 185};
166 186
167extern int fib_table_lookup(struct fib_table *tb, const struct flowi4 *flp, 187extern int fib_table_lookup(struct fib_table *tb, const struct flowi4 *flp,
@@ -214,24 +234,55 @@ static inline int fib_lookup(struct net *net, const struct flowi4 *flp,
214extern int __net_init fib4_rules_init(struct net *net); 234extern int __net_init fib4_rules_init(struct net *net);
215extern void __net_exit fib4_rules_exit(struct net *net); 235extern void __net_exit fib4_rules_exit(struct net *net);
216 236
217#ifdef CONFIG_IP_ROUTE_CLASSID
218extern u32 fib_rules_tclass(const struct fib_result *res);
219#endif
220
221extern int fib_lookup(struct net *n, struct flowi4 *flp, struct fib_result *res);
222
223extern struct fib_table *fib_new_table(struct net *net, u32 id); 237extern struct fib_table *fib_new_table(struct net *net, u32 id);
224extern struct fib_table *fib_get_table(struct net *net, u32 id); 238extern struct fib_table *fib_get_table(struct net *net, u32 id);
225 239
240extern int __fib_lookup(struct net *net, struct flowi4 *flp,
241 struct fib_result *res);
242
243static inline int fib_lookup(struct net *net, struct flowi4 *flp,
244 struct fib_result *res)
245{
246 if (!net->ipv4.fib_has_custom_rules) {
247 res->tclassid = 0;
248 if (net->ipv4.fib_local &&
249 !fib_table_lookup(net->ipv4.fib_local, flp, res,
250 FIB_LOOKUP_NOREF))
251 return 0;
252 if (net->ipv4.fib_main &&
253 !fib_table_lookup(net->ipv4.fib_main, flp, res,
254 FIB_LOOKUP_NOREF))
255 return 0;
256 if (net->ipv4.fib_default &&
257 !fib_table_lookup(net->ipv4.fib_default, flp, res,
258 FIB_LOOKUP_NOREF))
259 return 0;
260 return -ENETUNREACH;
261 }
262 return __fib_lookup(net, flp, res);
263}
264
226#endif /* CONFIG_IP_MULTIPLE_TABLES */ 265#endif /* CONFIG_IP_MULTIPLE_TABLES */
227 266
228/* Exported by fib_frontend.c */ 267/* Exported by fib_frontend.c */
229extern const struct nla_policy rtm_ipv4_policy[]; 268extern const struct nla_policy rtm_ipv4_policy[];
230extern void ip_fib_init(void); 269extern void ip_fib_init(void);
270extern __be32 fib_compute_spec_dst(struct sk_buff *skb);
231extern int fib_validate_source(struct sk_buff *skb, __be32 src, __be32 dst, 271extern int fib_validate_source(struct sk_buff *skb, __be32 src, __be32 dst,
232 u8 tos, int oif, struct net_device *dev, 272 u8 tos, int oif, struct net_device *dev,
233 __be32 *spec_dst, u32 *itag); 273 struct in_device *idev, u32 *itag);
234extern void fib_select_default(struct fib_result *res); 274extern void fib_select_default(struct fib_result *res);
275#ifdef CONFIG_IP_ROUTE_CLASSID
276static inline int fib_num_tclassid_users(struct net *net)
277{
278 return net->ipv4.fib_num_tclassid_users;
279}
280#else
281static inline int fib_num_tclassid_users(struct net *net)
282{
283 return 0;
284}
285#endif
235 286
236/* Exported by fib_semantics.c */ 287/* Exported by fib_semantics.c */
237extern int ip_fib_check_default(__be32 gw, struct net_device *dev); 288extern int ip_fib_check_default(__be32 gw, struct net_device *dev);
@@ -253,7 +304,7 @@ static inline void fib_combine_itag(u32 *itag, const struct fib_result *res)
253#endif 304#endif
254 *itag = FIB_RES_NH(*res).nh_tclassid<<16; 305 *itag = FIB_RES_NH(*res).nh_tclassid<<16;
255#ifdef CONFIG_IP_MULTIPLE_TABLES 306#ifdef CONFIG_IP_MULTIPLE_TABLES
256 rtag = fib_rules_tclass(res); 307 rtag = res->tclassid;
257 if (*itag == 0) 308 if (*itag == 0)
258 *itag = (rtag<<16); 309 *itag = (rtag<<16);
259 *itag |= (rtag>>16); 310 *itag |= (rtag>>16);
diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h
index d6146b4811c2..95374d1696a1 100644
--- a/include/net/ip_vs.h
+++ b/include/net/ip_vs.h
@@ -1425,7 +1425,7 @@ static inline void ip_vs_notrack(struct sk_buff *skb)
1425 struct nf_conn *ct = nf_ct_get(skb, &ctinfo); 1425 struct nf_conn *ct = nf_ct_get(skb, &ctinfo);
1426 1426
1427 if (!ct || !nf_ct_is_untracked(ct)) { 1427 if (!ct || !nf_ct_is_untracked(ct)) {
1428 nf_reset(skb); 1428 nf_conntrack_put(skb->nfct);
1429 skb->nfct = &nf_ct_untracked_get()->ct_general; 1429 skb->nfct = &nf_ct_untracked_get()->ct_general;
1430 skb->nfctinfo = IP_CT_NEW; 1430 skb->nfctinfo = IP_CT_NEW;
1431 nf_conntrack_get(skb->nfct); 1431 nf_conntrack_get(skb->nfct);
diff --git a/include/net/ipv6.h b/include/net/ipv6.h
index aecf88436abf..01c34b363a34 100644
--- a/include/net/ipv6.h
+++ b/include/net/ipv6.h
@@ -251,6 +251,8 @@ static inline void fl6_sock_release(struct ip6_flowlabel *fl)
251 atomic_dec(&fl->users); 251 atomic_dec(&fl->users);
252} 252}
253 253
254extern void icmpv6_notify(struct sk_buff *skb, u8 type, u8 code, __be32 info);
255
254extern int ip6_ra_control(struct sock *sk, int sel); 256extern int ip6_ra_control(struct sock *sk, int sel);
255 257
256extern int ipv6_parse_hopopts(struct sk_buff *skb); 258extern int ipv6_parse_hopopts(struct sk_buff *skb);
@@ -298,14 +300,23 @@ static inline int ipv6_addr_cmp(const struct in6_addr *a1, const struct in6_addr
298 return memcmp(a1, a2, sizeof(struct in6_addr)); 300 return memcmp(a1, a2, sizeof(struct in6_addr));
299} 301}
300 302
301static inline int 303static inline bool
302ipv6_masked_addr_cmp(const struct in6_addr *a1, const struct in6_addr *m, 304ipv6_masked_addr_cmp(const struct in6_addr *a1, const struct in6_addr *m,
303 const struct in6_addr *a2) 305 const struct in6_addr *a2)
304{ 306{
307#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) && BITS_PER_LONG == 64
308 const unsigned long *ul1 = (const unsigned long *)a1;
309 const unsigned long *ulm = (const unsigned long *)m;
310 const unsigned long *ul2 = (const unsigned long *)a2;
311
312 return !!(((ul1[0] ^ ul2[0]) & ulm[0]) |
313 ((ul1[1] ^ ul2[1]) & ulm[1]));
314#else
305 return !!(((a1->s6_addr32[0] ^ a2->s6_addr32[0]) & m->s6_addr32[0]) | 315 return !!(((a1->s6_addr32[0] ^ a2->s6_addr32[0]) & m->s6_addr32[0]) |
306 ((a1->s6_addr32[1] ^ a2->s6_addr32[1]) & m->s6_addr32[1]) | 316 ((a1->s6_addr32[1] ^ a2->s6_addr32[1]) & m->s6_addr32[1]) |
307 ((a1->s6_addr32[2] ^ a2->s6_addr32[2]) & m->s6_addr32[2]) | 317 ((a1->s6_addr32[2] ^ a2->s6_addr32[2]) & m->s6_addr32[2]) |
308 ((a1->s6_addr32[3] ^ a2->s6_addr32[3]) & m->s6_addr32[3])); 318 ((a1->s6_addr32[3] ^ a2->s6_addr32[3]) & m->s6_addr32[3]));
319#endif
309} 320}
310 321
311static inline void ipv6_addr_prefix(struct in6_addr *pfx, 322static inline void ipv6_addr_prefix(struct in6_addr *pfx,
@@ -335,10 +346,17 @@ static inline void ipv6_addr_set(struct in6_addr *addr,
335static inline bool ipv6_addr_equal(const struct in6_addr *a1, 346static inline bool ipv6_addr_equal(const struct in6_addr *a1,
336 const struct in6_addr *a2) 347 const struct in6_addr *a2)
337{ 348{
349#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) && BITS_PER_LONG == 64
350 const unsigned long *ul1 = (const unsigned long *)a1;
351 const unsigned long *ul2 = (const unsigned long *)a2;
352
353 return ((ul1[0] ^ ul2[0]) | (ul1[1] ^ ul2[1])) == 0UL;
354#else
338 return ((a1->s6_addr32[0] ^ a2->s6_addr32[0]) | 355 return ((a1->s6_addr32[0] ^ a2->s6_addr32[0]) |
339 (a1->s6_addr32[1] ^ a2->s6_addr32[1]) | 356 (a1->s6_addr32[1] ^ a2->s6_addr32[1]) |
340 (a1->s6_addr32[2] ^ a2->s6_addr32[2]) | 357 (a1->s6_addr32[2] ^ a2->s6_addr32[2]) |
341 (a1->s6_addr32[3] ^ a2->s6_addr32[3])) == 0; 358 (a1->s6_addr32[3] ^ a2->s6_addr32[3])) == 0;
359#endif
342} 360}
343 361
344static inline bool __ipv6_prefix_equal(const __be32 *a1, const __be32 *a2, 362static inline bool __ipv6_prefix_equal(const __be32 *a1, const __be32 *a2,
@@ -391,8 +409,27 @@ bool ip6_frag_match(struct inet_frag_queue *q, void *a);
391 409
392static inline bool ipv6_addr_any(const struct in6_addr *a) 410static inline bool ipv6_addr_any(const struct in6_addr *a)
393{ 411{
412#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) && BITS_PER_LONG == 64
413 const unsigned long *ul = (const unsigned long *)a;
414
415 return (ul[0] | ul[1]) == 0UL;
416#else
394 return (a->s6_addr32[0] | a->s6_addr32[1] | 417 return (a->s6_addr32[0] | a->s6_addr32[1] |
395 a->s6_addr32[2] | a->s6_addr32[3]) == 0; 418 a->s6_addr32[2] | a->s6_addr32[3]) == 0;
419#endif
420}
421
422static inline u32 ipv6_addr_hash(const struct in6_addr *a)
423{
424#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) && BITS_PER_LONG == 64
425 const unsigned long *ul = (const unsigned long *)a;
426 unsigned long x = ul[0] ^ ul[1];
427
428 return (u32)(x ^ (x >> 32));
429#else
430 return (__force u32)(a->s6_addr32[0] ^ a->s6_addr32[1] ^
431 a->s6_addr32[2] ^ a->s6_addr32[3]);
432#endif
396} 433}
397 434
398static inline bool ipv6_addr_loopback(const struct in6_addr *a) 435static inline bool ipv6_addr_loopback(const struct in6_addr *a)
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 1937c7d98304..bb86aa6f98dd 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -233,8 +233,10 @@ enum ieee80211_rssi_event {
233 * valid in station mode only while @assoc is true and if also 233 * valid in station mode only while @assoc is true and if also
234 * requested by %IEEE80211_HW_NEED_DTIM_PERIOD (cf. also hw conf 234 * requested by %IEEE80211_HW_NEED_DTIM_PERIOD (cf. also hw conf
235 * @ps_dtim_period) 235 * @ps_dtim_period)
236 * @last_tsf: last beacon's/probe response's TSF timestamp (could be old 236 * @sync_tsf: last beacon's/probe response's TSF timestamp (could be old
237 * as it may have been received during scanning long ago) 237 * as it may have been received during scanning long ago)
238 * @sync_device_ts: the device timestamp corresponding to the sync_tsf,
239 * the driver/device can use this to calculate synchronisation
238 * @beacon_int: beacon interval 240 * @beacon_int: beacon interval
239 * @assoc_capability: capabilities taken from assoc resp 241 * @assoc_capability: capabilities taken from assoc resp
240 * @basic_rates: bitmap of basic rates, each bit stands for an 242 * @basic_rates: bitmap of basic rates, each bit stands for an
@@ -281,7 +283,8 @@ struct ieee80211_bss_conf {
281 u8 dtim_period; 283 u8 dtim_period;
282 u16 beacon_int; 284 u16 beacon_int;
283 u16 assoc_capability; 285 u16 assoc_capability;
284 u64 last_tsf; 286 u64 sync_tsf;
287 u32 sync_device_ts;
285 u32 basic_rates; 288 u32 basic_rates;
286 int mcast_rate[IEEE80211_NUM_BANDS]; 289 int mcast_rate[IEEE80211_NUM_BANDS];
287 u16 ht_operation_mode; 290 u16 ht_operation_mode;
@@ -475,7 +478,7 @@ enum mac80211_rate_control_flags {
475#define IEEE80211_TX_INFO_RATE_DRIVER_DATA_SIZE 24 478#define IEEE80211_TX_INFO_RATE_DRIVER_DATA_SIZE 24
476 479
477/* maximum number of rate stages */ 480/* maximum number of rate stages */
478#define IEEE80211_TX_MAX_RATES 5 481#define IEEE80211_TX_MAX_RATES 4
479 482
480/** 483/**
481 * struct ieee80211_tx_rate - rate selection/status 484 * struct ieee80211_tx_rate - rate selection/status
@@ -563,11 +566,11 @@ struct ieee80211_tx_info {
563 } control; 566 } control;
564 struct { 567 struct {
565 struct ieee80211_tx_rate rates[IEEE80211_TX_MAX_RATES]; 568 struct ieee80211_tx_rate rates[IEEE80211_TX_MAX_RATES];
566 u8 ampdu_ack_len;
567 int ack_signal; 569 int ack_signal;
570 u8 ampdu_ack_len;
568 u8 ampdu_len; 571 u8 ampdu_len;
569 u8 antenna; 572 u8 antenna;
570 /* 14 bytes free */ 573 /* 21 bytes free */
571 } status; 574 } status;
572 struct { 575 struct {
573 struct ieee80211_tx_rate driver_rates[ 576 struct ieee80211_tx_rate driver_rates[
@@ -634,7 +637,7 @@ ieee80211_tx_info_clear_status(struct ieee80211_tx_info *info)
634 info->status.rates[i].count = 0; 637 info->status.rates[i].count = 0;
635 638
636 BUILD_BUG_ON( 639 BUILD_BUG_ON(
637 offsetof(struct ieee80211_tx_info, status.ampdu_ack_len) != 23); 640 offsetof(struct ieee80211_tx_info, status.ack_signal) != 20);
638 memset(&info->status.ampdu_ack_len, 0, 641 memset(&info->status.ampdu_ack_len, 0,
639 sizeof(struct ieee80211_tx_info) - 642 sizeof(struct ieee80211_tx_info) -
640 offsetof(struct ieee80211_tx_info, status.ampdu_ack_len)); 643 offsetof(struct ieee80211_tx_info, status.ampdu_ack_len));
@@ -696,6 +699,8 @@ enum mac80211_rx_flags {
696 * 699 *
697 * @mactime: value in microseconds of the 64-bit Time Synchronization Function 700 * @mactime: value in microseconds of the 64-bit Time Synchronization Function
698 * (TSF) timer when the first data symbol (MPDU) arrived at the hardware. 701 * (TSF) timer when the first data symbol (MPDU) arrived at the hardware.
702 * @device_timestamp: arbitrary timestamp for the device, mac80211 doesn't use
703 * it but can store it and pass it back to the driver for synchronisation
699 * @band: the active band when this frame was received 704 * @band: the active band when this frame was received
700 * @freq: frequency the radio was tuned to when receiving this frame, in MHz 705 * @freq: frequency the radio was tuned to when receiving this frame, in MHz
701 * @signal: signal strength when receiving this frame, either in dBm, in dB or 706 * @signal: signal strength when receiving this frame, either in dBm, in dB or
@@ -709,13 +714,14 @@ enum mac80211_rx_flags {
709 */ 714 */
710struct ieee80211_rx_status { 715struct ieee80211_rx_status {
711 u64 mactime; 716 u64 mactime;
712 enum ieee80211_band band; 717 u32 device_timestamp;
713 int freq; 718 u16 flag;
714 int signal; 719 u16 freq;
715 int antenna; 720 u8 rate_idx;
716 int rate_idx; 721 u8 rx_flags;
717 int flag; 722 u8 band;
718 unsigned int rx_flags; 723 u8 antenna;
724 s8 signal;
719}; 725};
720 726
721/** 727/**
@@ -1297,6 +1303,10 @@ enum ieee80211_hw_flags {
1297 * reports, by default it is set to _MCS, _GI and _BW but doesn't 1303 * reports, by default it is set to _MCS, _GI and _BW but doesn't
1298 * include _FMT. Use %IEEE80211_RADIOTAP_MCS_HAVE_* values, only 1304 * include _FMT. Use %IEEE80211_RADIOTAP_MCS_HAVE_* values, only
1299 * adding _BW is supported today. 1305 * adding _BW is supported today.
1306 *
1307 * @netdev_features: netdev features to be set in each netdev created
1308 * from this HW. Note only HW checksum features are currently
1309 * compatible with mac80211. Other feature bits will be rejected.
1300 */ 1310 */
1301struct ieee80211_hw { 1311struct ieee80211_hw {
1302 struct ieee80211_conf conf; 1312 struct ieee80211_conf conf;
@@ -1319,6 +1329,7 @@ struct ieee80211_hw {
1319 u8 max_tx_aggregation_subframes; 1329 u8 max_tx_aggregation_subframes;
1320 u8 offchannel_tx_hw_queue; 1330 u8 offchannel_tx_hw_queue;
1321 u8 radiotap_mcs_details; 1331 u8 radiotap_mcs_details;
1332 netdev_features_t netdev_features;
1322}; 1333};
1323 1334
1324/** 1335/**
@@ -1891,19 +1902,6 @@ enum ieee80211_rate_control_changed {
1891 * The low-level driver should send the frame out based on 1902 * The low-level driver should send the frame out based on
1892 * configuration in the TX control data. This handler should, 1903 * configuration in the TX control data. This handler should,
1893 * preferably, never fail and stop queues appropriately. 1904 * preferably, never fail and stop queues appropriately.
1894 * This must be implemented if @tx_frags is not.
1895 * Must be atomic.
1896 *
1897 * @tx_frags: Called to transmit multiple fragments of a single MSDU.
1898 * This handler must consume all fragments, sending out some of
1899 * them only is useless and it can't ask for some of them to be
1900 * queued again. If the frame is not fragmented the queue has a
1901 * single SKB only. To avoid issues with the networking stack
1902 * when TX status is reported the frames should be removed from
1903 * the skb queue.
1904 * If this is used, the tx_info @vif and @sta pointers will be
1905 * invalid -- you must not use them in that case.
1906 * This must be implemented if @tx isn't.
1907 * Must be atomic. 1905 * Must be atomic.
1908 * 1906 *
1909 * @start: Called before the first netdevice attached to the hardware 1907 * @start: Called before the first netdevice attached to the hardware
@@ -1940,6 +1938,11 @@ enum ieee80211_rate_control_changed {
1940 * to also unregister the device. If it returns 1, then mac80211 1938 * to also unregister the device. If it returns 1, then mac80211
1941 * will also go through the regular complete restart on resume. 1939 * will also go through the regular complete restart on resume.
1942 * 1940 *
1941 * @set_wakeup: Enable or disable wakeup when WoWLAN configuration is
1942 * modified. The reason is that device_set_wakeup_enable() is
1943 * supposed to be called when the configuration changes, not only
1944 * in suspend().
1945 *
1943 * @add_interface: Called when a netdevice attached to the hardware is 1946 * @add_interface: Called when a netdevice attached to the hardware is
1944 * enabled. Because it is not called for monitor mode devices, @start 1947 * enabled. Because it is not called for monitor mode devices, @start
1945 * and @stop must be implemented. 1948 * and @stop must be implemented.
@@ -2178,7 +2181,10 @@ enum ieee80211_rate_control_changed {
2178 * offload. Frames to transmit on the off-channel channel are transmitted 2181 * offload. Frames to transmit on the off-channel channel are transmitted
2179 * normally except for the %IEEE80211_TX_CTL_TX_OFFCHAN flag. When the 2182 * normally except for the %IEEE80211_TX_CTL_TX_OFFCHAN flag. When the
2180 * duration (which will always be non-zero) expires, the driver must call 2183 * duration (which will always be non-zero) expires, the driver must call
2181 * ieee80211_remain_on_channel_expired(). This callback may sleep. 2184 * ieee80211_remain_on_channel_expired().
2185 * Note that this callback may be called while the device is in IDLE and
2186 * must be accepted in this case.
2187 * This callback may sleep.
2182 * @cancel_remain_on_channel: Requests that an ongoing off-channel period is 2188 * @cancel_remain_on_channel: Requests that an ongoing off-channel period is
2183 * aborted before it expires. This callback may sleep. 2189 * aborted before it expires. This callback may sleep.
2184 * 2190 *
@@ -2241,11 +2247,24 @@ enum ieee80211_rate_control_changed {
2241 * @get_et_strings: Ethtool API to get a set of strings to describe stats 2247 * @get_et_strings: Ethtool API to get a set of strings to describe stats
2242 * and perhaps other supported types of ethtool data-sets. 2248 * and perhaps other supported types of ethtool data-sets.
2243 * 2249 *
2250 * @get_rssi: Get current signal strength in dBm, the function is optional
2251 * and can sleep.
2252 *
2253 * @mgd_prepare_tx: Prepare for transmitting a management frame for association
2254 * before associated. In multi-channel scenarios, a virtual interface is
2255 * bound to a channel before it is associated, but as it isn't associated
2256 * yet it need not necessarily be given airtime, in particular since any
2257 * transmission to a P2P GO needs to be synchronized against the GO's
2258 * powersave state. mac80211 will call this function before transmitting a
2259 * management frame prior to having successfully associated to allow the
2260 * driver to give it channel time for the transmission, to get a response
2261 * and to be able to synchronize with the GO.
2262 * The callback will be called before each transmission and upon return
2263 * mac80211 will transmit the frame right away.
2264 * The callback is optional and can (should!) sleep.
2244 */ 2265 */
2245struct ieee80211_ops { 2266struct ieee80211_ops {
2246 void (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); 2267 void (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb);
2247 void (*tx_frags)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
2248 struct ieee80211_sta *sta, struct sk_buff_head *skbs);
2249 int (*start)(struct ieee80211_hw *hw); 2268 int (*start)(struct ieee80211_hw *hw);
2250 void (*stop)(struct ieee80211_hw *hw); 2269 void (*stop)(struct ieee80211_hw *hw);
2251#ifdef CONFIG_PM 2270#ifdef CONFIG_PM
@@ -2380,6 +2399,11 @@ struct ieee80211_ops {
2380 void (*get_et_strings)(struct ieee80211_hw *hw, 2399 void (*get_et_strings)(struct ieee80211_hw *hw,
2381 struct ieee80211_vif *vif, 2400 struct ieee80211_vif *vif,
2382 u32 sset, u8 *data); 2401 u32 sset, u8 *data);
2402 int (*get_rssi)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
2403 struct ieee80211_sta *sta, s8 *rssi_dbm);
2404
2405 void (*mgd_prepare_tx)(struct ieee80211_hw *hw,
2406 struct ieee80211_vif *vif);
2383}; 2407};
2384 2408
2385/** 2409/**
@@ -2966,6 +2990,7 @@ __le16 ieee80211_ctstoself_duration(struct ieee80211_hw *hw,
2966 * ieee80211_generic_frame_duration - Calculate the duration field for a frame 2990 * ieee80211_generic_frame_duration - Calculate the duration field for a frame
2967 * @hw: pointer obtained from ieee80211_alloc_hw(). 2991 * @hw: pointer obtained from ieee80211_alloc_hw().
2968 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 2992 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
2993 * @band: the band to calculate the frame duration on
2969 * @frame_len: the length of the frame. 2994 * @frame_len: the length of the frame.
2970 * @rate: the rate at which the frame is going to be transmitted. 2995 * @rate: the rate at which the frame is going to be transmitted.
2971 * 2996 *
@@ -3551,16 +3576,6 @@ void ieee80211_cqm_rssi_notify(struct ieee80211_vif *vif,
3551 gfp_t gfp); 3576 gfp_t gfp);
3552 3577
3553/** 3578/**
3554 * ieee80211_get_operstate - get the operstate of the vif
3555 *
3556 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
3557 *
3558 * The driver might need to know the operstate of the net_device
3559 * (specifically, whether the link is IF_OPER_UP after resume)
3560 */
3561unsigned char ieee80211_get_operstate(struct ieee80211_vif *vif);
3562
3563/**
3564 * ieee80211_chswitch_done - Complete channel switch process 3579 * ieee80211_chswitch_done - Complete channel switch process
3565 * @vif: &struct ieee80211_vif pointer from the add_interface callback. 3580 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
3566 * @success: make the channel switch successful or not 3581 * @success: make the channel switch successful or not
@@ -3583,22 +3598,6 @@ void ieee80211_request_smps(struct ieee80211_vif *vif,
3583 enum ieee80211_smps_mode smps_mode); 3598 enum ieee80211_smps_mode smps_mode);
3584 3599
3585/** 3600/**
3586 * ieee80211_key_removed - disable hw acceleration for key
3587 * @key_conf: The key hw acceleration should be disabled for
3588 *
3589 * This allows drivers to indicate that the given key has been
3590 * removed from hardware acceleration, due to a new key that
3591 * was added. Don't use this if the key can continue to be used
3592 * for TX, if the key restriction is on RX only it is permitted
3593 * to keep the key for TX only and not call this function.
3594 *
3595 * Due to locking constraints, it may only be called during
3596 * @set_key. This function must be allowed to sleep, and the
3597 * key it tries to disable may still be used until it returns.
3598 */
3599void ieee80211_key_removed(struct ieee80211_key_conf *key_conf);
3600
3601/**
3602 * ieee80211_ready_on_channel - notification of remain-on-channel start 3601 * ieee80211_ready_on_channel - notification of remain-on-channel start
3603 * @hw: pointer as obtained from ieee80211_alloc_hw() 3602 * @hw: pointer as obtained from ieee80211_alloc_hw()
3604 */ 3603 */
@@ -3823,12 +3822,6 @@ void ieee80211_enable_rssi_reports(struct ieee80211_vif *vif,
3823 3822
3824void ieee80211_disable_rssi_reports(struct ieee80211_vif *vif); 3823void ieee80211_disable_rssi_reports(struct ieee80211_vif *vif);
3825 3824
3826int ieee80211_add_srates_ie(struct ieee80211_vif *vif,
3827 struct sk_buff *skb, bool need_basic);
3828
3829int ieee80211_add_ext_srates_ie(struct ieee80211_vif *vif,
3830 struct sk_buff *skb, bool need_basic);
3831
3832/** 3825/**
3833 * ieee80211_ave_rssi - report the average rssi for the specified interface 3826 * ieee80211_ave_rssi - report the average rssi for the specified interface
3834 * 3827 *
diff --git a/include/net/mac802154.h b/include/net/mac802154.h
index c9f8ab5cc687..d0d11df9cba1 100644
--- a/include/net/mac802154.h
+++ b/include/net/mac802154.h
@@ -21,6 +21,14 @@
21 21
22#include <net/af_ieee802154.h> 22#include <net/af_ieee802154.h>
23 23
24/* General MAC frame format:
25 * 2 bytes: Frame Control
26 * 1 byte: Sequence Number
27 * 20 bytes: Addressing fields
28 * 14 bytes: Auxiliary Security Header
29 */
30#define MAC802154_FRAME_HARD_HEADER_LEN (2 + 1 + 20 + 14)
31
24/* The following flags are used to indicate changed address settings from 32/* The following flags are used to indicate changed address settings from
25 * the stack to the hardware. 33 * the stack to the hardware.
26 */ 34 */
diff --git a/include/net/ndisc.h b/include/net/ndisc.h
index c02b6ad3f6c5..96a3b5c03e37 100644
--- a/include/net/ndisc.h
+++ b/include/net/ndisc.h
@@ -47,6 +47,8 @@ enum {
47#include <linux/icmpv6.h> 47#include <linux/icmpv6.h>
48#include <linux/in6.h> 48#include <linux/in6.h>
49#include <linux/types.h> 49#include <linux/types.h>
50#include <linux/if_arp.h>
51#include <linux/netdevice.h>
50 52
51#include <net/neighbour.h> 53#include <net/neighbour.h>
52 54
@@ -80,6 +82,54 @@ struct nd_opt_hdr {
80 __u8 nd_opt_len; 82 __u8 nd_opt_len;
81} __packed; 83} __packed;
82 84
85/* ND options */
86struct ndisc_options {
87 struct nd_opt_hdr *nd_opt_array[__ND_OPT_ARRAY_MAX];
88#ifdef CONFIG_IPV6_ROUTE_INFO
89 struct nd_opt_hdr *nd_opts_ri;
90 struct nd_opt_hdr *nd_opts_ri_end;
91#endif
92 struct nd_opt_hdr *nd_useropts;
93 struct nd_opt_hdr *nd_useropts_end;
94};
95
96#define nd_opts_src_lladdr nd_opt_array[ND_OPT_SOURCE_LL_ADDR]
97#define nd_opts_tgt_lladdr nd_opt_array[ND_OPT_TARGET_LL_ADDR]
98#define nd_opts_pi nd_opt_array[ND_OPT_PREFIX_INFO]
99#define nd_opts_pi_end nd_opt_array[__ND_OPT_PREFIX_INFO_END]
100#define nd_opts_rh nd_opt_array[ND_OPT_REDIRECT_HDR]
101#define nd_opts_mtu nd_opt_array[ND_OPT_MTU]
102
103#define NDISC_OPT_SPACE(len) (((len)+2+7)&~7)
104
105extern struct ndisc_options *ndisc_parse_options(u8 *opt, int opt_len,
106 struct ndisc_options *ndopts);
107
108/*
109 * Return the padding between the option length and the start of the
110 * link addr. Currently only IP-over-InfiniBand needs this, although
111 * if RFC 3831 IPv6-over-Fibre Channel is ever implemented it may
112 * also need a pad of 2.
113 */
114static int ndisc_addr_option_pad(unsigned short type)
115{
116 switch (type) {
117 case ARPHRD_INFINIBAND: return 2;
118 default: return 0;
119 }
120}
121
122static inline u8 *ndisc_opt_addr_data(struct nd_opt_hdr *p,
123 struct net_device *dev)
124{
125 u8 *lladdr = (u8 *)(p + 1);
126 int lladdrlen = p->nd_opt_len << 3;
127 int prepad = ndisc_addr_option_pad(dev->type);
128 if (lladdrlen != NDISC_OPT_SPACE(dev->addr_len + prepad))
129 return NULL;
130 return lladdr + prepad;
131}
132
83static inline u32 ndisc_hashfn(const void *pkey, const struct net_device *dev, __u32 *hash_rnd) 133static inline u32 ndisc_hashfn(const void *pkey, const struct net_device *dev, __u32 *hash_rnd)
84{ 134{
85 const u32 *p32 = pkey; 135 const u32 *p32 = pkey;
diff --git a/include/net/neighbour.h b/include/net/neighbour.h
index 6cdfeedb650b..344d8988842a 100644
--- a/include/net/neighbour.h
+++ b/include/net/neighbour.h
@@ -202,9 +202,16 @@ extern struct neighbour * neigh_lookup(struct neigh_table *tbl,
202extern struct neighbour * neigh_lookup_nodev(struct neigh_table *tbl, 202extern struct neighbour * neigh_lookup_nodev(struct neigh_table *tbl,
203 struct net *net, 203 struct net *net,
204 const void *pkey); 204 const void *pkey);
205extern struct neighbour * neigh_create(struct neigh_table *tbl, 205extern struct neighbour * __neigh_create(struct neigh_table *tbl,
206 const void *pkey,
207 struct net_device *dev,
208 bool want_ref);
209static inline struct neighbour *neigh_create(struct neigh_table *tbl,
206 const void *pkey, 210 const void *pkey,
207 struct net_device *dev); 211 struct net_device *dev)
212{
213 return __neigh_create(tbl, pkey, dev, true);
214}
208extern void neigh_destroy(struct neighbour *neigh); 215extern void neigh_destroy(struct neighbour *neigh);
209extern int __neigh_event_send(struct neighbour *neigh, struct sk_buff *skb); 216extern int __neigh_event_send(struct neighbour *neigh, struct sk_buff *skb);
210extern int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new, 217extern int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,
@@ -302,12 +309,6 @@ static inline struct neighbour * neigh_clone(struct neighbour *neigh)
302 309
303#define neigh_hold(n) atomic_inc(&(n)->refcnt) 310#define neigh_hold(n) atomic_inc(&(n)->refcnt)
304 311
305static inline void neigh_confirm(struct neighbour *neigh)
306{
307 if (neigh)
308 neigh->confirmed = jiffies;
309}
310
311static inline int neigh_event_send(struct neighbour *neigh, struct sk_buff *skb) 312static inline int neigh_event_send(struct neighbour *neigh, struct sk_buff *skb)
312{ 313{
313 unsigned long now = jiffies; 314 unsigned long now = jiffies;
@@ -351,15 +352,6 @@ static inline int neigh_hh_output(struct hh_cache *hh, struct sk_buff *skb)
351 return dev_queue_xmit(skb); 352 return dev_queue_xmit(skb);
352} 353}
353 354
354static inline int neigh_output(struct neighbour *n, struct sk_buff *skb)
355{
356 struct hh_cache *hh = &n->hh;
357 if ((n->nud_state & NUD_CONNECTED) && hh->hh_len)
358 return neigh_hh_output(hh, skb);
359 else
360 return n->output(n, skb);
361}
362
363static inline struct neighbour * 355static inline struct neighbour *
364__neigh_lookup(struct neigh_table *tbl, const void *pkey, struct net_device *dev, int creat) 356__neigh_lookup(struct neigh_table *tbl, const void *pkey, struct net_device *dev, int creat)
365{ 357{
diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h
index ac9195e6a062..ae1cd6c9ba52 100644
--- a/include/net/net_namespace.h
+++ b/include/net/net_namespace.h
@@ -101,6 +101,7 @@ struct net {
101 struct netns_xfrm xfrm; 101 struct netns_xfrm xfrm;
102#endif 102#endif
103 struct netns_ipvs *ipvs; 103 struct netns_ipvs *ipvs;
104 struct sock *diag_nlsk;
104}; 105};
105 106
106 107
diff --git a/include/net/netevent.h b/include/net/netevent.h
index 086f8a5b59dc..3ce4988c9c08 100644
--- a/include/net/netevent.h
+++ b/include/net/netevent.h
@@ -12,10 +12,14 @@
12 */ 12 */
13 13
14struct dst_entry; 14struct dst_entry;
15struct neighbour;
15 16
16struct netevent_redirect { 17struct netevent_redirect {
17 struct dst_entry *old; 18 struct dst_entry *old;
19 struct neighbour *old_neigh;
18 struct dst_entry *new; 20 struct dst_entry *new;
21 struct neighbour *new_neigh;
22 const void *daddr;
19}; 23};
20 24
21enum netevent_notif_type { 25enum netevent_notif_type {
diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h
index cce7f6a798bf..f1494feba79f 100644
--- a/include/net/netfilter/nf_conntrack.h
+++ b/include/net/netfilter/nf_conntrack.h
@@ -39,36 +39,6 @@ union nf_conntrack_expect_proto {
39 /* insert expect proto private data here */ 39 /* insert expect proto private data here */
40}; 40};
41 41
42/* Add protocol helper include file here */
43#include <linux/netfilter/nf_conntrack_ftp.h>
44#include <linux/netfilter/nf_conntrack_pptp.h>
45#include <linux/netfilter/nf_conntrack_h323.h>
46#include <linux/netfilter/nf_conntrack_sane.h>
47#include <linux/netfilter/nf_conntrack_sip.h>
48
49/* per conntrack: application helper private data */
50union nf_conntrack_help {
51 /* insert conntrack helper private data (master) here */
52#if defined(CONFIG_NF_CONNTRACK_FTP) || defined(CONFIG_NF_CONNTRACK_FTP_MODULE)
53 struct nf_ct_ftp_master ct_ftp_info;
54#endif
55#if defined(CONFIG_NF_CONNTRACK_PPTP) || \
56 defined(CONFIG_NF_CONNTRACK_PPTP_MODULE)
57 struct nf_ct_pptp_master ct_pptp_info;
58#endif
59#if defined(CONFIG_NF_CONNTRACK_H323) || \
60 defined(CONFIG_NF_CONNTRACK_H323_MODULE)
61 struct nf_ct_h323_master ct_h323_info;
62#endif
63#if defined(CONFIG_NF_CONNTRACK_SANE) || \
64 defined(CONFIG_NF_CONNTRACK_SANE_MODULE)
65 struct nf_ct_sane_master ct_sane_info;
66#endif
67#if defined(CONFIG_NF_CONNTRACK_SIP) || defined(CONFIG_NF_CONNTRACK_SIP_MODULE)
68 struct nf_ct_sip_master ct_sip_info;
69#endif
70};
71
72#include <linux/types.h> 42#include <linux/types.h>
73#include <linux/skbuff.h> 43#include <linux/skbuff.h>
74#include <linux/timer.h> 44#include <linux/timer.h>
@@ -89,12 +59,13 @@ struct nf_conn_help {
89 /* Helper. if any */ 59 /* Helper. if any */
90 struct nf_conntrack_helper __rcu *helper; 60 struct nf_conntrack_helper __rcu *helper;
91 61
92 union nf_conntrack_help help;
93
94 struct hlist_head expectations; 62 struct hlist_head expectations;
95 63
96 /* Current number of expected connections */ 64 /* Current number of expected connections */
97 u8 expecting[NF_CT_MAX_EXPECT_CLASSES]; 65 u8 expecting[NF_CT_MAX_EXPECT_CLASSES];
66
67 /* private helper information. */
68 char data[];
98}; 69};
99 70
100#include <net/netfilter/ipv4/nf_conntrack_ipv4.h> 71#include <net/netfilter/ipv4/nf_conntrack_ipv4.h>
diff --git a/include/net/netfilter/nf_conntrack_core.h b/include/net/netfilter/nf_conntrack_core.h
index aced085132e7..d8f5b9f52169 100644
--- a/include/net/netfilter/nf_conntrack_core.h
+++ b/include/net/netfilter/nf_conntrack_core.h
@@ -28,8 +28,8 @@ extern unsigned int nf_conntrack_in(struct net *net,
28extern int nf_conntrack_init(struct net *net); 28extern int nf_conntrack_init(struct net *net);
29extern void nf_conntrack_cleanup(struct net *net); 29extern void nf_conntrack_cleanup(struct net *net);
30 30
31extern int nf_conntrack_proto_init(void); 31extern int nf_conntrack_proto_init(struct net *net);
32extern void nf_conntrack_proto_fini(void); 32extern void nf_conntrack_proto_fini(struct net *net);
33 33
34extern bool 34extern bool
35nf_ct_get_tuple(const struct sk_buff *skb, 35nf_ct_get_tuple(const struct sk_buff *skb,
diff --git a/include/net/netfilter/nf_conntrack_ecache.h b/include/net/netfilter/nf_conntrack_ecache.h
index a88fb6939387..e1ce1048fe5f 100644
--- a/include/net/netfilter/nf_conntrack_ecache.h
+++ b/include/net/netfilter/nf_conntrack_ecache.h
@@ -78,7 +78,7 @@ nf_conntrack_event_cache(enum ip_conntrack_events event, struct nf_conn *ct)
78 struct net *net = nf_ct_net(ct); 78 struct net *net = nf_ct_net(ct);
79 struct nf_conntrack_ecache *e; 79 struct nf_conntrack_ecache *e;
80 80
81 if (net->ct.nf_conntrack_event_cb == NULL) 81 if (!rcu_access_pointer(net->ct.nf_conntrack_event_cb))
82 return; 82 return;
83 83
84 e = nf_ct_ecache_find(ct); 84 e = nf_ct_ecache_find(ct);
diff --git a/include/net/netfilter/nf_conntrack_expect.h b/include/net/netfilter/nf_conntrack_expect.h
index 4619caadd9d1..983f00263243 100644
--- a/include/net/netfilter/nf_conntrack_expect.h
+++ b/include/net/netfilter/nf_conntrack_expect.h
@@ -59,10 +59,12 @@ static inline struct net *nf_ct_exp_net(struct nf_conntrack_expect *exp)
59 return nf_ct_net(exp->master); 59 return nf_ct_net(exp->master);
60} 60}
61 61
62#define NF_CT_EXP_POLICY_NAME_LEN 16
63
62struct nf_conntrack_expect_policy { 64struct nf_conntrack_expect_policy {
63 unsigned int max_expected; 65 unsigned int max_expected;
64 unsigned int timeout; 66 unsigned int timeout;
65 const char *name; 67 char name[NF_CT_EXP_POLICY_NAME_LEN];
66}; 68};
67 69
68#define NF_CT_EXPECT_CLASS_DEFAULT 0 70#define NF_CT_EXPECT_CLASS_DEFAULT 0
diff --git a/include/net/netfilter/nf_conntrack_extend.h b/include/net/netfilter/nf_conntrack_extend.h
index 96755c3798a5..8b4d1fc29096 100644
--- a/include/net/netfilter/nf_conntrack_extend.h
+++ b/include/net/netfilter/nf_conntrack_extend.h
@@ -80,10 +80,13 @@ static inline void nf_ct_ext_free(struct nf_conn *ct)
80} 80}
81 81
82/* Add this type, returns pointer to data or NULL. */ 82/* Add this type, returns pointer to data or NULL. */
83void * 83void *__nf_ct_ext_add_length(struct nf_conn *ct, enum nf_ct_ext_id id,
84__nf_ct_ext_add(struct nf_conn *ct, enum nf_ct_ext_id id, gfp_t gfp); 84 size_t var_alloc_len, gfp_t gfp);
85
85#define nf_ct_ext_add(ct, id, gfp) \ 86#define nf_ct_ext_add(ct, id, gfp) \
86 ((id##_TYPE *)__nf_ct_ext_add((ct), (id), (gfp))) 87 ((id##_TYPE *)__nf_ct_ext_add_length((ct), (id), 0, (gfp)))
88#define nf_ct_ext_add_length(ct, id, len, gfp) \
89 ((id##_TYPE *)__nf_ct_ext_add_length((ct), (id), (len), (gfp)))
87 90
88#define NF_CT_EXT_F_PREALLOC 0x0001 91#define NF_CT_EXT_F_PREALLOC 0x0001
89 92
diff --git a/include/net/netfilter/nf_conntrack_helper.h b/include/net/netfilter/nf_conntrack_helper.h
index 1d1889409b9e..9aad956d1008 100644
--- a/include/net/netfilter/nf_conntrack_helper.h
+++ b/include/net/netfilter/nf_conntrack_helper.h
@@ -11,18 +11,27 @@
11#define _NF_CONNTRACK_HELPER_H 11#define _NF_CONNTRACK_HELPER_H
12#include <net/netfilter/nf_conntrack.h> 12#include <net/netfilter/nf_conntrack.h>
13#include <net/netfilter/nf_conntrack_extend.h> 13#include <net/netfilter/nf_conntrack_extend.h>
14#include <net/netfilter/nf_conntrack_expect.h>
14 15
15struct module; 16struct module;
16 17
18enum nf_ct_helper_flags {
19 NF_CT_HELPER_F_USERSPACE = (1 << 0),
20 NF_CT_HELPER_F_CONFIGURED = (1 << 1),
21};
22
17#define NF_CT_HELPER_NAME_LEN 16 23#define NF_CT_HELPER_NAME_LEN 16
18 24
19struct nf_conntrack_helper { 25struct nf_conntrack_helper {
20 struct hlist_node hnode; /* Internal use. */ 26 struct hlist_node hnode; /* Internal use. */
21 27
22 const char *name; /* name of the module */ 28 char name[NF_CT_HELPER_NAME_LEN]; /* name of the module */
23 struct module *me; /* pointer to self */ 29 struct module *me; /* pointer to self */
24 const struct nf_conntrack_expect_policy *expect_policy; 30 const struct nf_conntrack_expect_policy *expect_policy;
25 31
32 /* length of internal data, ie. sizeof(struct nf_ct_*_master) */
33 size_t data_len;
34
26 /* Tuple of things we will help (compared against server response) */ 35 /* Tuple of things we will help (compared against server response) */
27 struct nf_conntrack_tuple tuple; 36 struct nf_conntrack_tuple tuple;
28 37
@@ -35,8 +44,12 @@ struct nf_conntrack_helper {
35 44
36 void (*destroy)(struct nf_conn *ct); 45 void (*destroy)(struct nf_conn *ct);
37 46
47 int (*from_nlattr)(struct nlattr *attr, struct nf_conn *ct);
38 int (*to_nlattr)(struct sk_buff *skb, const struct nf_conn *ct); 48 int (*to_nlattr)(struct sk_buff *skb, const struct nf_conn *ct);
39 unsigned int expect_class_max; 49 unsigned int expect_class_max;
50
51 unsigned int flags;
52 unsigned int queue_num; /* For user-space helpers. */
40}; 53};
41 54
42extern struct nf_conntrack_helper * 55extern struct nf_conntrack_helper *
@@ -48,7 +61,7 @@ nf_conntrack_helper_try_module_get(const char *name, u16 l3num, u8 protonum);
48extern int nf_conntrack_helper_register(struct nf_conntrack_helper *); 61extern int nf_conntrack_helper_register(struct nf_conntrack_helper *);
49extern void nf_conntrack_helper_unregister(struct nf_conntrack_helper *); 62extern void nf_conntrack_helper_unregister(struct nf_conntrack_helper *);
50 63
51extern struct nf_conn_help *nf_ct_helper_ext_add(struct nf_conn *ct, gfp_t gfp); 64extern struct nf_conn_help *nf_ct_helper_ext_add(struct nf_conn *ct, struct nf_conntrack_helper *helper, gfp_t gfp);
52 65
53extern int __nf_ct_try_assign_helper(struct nf_conn *ct, struct nf_conn *tmpl, 66extern int __nf_ct_try_assign_helper(struct nf_conn *ct, struct nf_conn *tmpl,
54 gfp_t flags); 67 gfp_t flags);
@@ -60,6 +73,15 @@ static inline struct nf_conn_help *nfct_help(const struct nf_conn *ct)
60 return nf_ct_ext_find(ct, NF_CT_EXT_HELPER); 73 return nf_ct_ext_find(ct, NF_CT_EXT_HELPER);
61} 74}
62 75
76static inline void *nfct_help_data(const struct nf_conn *ct)
77{
78 struct nf_conn_help *help;
79
80 help = nf_ct_ext_find(ct, NF_CT_EXT_HELPER);
81
82 return (void *)help->data;
83}
84
63extern int nf_conntrack_helper_init(struct net *net); 85extern int nf_conntrack_helper_init(struct net *net);
64extern void nf_conntrack_helper_fini(struct net *net); 86extern void nf_conntrack_helper_fini(struct net *net);
65 87
@@ -82,4 +104,7 @@ nf_ct_helper_expectfn_find_by_name(const char *name);
82struct nf_ct_helper_expectfn * 104struct nf_ct_helper_expectfn *
83nf_ct_helper_expectfn_find_by_symbol(const void *symbol); 105nf_ct_helper_expectfn_find_by_symbol(const void *symbol);
84 106
107extern struct hlist_head *nf_ct_helper_hash;
108extern unsigned int nf_ct_helper_hsize;
109
85#endif /*_NF_CONNTRACK_HELPER_H*/ 110#endif /*_NF_CONNTRACK_HELPER_H*/
diff --git a/include/net/netfilter/nf_conntrack_l3proto.h b/include/net/netfilter/nf_conntrack_l3proto.h
index 9699c028b74b..6f7c13f4ac03 100644
--- a/include/net/netfilter/nf_conntrack_l3proto.h
+++ b/include/net/netfilter/nf_conntrack_l3proto.h
@@ -64,11 +64,12 @@ struct nf_conntrack_l3proto {
64 size_t nla_size; 64 size_t nla_size;
65 65
66#ifdef CONFIG_SYSCTL 66#ifdef CONFIG_SYSCTL
67 struct ctl_table_header *ctl_table_header;
68 const char *ctl_table_path; 67 const char *ctl_table_path;
69 struct ctl_table *ctl_table;
70#endif /* CONFIG_SYSCTL */ 68#endif /* CONFIG_SYSCTL */
71 69
70 /* Init l3proto pernet data */
71 int (*init_net)(struct net *net);
72
72 /* Module (if any) which this is connected to. */ 73 /* Module (if any) which this is connected to. */
73 struct module *me; 74 struct module *me;
74}; 75};
@@ -76,8 +77,10 @@ struct nf_conntrack_l3proto {
76extern struct nf_conntrack_l3proto __rcu *nf_ct_l3protos[AF_MAX]; 77extern struct nf_conntrack_l3proto __rcu *nf_ct_l3protos[AF_MAX];
77 78
78/* Protocol registration. */ 79/* Protocol registration. */
79extern int nf_conntrack_l3proto_register(struct nf_conntrack_l3proto *proto); 80extern int nf_conntrack_l3proto_register(struct net *net,
80extern void nf_conntrack_l3proto_unregister(struct nf_conntrack_l3proto *proto); 81 struct nf_conntrack_l3proto *proto);
82extern void nf_conntrack_l3proto_unregister(struct net *net,
83 struct nf_conntrack_l3proto *proto);
81extern struct nf_conntrack_l3proto *nf_ct_l3proto_find_get(u_int16_t l3proto); 84extern struct nf_conntrack_l3proto *nf_ct_l3proto_find_get(u_int16_t l3proto);
82extern void nf_ct_l3proto_put(struct nf_conntrack_l3proto *p); 85extern void nf_ct_l3proto_put(struct nf_conntrack_l3proto *p);
83 86
diff --git a/include/net/netfilter/nf_conntrack_l4proto.h b/include/net/netfilter/nf_conntrack_l4proto.h
index 3b572bb20aa2..c3be4aef6bf7 100644
--- a/include/net/netfilter/nf_conntrack_l4proto.h
+++ b/include/net/netfilter/nf_conntrack_l4proto.h
@@ -12,6 +12,7 @@
12#include <linux/netlink.h> 12#include <linux/netlink.h>
13#include <net/netlink.h> 13#include <net/netlink.h>
14#include <net/netfilter/nf_conntrack.h> 14#include <net/netfilter/nf_conntrack.h>
15#include <net/netns/generic.h>
15 16
16struct seq_file; 17struct seq_file;
17 18
@@ -86,23 +87,21 @@ struct nf_conntrack_l4proto {
86#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT) 87#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)
87 struct { 88 struct {
88 size_t obj_size; 89 size_t obj_size;
89 int (*nlattr_to_obj)(struct nlattr *tb[], void *data); 90 int (*nlattr_to_obj)(struct nlattr *tb[],
91 struct net *net, void *data);
90 int (*obj_to_nlattr)(struct sk_buff *skb, const void *data); 92 int (*obj_to_nlattr)(struct sk_buff *skb, const void *data);
91 93
92 unsigned int nlattr_max; 94 unsigned int nlattr_max;
93 const struct nla_policy *nla_policy; 95 const struct nla_policy *nla_policy;
94 } ctnl_timeout; 96 } ctnl_timeout;
95#endif 97#endif
98 int *net_id;
99 /* Init l4proto pernet data */
100 int (*init_net)(struct net *net, u_int16_t proto);
101
102 /* Return the per-net protocol part. */
103 struct nf_proto_net *(*get_net_proto)(struct net *net);
96 104
97#ifdef CONFIG_SYSCTL
98 struct ctl_table_header **ctl_table_header;
99 struct ctl_table *ctl_table;
100 unsigned int *ctl_table_users;
101#ifdef CONFIG_NF_CONNTRACK_PROC_COMPAT
102 struct ctl_table_header *ctl_compat_table_header;
103 struct ctl_table *ctl_compat_table;
104#endif
105#endif
106 /* Protocol name */ 105 /* Protocol name */
107 const char *name; 106 const char *name;
108 107
@@ -123,8 +122,18 @@ nf_ct_l4proto_find_get(u_int16_t l3proto, u_int8_t l4proto);
123extern void nf_ct_l4proto_put(struct nf_conntrack_l4proto *p); 122extern void nf_ct_l4proto_put(struct nf_conntrack_l4proto *p);
124 123
125/* Protocol registration. */ 124/* Protocol registration. */
126extern int nf_conntrack_l4proto_register(struct nf_conntrack_l4proto *proto); 125extern int nf_conntrack_l4proto_register(struct net *net,
127extern void nf_conntrack_l4proto_unregister(struct nf_conntrack_l4proto *proto); 126 struct nf_conntrack_l4proto *proto);
127extern void nf_conntrack_l4proto_unregister(struct net *net,
128 struct nf_conntrack_l4proto *proto);
129
130static inline void nf_ct_kfree_compat_sysctl_table(struct nf_proto_net *pn)
131{
132#if defined(CONFIG_SYSCTL) && defined(CONFIG_NF_CONNTRACK_PROC_COMPAT)
133 kfree(pn->ctl_compat_table);
134 pn->ctl_compat_table = NULL;
135#endif
136}
128 137
129/* Generic netlink helpers */ 138/* Generic netlink helpers */
130extern int nf_ct_port_tuple_to_nlattr(struct sk_buff *skb, 139extern int nf_ct_port_tuple_to_nlattr(struct sk_buff *skb,
diff --git a/include/net/netfilter/nf_nat_helper.h b/include/net/netfilter/nf_nat_helper.h
index 02bb6c29dc3d..7d8fb7b46c44 100644
--- a/include/net/netfilter/nf_nat_helper.h
+++ b/include/net/netfilter/nf_nat_helper.h
@@ -54,4 +54,8 @@ extern void nf_nat_follow_master(struct nf_conn *ct,
54extern s16 nf_nat_get_offset(const struct nf_conn *ct, 54extern s16 nf_nat_get_offset(const struct nf_conn *ct,
55 enum ip_conntrack_dir dir, 55 enum ip_conntrack_dir dir,
56 u32 seq); 56 u32 seq);
57
58extern void nf_nat_tcp_seq_adjust(struct sk_buff *skb, struct nf_conn *ct,
59 u32 dir, int off);
60
57#endif 61#endif
diff --git a/include/net/netfilter/nfnetlink_queue.h b/include/net/netfilter/nfnetlink_queue.h
new file mode 100644
index 000000000000..86267a529514
--- /dev/null
+++ b/include/net/netfilter/nfnetlink_queue.h
@@ -0,0 +1,43 @@
1#ifndef _NET_NFNL_QUEUE_H_
2#define _NET_NFNL_QUEUE_H_
3
4#include <linux/netfilter/nf_conntrack_common.h>
5
6struct nf_conn;
7
8#ifdef CONFIG_NETFILTER_NETLINK_QUEUE_CT
9struct nf_conn *nfqnl_ct_get(struct sk_buff *entskb, size_t *size,
10 enum ip_conntrack_info *ctinfo);
11struct nf_conn *nfqnl_ct_parse(const struct sk_buff *skb,
12 const struct nlattr *attr,
13 enum ip_conntrack_info *ctinfo);
14int nfqnl_ct_put(struct sk_buff *skb, struct nf_conn *ct,
15 enum ip_conntrack_info ctinfo);
16void nfqnl_ct_seq_adjust(struct sk_buff *skb, struct nf_conn *ct,
17 enum ip_conntrack_info ctinfo, int diff);
18#else
19inline struct nf_conn *
20nfqnl_ct_get(struct sk_buff *entskb, size_t *size, enum ip_conntrack_info *ctinfo)
21{
22 return NULL;
23}
24
25inline struct nf_conn *nfqnl_ct_parse(const struct sk_buff *skb,
26 const struct nlattr *attr,
27 enum ip_conntrack_info *ctinfo)
28{
29 return NULL;
30}
31
32inline int
33nfqnl_ct_put(struct sk_buff *skb, struct nf_conn *ct, enum ip_conntrack_info ctinfo)
34{
35 return 0;
36}
37
38inline void nfqnl_ct_seq_adjust(struct sk_buff *skb, struct nf_conn *ct,
39 enum ip_conntrack_info ctinfo, int diff)
40{
41}
42#endif /* NF_CONNTRACK */
43#endif
diff --git a/include/net/netns/conntrack.h b/include/net/netns/conntrack.h
index a053a19870cf..3aecdc7a84fb 100644
--- a/include/net/netns/conntrack.h
+++ b/include/net/netns/conntrack.h
@@ -4,10 +4,64 @@
4#include <linux/list.h> 4#include <linux/list.h>
5#include <linux/list_nulls.h> 5#include <linux/list_nulls.h>
6#include <linux/atomic.h> 6#include <linux/atomic.h>
7#include <linux/netfilter/nf_conntrack_tcp.h>
7 8
8struct ctl_table_header; 9struct ctl_table_header;
9struct nf_conntrack_ecache; 10struct nf_conntrack_ecache;
10 11
12struct nf_proto_net {
13#ifdef CONFIG_SYSCTL
14 struct ctl_table_header *ctl_table_header;
15 struct ctl_table *ctl_table;
16#ifdef CONFIG_NF_CONNTRACK_PROC_COMPAT
17 struct ctl_table_header *ctl_compat_header;
18 struct ctl_table *ctl_compat_table;
19#endif
20#endif
21 unsigned int users;
22};
23
24struct nf_generic_net {
25 struct nf_proto_net pn;
26 unsigned int timeout;
27};
28
29struct nf_tcp_net {
30 struct nf_proto_net pn;
31 unsigned int timeouts[TCP_CONNTRACK_TIMEOUT_MAX];
32 unsigned int tcp_loose;
33 unsigned int tcp_be_liberal;
34 unsigned int tcp_max_retrans;
35};
36
37enum udp_conntrack {
38 UDP_CT_UNREPLIED,
39 UDP_CT_REPLIED,
40 UDP_CT_MAX
41};
42
43struct nf_udp_net {
44 struct nf_proto_net pn;
45 unsigned int timeouts[UDP_CT_MAX];
46};
47
48struct nf_icmp_net {
49 struct nf_proto_net pn;
50 unsigned int timeout;
51};
52
53struct nf_ip_net {
54 struct nf_generic_net generic;
55 struct nf_tcp_net tcp;
56 struct nf_udp_net udp;
57 struct nf_icmp_net icmp;
58 struct nf_icmp_net icmpv6;
59#if defined(CONFIG_SYSCTL) && defined(CONFIG_NF_CONNTRACK_PROC_COMPAT)
60 struct ctl_table_header *ctl_table_header;
61 struct ctl_table *ctl_table;
62#endif
63};
64
11struct netns_ct { 65struct netns_ct {
12 atomic_t count; 66 atomic_t count;
13 unsigned int expect_count; 67 unsigned int expect_count;
@@ -28,6 +82,7 @@ struct netns_ct {
28 unsigned int sysctl_log_invalid; /* Log invalid packets */ 82 unsigned int sysctl_log_invalid; /* Log invalid packets */
29 int sysctl_auto_assign_helper; 83 int sysctl_auto_assign_helper;
30 bool auto_assign_helper_warned; 84 bool auto_assign_helper_warned;
85 struct nf_ip_net nf_ct_proto;
31#ifdef CONFIG_SYSCTL 86#ifdef CONFIG_SYSCTL
32 struct ctl_table_header *sysctl_header; 87 struct ctl_table_header *sysctl_header;
33 struct ctl_table_header *acct_sysctl_header; 88 struct ctl_table_header *acct_sysctl_header;
diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h
index bbd023a1c9b9..0ffb8e31f3cd 100644
--- a/include/net/netns/ipv4.h
+++ b/include/net/netns/ipv4.h
@@ -7,10 +7,12 @@
7 7
8#include <net/inet_frag.h> 8#include <net/inet_frag.h>
9 9
10struct tcpm_hash_bucket;
10struct ctl_table_header; 11struct ctl_table_header;
11struct ipv4_devconf; 12struct ipv4_devconf;
12struct fib_rules_ops; 13struct fib_rules_ops;
13struct hlist_head; 14struct hlist_head;
15struct fib_table;
14struct sock; 16struct sock;
15 17
16struct netns_ipv4 { 18struct netns_ipv4 {
@@ -24,13 +26,21 @@ struct netns_ipv4 {
24 struct ipv4_devconf *devconf_dflt; 26 struct ipv4_devconf *devconf_dflt;
25#ifdef CONFIG_IP_MULTIPLE_TABLES 27#ifdef CONFIG_IP_MULTIPLE_TABLES
26 struct fib_rules_ops *rules_ops; 28 struct fib_rules_ops *rules_ops;
29 bool fib_has_custom_rules;
30 struct fib_table *fib_local;
31 struct fib_table *fib_main;
32 struct fib_table *fib_default;
33#endif
34#ifdef CONFIG_IP_ROUTE_CLASSID
35 int fib_num_tclassid_users;
27#endif 36#endif
28 struct hlist_head *fib_table_hash; 37 struct hlist_head *fib_table_hash;
29 struct sock *fibnl; 38 struct sock *fibnl;
30 39
31 struct sock **icmp_sk; 40 struct sock **icmp_sk;
32 struct sock *tcp_sock; 41 struct inet_peer_base *peers;
33 42 struct tcpm_hash_bucket *tcp_metrics_hash;
43 unsigned int tcp_metrics_hash_log;
34 struct netns_frags frags; 44 struct netns_frags frags;
35#ifdef CONFIG_NETFILTER 45#ifdef CONFIG_NETFILTER
36 struct xt_table *iptable_filter; 46 struct xt_table *iptable_filter;
diff --git a/include/net/netns/ipv6.h b/include/net/netns/ipv6.h
index b42be53587ba..df0a5456a3fd 100644
--- a/include/net/netns/ipv6.h
+++ b/include/net/netns/ipv6.h
@@ -33,6 +33,7 @@ struct netns_ipv6 {
33 struct netns_sysctl_ipv6 sysctl; 33 struct netns_sysctl_ipv6 sysctl;
34 struct ipv6_devconf *devconf_all; 34 struct ipv6_devconf *devconf_all;
35 struct ipv6_devconf *devconf_dflt; 35 struct ipv6_devconf *devconf_dflt;
36 struct inet_peer_base *peers;
36 struct netns_frags frags; 37 struct netns_frags frags;
37#ifdef CONFIG_NETFILTER 38#ifdef CONFIG_NETFILTER
38 struct xt_table *ip6table_filter; 39 struct xt_table *ip6table_filter;
diff --git a/include/net/netprio_cgroup.h b/include/net/netprio_cgroup.h
index d58fdec47597..2719dec6b5a8 100644
--- a/include/net/netprio_cgroup.h
+++ b/include/net/netprio_cgroup.h
@@ -35,7 +35,7 @@ struct cgroup_netprio_state {
35extern int net_prio_subsys_id; 35extern int net_prio_subsys_id;
36#endif 36#endif
37 37
38extern void sock_update_netprioidx(struct sock *sk); 38extern void sock_update_netprioidx(struct sock *sk, struct task_struct *task);
39 39
40#if IS_BUILTIN(CONFIG_NETPRIO_CGROUP) 40#if IS_BUILTIN(CONFIG_NETPRIO_CGROUP)
41 41
@@ -82,7 +82,7 @@ static inline u32 task_netprioidx(struct task_struct *p)
82#endif /* CONFIG_NETPRIO_CGROUP */ 82#endif /* CONFIG_NETPRIO_CGROUP */
83 83
84#else 84#else
85#define sock_update_netprioidx(sk) 85#define sock_update_netprioidx(sk, task)
86#endif 86#endif
87 87
88#endif /* _NET_CLS_CGROUP_H */ 88#endif /* _NET_CLS_CGROUP_H */
diff --git a/include/net/nfc/hci.h b/include/net/nfc/hci.h
index 4467c9460857..f5169b04f082 100644
--- a/include/net/nfc/hci.h
+++ b/include/net/nfc/hci.h
@@ -31,7 +31,8 @@ struct nfc_hci_ops {
31 void (*close) (struct nfc_hci_dev *hdev); 31 void (*close) (struct nfc_hci_dev *hdev);
32 int (*hci_ready) (struct nfc_hci_dev *hdev); 32 int (*hci_ready) (struct nfc_hci_dev *hdev);
33 int (*xmit) (struct nfc_hci_dev *hdev, struct sk_buff *skb); 33 int (*xmit) (struct nfc_hci_dev *hdev, struct sk_buff *skb);
34 int (*start_poll) (struct nfc_hci_dev *hdev, u32 protocols); 34 int (*start_poll) (struct nfc_hci_dev *hdev,
35 u32 im_protocols, u32 tm_protocols);
35 int (*target_from_gate) (struct nfc_hci_dev *hdev, u8 gate, 36 int (*target_from_gate) (struct nfc_hci_dev *hdev, u8 gate,
36 struct nfc_target *target); 37 struct nfc_target *target);
37 int (*complete_target_discovered) (struct nfc_hci_dev *hdev, u8 gate, 38 int (*complete_target_discovered) (struct nfc_hci_dev *hdev, u8 gate,
@@ -43,10 +44,20 @@ struct nfc_hci_ops {
43 struct nfc_target *target); 44 struct nfc_target *target);
44}; 45};
45 46
46#define NFC_HCI_MAX_CUSTOM_GATES 15 47/* Pipes */
48#define NFC_HCI_INVALID_PIPE 0x80
49#define NFC_HCI_LINK_MGMT_PIPE 0x00
50#define NFC_HCI_ADMIN_PIPE 0x01
51
52struct nfc_hci_gate {
53 u8 gate;
54 u8 pipe;
55};
56
57#define NFC_HCI_MAX_CUSTOM_GATES 50
47struct nfc_hci_init_data { 58struct nfc_hci_init_data {
48 u8 gate_count; 59 u8 gate_count;
49 u8 gates[NFC_HCI_MAX_CUSTOM_GATES]; 60 struct nfc_hci_gate gates[NFC_HCI_MAX_CUSTOM_GATES];
50 char session_id[9]; 61 char session_id[9];
51}; 62};
52 63
@@ -111,6 +122,8 @@ void nfc_hci_unregister_device(struct nfc_hci_dev *hdev);
111void nfc_hci_set_clientdata(struct nfc_hci_dev *hdev, void *clientdata); 122void nfc_hci_set_clientdata(struct nfc_hci_dev *hdev, void *clientdata);
112void *nfc_hci_get_clientdata(struct nfc_hci_dev *hdev); 123void *nfc_hci_get_clientdata(struct nfc_hci_dev *hdev);
113 124
125void nfc_hci_driver_failure(struct nfc_hci_dev *hdev, int err);
126
114/* Host IDs */ 127/* Host IDs */
115#define NFC_HCI_HOST_CONTROLLER_ID 0x00 128#define NFC_HCI_HOST_CONTROLLER_ID 0x00
116#define NFC_HCI_TERMINAL_HOST_ID 0x01 129#define NFC_HCI_TERMINAL_HOST_ID 0x01
@@ -179,7 +192,8 @@ void nfc_hci_event_received(struct nfc_hci_dev *hdev, u8 pipe, u8 event,
179void nfc_hci_recv_frame(struct nfc_hci_dev *hdev, struct sk_buff *skb); 192void nfc_hci_recv_frame(struct nfc_hci_dev *hdev, struct sk_buff *skb);
180 193
181/* connecting to gates and sending hci instructions */ 194/* connecting to gates and sending hci instructions */
182int nfc_hci_connect_gate(struct nfc_hci_dev *hdev, u8 dest_host, u8 dest_gate); 195int nfc_hci_connect_gate(struct nfc_hci_dev *hdev, u8 dest_host, u8 dest_gate,
196 u8 pipe);
183int nfc_hci_disconnect_gate(struct nfc_hci_dev *hdev, u8 gate); 197int nfc_hci_disconnect_gate(struct nfc_hci_dev *hdev, u8 gate);
184int nfc_hci_disconnect_all_gates(struct nfc_hci_dev *hdev); 198int nfc_hci_disconnect_all_gates(struct nfc_hci_dev *hdev);
185int nfc_hci_get_param(struct nfc_hci_dev *hdev, u8 gate, u8 idx, 199int nfc_hci_get_param(struct nfc_hci_dev *hdev, u8 gate, u8 idx,
diff --git a/include/net/nfc/nfc.h b/include/net/nfc/nfc.h
index b7ca4a2a1d72..6431f5e39022 100644
--- a/include/net/nfc/nfc.h
+++ b/include/net/nfc/nfc.h
@@ -53,7 +53,8 @@ struct nfc_target;
53struct nfc_ops { 53struct nfc_ops {
54 int (*dev_up)(struct nfc_dev *dev); 54 int (*dev_up)(struct nfc_dev *dev);
55 int (*dev_down)(struct nfc_dev *dev); 55 int (*dev_down)(struct nfc_dev *dev);
56 int (*start_poll)(struct nfc_dev *dev, u32 protocols); 56 int (*start_poll)(struct nfc_dev *dev,
57 u32 im_protocols, u32 tm_protocols);
57 void (*stop_poll)(struct nfc_dev *dev); 58 void (*stop_poll)(struct nfc_dev *dev);
58 int (*dep_link_up)(struct nfc_dev *dev, struct nfc_target *target, 59 int (*dep_link_up)(struct nfc_dev *dev, struct nfc_target *target,
59 u8 comm_mode, u8 *gb, size_t gb_len); 60 u8 comm_mode, u8 *gb, size_t gb_len);
@@ -62,9 +63,10 @@ struct nfc_ops {
62 u32 protocol); 63 u32 protocol);
63 void (*deactivate_target)(struct nfc_dev *dev, 64 void (*deactivate_target)(struct nfc_dev *dev,
64 struct nfc_target *target); 65 struct nfc_target *target);
65 int (*data_exchange)(struct nfc_dev *dev, struct nfc_target *target, 66 int (*im_transceive)(struct nfc_dev *dev, struct nfc_target *target,
66 struct sk_buff *skb, data_exchange_cb_t cb, 67 struct sk_buff *skb, data_exchange_cb_t cb,
67 void *cb_context); 68 void *cb_context);
69 int (*tm_send)(struct nfc_dev *dev, struct sk_buff *skb);
68 int (*check_presence)(struct nfc_dev *dev, struct nfc_target *target); 70 int (*check_presence)(struct nfc_dev *dev, struct nfc_target *target);
69}; 71};
70 72
@@ -99,10 +101,10 @@ struct nfc_dev {
99 int targets_generation; 101 int targets_generation;
100 struct device dev; 102 struct device dev;
101 bool dev_up; 103 bool dev_up;
104 u8 rf_mode;
102 bool polling; 105 bool polling;
103 struct nfc_target *active_target; 106 struct nfc_target *active_target;
104 bool dep_link_up; 107 bool dep_link_up;
105 u32 dep_rf_mode;
106 struct nfc_genl_data genl_data; 108 struct nfc_genl_data genl_data;
107 u32 supported_protocols; 109 u32 supported_protocols;
108 110
@@ -188,6 +190,7 @@ struct sk_buff *nfc_alloc_recv_skb(unsigned int size, gfp_t gfp);
188 190
189int nfc_set_remote_general_bytes(struct nfc_dev *dev, 191int nfc_set_remote_general_bytes(struct nfc_dev *dev,
190 u8 *gt, u8 gt_len); 192 u8 *gt, u8 gt_len);
193u8 *nfc_get_local_general_bytes(struct nfc_dev *dev, size_t *gb_len);
191 194
192int nfc_targets_found(struct nfc_dev *dev, 195int nfc_targets_found(struct nfc_dev *dev,
193 struct nfc_target *targets, int ntargets); 196 struct nfc_target *targets, int ntargets);
@@ -196,4 +199,11 @@ int nfc_target_lost(struct nfc_dev *dev, u32 target_idx);
196int nfc_dep_link_is_up(struct nfc_dev *dev, u32 target_idx, 199int nfc_dep_link_is_up(struct nfc_dev *dev, u32 target_idx,
197 u8 comm_mode, u8 rf_mode); 200 u8 comm_mode, u8 rf_mode);
198 201
202int nfc_tm_activated(struct nfc_dev *dev, u32 protocol, u8 comm_mode,
203 u8 *gb, size_t gb_len);
204int nfc_tm_deactivated(struct nfc_dev *dev);
205int nfc_tm_data_received(struct nfc_dev *dev, struct sk_buff *skb);
206
207void nfc_driver_failure(struct nfc_dev *dev, int err);
208
199#endif /* __NET_NFC_H */ 209#endif /* __NET_NFC_H */
diff --git a/include/net/nfc/shdlc.h b/include/net/nfc/shdlc.h
index ab06afd462da..35e930d2f638 100644
--- a/include/net/nfc/shdlc.h
+++ b/include/net/nfc/shdlc.h
@@ -27,7 +27,8 @@ struct nfc_shdlc_ops {
27 void (*close) (struct nfc_shdlc *shdlc); 27 void (*close) (struct nfc_shdlc *shdlc);
28 int (*hci_ready) (struct nfc_shdlc *shdlc); 28 int (*hci_ready) (struct nfc_shdlc *shdlc);
29 int (*xmit) (struct nfc_shdlc *shdlc, struct sk_buff *skb); 29 int (*xmit) (struct nfc_shdlc *shdlc, struct sk_buff *skb);
30 int (*start_poll) (struct nfc_shdlc *shdlc, u32 protocols); 30 int (*start_poll) (struct nfc_shdlc *shdlc,
31 u32 im_protocols, u32 tm_protocols);
31 int (*target_from_gate) (struct nfc_shdlc *shdlc, u8 gate, 32 int (*target_from_gate) (struct nfc_shdlc *shdlc, u8 gate,
32 struct nfc_target *target); 33 struct nfc_target *target);
33 int (*complete_target_discovered) (struct nfc_shdlc *shdlc, u8 gate, 34 int (*complete_target_discovered) (struct nfc_shdlc *shdlc, u8 gate,
diff --git a/include/net/phonet/gprs.h b/include/net/phonet/gprs.h
index 928daf595beb..bcd525e39a0b 100644
--- a/include/net/phonet/gprs.h
+++ b/include/net/phonet/gprs.h
@@ -5,7 +5,7 @@
5 * 5 *
6 * Copyright (C) 2008 Nokia Corporation. 6 * Copyright (C) 2008 Nokia Corporation.
7 * 7 *
8 * Author: Rémi Denis-Courmont <remi.denis-courmont@nokia.com> 8 * Author: Rémi Denis-Courmont
9 * 9 *
10 * This program is free software; you can redistribute it and/or 10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License 11 * modify it under the terms of the GNU General Public License
diff --git a/include/net/protocol.h b/include/net/protocol.h
index 875f4895b033..057f2d315567 100644
--- a/include/net/protocol.h
+++ b/include/net/protocol.h
@@ -29,11 +29,15 @@
29#include <linux/ipv6.h> 29#include <linux/ipv6.h>
30#endif 30#endif
31 31
32#define MAX_INET_PROTOS 256 /* Must be a power of 2 */ 32/* This is one larger than the largest protocol value that can be
33 33 * found in an ipv4 or ipv6 header. Since in both cases the protocol
34 * value is presented in a __u8, this is defined to be 256.
35 */
36#define MAX_INET_PROTOS 256
34 37
35/* This is used to register protocols. */ 38/* This is used to register protocols. */
36struct net_protocol { 39struct net_protocol {
40 void (*early_demux)(struct sk_buff *skb);
37 int (*handler)(struct sk_buff *skb); 41 int (*handler)(struct sk_buff *skb);
38 void (*err_handler)(struct sk_buff *skb, u32 info); 42 void (*err_handler)(struct sk_buff *skb, u32 info);
39 int (*gso_send_check)(struct sk_buff *skb); 43 int (*gso_send_check)(struct sk_buff *skb);
diff --git a/include/net/regulatory.h b/include/net/regulatory.h
index a5f79933e211..7dcaa2794fde 100644
--- a/include/net/regulatory.h
+++ b/include/net/regulatory.h
@@ -52,6 +52,10 @@ enum environment_cap {
52 * DFS master operation on a known DFS region (NL80211_DFS_*), 52 * DFS master operation on a known DFS region (NL80211_DFS_*),
53 * dfs_region represents that region. Drivers can use this and the 53 * dfs_region represents that region. Drivers can use this and the
54 * @alpha2 to adjust their device's DFS parameters as required. 54 * @alpha2 to adjust their device's DFS parameters as required.
55 * @user_reg_hint_type: if the @initiator was of type
56 * %NL80211_REGDOM_SET_BY_USER, this classifies the type
57 * of hint passed. This could be any of the %NL80211_USER_REG_HINT_*
58 * types.
55 * @intersect: indicates whether the wireless core should intersect 59 * @intersect: indicates whether the wireless core should intersect
56 * the requested regulatory domain with the presently set regulatory 60 * the requested regulatory domain with the presently set regulatory
57 * domain. 61 * domain.
@@ -70,6 +74,7 @@ enum environment_cap {
70struct regulatory_request { 74struct regulatory_request {
71 int wiphy_idx; 75 int wiphy_idx;
72 enum nl80211_reg_initiator initiator; 76 enum nl80211_reg_initiator initiator;
77 enum nl80211_user_reg_hint_type user_reg_hint_type;
73 char alpha2[2]; 78 char alpha2[2];
74 u8 dfs_region; 79 u8 dfs_region;
75 bool intersect; 80 bool intersect;
diff --git a/include/net/route.h b/include/net/route.h
index 98705468ac03..c29ef2733f2d 100644
--- a/include/net/route.h
+++ b/include/net/route.h
@@ -40,45 +40,39 @@
40#define RT_CONN_FLAGS(sk) (RT_TOS(inet_sk(sk)->tos) | sock_flag(sk, SOCK_LOCALROUTE)) 40#define RT_CONN_FLAGS(sk) (RT_TOS(inet_sk(sk)->tos) | sock_flag(sk, SOCK_LOCALROUTE))
41 41
42struct fib_nh; 42struct fib_nh;
43struct inet_peer;
44struct fib_info; 43struct fib_info;
45struct rtable { 44struct rtable {
46 struct dst_entry dst; 45 struct dst_entry dst;
47 46
48 /* Lookup key. */
49 __be32 rt_key_dst;
50 __be32 rt_key_src;
51
52 int rt_genid; 47 int rt_genid;
53 unsigned int rt_flags; 48 unsigned int rt_flags;
54 __u16 rt_type; 49 __u16 rt_type;
55 __u8 rt_key_tos; 50 __u16 rt_is_input;
56 51
57 __be32 rt_dst; /* Path destination */
58 __be32 rt_src; /* Path source */
59 int rt_route_iif;
60 int rt_iif; 52 int rt_iif;
61 int rt_oif;
62 __u32 rt_mark;
63 53
64 /* Info on neighbour */ 54 /* Info on neighbour */
65 __be32 rt_gateway; 55 __be32 rt_gateway;
66 56
67 /* Miscellaneous cached information */ 57 /* Miscellaneous cached information */
68 __be32 rt_spec_dst; /* RFC1122 specific destination */ 58 u32 rt_pmtu;
69 u32 rt_peer_genid;
70 struct inet_peer *peer; /* long-living peer info */
71 struct fib_info *fi; /* for client ref to shared metrics */
72}; 59};
73 60
74static inline bool rt_is_input_route(const struct rtable *rt) 61static inline bool rt_is_input_route(const struct rtable *rt)
75{ 62{
76 return rt->rt_route_iif != 0; 63 return rt->rt_is_input != 0;
77} 64}
78 65
79static inline bool rt_is_output_route(const struct rtable *rt) 66static inline bool rt_is_output_route(const struct rtable *rt)
80{ 67{
81 return rt->rt_route_iif == 0; 68 return rt->rt_is_input == 0;
69}
70
71static inline __be32 rt_nexthop(const struct rtable *rt, __be32 daddr)
72{
73 if (rt->rt_gateway)
74 return rt->rt_gateway;
75 return daddr;
82} 76}
83 77
84struct ip_rt_acct { 78struct ip_rt_acct {
@@ -111,10 +105,7 @@ extern struct ip_rt_acct __percpu *ip_rt_acct;
111 105
112struct in_device; 106struct in_device;
113extern int ip_rt_init(void); 107extern int ip_rt_init(void);
114extern void ip_rt_redirect(__be32 old_gw, __be32 dst, __be32 new_gw,
115 __be32 src, struct net_device *dev);
116extern void rt_cache_flush(struct net *net, int how); 108extern void rt_cache_flush(struct net *net, int how);
117extern void rt_cache_flush_batch(struct net *net);
118extern struct rtable *__ip_route_output_key(struct net *, struct flowi4 *flp); 109extern struct rtable *__ip_route_output_key(struct net *, struct flowi4 *flp);
119extern struct rtable *ip_route_output_flow(struct net *, struct flowi4 *flp, 110extern struct rtable *ip_route_output_flow(struct net *, struct flowi4 *flp,
120 struct sock *sk); 111 struct sock *sk);
@@ -166,24 +157,16 @@ static inline struct rtable *ip_route_output_gre(struct net *net, struct flowi4
166 return ip_route_output_key(net, fl4); 157 return ip_route_output_key(net, fl4);
167} 158}
168 159
169extern int ip_route_input_common(struct sk_buff *skb, __be32 dst, __be32 src, 160extern int ip_route_input(struct sk_buff *skb, __be32 dst, __be32 src,
170 u8 tos, struct net_device *devin, bool noref); 161 u8 tos, struct net_device *devin);
171
172static inline int ip_route_input(struct sk_buff *skb, __be32 dst, __be32 src,
173 u8 tos, struct net_device *devin)
174{
175 return ip_route_input_common(skb, dst, src, tos, devin, false);
176}
177
178static inline int ip_route_input_noref(struct sk_buff *skb, __be32 dst, __be32 src,
179 u8 tos, struct net_device *devin)
180{
181 return ip_route_input_common(skb, dst, src, tos, devin, true);
182}
183 162
184extern unsigned short ip_rt_frag_needed(struct net *net, const struct iphdr *iph, 163extern void ipv4_update_pmtu(struct sk_buff *skb, struct net *net, u32 mtu,
185 unsigned short new_mtu, struct net_device *dev); 164 int oif, u32 mark, u8 protocol, int flow_flags);
186extern void ip_rt_send_redirect(struct sk_buff *skb); 165extern void ipv4_sk_update_pmtu(struct sk_buff *skb, struct sock *sk, u32 mtu);
166extern void ipv4_redirect(struct sk_buff *skb, struct net *net,
167 int oif, u32 mark, u8 protocol, int flow_flags);
168extern void ipv4_sk_redirect(struct sk_buff *skb, struct sock *sk);
169extern void ip_rt_send_redirect(struct sk_buff *skb);
187 170
188extern unsigned int inet_addr_type(struct net *net, __be32 addr); 171extern unsigned int inet_addr_type(struct net *net, __be32 addr);
189extern unsigned int inet_dev_addr_type(struct net *net, const struct net_device *dev, __be32 addr); 172extern unsigned int inet_dev_addr_type(struct net *net, const struct net_device *dev, __be32 addr);
@@ -244,8 +227,6 @@ static inline void ip_route_connect_init(struct flowi4 *fl4, __be32 dst, __be32
244 227
245 if (inet_sk(sk)->transparent) 228 if (inet_sk(sk)->transparent)
246 flow_flags |= FLOWI_FLAG_ANYSRC; 229 flow_flags |= FLOWI_FLAG_ANYSRC;
247 if (protocol == IPPROTO_TCP)
248 flow_flags |= FLOWI_FLAG_PRECOW_METRICS;
249 if (can_sleep) 230 if (can_sleep)
250 flow_flags |= FLOWI_FLAG_CAN_SLEEP; 231 flow_flags |= FLOWI_FLAG_CAN_SLEEP;
251 232
@@ -294,20 +275,13 @@ static inline struct rtable *ip_route_newports(struct flowi4 *fl4, struct rtable
294 return rt; 275 return rt;
295} 276}
296 277
297extern void rt_bind_peer(struct rtable *rt, __be32 daddr, int create);
298
299static inline struct inet_peer *rt_get_peer(struct rtable *rt, __be32 daddr)
300{
301 if (rt->peer)
302 return rt->peer;
303
304 rt_bind_peer(rt, daddr, 0);
305 return rt->peer;
306}
307
308static inline int inet_iif(const struct sk_buff *skb) 278static inline int inet_iif(const struct sk_buff *skb)
309{ 279{
310 return skb_rtable(skb)->rt_iif; 280 int iif = skb_rtable(skb)->rt_iif;
281
282 if (iif)
283 return iif;
284 return skb->skb_iif;
311} 285}
312 286
313extern int sysctl_ip_default_ttl; 287extern int sysctl_ip_default_ttl;
diff --git a/include/net/rtnetlink.h b/include/net/rtnetlink.h
index bbcfd0993432..6b00c4fc4291 100644
--- a/include/net/rtnetlink.h
+++ b/include/net/rtnetlink.h
@@ -44,8 +44,10 @@ static inline int rtnl_msg_family(const struct nlmsghdr *nlh)
44 * @get_xstats_size: Function to calculate required room for dumping device 44 * @get_xstats_size: Function to calculate required room for dumping device
45 * specific statistics 45 * specific statistics
46 * @fill_xstats: Function to dump device specific statistics 46 * @fill_xstats: Function to dump device specific statistics
47 * @get_tx_queues: Function to determine number of transmit queues to create when 47 * @get_num_tx_queues: Function to determine number of transmit queues
48 * creating a new device. 48 * to create when creating a new device.
49 * @get_num_rx_queues: Function to determine number of receive queues
50 * to create when creating a new device.
49 */ 51 */
50struct rtnl_link_ops { 52struct rtnl_link_ops {
51 struct list_head list; 53 struct list_head list;
@@ -77,8 +79,8 @@ struct rtnl_link_ops {
77 size_t (*get_xstats_size)(const struct net_device *dev); 79 size_t (*get_xstats_size)(const struct net_device *dev);
78 int (*fill_xstats)(struct sk_buff *skb, 80 int (*fill_xstats)(struct sk_buff *skb,
79 const struct net_device *dev); 81 const struct net_device *dev);
80 int (*get_tx_queues)(struct net *net, 82 unsigned int (*get_num_tx_queues)(void);
81 struct nlattr *tb[]); 83 unsigned int (*get_num_rx_queues)(void);
82}; 84};
83 85
84extern int __rtnl_link_register(struct rtnl_link_ops *ops); 86extern int __rtnl_link_register(struct rtnl_link_ops *ops);
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
index 9d7d54a00e63..d9611e032418 100644
--- a/include/net/sch_generic.h
+++ b/include/net/sch_generic.h
@@ -220,7 +220,7 @@ struct tcf_proto {
220 220
221struct qdisc_skb_cb { 221struct qdisc_skb_cb {
222 unsigned int pkt_len; 222 unsigned int pkt_len;
223 u16 bond_queue_mapping; 223 u16 slave_dev_queue_mapping;
224 u16 _pad; 224 u16 _pad;
225 unsigned char data[20]; 225 unsigned char data[20];
226}; 226};
diff --git a/include/net/scm.h b/include/net/scm.h
index d456f4c71a32..079d7887dac1 100644
--- a/include/net/scm.h
+++ b/include/net/scm.h
@@ -13,7 +13,6 @@
13#define SCM_MAX_FD 253 13#define SCM_MAX_FD 253
14 14
15struct scm_fp_list { 15struct scm_fp_list {
16 struct list_head list;
17 short count; 16 short count;
18 short max; 17 short max;
19 struct file *fp[SCM_MAX_FD]; 18 struct file *fp[SCM_MAX_FD];
diff --git a/include/net/sctp/constants.h b/include/net/sctp/constants.h
index 942b864f6135..d053d2e99876 100644
--- a/include/net/sctp/constants.h
+++ b/include/net/sctp/constants.h
@@ -334,6 +334,7 @@ typedef enum {
334typedef enum { 334typedef enum {
335 SCTP_TRANSPORT_UP, 335 SCTP_TRANSPORT_UP,
336 SCTP_TRANSPORT_DOWN, 336 SCTP_TRANSPORT_DOWN,
337 SCTP_TRANSPORT_PF,
337} sctp_transport_cmd_t; 338} sctp_transport_cmd_t;
338 339
339/* These are the address scopes defined mainly for IPv4 addresses 340/* These are the address scopes defined mainly for IPv4 addresses
diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h
index a2ef81466b00..ff499640528b 100644
--- a/include/net/sctp/sctp.h
+++ b/include/net/sctp/sctp.h
@@ -162,6 +162,8 @@ struct sock *sctp_err_lookup(int family, struct sk_buff *,
162void sctp_err_finish(struct sock *, struct sctp_association *); 162void sctp_err_finish(struct sock *, struct sctp_association *);
163void sctp_icmp_frag_needed(struct sock *, struct sctp_association *, 163void sctp_icmp_frag_needed(struct sock *, struct sctp_association *,
164 struct sctp_transport *t, __u32 pmtu); 164 struct sctp_transport *t, __u32 pmtu);
165void sctp_icmp_redirect(struct sock *, struct sctp_transport *,
166 struct sk_buff *);
165void sctp_icmp_proto_unreachable(struct sock *sk, 167void sctp_icmp_proto_unreachable(struct sock *sk,
166 struct sctp_association *asoc, 168 struct sctp_association *asoc,
167 struct sctp_transport *t); 169 struct sctp_transport *t);
@@ -517,10 +519,10 @@ static inline int sctp_frag_point(const struct sctp_association *asoc, int pmtu)
517 return frag; 519 return frag;
518} 520}
519 521
520static inline void sctp_assoc_pending_pmtu(struct sctp_association *asoc) 522static inline void sctp_assoc_pending_pmtu(struct sock *sk, struct sctp_association *asoc)
521{ 523{
522 524
523 sctp_assoc_sync_pmtu(asoc); 525 sctp_assoc_sync_pmtu(sk, asoc);
524 asoc->pmtu_pending = 0; 526 asoc->pmtu_pending = 0;
525} 527}
526 528
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
index e4652fe58958..fc5e60016e37 100644
--- a/include/net/sctp/structs.h
+++ b/include/net/sctp/structs.h
@@ -161,6 +161,12 @@ extern struct sctp_globals {
161 int max_retrans_path; 161 int max_retrans_path;
162 int max_retrans_init; 162 int max_retrans_init;
163 163
164 /* Potentially-Failed.Max.Retrans sysctl value
165 * taken from:
166 * http://tools.ietf.org/html/draft-nishida-tsvwg-sctp-failover-05
167 */
168 int pf_retrans;
169
164 /* 170 /*
165 * Policy for preforming sctp/socket accounting 171 * Policy for preforming sctp/socket accounting
166 * 0 - do socket level accounting, all assocs share sk_sndbuf 172 * 0 - do socket level accounting, all assocs share sk_sndbuf
@@ -258,6 +264,7 @@ extern struct sctp_globals {
258#define sctp_sndbuf_policy (sctp_globals.sndbuf_policy) 264#define sctp_sndbuf_policy (sctp_globals.sndbuf_policy)
259#define sctp_rcvbuf_policy (sctp_globals.rcvbuf_policy) 265#define sctp_rcvbuf_policy (sctp_globals.rcvbuf_policy)
260#define sctp_max_retrans_path (sctp_globals.max_retrans_path) 266#define sctp_max_retrans_path (sctp_globals.max_retrans_path)
267#define sctp_pf_retrans (sctp_globals.pf_retrans)
261#define sctp_max_retrans_init (sctp_globals.max_retrans_init) 268#define sctp_max_retrans_init (sctp_globals.max_retrans_init)
262#define sctp_sack_timeout (sctp_globals.sack_timeout) 269#define sctp_sack_timeout (sctp_globals.sack_timeout)
263#define sctp_hb_interval (sctp_globals.hb_interval) 270#define sctp_hb_interval (sctp_globals.hb_interval)
@@ -912,6 +919,9 @@ struct sctp_transport {
912 /* Is this structure kfree()able? */ 919 /* Is this structure kfree()able? */
913 malloced:1; 920 malloced:1;
914 921
922 /* Has this transport moved the ctsn since we last sacked */
923 __u32 sack_generation;
924
915 struct flowi fl; 925 struct flowi fl;
916 926
917 /* This is the peer's IP address and port. */ 927 /* This is the peer's IP address and port. */
@@ -987,10 +997,15 @@ struct sctp_transport {
987 997
988 /* This is the max_retrans value for the transport and will 998 /* This is the max_retrans value for the transport and will
989 * be initialized from the assocs value. This can be changed 999 * be initialized from the assocs value. This can be changed
990 * using SCTP_SET_PEER_ADDR_PARAMS socket option. 1000 * using the SCTP_SET_PEER_ADDR_PARAMS socket option.
991 */ 1001 */
992 __u16 pathmaxrxt; 1002 __u16 pathmaxrxt;
993 1003
1004 /* This is the partially failed retrans value for the transport
1005 * and will be initialized from the assocs value. This can be changed
1006 * using the SCTP_PEER_ADDR_THLDS socket option
1007 */
1008 int pf_retrans;
994 /* PMTU : The current known path MTU. */ 1009 /* PMTU : The current known path MTU. */
995 __u32 pathmtu; 1010 __u32 pathmtu;
996 1011
@@ -1088,7 +1103,7 @@ void sctp_transport_burst_limited(struct sctp_transport *);
1088void sctp_transport_burst_reset(struct sctp_transport *); 1103void sctp_transport_burst_reset(struct sctp_transport *);
1089unsigned long sctp_transport_timeout(struct sctp_transport *); 1104unsigned long sctp_transport_timeout(struct sctp_transport *);
1090void sctp_transport_reset(struct sctp_transport *); 1105void sctp_transport_reset(struct sctp_transport *);
1091void sctp_transport_update_pmtu(struct sctp_transport *, u32); 1106void sctp_transport_update_pmtu(struct sock *, struct sctp_transport *, u32);
1092void sctp_transport_immediate_rtx(struct sctp_transport *); 1107void sctp_transport_immediate_rtx(struct sctp_transport *);
1093 1108
1094 1109
@@ -1584,6 +1599,7 @@ struct sctp_association {
1584 */ 1599 */
1585 __u8 sack_needed; /* Do we need to sack the peer? */ 1600 __u8 sack_needed; /* Do we need to sack the peer? */
1586 __u32 sack_cnt; 1601 __u32 sack_cnt;
1602 __u32 sack_generation;
1587 1603
1588 /* These are capabilities which our peer advertised. */ 1604 /* These are capabilities which our peer advertised. */
1589 __u8 ecn_capable:1, /* Can peer do ECN? */ 1605 __u8 ecn_capable:1, /* Can peer do ECN? */
@@ -1660,6 +1676,12 @@ struct sctp_association {
1660 */ 1676 */
1661 int max_retrans; 1677 int max_retrans;
1662 1678
1679 /* This is the partially failed retrans value for the transport
1680 * and will be initialized from the assocs value. This can be
1681 * changed using the SCTP_PEER_ADDR_THLDS socket option
1682 */
1683 int pf_retrans;
1684
1663 /* Maximum number of times the endpoint will retransmit INIT */ 1685 /* Maximum number of times the endpoint will retransmit INIT */
1664 __u16 max_init_attempts; 1686 __u16 max_init_attempts;
1665 1687
@@ -1999,7 +2021,7 @@ void sctp_assoc_update(struct sctp_association *old,
1999 2021
2000__u32 sctp_association_get_next_tsn(struct sctp_association *); 2022__u32 sctp_association_get_next_tsn(struct sctp_association *);
2001 2023
2002void sctp_assoc_sync_pmtu(struct sctp_association *); 2024void sctp_assoc_sync_pmtu(struct sock *, struct sctp_association *);
2003void sctp_assoc_rwnd_increase(struct sctp_association *, unsigned int); 2025void sctp_assoc_rwnd_increase(struct sctp_association *, unsigned int);
2004void sctp_assoc_rwnd_decrease(struct sctp_association *, unsigned int); 2026void sctp_assoc_rwnd_decrease(struct sctp_association *, unsigned int);
2005void sctp_assoc_set_primary(struct sctp_association *, 2027void sctp_assoc_set_primary(struct sctp_association *,
diff --git a/include/net/sctp/tsnmap.h b/include/net/sctp/tsnmap.h
index e7728bc14ccf..2c5d2b4d5d1e 100644
--- a/include/net/sctp/tsnmap.h
+++ b/include/net/sctp/tsnmap.h
@@ -117,7 +117,8 @@ void sctp_tsnmap_free(struct sctp_tsnmap *map);
117int sctp_tsnmap_check(const struct sctp_tsnmap *, __u32 tsn); 117int sctp_tsnmap_check(const struct sctp_tsnmap *, __u32 tsn);
118 118
119/* Mark this TSN as seen. */ 119/* Mark this TSN as seen. */
120int sctp_tsnmap_mark(struct sctp_tsnmap *, __u32 tsn); 120int sctp_tsnmap_mark(struct sctp_tsnmap *, __u32 tsn,
121 struct sctp_transport *trans);
121 122
122/* Mark this TSN and all lower as seen. */ 123/* Mark this TSN and all lower as seen. */
123void sctp_tsnmap_skip(struct sctp_tsnmap *map, __u32 tsn); 124void sctp_tsnmap_skip(struct sctp_tsnmap *map, __u32 tsn);
diff --git a/include/net/sctp/user.h b/include/net/sctp/user.h
index 0842ef00b2fe..1b02d7ad453b 100644
--- a/include/net/sctp/user.h
+++ b/include/net/sctp/user.h
@@ -93,6 +93,7 @@ typedef __s32 sctp_assoc_t;
93#define SCTP_GET_ASSOC_NUMBER 28 /* Read only */ 93#define SCTP_GET_ASSOC_NUMBER 28 /* Read only */
94#define SCTP_GET_ASSOC_ID_LIST 29 /* Read only */ 94#define SCTP_GET_ASSOC_ID_LIST 29 /* Read only */
95#define SCTP_AUTO_ASCONF 30 95#define SCTP_AUTO_ASCONF 30
96#define SCTP_PEER_ADDR_THLDS 31
96 97
97/* Internal Socket Options. Some of the sctp library functions are 98/* Internal Socket Options. Some of the sctp library functions are
98 * implemented using these socket options. 99 * implemented using these socket options.
@@ -649,6 +650,7 @@ struct sctp_paddrinfo {
649 */ 650 */
650enum sctp_spinfo_state { 651enum sctp_spinfo_state {
651 SCTP_INACTIVE, 652 SCTP_INACTIVE,
653 SCTP_PF,
652 SCTP_ACTIVE, 654 SCTP_ACTIVE,
653 SCTP_UNCONFIRMED, 655 SCTP_UNCONFIRMED,
654 SCTP_UNKNOWN = 0xffff /* Value used for transport state unknown */ 656 SCTP_UNKNOWN = 0xffff /* Value used for transport state unknown */
@@ -741,4 +743,13 @@ typedef struct {
741 int sd; 743 int sd;
742} sctp_peeloff_arg_t; 744} sctp_peeloff_arg_t;
743 745
746/*
747 * Peer Address Thresholds socket option
748 */
749struct sctp_paddrthlds {
750 sctp_assoc_t spt_assoc_id;
751 struct sockaddr_storage spt_address;
752 __u16 spt_pathmaxrxt;
753 __u16 spt_pathpfthld;
754};
744#endif /* __net_sctp_user_h__ */ 755#endif /* __net_sctp_user_h__ */
diff --git a/include/net/sock.h b/include/net/sock.h
index 4a4521699563..e067f8c18f88 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -198,6 +198,7 @@ struct cg_proto;
198 * @sk_lock: synchronizer 198 * @sk_lock: synchronizer
199 * @sk_rcvbuf: size of receive buffer in bytes 199 * @sk_rcvbuf: size of receive buffer in bytes
200 * @sk_wq: sock wait queue and async head 200 * @sk_wq: sock wait queue and async head
201 * @sk_rx_dst: receive input route used by early tcp demux
201 * @sk_dst_cache: destination cache 202 * @sk_dst_cache: destination cache
202 * @sk_dst_lock: destination cache lock 203 * @sk_dst_lock: destination cache lock
203 * @sk_policy: flow policy 204 * @sk_policy: flow policy
@@ -317,6 +318,7 @@ struct sock {
317 struct xfrm_policy *sk_policy[2]; 318 struct xfrm_policy *sk_policy[2];
318#endif 319#endif
319 unsigned long sk_flags; 320 unsigned long sk_flags;
321 struct dst_entry *sk_rx_dst;
320 struct dst_entry *sk_dst_cache; 322 struct dst_entry *sk_dst_cache;
321 spinlock_t sk_dst_lock; 323 spinlock_t sk_dst_lock;
322 atomic_t sk_wmem_alloc; 324 atomic_t sk_wmem_alloc;
@@ -856,6 +858,9 @@ struct proto {
856 int (*backlog_rcv) (struct sock *sk, 858 int (*backlog_rcv) (struct sock *sk,
857 struct sk_buff *skb); 859 struct sk_buff *skb);
858 860
861 void (*release_cb)(struct sock *sk);
862 void (*mtu_reduced)(struct sock *sk);
863
859 /* Keeping track of sk's, looking them up, and port selection methods. */ 864 /* Keeping track of sk's, looking them up, and port selection methods. */
860 void (*hash)(struct sock *sk); 865 void (*hash)(struct sock *sk);
861 void (*unhash)(struct sock *sk); 866 void (*unhash)(struct sock *sk);
@@ -1426,6 +1431,7 @@ extern struct sk_buff *sock_rmalloc(struct sock *sk,
1426 gfp_t priority); 1431 gfp_t priority);
1427extern void sock_wfree(struct sk_buff *skb); 1432extern void sock_wfree(struct sk_buff *skb);
1428extern void sock_rfree(struct sk_buff *skb); 1433extern void sock_rfree(struct sk_buff *skb);
1434extern void sock_edemux(struct sk_buff *skb);
1429 1435
1430extern int sock_setsockopt(struct socket *sock, int level, 1436extern int sock_setsockopt(struct socket *sock, int level,
1431 int op, char __user *optval, 1437 int op, char __user *optval,
@@ -2152,7 +2158,7 @@ static inline void sk_change_net(struct sock *sk, struct net *net)
2152 2158
2153static inline struct sock *skb_steal_sock(struct sk_buff *skb) 2159static inline struct sock *skb_steal_sock(struct sk_buff *skb)
2154{ 2160{
2155 if (unlikely(skb->sk)) { 2161 if (skb->sk) {
2156 struct sock *sk = skb->sk; 2162 struct sock *sk = skb->sk;
2157 2163
2158 skb->destructor = NULL; 2164 skb->destructor = NULL;
diff --git a/include/net/tcp.h b/include/net/tcp.h
index e79aa48d9fc1..e19124b84cd2 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -170,6 +170,11 @@ extern void tcp_time_wait(struct sock *sk, int state, int timeo);
170#define TCPOPT_TIMESTAMP 8 /* Better RTT estimations/PAWS */ 170#define TCPOPT_TIMESTAMP 8 /* Better RTT estimations/PAWS */
171#define TCPOPT_MD5SIG 19 /* MD5 Signature (RFC2385) */ 171#define TCPOPT_MD5SIG 19 /* MD5 Signature (RFC2385) */
172#define TCPOPT_COOKIE 253 /* Cookie extension (experimental) */ 172#define TCPOPT_COOKIE 253 /* Cookie extension (experimental) */
173#define TCPOPT_EXP 254 /* Experimental */
174/* Magic number to be after the option value for sharing TCP
175 * experimental options. See draft-ietf-tcpm-experimental-options-00.txt
176 */
177#define TCPOPT_FASTOPEN_MAGIC 0xF989
173 178
174/* 179/*
175 * TCP option lengths 180 * TCP option lengths
@@ -180,6 +185,7 @@ extern void tcp_time_wait(struct sock *sk, int state, int timeo);
180#define TCPOLEN_SACK_PERM 2 185#define TCPOLEN_SACK_PERM 2
181#define TCPOLEN_TIMESTAMP 10 186#define TCPOLEN_TIMESTAMP 10
182#define TCPOLEN_MD5SIG 18 187#define TCPOLEN_MD5SIG 18
188#define TCPOLEN_EXP_FASTOPEN_BASE 4
183#define TCPOLEN_COOKIE_BASE 2 /* Cookie-less header extension */ 189#define TCPOLEN_COOKIE_BASE 2 /* Cookie-less header extension */
184#define TCPOLEN_COOKIE_PAIR 3 /* Cookie pair header extension */ 190#define TCPOLEN_COOKIE_PAIR 3 /* Cookie pair header extension */
185#define TCPOLEN_COOKIE_MIN (TCPOLEN_COOKIE_BASE+TCP_COOKIE_MIN) 191#define TCPOLEN_COOKIE_MIN (TCPOLEN_COOKIE_BASE+TCP_COOKIE_MIN)
@@ -206,6 +212,10 @@ extern void tcp_time_wait(struct sock *sk, int state, int timeo);
206/* TCP initial congestion window as per draft-hkchu-tcpm-initcwnd-01 */ 212/* TCP initial congestion window as per draft-hkchu-tcpm-initcwnd-01 */
207#define TCP_INIT_CWND 10 213#define TCP_INIT_CWND 10
208 214
215/* Bit Flags for sysctl_tcp_fastopen */
216#define TFO_CLIENT_ENABLE 1
217#define TFO_CLIENT_NO_COOKIE 4 /* Data in SYN w/o cookie option */
218
209extern struct inet_timewait_death_row tcp_death_row; 219extern struct inet_timewait_death_row tcp_death_row;
210 220
211/* sysctl variables for tcp */ 221/* sysctl variables for tcp */
@@ -222,6 +232,7 @@ extern int sysctl_tcp_retries1;
222extern int sysctl_tcp_retries2; 232extern int sysctl_tcp_retries2;
223extern int sysctl_tcp_orphan_retries; 233extern int sysctl_tcp_orphan_retries;
224extern int sysctl_tcp_syncookies; 234extern int sysctl_tcp_syncookies;
235extern int sysctl_tcp_fastopen;
225extern int sysctl_tcp_retrans_collapse; 236extern int sysctl_tcp_retrans_collapse;
226extern int sysctl_tcp_stdurg; 237extern int sysctl_tcp_stdurg;
227extern int sysctl_tcp_rfc1337; 238extern int sysctl_tcp_rfc1337;
@@ -253,6 +264,8 @@ extern int sysctl_tcp_cookie_size;
253extern int sysctl_tcp_thin_linear_timeouts; 264extern int sysctl_tcp_thin_linear_timeouts;
254extern int sysctl_tcp_thin_dupack; 265extern int sysctl_tcp_thin_dupack;
255extern int sysctl_tcp_early_retrans; 266extern int sysctl_tcp_early_retrans;
267extern int sysctl_tcp_limit_output_bytes;
268extern int sysctl_tcp_challenge_ack_limit;
256 269
257extern atomic_long_t tcp_memory_allocated; 270extern atomic_long_t tcp_memory_allocated;
258extern struct percpu_counter tcp_sockets_allocated; 271extern struct percpu_counter tcp_sockets_allocated;
@@ -321,19 +334,24 @@ extern struct proto tcp_prot;
321 334
322extern void tcp_init_mem(struct net *net); 335extern void tcp_init_mem(struct net *net);
323 336
337extern void tcp_tasklet_init(void);
338
324extern void tcp_v4_err(struct sk_buff *skb, u32); 339extern void tcp_v4_err(struct sk_buff *skb, u32);
325 340
326extern void tcp_shutdown (struct sock *sk, int how); 341extern void tcp_shutdown (struct sock *sk, int how);
327 342
343extern void tcp_v4_early_demux(struct sk_buff *skb);
328extern int tcp_v4_rcv(struct sk_buff *skb); 344extern int tcp_v4_rcv(struct sk_buff *skb);
329 345
330extern struct inet_peer *tcp_v4_get_peer(struct sock *sk, bool *release_it); 346extern struct inet_peer *tcp_v4_get_peer(struct sock *sk);
331extern void *tcp_v4_tw_get_peer(struct sock *sk);
332extern int tcp_v4_tw_remember_stamp(struct inet_timewait_sock *tw); 347extern int tcp_v4_tw_remember_stamp(struct inet_timewait_sock *tw);
333extern int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, 348extern int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
334 size_t size); 349 size_t size);
335extern int tcp_sendpage(struct sock *sk, struct page *page, int offset, 350extern int tcp_sendpage(struct sock *sk, struct page *page, int offset,
336 size_t size, int flags); 351 size_t size, int flags);
352extern void tcp_release_cb(struct sock *sk);
353extern void tcp_write_timer_handler(struct sock *sk);
354extern void tcp_delack_timer_handler(struct sock *sk);
337extern int tcp_ioctl(struct sock *sk, int cmd, unsigned long arg); 355extern int tcp_ioctl(struct sock *sk, int cmd, unsigned long arg);
338extern int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb, 356extern int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb,
339 const struct tcphdr *th, unsigned int len); 357 const struct tcphdr *th, unsigned int len);
@@ -388,6 +406,19 @@ extern void tcp_enter_frto(struct sock *sk);
388extern void tcp_enter_loss(struct sock *sk, int how); 406extern void tcp_enter_loss(struct sock *sk, int how);
389extern void tcp_clear_retrans(struct tcp_sock *tp); 407extern void tcp_clear_retrans(struct tcp_sock *tp);
390extern void tcp_update_metrics(struct sock *sk); 408extern void tcp_update_metrics(struct sock *sk);
409extern void tcp_init_metrics(struct sock *sk);
410extern void tcp_metrics_init(void);
411extern bool tcp_peer_is_proven(struct request_sock *req, struct dst_entry *dst, bool paws_check);
412extern bool tcp_remember_stamp(struct sock *sk);
413extern bool tcp_tw_remember_stamp(struct inet_timewait_sock *tw);
414extern void tcp_fastopen_cache_get(struct sock *sk, u16 *mss,
415 struct tcp_fastopen_cookie *cookie,
416 int *syn_loss, unsigned long *last_syn_loss);
417extern void tcp_fastopen_cache_set(struct sock *sk, u16 mss,
418 struct tcp_fastopen_cookie *cookie,
419 bool syn_lost);
420extern void tcp_fetch_timewait_stamp(struct sock *sk, struct dst_entry *dst);
421extern void tcp_disable_fack(struct tcp_sock *tp);
391extern void tcp_close(struct sock *sk, long timeout); 422extern void tcp_close(struct sock *sk, long timeout);
392extern void tcp_init_sock(struct sock *sk); 423extern void tcp_init_sock(struct sock *sk);
393extern unsigned int tcp_poll(struct file * file, struct socket *sock, 424extern unsigned int tcp_poll(struct file * file, struct socket *sock,
@@ -406,7 +437,7 @@ extern int tcp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
406 size_t len, int nonblock, int flags, int *addr_len); 437 size_t len, int nonblock, int flags, int *addr_len);
407extern void tcp_parse_options(const struct sk_buff *skb, 438extern void tcp_parse_options(const struct sk_buff *skb,
408 struct tcp_options_received *opt_rx, const u8 **hvpp, 439 struct tcp_options_received *opt_rx, const u8 **hvpp,
409 int estab); 440 int estab, struct tcp_fastopen_cookie *foc);
410extern const u8 *tcp_parse_md5sig_option(const struct tcphdr *th); 441extern const u8 *tcp_parse_md5sig_option(const struct tcphdr *th);
411 442
412/* 443/*
@@ -556,6 +587,8 @@ static inline u32 __tcp_set_rto(const struct tcp_sock *tp)
556 return (tp->srtt >> 3) + tp->rttvar; 587 return (tp->srtt >> 3) + tp->rttvar;
557} 588}
558 589
590extern void tcp_set_rto(struct sock *sk);
591
559static inline void __tcp_fast_path_on(struct tcp_sock *tp, u32 snd_wnd) 592static inline void __tcp_fast_path_on(struct tcp_sock *tp, u32 snd_wnd)
560{ 593{
561 tp->pred_flags = htonl((tp->tcp_header_len << 26) | 594 tp->pred_flags = htonl((tp->tcp_header_len << 26) |
@@ -1264,6 +1297,15 @@ extern int tcp_md5_hash_skb_data(struct tcp_md5sig_pool *, const struct sk_buff
1264extern int tcp_md5_hash_key(struct tcp_md5sig_pool *hp, 1297extern int tcp_md5_hash_key(struct tcp_md5sig_pool *hp,
1265 const struct tcp_md5sig_key *key); 1298 const struct tcp_md5sig_key *key);
1266 1299
1300struct tcp_fastopen_request {
1301 /* Fast Open cookie. Size 0 means a cookie request */
1302 struct tcp_fastopen_cookie cookie;
1303 struct msghdr *data; /* data in MSG_FASTOPEN */
1304 u16 copied; /* queued in tcp_connect() */
1305};
1306
1307void tcp_free_fastopen_req(struct tcp_sock *tp);
1308
1267/* write queue abstraction */ 1309/* write queue abstraction */
1268static inline void tcp_write_queue_purge(struct sock *sk) 1310static inline void tcp_write_queue_purge(struct sock *sk)
1269{ 1311{
diff --git a/include/net/timewait_sock.h b/include/net/timewait_sock.h
index 8d6689cb2c66..68f0ecad6c6e 100644
--- a/include/net/timewait_sock.h
+++ b/include/net/timewait_sock.h
@@ -22,7 +22,6 @@ struct timewait_sock_ops {
22 int (*twsk_unique)(struct sock *sk, 22 int (*twsk_unique)(struct sock *sk,
23 struct sock *sktw, void *twp); 23 struct sock *sktw, void *twp);
24 void (*twsk_destructor)(struct sock *sk); 24 void (*twsk_destructor)(struct sock *sk);
25 void *(*twsk_getpeer)(struct sock *sk);
26}; 25};
27 26
28static inline int twsk_unique(struct sock *sk, struct sock *sktw, void *twp) 27static inline int twsk_unique(struct sock *sk, struct sock *sktw, void *twp)
@@ -41,11 +40,4 @@ static inline void twsk_destructor(struct sock *sk)
41 sk->sk_prot->twsk_prot->twsk_destructor(sk); 40 sk->sk_prot->twsk_prot->twsk_destructor(sk);
42} 41}
43 42
44static inline void *twsk_getpeer(struct sock *sk)
45{
46 if (sk->sk_prot->twsk_prot->twsk_getpeer)
47 return sk->sk_prot->twsk_prot->twsk_getpeer(sk);
48 return NULL;
49}
50
51#endif /* _TIMEWAIT_SOCK_H */ 43#endif /* _TIMEWAIT_SOCK_H */
diff --git a/include/net/xfrm.h b/include/net/xfrm.h
index e0a55df5bde8..d9509eb29b80 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
@@ -1475,6 +1475,8 @@ extern int xfrm4_output(struct sk_buff *skb);
1475extern int xfrm4_output_finish(struct sk_buff *skb); 1475extern int xfrm4_output_finish(struct sk_buff *skb);
1476extern int xfrm4_tunnel_register(struct xfrm_tunnel *handler, unsigned short family); 1476extern int xfrm4_tunnel_register(struct xfrm_tunnel *handler, unsigned short family);
1477extern int xfrm4_tunnel_deregister(struct xfrm_tunnel *handler, unsigned short family); 1477extern int xfrm4_tunnel_deregister(struct xfrm_tunnel *handler, unsigned short family);
1478extern int xfrm4_mode_tunnel_input_register(struct xfrm_tunnel *handler);
1479extern int xfrm4_mode_tunnel_input_deregister(struct xfrm_tunnel *handler);
1478extern int xfrm6_extract_header(struct sk_buff *skb); 1480extern int xfrm6_extract_header(struct sk_buff *skb);
1479extern int xfrm6_extract_input(struct xfrm_state *x, struct sk_buff *skb); 1481extern int xfrm6_extract_input(struct xfrm_state *x, struct sk_buff *skb);
1480extern int xfrm6_rcv_spi(struct sk_buff *skb, int nexthdr, __be32 spi); 1482extern int xfrm6_rcv_spi(struct sk_buff *skb, int nexthdr, __be32 spi);
@@ -1682,13 +1684,11 @@ static inline int xfrm_mark_get(struct nlattr **attrs, struct xfrm_mark *m)
1682 1684
1683static inline int xfrm_mark_put(struct sk_buff *skb, const struct xfrm_mark *m) 1685static inline int xfrm_mark_put(struct sk_buff *skb, const struct xfrm_mark *m)
1684{ 1686{
1685 if ((m->m | m->v) && 1687 int ret = 0;
1686 nla_put(skb, XFRMA_MARK, sizeof(struct xfrm_mark), m))
1687 goto nla_put_failure;
1688 return 0;
1689 1688
1690nla_put_failure: 1689 if (m->m | m->v)
1691 return -1; 1690 ret = nla_put(skb, XFRMA_MARK, sizeof(struct xfrm_mark), m);
1691 return ret;
1692} 1692}
1693 1693
1694#endif /* _NET_XFRM_H */ 1694#endif /* _NET_XFRM_H */
diff --git a/include/rdma/ib_cm.h b/include/rdma/ib_cm.h
index 83f77ac33957..0e3ff30647d5 100644
--- a/include/rdma/ib_cm.h
+++ b/include/rdma/ib_cm.h
@@ -262,6 +262,18 @@ struct ib_cm_event {
262 void *private_data; 262 void *private_data;
263}; 263};
264 264
265#define CM_REQ_ATTR_ID cpu_to_be16(0x0010)
266#define CM_MRA_ATTR_ID cpu_to_be16(0x0011)
267#define CM_REJ_ATTR_ID cpu_to_be16(0x0012)
268#define CM_REP_ATTR_ID cpu_to_be16(0x0013)
269#define CM_RTU_ATTR_ID cpu_to_be16(0x0014)
270#define CM_DREQ_ATTR_ID cpu_to_be16(0x0015)
271#define CM_DREP_ATTR_ID cpu_to_be16(0x0016)
272#define CM_SIDR_REQ_ATTR_ID cpu_to_be16(0x0017)
273#define CM_SIDR_REP_ATTR_ID cpu_to_be16(0x0018)
274#define CM_LAP_ATTR_ID cpu_to_be16(0x0019)
275#define CM_APR_ATTR_ID cpu_to_be16(0x001A)
276
265/** 277/**
266 * ib_cm_handler - User-defined callback to process communication events. 278 * ib_cm_handler - User-defined callback to process communication events.
267 * @cm_id: Communication identifier associated with the reported event. 279 * @cm_id: Communication identifier associated with the reported event.
diff --git a/include/rdma/ib_sa.h b/include/rdma/ib_sa.h
index d44a56388a3e..8275e539bace 100644
--- a/include/rdma/ib_sa.h
+++ b/include/rdma/ib_sa.h
@@ -251,6 +251,28 @@ struct ib_sa_service_rec {
251 u64 data64[2]; 251 u64 data64[2];
252}; 252};
253 253
254#define IB_SA_GUIDINFO_REC_LID IB_SA_COMP_MASK(0)
255#define IB_SA_GUIDINFO_REC_BLOCK_NUM IB_SA_COMP_MASK(1)
256#define IB_SA_GUIDINFO_REC_RES1 IB_SA_COMP_MASK(2)
257#define IB_SA_GUIDINFO_REC_RES2 IB_SA_COMP_MASK(3)
258#define IB_SA_GUIDINFO_REC_GID0 IB_SA_COMP_MASK(4)
259#define IB_SA_GUIDINFO_REC_GID1 IB_SA_COMP_MASK(5)
260#define IB_SA_GUIDINFO_REC_GID2 IB_SA_COMP_MASK(6)
261#define IB_SA_GUIDINFO_REC_GID3 IB_SA_COMP_MASK(7)
262#define IB_SA_GUIDINFO_REC_GID4 IB_SA_COMP_MASK(8)
263#define IB_SA_GUIDINFO_REC_GID5 IB_SA_COMP_MASK(9)
264#define IB_SA_GUIDINFO_REC_GID6 IB_SA_COMP_MASK(10)
265#define IB_SA_GUIDINFO_REC_GID7 IB_SA_COMP_MASK(11)
266
267struct ib_sa_guidinfo_rec {
268 __be16 lid;
269 u8 block_num;
270 /* reserved */
271 u8 res1;
272 __be32 res2;
273 u8 guid_info_list[64];
274};
275
254struct ib_sa_client { 276struct ib_sa_client {
255 atomic_t users; 277 atomic_t users;
256 struct completion comp; 278 struct completion comp;
@@ -385,4 +407,15 @@ int ib_init_ah_from_path(struct ib_device *device, u8 port_num,
385 */ 407 */
386void ib_sa_unpack_path(void *attribute, struct ib_sa_path_rec *rec); 408void ib_sa_unpack_path(void *attribute, struct ib_sa_path_rec *rec);
387 409
410/* Support GuidInfoRecord */
411int ib_sa_guid_info_rec_query(struct ib_sa_client *client,
412 struct ib_device *device, u8 port_num,
413 struct ib_sa_guidinfo_rec *rec,
414 ib_sa_comp_mask comp_mask, u8 method,
415 int timeout_ms, gfp_t gfp_mask,
416 void (*callback)(int status,
417 struct ib_sa_guidinfo_rec *resp,
418 void *context),
419 void *context,
420 struct ib_sa_query **sa_query);
388#endif /* IB_SA_H */ 421#endif /* IB_SA_H */
diff --git a/include/rdma/rdma_cm.h b/include/rdma/rdma_cm.h
index 51988f808181..ad3a3142383a 100644
--- a/include/rdma/rdma_cm.h
+++ b/include/rdma/rdma_cm.h
@@ -357,4 +357,14 @@ void rdma_set_service_type(struct rdma_cm_id *id, int tos);
357 */ 357 */
358int rdma_set_reuseaddr(struct rdma_cm_id *id, int reuse); 358int rdma_set_reuseaddr(struct rdma_cm_id *id, int reuse);
359 359
360/**
361 * rdma_set_afonly - Specify that listens are restricted to the
362 * bound address family only.
363 * @id: Communication identifer to configure.
364 * @afonly: Value indicating if listens are restricted.
365 *
366 * Must be set before identifier is in the listening state.
367 */
368int rdma_set_afonly(struct rdma_cm_id *id, int afonly);
369
360#endif /* RDMA_CM_H */ 370#endif /* RDMA_CM_H */
diff --git a/include/rdma/rdma_user_cm.h b/include/rdma/rdma_user_cm.h
index 5348a000c8f3..1ee9239ff8c2 100644
--- a/include/rdma/rdma_user_cm.h
+++ b/include/rdma/rdma_user_cm.h
@@ -224,6 +224,7 @@ enum {
224enum { 224enum {
225 RDMA_OPTION_ID_TOS = 0, 225 RDMA_OPTION_ID_TOS = 0,
226 RDMA_OPTION_ID_REUSEADDR = 1, 226 RDMA_OPTION_ID_REUSEADDR = 1,
227 RDMA_OPTION_ID_AFONLY = 2,
227 RDMA_OPTION_IB_PATH = 1 228 RDMA_OPTION_IB_PATH = 1
228}; 229};
229 230
diff --git a/include/scsi/libfc.h b/include/scsi/libfc.h
index 8f9dfba3fcf0..399162b50a8d 100644
--- a/include/scsi/libfc.h
+++ b/include/scsi/libfc.h
@@ -224,7 +224,7 @@ struct fc_rport_priv {
224}; 224};
225 225
226/** 226/**
227 * struct fcoe_dev_stats - fcoe stats structure 227 * struct fc_stats - fc stats structure
228 * @SecondsSinceLastReset: Seconds since the last reset 228 * @SecondsSinceLastReset: Seconds since the last reset
229 * @TxFrames: Number of transmitted frames 229 * @TxFrames: Number of transmitted frames
230 * @TxWords: Number of transmitted words 230 * @TxWords: Number of transmitted words
@@ -232,6 +232,9 @@ struct fc_rport_priv {
232 * @RxWords: Number of received words 232 * @RxWords: Number of received words
233 * @ErrorFrames: Number of received error frames 233 * @ErrorFrames: Number of received error frames
234 * @DumpedFrames: Number of dumped frames 234 * @DumpedFrames: Number of dumped frames
235 * @FcpPktAllocFails: Number of fcp packet allocation failures
236 * @FcpPktAborts: Number of fcp packet aborts
237 * @FcpFrameAllocFails: Number of fcp frame allocation failures
235 * @LinkFailureCount: Number of link failures 238 * @LinkFailureCount: Number of link failures
236 * @LossOfSignalCount: Number for signal losses 239 * @LossOfSignalCount: Number for signal losses
237 * @InvalidTxWordCount: Number of invalid transmitted words 240 * @InvalidTxWordCount: Number of invalid transmitted words
@@ -244,7 +247,7 @@ struct fc_rport_priv {
244 * @VLinkFailureCount: Number of virtual link failures 247 * @VLinkFailureCount: Number of virtual link failures
245 * @MissDiscAdvCount: Number of missing FIP discovery advertisement 248 * @MissDiscAdvCount: Number of missing FIP discovery advertisement
246 */ 249 */
247struct fcoe_dev_stats { 250struct fc_stats {
248 u64 SecondsSinceLastReset; 251 u64 SecondsSinceLastReset;
249 u64 TxFrames; 252 u64 TxFrames;
250 u64 TxWords; 253 u64 TxWords;
@@ -252,6 +255,9 @@ struct fcoe_dev_stats {
252 u64 RxWords; 255 u64 RxWords;
253 u64 ErrorFrames; 256 u64 ErrorFrames;
254 u64 DumpedFrames; 257 u64 DumpedFrames;
258 u64 FcpPktAllocFails;
259 u64 FcpPktAborts;
260 u64 FcpFrameAllocFails;
255 u64 LinkFailureCount; 261 u64 LinkFailureCount;
256 u64 LossOfSignalCount; 262 u64 LossOfSignalCount;
257 u64 InvalidTxWordCount; 263 u64 InvalidTxWordCount;
@@ -510,7 +516,7 @@ struct libfc_function_template {
510 int (*ddp_done)(struct fc_lport *, u16); 516 int (*ddp_done)(struct fc_lport *, u16);
511 /* 517 /*
512 * Sets up the DDP context for a given exchange id on the given 518 * Sets up the DDP context for a given exchange id on the given
513 * scatterlist if LLD supports DDP for FCoE target. 519 * scatterlist if LLD supports DDP for target.
514 * 520 *
515 * STATUS: OPTIONAL 521 * STATUS: OPTIONAL
516 */ 522 */
@@ -817,8 +823,7 @@ enum fc_lport_event {
817 * @state: Identifies the state 823 * @state: Identifies the state
818 * @boot_time: Timestamp indicating when the local port came online 824 * @boot_time: Timestamp indicating when the local port came online
819 * @host_stats: SCSI host statistics 825 * @host_stats: SCSI host statistics
820 * @dev_stats: FCoE device stats (TODO: libfc should not be 826 * @stats: FC local port stats (TODO separate libfc LLD stats)
821 * FCoE aware)
822 * @retry_count: Number of retries in the current state 827 * @retry_count: Number of retries in the current state
823 * @port_id: FC Port ID 828 * @port_id: FC Port ID
824 * @wwpn: World Wide Port Name 829 * @wwpn: World Wide Port Name
@@ -867,7 +872,7 @@ struct fc_lport {
867 enum fc_lport_state state; 872 enum fc_lport_state state;
868 unsigned long boot_time; 873 unsigned long boot_time;
869 struct fc_host_statistics host_stats; 874 struct fc_host_statistics host_stats;
870 struct fcoe_dev_stats __percpu *dev_stats; 875 struct fc_stats __percpu *stats;
871 u8 retry_count; 876 u8 retry_count;
872 877
873 /* Fabric information */ 878 /* Fabric information */
@@ -980,8 +985,8 @@ static inline void fc_lport_state_enter(struct fc_lport *lport,
980 */ 985 */
981static inline int fc_lport_init_stats(struct fc_lport *lport) 986static inline int fc_lport_init_stats(struct fc_lport *lport)
982{ 987{
983 lport->dev_stats = alloc_percpu(struct fcoe_dev_stats); 988 lport->stats = alloc_percpu(struct fc_stats);
984 if (!lport->dev_stats) 989 if (!lport->stats)
985 return -ENOMEM; 990 return -ENOMEM;
986 return 0; 991 return 0;
987} 992}
@@ -992,7 +997,7 @@ static inline int fc_lport_init_stats(struct fc_lport *lport)
992 */ 997 */
993static inline void fc_lport_free_stats(struct fc_lport *lport) 998static inline void fc_lport_free_stats(struct fc_lport *lport)
994{ 999{
995 free_percpu(lport->dev_stats); 1000 free_percpu(lport->stats);
996} 1001}
997 1002
998/** 1003/**
@@ -1116,6 +1121,7 @@ void fc_fill_hdr(struct fc_frame *, const struct fc_frame *,
1116 * EXCHANGE MANAGER LAYER 1121 * EXCHANGE MANAGER LAYER
1117 *****************************/ 1122 *****************************/
1118int fc_exch_init(struct fc_lport *); 1123int fc_exch_init(struct fc_lport *);
1124void fc_exch_update_stats(struct fc_lport *lport);
1119struct fc_exch_mgr_anchor *fc_exch_mgr_add(struct fc_lport *, 1125struct fc_exch_mgr_anchor *fc_exch_mgr_add(struct fc_lport *,
1120 struct fc_exch_mgr *, 1126 struct fc_exch_mgr *,
1121 bool (*match)(struct fc_frame *)); 1127 bool (*match)(struct fc_frame *));
diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h
index f4f1c96dca72..ae33706afeb0 100644
--- a/include/scsi/libsas.h
+++ b/include/scsi/libsas.h
@@ -163,20 +163,29 @@ enum ata_command_set {
163 ATAPI_COMMAND_SET = 1, 163 ATAPI_COMMAND_SET = 1,
164}; 164};
165 165
166#define ATA_RESP_FIS_SIZE 24
167
166struct sata_device { 168struct sata_device {
167 enum ata_command_set command_set; 169 enum ata_command_set command_set;
168 struct smp_resp rps_resp; /* report_phy_sata_resp */ 170 struct smp_resp rps_resp; /* report_phy_sata_resp */
169 u8 port_no; /* port number, if this is a PM (Port) */ 171 u8 port_no; /* port number, if this is a PM (Port) */
170 struct list_head children; /* PM Ports if this is a PM */
171 172
172 struct ata_port *ap; 173 struct ata_port *ap;
173 struct ata_host ata_host; 174 struct ata_host ata_host;
174 struct ata_taskfile tf; 175 u8 fis[ATA_RESP_FIS_SIZE];
176};
177
178struct ssp_device {
179 struct list_head eh_list_node; /* pending a user requested eh action */
180 struct scsi_lun reset_lun;
175}; 181};
176 182
177enum { 183enum {
178 SAS_DEV_GONE, 184 SAS_DEV_GONE,
179 SAS_DEV_DESTROY, 185 SAS_DEV_DESTROY,
186 SAS_DEV_EH_PENDING,
187 SAS_DEV_LU_RESET,
188 SAS_DEV_RESET,
180}; 189};
181 190
182struct domain_device { 191struct domain_device {
@@ -210,6 +219,7 @@ struct domain_device {
210 union { 219 union {
211 struct expander_device ex_dev; 220 struct expander_device ex_dev;
212 struct sata_device sata_dev; /* STP & directly attached */ 221 struct sata_device sata_dev; /* STP & directly attached */
222 struct ssp_device ssp_dev;
213 }; 223 };
214 224
215 void *lldd_dev; 225 void *lldd_dev;
@@ -384,7 +394,10 @@ struct sas_ha_struct {
384 struct list_head defer_q; /* work queued while draining */ 394 struct list_head defer_q; /* work queued while draining */
385 struct mutex drain_mutex; 395 struct mutex drain_mutex;
386 unsigned long state; 396 unsigned long state;
387 spinlock_t state_lock; 397 spinlock_t lock;
398 int eh_active;
399 wait_queue_head_t eh_wait_q;
400 struct list_head eh_dev_q;
388 401
389 struct mutex disco_mutex; 402 struct mutex disco_mutex;
390 403
@@ -537,7 +550,7 @@ enum exec_status {
537 */ 550 */
538struct ata_task_resp { 551struct ata_task_resp {
539 u16 frame_len; 552 u16 frame_len;
540 u8 ending_fis[24]; /* dev to host or data-in */ 553 u8 ending_fis[ATA_RESP_FIS_SIZE]; /* dev to host or data-in */
541}; 554};
542 555
543#define SAS_STATUS_BUF_SIZE 96 556#define SAS_STATUS_BUF_SIZE 96
@@ -600,10 +613,6 @@ struct sas_task {
600 613
601 enum sas_protocol task_proto; 614 enum sas_protocol task_proto;
602 615
603 /* Used by the discovery code. */
604 struct timer_list timer;
605 struct completion completion;
606
607 union { 616 union {
608 struct sas_ata_task ata_task; 617 struct sas_ata_task ata_task;
609 struct sas_smp_task smp_task; 618 struct sas_smp_task smp_task;
@@ -620,8 +629,15 @@ struct sas_task {
620 629
621 void *lldd_task; /* for use by LLDDs */ 630 void *lldd_task; /* for use by LLDDs */
622 void *uldd_task; 631 void *uldd_task;
632 struct sas_task_slow *slow_task;
633};
623 634
624 struct work_struct abort_work; 635struct sas_task_slow {
636 /* standard/extra infrastructure for slow path commands (SMP and
637 * internal lldd commands
638 */
639 struct timer_list timer;
640 struct completion completion;
625}; 641};
626 642
627#define SAS_TASK_STATE_PENDING 1 643#define SAS_TASK_STATE_PENDING 1
@@ -631,6 +647,7 @@ struct sas_task {
631#define SAS_TASK_AT_INITIATOR 16 647#define SAS_TASK_AT_INITIATOR 16
632 648
633extern struct sas_task *sas_alloc_task(gfp_t flags); 649extern struct sas_task *sas_alloc_task(gfp_t flags);
650extern struct sas_task *sas_alloc_slow_task(gfp_t flags);
634extern void sas_free_task(struct sas_task *task); 651extern void sas_free_task(struct sas_task *task);
635 652
636struct sas_domain_function_template { 653struct sas_domain_function_template {
@@ -706,6 +723,7 @@ void sas_unregister_dev(struct asd_sas_port *port, struct domain_device *);
706void sas_init_dev(struct domain_device *); 723void sas_init_dev(struct domain_device *);
707 724
708void sas_task_abort(struct sas_task *); 725void sas_task_abort(struct sas_task *);
726int sas_eh_abort_handler(struct scsi_cmnd *cmd);
709int sas_eh_device_reset_handler(struct scsi_cmnd *cmd); 727int sas_eh_device_reset_handler(struct scsi_cmnd *cmd);
710int sas_eh_bus_reset_handler(struct scsi_cmnd *cmd); 728int sas_eh_bus_reset_handler(struct scsi_cmnd *cmd);
711 729
diff --git a/include/scsi/sas_ata.h b/include/scsi/sas_ata.h
index 77670e823ed8..2dfbdaa0b34a 100644
--- a/include/scsi/sas_ata.h
+++ b/include/scsi/sas_ata.h
@@ -45,6 +45,7 @@ void sas_ata_eh(struct Scsi_Host *shost, struct list_head *work_q,
45void sas_ata_schedule_reset(struct domain_device *dev); 45void sas_ata_schedule_reset(struct domain_device *dev);
46void sas_ata_wait_eh(struct domain_device *dev); 46void sas_ata_wait_eh(struct domain_device *dev);
47void sas_probe_sata(struct asd_sas_port *port); 47void sas_probe_sata(struct asd_sas_port *port);
48void sas_ata_end_eh(struct ata_port *ap);
48#else 49#else
49 50
50 51
@@ -85,6 +86,10 @@ static inline int sas_get_ata_info(struct domain_device *dev, struct ex_phy *phy
85{ 86{
86 return 0; 87 return 0;
87} 88}
89
90static inline void sas_ata_end_eh(struct ata_port *ap)
91{
92}
88#endif 93#endif
89 94
90#endif /* _SAS_ATA_H_ */ 95#endif /* _SAS_ATA_H_ */
diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h
index f34a5a87af38..66216c1acb48 100644
--- a/include/scsi/scsi.h
+++ b/include/scsi/scsi.h
@@ -161,6 +161,8 @@ struct scsi_cmnd;
161#define MI_REPORT_PRIORITY 0x0e 161#define MI_REPORT_PRIORITY 0x0e
162#define MI_REPORT_TIMESTAMP 0x0f 162#define MI_REPORT_TIMESTAMP 0x0f
163#define MI_MANAGEMENT_PROTOCOL_IN 0x10 163#define MI_MANAGEMENT_PROTOCOL_IN 0x10
164/* value for MI_REPORT_TARGET_PGS ext header */
165#define MI_EXT_HDR_PARAM_FMT 0x20
164/* values for maintenance out */ 166/* values for maintenance out */
165#define MO_SET_IDENTIFYING_INFORMATION 0x06 167#define MO_SET_IDENTIFYING_INFORMATION 0x06
166#define MO_SET_TARGET_PGS 0x0a 168#define MO_SET_TARGET_PGS 0x0a
@@ -214,6 +216,16 @@ scsi_command_size(const unsigned char *cmnd)
214 scsi_varlen_cdb_length(cmnd) : COMMAND_SIZE(cmnd[0]); 216 scsi_varlen_cdb_length(cmnd) : COMMAND_SIZE(cmnd[0]);
215} 217}
216 218
219#ifdef CONFIG_ACPI
220struct acpi_bus_type;
221
222extern int
223scsi_register_acpi_bus_type(struct acpi_bus_type *bus);
224
225extern void
226scsi_unregister_acpi_bus_type(struct acpi_bus_type *bus);
227#endif
228
217/* 229/*
218 * SCSI Architecture Model (SAM) Status codes. Taken from SAM-3 draft 230 * SCSI Architecture Model (SAM) Status codes. Taken from SAM-3 draft
219 * T10/1561-D Revision 4 Draft dated 7th November 2002. 231 * T10/1561-D Revision 4 Draft dated 7th November 2002.
diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h
index 1e1198546c72..ac06cc595890 100644
--- a/include/scsi/scsi_cmnd.h
+++ b/include/scsi/scsi_cmnd.h
@@ -134,10 +134,16 @@ struct scsi_cmnd {
134 134
135static inline struct scsi_driver *scsi_cmd_to_driver(struct scsi_cmnd *cmd) 135static inline struct scsi_driver *scsi_cmd_to_driver(struct scsi_cmnd *cmd)
136{ 136{
137 struct scsi_driver **sdp;
138
137 if (!cmd->request->rq_disk) 139 if (!cmd->request->rq_disk)
138 return NULL; 140 return NULL;
139 141
140 return *(struct scsi_driver **)cmd->request->rq_disk->private_data; 142 sdp = (struct scsi_driver **)cmd->request->rq_disk->private_data;
143 if (!sdp)
144 return NULL;
145
146 return *sdp;
141} 147}
142 148
143extern struct scsi_cmnd *scsi_get_command(struct scsi_device *, gfp_t); 149extern struct scsi_cmnd *scsi_get_command(struct scsi_device *, gfp_t);
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
index 6efb2e1416e0..9895f69294fc 100644
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
@@ -42,6 +42,7 @@ enum scsi_device_state {
42 * originate in the mid-layer) */ 42 * originate in the mid-layer) */
43 SDEV_OFFLINE, /* Device offlined (by error handling or 43 SDEV_OFFLINE, /* Device offlined (by error handling or
44 * user request */ 44 * user request */
45 SDEV_TRANSPORT_OFFLINE, /* Offlined by transport class error handler */
45 SDEV_BLOCK, /* Device blocked by scsi lld. No 46 SDEV_BLOCK, /* Device blocked by scsi lld. No
46 * scsi commands from user or midlayer 47 * scsi commands from user or midlayer
47 * should be issued to the scsi 48 * should be issued to the scsi
@@ -151,7 +152,10 @@ struct scsi_device {
151 SD_LAST_BUGGY_SECTORS */ 152 SD_LAST_BUGGY_SECTORS */
152 unsigned no_read_disc_info:1; /* Avoid READ_DISC_INFO cmds */ 153 unsigned no_read_disc_info:1; /* Avoid READ_DISC_INFO cmds */
153 unsigned no_read_capacity_16:1; /* Avoid READ_CAPACITY_16 cmds */ 154 unsigned no_read_capacity_16:1; /* Avoid READ_CAPACITY_16 cmds */
155 unsigned try_rc_10_first:1; /* Try READ_CAPACACITY_10 first */
154 unsigned is_visible:1; /* is the device visible in sysfs */ 156 unsigned is_visible:1; /* is the device visible in sysfs */
157 unsigned can_power_off:1; /* Device supports runtime power off */
158 unsigned wce_default_on:1; /* Cache is ON by default */
155 159
156 DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported events */ 160 DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported events */
157 struct list_head event_list; /* asserted events */ 161 struct list_head event_list; /* asserted events */
@@ -372,7 +376,7 @@ extern void scsi_scan_target(struct device *parent, unsigned int channel,
372 unsigned int id, unsigned int lun, int rescan); 376 unsigned int id, unsigned int lun, int rescan);
373extern void scsi_target_reap(struct scsi_target *); 377extern void scsi_target_reap(struct scsi_target *);
374extern void scsi_target_block(struct device *); 378extern void scsi_target_block(struct device *);
375extern void scsi_target_unblock(struct device *); 379extern void scsi_target_unblock(struct device *, enum scsi_device_state);
376extern void scsi_remove_target(struct device *); 380extern void scsi_remove_target(struct device *);
377extern void int_to_scsilun(unsigned int, struct scsi_lun *); 381extern void int_to_scsilun(unsigned int, struct scsi_lun *);
378extern int scsilun_to_int(struct scsi_lun *); 382extern int scsilun_to_int(struct scsi_lun *);
@@ -420,6 +424,7 @@ static inline unsigned int sdev_id(struct scsi_device *sdev)
420static inline int scsi_device_online(struct scsi_device *sdev) 424static inline int scsi_device_online(struct scsi_device *sdev)
421{ 425{
422 return (sdev->sdev_state != SDEV_OFFLINE && 426 return (sdev->sdev_state != SDEV_OFFLINE &&
427 sdev->sdev_state != SDEV_TRANSPORT_OFFLINE &&
423 sdev->sdev_state != SDEV_DEL); 428 sdev->sdev_state != SDEV_DEL);
424} 429}
425static inline int scsi_device_blocked(struct scsi_device *sdev) 430static inline int scsi_device_blocked(struct scsi_device *sdev)
diff --git a/include/scsi/scsi_dh.h b/include/scsi/scsi_dh.h
index e3f2db212ddc..620c723ee8ed 100644
--- a/include/scsi/scsi_dh.h
+++ b/include/scsi/scsi_dh.h
@@ -60,6 +60,7 @@ extern int scsi_dh_activate(struct request_queue *, activate_complete, void *);
60extern int scsi_dh_handler_exist(const char *); 60extern int scsi_dh_handler_exist(const char *);
61extern int scsi_dh_attach(struct request_queue *, const char *); 61extern int scsi_dh_attach(struct request_queue *, const char *);
62extern void scsi_dh_detach(struct request_queue *); 62extern void scsi_dh_detach(struct request_queue *);
63extern const char *scsi_dh_attached_handler_name(struct request_queue *, gfp_t);
63extern int scsi_dh_set_params(struct request_queue *, const char *); 64extern int scsi_dh_set_params(struct request_queue *, const char *);
64#else 65#else
65static inline int scsi_dh_activate(struct request_queue *req, 66static inline int scsi_dh_activate(struct request_queue *req,
@@ -80,6 +81,11 @@ static inline void scsi_dh_detach(struct request_queue *q)
80{ 81{
81 return; 82 return;
82} 83}
84static inline const char *scsi_dh_attached_handler_name(struct request_queue *q,
85 gfp_t gfp)
86{
87 return NULL;
88}
83static inline int scsi_dh_set_params(struct request_queue *req, const char *params) 89static inline int scsi_dh_set_params(struct request_queue *req, const char *params)
84{ 90{
85 return -SCSI_DH_NOSYS; 91 return -SCSI_DH_NOSYS;
diff --git a/include/scsi/scsi_scan.h b/include/scsi/scsi_scan.h
deleted file mode 100644
index 78898889243d..000000000000
--- a/include/scsi/scsi_scan.h
+++ /dev/null
@@ -1,11 +0,0 @@
1#ifndef _SCSI_SCSI_SCAN_H
2#define _SCSI_SCSI_SCAN_H
3
4#ifdef CONFIG_SCSI
5/* drivers/scsi/scsi_scan.c */
6extern int scsi_complete_async_scans(void);
7#else
8static inline int scsi_complete_async_scans(void) { return 0; }
9#endif
10
11#endif /* _SCSI_SCSI_SCAN_H */
diff --git a/include/scsi/scsi_transport_fc.h b/include/scsi/scsi_transport_fc.h
index 719faf1863ad..b797e8fad669 100644
--- a/include/scsi/scsi_transport_fc.h
+++ b/include/scsi/scsi_transport_fc.h
@@ -426,6 +426,18 @@ struct fc_host_statistics {
426 u64 fcp_control_requests; 426 u64 fcp_control_requests;
427 u64 fcp_input_megabytes; 427 u64 fcp_input_megabytes;
428 u64 fcp_output_megabytes; 428 u64 fcp_output_megabytes;
429 u64 fcp_packet_alloc_failures; /* fcp packet allocation failures */
430 u64 fcp_packet_aborts; /* fcp packet aborted */
431 u64 fcp_frame_alloc_failures; /* fcp frame allocation failures */
432
433 /* fc exches statistics */
434 u64 fc_no_free_exch; /* no free exch memory */
435 u64 fc_no_free_exch_xid; /* no free exch id */
436 u64 fc_xid_not_found; /* exch not found for a response */
437 u64 fc_xid_busy; /* exch exist for new a request */
438 u64 fc_seq_not_found; /* seq is not found for exchange */
439 u64 fc_non_bls_resp; /* a non BLS response frame with
440 a sequence responder in new exch */
429}; 441};
430 442
431 443
diff --git a/include/sound/cs46xx.h b/include/sound/cs46xx.h
deleted file mode 100644
index e3005a674a24..000000000000
--- a/include/sound/cs46xx.h
+++ /dev/null
@@ -1,1745 +0,0 @@
1#ifndef __SOUND_CS46XX_H
2#define __SOUND_CS46XX_H
3
4/*
5 * Copyright (c) by Jaroslav Kysela <perex@perex.cz>,
6 * Cirrus Logic, Inc.
7 * Definitions for Cirrus Logic CS46xx chips
8 *
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 *
24 */
25
26#include "pcm.h"
27#include "pcm-indirect.h"
28#include "rawmidi.h"
29#include "ac97_codec.h"
30#include "cs46xx_dsp_spos.h"
31
32/*
33 * Direct registers
34 */
35
36/*
37 * The following define the offsets of the registers accessed via base address
38 * register zero on the CS46xx part.
39 */
40#define BA0_HISR 0x00000000
41#define BA0_HSR0 0x00000004
42#define BA0_HICR 0x00000008
43#define BA0_DMSR 0x00000100
44#define BA0_HSAR 0x00000110
45#define BA0_HDAR 0x00000114
46#define BA0_HDMR 0x00000118
47#define BA0_HDCR 0x0000011C
48#define BA0_PFMC 0x00000200
49#define BA0_PFCV1 0x00000204
50#define BA0_PFCV2 0x00000208
51#define BA0_PCICFG00 0x00000300
52#define BA0_PCICFG04 0x00000304
53#define BA0_PCICFG08 0x00000308
54#define BA0_PCICFG0C 0x0000030C
55#define BA0_PCICFG10 0x00000310
56#define BA0_PCICFG14 0x00000314
57#define BA0_PCICFG18 0x00000318
58#define BA0_PCICFG1C 0x0000031C
59#define BA0_PCICFG20 0x00000320
60#define BA0_PCICFG24 0x00000324
61#define BA0_PCICFG28 0x00000328
62#define BA0_PCICFG2C 0x0000032C
63#define BA0_PCICFG30 0x00000330
64#define BA0_PCICFG34 0x00000334
65#define BA0_PCICFG38 0x00000338
66#define BA0_PCICFG3C 0x0000033C
67#define BA0_CLKCR1 0x00000400
68#define BA0_CLKCR2 0x00000404
69#define BA0_PLLM 0x00000408
70#define BA0_PLLCC 0x0000040C
71#define BA0_FRR 0x00000410
72#define BA0_CFL1 0x00000414
73#define BA0_CFL2 0x00000418
74#define BA0_SERMC1 0x00000420
75#define BA0_SERMC2 0x00000424
76#define BA0_SERC1 0x00000428
77#define BA0_SERC2 0x0000042C
78#define BA0_SERC3 0x00000430
79#define BA0_SERC4 0x00000434
80#define BA0_SERC5 0x00000438
81#define BA0_SERBSP 0x0000043C
82#define BA0_SERBST 0x00000440
83#define BA0_SERBCM 0x00000444
84#define BA0_SERBAD 0x00000448
85#define BA0_SERBCF 0x0000044C
86#define BA0_SERBWP 0x00000450
87#define BA0_SERBRP 0x00000454
88#ifndef NO_CS4612
89#define BA0_ASER_FADDR 0x00000458
90#endif
91#define BA0_ACCTL 0x00000460
92#define BA0_ACSTS 0x00000464
93#define BA0_ACOSV 0x00000468
94#define BA0_ACCAD 0x0000046C
95#define BA0_ACCDA 0x00000470
96#define BA0_ACISV 0x00000474
97#define BA0_ACSAD 0x00000478
98#define BA0_ACSDA 0x0000047C
99#define BA0_JSPT 0x00000480
100#define BA0_JSCTL 0x00000484
101#define BA0_JSC1 0x00000488
102#define BA0_JSC2 0x0000048C
103#define BA0_MIDCR 0x00000490
104#define BA0_MIDSR 0x00000494
105#define BA0_MIDWP 0x00000498
106#define BA0_MIDRP 0x0000049C
107#define BA0_JSIO 0x000004A0
108#ifndef NO_CS4612
109#define BA0_ASER_MASTER 0x000004A4
110#endif
111#define BA0_CFGI 0x000004B0
112#define BA0_SSVID 0x000004B4
113#define BA0_GPIOR 0x000004B8
114#ifndef NO_CS4612
115#define BA0_EGPIODR 0x000004BC
116#define BA0_EGPIOPTR 0x000004C0
117#define BA0_EGPIOTR 0x000004C4
118#define BA0_EGPIOWR 0x000004C8
119#define BA0_EGPIOSR 0x000004CC
120#define BA0_SERC6 0x000004D0
121#define BA0_SERC7 0x000004D4
122#define BA0_SERACC 0x000004D8
123#define BA0_ACCTL2 0x000004E0
124#define BA0_ACSTS2 0x000004E4
125#define BA0_ACOSV2 0x000004E8
126#define BA0_ACCAD2 0x000004EC
127#define BA0_ACCDA2 0x000004F0
128#define BA0_ACISV2 0x000004F4
129#define BA0_ACSAD2 0x000004F8
130#define BA0_ACSDA2 0x000004FC
131#define BA0_IOTAC0 0x00000500
132#define BA0_IOTAC1 0x00000504
133#define BA0_IOTAC2 0x00000508
134#define BA0_IOTAC3 0x0000050C
135#define BA0_IOTAC4 0x00000510
136#define BA0_IOTAC5 0x00000514
137#define BA0_IOTAC6 0x00000518
138#define BA0_IOTAC7 0x0000051C
139#define BA0_IOTAC8 0x00000520
140#define BA0_IOTAC9 0x00000524
141#define BA0_IOTAC10 0x00000528
142#define BA0_IOTAC11 0x0000052C
143#define BA0_IOTFR0 0x00000540
144#define BA0_IOTFR1 0x00000544
145#define BA0_IOTFR2 0x00000548
146#define BA0_IOTFR3 0x0000054C
147#define BA0_IOTFR4 0x00000550
148#define BA0_IOTFR5 0x00000554
149#define BA0_IOTFR6 0x00000558
150#define BA0_IOTFR7 0x0000055C
151#define BA0_IOTFIFO 0x00000580
152#define BA0_IOTRRD 0x00000584
153#define BA0_IOTFP 0x00000588
154#define BA0_IOTCR 0x0000058C
155#define BA0_DPCID 0x00000590
156#define BA0_DPCIA 0x00000594
157#define BA0_DPCIC 0x00000598
158#define BA0_PCPCIR 0x00000600
159#define BA0_PCPCIG 0x00000604
160#define BA0_PCPCIEN 0x00000608
161#define BA0_EPCIPMC 0x00000610
162#endif
163
164/*
165 * The following define the offsets of the registers and memories accessed via
166 * base address register one on the CS46xx part.
167 */
168#define BA1_SP_DMEM0 0x00000000
169#define BA1_SP_DMEM1 0x00010000
170#define BA1_SP_PMEM 0x00020000
171#define BA1_SP_REG 0x00030000
172#define BA1_SPCR 0x00030000
173#define BA1_DREG 0x00030004
174#define BA1_DSRWP 0x00030008
175#define BA1_TWPR 0x0003000C
176#define BA1_SPWR 0x00030010
177#define BA1_SPIR 0x00030014
178#define BA1_FGR1 0x00030020
179#define BA1_SPCS 0x00030028
180#define BA1_SDSR 0x0003002C
181#define BA1_FRMT 0x00030030
182#define BA1_FRCC 0x00030034
183#define BA1_FRSC 0x00030038
184#define BA1_OMNI_MEM 0x000E0000
185
186
187/*
188 * The following defines are for the flags in the host interrupt status
189 * register.
190 */
191#define HISR_VC_MASK 0x0000FFFF
192#define HISR_VC0 0x00000001
193#define HISR_VC1 0x00000002
194#define HISR_VC2 0x00000004
195#define HISR_VC3 0x00000008
196#define HISR_VC4 0x00000010
197#define HISR_VC5 0x00000020
198#define HISR_VC6 0x00000040
199#define HISR_VC7 0x00000080
200#define HISR_VC8 0x00000100
201#define HISR_VC9 0x00000200
202#define HISR_VC10 0x00000400
203#define HISR_VC11 0x00000800
204#define HISR_VC12 0x00001000
205#define HISR_VC13 0x00002000
206#define HISR_VC14 0x00004000
207#define HISR_VC15 0x00008000
208#define HISR_INT0 0x00010000
209#define HISR_INT1 0x00020000
210#define HISR_DMAI 0x00040000
211#define HISR_FROVR 0x00080000
212#define HISR_MIDI 0x00100000
213#ifdef NO_CS4612
214#define HISR_RESERVED 0x0FE00000
215#else
216#define HISR_SBINT 0x00200000
217#define HISR_RESERVED 0x0FC00000
218#endif
219#define HISR_H0P 0x40000000
220#define HISR_INTENA 0x80000000
221
222/*
223 * The following defines are for the flags in the host signal register 0.
224 */
225#define HSR0_VC_MASK 0xFFFFFFFF
226#define HSR0_VC16 0x00000001
227#define HSR0_VC17 0x00000002
228#define HSR0_VC18 0x00000004
229#define HSR0_VC19 0x00000008
230#define HSR0_VC20 0x00000010
231#define HSR0_VC21 0x00000020
232#define HSR0_VC22 0x00000040
233#define HSR0_VC23 0x00000080
234#define HSR0_VC24 0x00000100
235#define HSR0_VC25 0x00000200
236#define HSR0_VC26 0x00000400
237#define HSR0_VC27 0x00000800
238#define HSR0_VC28 0x00001000
239#define HSR0_VC29 0x00002000
240#define HSR0_VC30 0x00004000
241#define HSR0_VC31 0x00008000
242#define HSR0_VC32 0x00010000
243#define HSR0_VC33 0x00020000
244#define HSR0_VC34 0x00040000
245#define HSR0_VC35 0x00080000
246#define HSR0_VC36 0x00100000
247#define HSR0_VC37 0x00200000
248#define HSR0_VC38 0x00400000
249#define HSR0_VC39 0x00800000
250#define HSR0_VC40 0x01000000
251#define HSR0_VC41 0x02000000
252#define HSR0_VC42 0x04000000
253#define HSR0_VC43 0x08000000
254#define HSR0_VC44 0x10000000
255#define HSR0_VC45 0x20000000
256#define HSR0_VC46 0x40000000
257#define HSR0_VC47 0x80000000
258
259/*
260 * The following defines are for the flags in the host interrupt control
261 * register.
262 */
263#define HICR_IEV 0x00000001
264#define HICR_CHGM 0x00000002
265
266/*
267 * The following defines are for the flags in the DMA status register.
268 */
269#define DMSR_HP 0x00000001
270#define DMSR_HR 0x00000002
271#define DMSR_SP 0x00000004
272#define DMSR_SR 0x00000008
273
274/*
275 * The following defines are for the flags in the host DMA source address
276 * register.
277 */
278#define HSAR_HOST_ADDR_MASK 0xFFFFFFFF
279#define HSAR_DSP_ADDR_MASK 0x0000FFFF
280#define HSAR_MEMID_MASK 0x000F0000
281#define HSAR_MEMID_SP_DMEM0 0x00000000
282#define HSAR_MEMID_SP_DMEM1 0x00010000
283#define HSAR_MEMID_SP_PMEM 0x00020000
284#define HSAR_MEMID_SP_DEBUG 0x00030000
285#define HSAR_MEMID_OMNI_MEM 0x000E0000
286#define HSAR_END 0x40000000
287#define HSAR_ERR 0x80000000
288
289/*
290 * The following defines are for the flags in the host DMA destination address
291 * register.
292 */
293#define HDAR_HOST_ADDR_MASK 0xFFFFFFFF
294#define HDAR_DSP_ADDR_MASK 0x0000FFFF
295#define HDAR_MEMID_MASK 0x000F0000
296#define HDAR_MEMID_SP_DMEM0 0x00000000
297#define HDAR_MEMID_SP_DMEM1 0x00010000
298#define HDAR_MEMID_SP_PMEM 0x00020000
299#define HDAR_MEMID_SP_DEBUG 0x00030000
300#define HDAR_MEMID_OMNI_MEM 0x000E0000
301#define HDAR_END 0x40000000
302#define HDAR_ERR 0x80000000
303
304/*
305 * The following defines are for the flags in the host DMA control register.
306 */
307#define HDMR_AC_MASK 0x0000F000
308#define HDMR_AC_8_16 0x00001000
309#define HDMR_AC_M_S 0x00002000
310#define HDMR_AC_B_L 0x00004000
311#define HDMR_AC_S_U 0x00008000
312
313/*
314 * The following defines are for the flags in the host DMA control register.
315 */
316#define HDCR_COUNT_MASK 0x000003FF
317#define HDCR_DONE 0x00004000
318#define HDCR_OPT 0x00008000
319#define HDCR_WBD 0x00400000
320#define HDCR_WBS 0x00800000
321#define HDCR_DMS_MASK 0x07000000
322#define HDCR_DMS_LINEAR 0x00000000
323#define HDCR_DMS_16_DWORDS 0x01000000
324#define HDCR_DMS_32_DWORDS 0x02000000
325#define HDCR_DMS_64_DWORDS 0x03000000
326#define HDCR_DMS_128_DWORDS 0x04000000
327#define HDCR_DMS_256_DWORDS 0x05000000
328#define HDCR_DMS_512_DWORDS 0x06000000
329#define HDCR_DMS_1024_DWORDS 0x07000000
330#define HDCR_DH 0x08000000
331#define HDCR_SMS_MASK 0x70000000
332#define HDCR_SMS_LINEAR 0x00000000
333#define HDCR_SMS_16_DWORDS 0x10000000
334#define HDCR_SMS_32_DWORDS 0x20000000
335#define HDCR_SMS_64_DWORDS 0x30000000
336#define HDCR_SMS_128_DWORDS 0x40000000
337#define HDCR_SMS_256_DWORDS 0x50000000
338#define HDCR_SMS_512_DWORDS 0x60000000
339#define HDCR_SMS_1024_DWORDS 0x70000000
340#define HDCR_SH 0x80000000
341#define HDCR_COUNT_SHIFT 0
342
343/*
344 * The following defines are for the flags in the performance monitor control
345 * register.
346 */
347#define PFMC_C1SS_MASK 0x0000001F
348#define PFMC_C1EV 0x00000020
349#define PFMC_C1RS 0x00008000
350#define PFMC_C2SS_MASK 0x001F0000
351#define PFMC_C2EV 0x00200000
352#define PFMC_C2RS 0x80000000
353#define PFMC_C1SS_SHIFT 0
354#define PFMC_C2SS_SHIFT 16
355#define PFMC_BUS_GRANT 0
356#define PFMC_GRANT_AFTER_REQ 1
357#define PFMC_TRANSACTION 2
358#define PFMC_DWORD_TRANSFER 3
359#define PFMC_SLAVE_READ 4
360#define PFMC_SLAVE_WRITE 5
361#define PFMC_PREEMPTION 6
362#define PFMC_DISCONNECT_RETRY 7
363#define PFMC_INTERRUPT 8
364#define PFMC_BUS_OWNERSHIP 9
365#define PFMC_TRANSACTION_LAG 10
366#define PFMC_PCI_CLOCK 11
367#define PFMC_SERIAL_CLOCK 12
368#define PFMC_SP_CLOCK 13
369
370/*
371 * The following defines are for the flags in the performance counter value 1
372 * register.
373 */
374#define PFCV1_PC1V_MASK 0xFFFFFFFF
375#define PFCV1_PC1V_SHIFT 0
376
377/*
378 * The following defines are for the flags in the performance counter value 2
379 * register.
380 */
381#define PFCV2_PC2V_MASK 0xFFFFFFFF
382#define PFCV2_PC2V_SHIFT 0
383
384/*
385 * The following defines are for the flags in the clock control register 1.
386 */
387#define CLKCR1_OSCS 0x00000001
388#define CLKCR1_OSCP 0x00000002
389#define CLKCR1_PLLSS_MASK 0x0000000C
390#define CLKCR1_PLLSS_SERIAL 0x00000000
391#define CLKCR1_PLLSS_CRYSTAL 0x00000004
392#define CLKCR1_PLLSS_PCI 0x00000008
393#define CLKCR1_PLLSS_RESERVED 0x0000000C
394#define CLKCR1_PLLP 0x00000010
395#define CLKCR1_SWCE 0x00000020
396#define CLKCR1_PLLOS 0x00000040
397
398/*
399 * The following defines are for the flags in the clock control register 2.
400 */
401#define CLKCR2_PDIVS_MASK 0x0000000F
402#define CLKCR2_PDIVS_1 0x00000001
403#define CLKCR2_PDIVS_2 0x00000002
404#define CLKCR2_PDIVS_4 0x00000004
405#define CLKCR2_PDIVS_7 0x00000007
406#define CLKCR2_PDIVS_8 0x00000008
407#define CLKCR2_PDIVS_16 0x00000000
408
409/*
410 * The following defines are for the flags in the PLL multiplier register.
411 */
412#define PLLM_MASK 0x000000FF
413#define PLLM_SHIFT 0
414
415/*
416 * The following defines are for the flags in the PLL capacitor coefficient
417 * register.
418 */
419#define PLLCC_CDR_MASK 0x00000007
420#ifndef NO_CS4610
421#define PLLCC_CDR_240_350_MHZ 0x00000000
422#define PLLCC_CDR_184_265_MHZ 0x00000001
423#define PLLCC_CDR_144_205_MHZ 0x00000002
424#define PLLCC_CDR_111_160_MHZ 0x00000003
425#define PLLCC_CDR_87_123_MHZ 0x00000004
426#define PLLCC_CDR_67_96_MHZ 0x00000005
427#define PLLCC_CDR_52_74_MHZ 0x00000006
428#define PLLCC_CDR_45_58_MHZ 0x00000007
429#endif
430#ifndef NO_CS4612
431#define PLLCC_CDR_271_398_MHZ 0x00000000
432#define PLLCC_CDR_227_330_MHZ 0x00000001
433#define PLLCC_CDR_167_239_MHZ 0x00000002
434#define PLLCC_CDR_150_215_MHZ 0x00000003
435#define PLLCC_CDR_107_154_MHZ 0x00000004
436#define PLLCC_CDR_98_140_MHZ 0x00000005
437#define PLLCC_CDR_73_104_MHZ 0x00000006
438#define PLLCC_CDR_63_90_MHZ 0x00000007
439#endif
440#define PLLCC_LPF_MASK 0x000000F8
441#ifndef NO_CS4610
442#define PLLCC_LPF_23850_60000_KHZ 0x00000000
443#define PLLCC_LPF_7960_26290_KHZ 0x00000008
444#define PLLCC_LPF_4160_10980_KHZ 0x00000018
445#define PLLCC_LPF_1740_4580_KHZ 0x00000038
446#define PLLCC_LPF_724_1910_KHZ 0x00000078
447#define PLLCC_LPF_317_798_KHZ 0x000000F8
448#endif
449#ifndef NO_CS4612
450#define PLLCC_LPF_25580_64530_KHZ 0x00000000
451#define PLLCC_LPF_14360_37270_KHZ 0x00000008
452#define PLLCC_LPF_6100_16020_KHZ 0x00000018
453#define PLLCC_LPF_2540_6690_KHZ 0x00000038
454#define PLLCC_LPF_1050_2780_KHZ 0x00000078
455#define PLLCC_LPF_450_1160_KHZ 0x000000F8
456#endif
457
458/*
459 * The following defines are for the flags in the feature reporting register.
460 */
461#define FRR_FAB_MASK 0x00000003
462#define FRR_MASK_MASK 0x0000001C
463#ifdef NO_CS4612
464#define FRR_CFOP_MASK 0x000000E0
465#else
466#define FRR_CFOP_MASK 0x00000FE0
467#endif
468#define FRR_CFOP_NOT_DVD 0x00000020
469#define FRR_CFOP_A3D 0x00000040
470#define FRR_CFOP_128_PIN 0x00000080
471#ifndef NO_CS4612
472#define FRR_CFOP_CS4280 0x00000800
473#endif
474#define FRR_FAB_SHIFT 0
475#define FRR_MASK_SHIFT 2
476#define FRR_CFOP_SHIFT 5
477
478/*
479 * The following defines are for the flags in the configuration load 1
480 * register.
481 */
482#define CFL1_CLOCK_SOURCE_MASK 0x00000003
483#define CFL1_CLOCK_SOURCE_CS423X 0x00000000
484#define CFL1_CLOCK_SOURCE_AC97 0x00000001
485#define CFL1_CLOCK_SOURCE_CRYSTAL 0x00000002
486#define CFL1_CLOCK_SOURCE_DUAL_AC97 0x00000003
487#define CFL1_VALID_DATA_MASK 0x000000FF
488
489/*
490 * The following defines are for the flags in the configuration load 2
491 * register.
492 */
493#define CFL2_VALID_DATA_MASK 0x000000FF
494
495/*
496 * The following defines are for the flags in the serial port master control
497 * register 1.
498 */
499#define SERMC1_MSPE 0x00000001
500#define SERMC1_PTC_MASK 0x0000000E
501#define SERMC1_PTC_CS423X 0x00000000
502#define SERMC1_PTC_AC97 0x00000002
503#define SERMC1_PTC_DAC 0x00000004
504#define SERMC1_PLB 0x00000010
505#define SERMC1_XLB 0x00000020
506
507/*
508 * The following defines are for the flags in the serial port master control
509 * register 2.
510 */
511#define SERMC2_LROE 0x00000001
512#define SERMC2_MCOE 0x00000002
513#define SERMC2_MCDIV 0x00000004
514
515/*
516 * The following defines are for the flags in the serial port 1 configuration
517 * register.
518 */
519#define SERC1_SO1EN 0x00000001
520#define SERC1_SO1F_MASK 0x0000000E
521#define SERC1_SO1F_CS423X 0x00000000
522#define SERC1_SO1F_AC97 0x00000002
523#define SERC1_SO1F_DAC 0x00000004
524#define SERC1_SO1F_SPDIF 0x00000006
525
526/*
527 * The following defines are for the flags in the serial port 2 configuration
528 * register.
529 */
530#define SERC2_SI1EN 0x00000001
531#define SERC2_SI1F_MASK 0x0000000E
532#define SERC2_SI1F_CS423X 0x00000000
533#define SERC2_SI1F_AC97 0x00000002
534#define SERC2_SI1F_ADC 0x00000004
535#define SERC2_SI1F_SPDIF 0x00000006
536
537/*
538 * The following defines are for the flags in the serial port 3 configuration
539 * register.
540 */
541#define SERC3_SO2EN 0x00000001
542#define SERC3_SO2F_MASK 0x00000006
543#define SERC3_SO2F_DAC 0x00000000
544#define SERC3_SO2F_SPDIF 0x00000002
545
546/*
547 * The following defines are for the flags in the serial port 4 configuration
548 * register.
549 */
550#define SERC4_SO3EN 0x00000001
551#define SERC4_SO3F_MASK 0x00000006
552#define SERC4_SO3F_DAC 0x00000000
553#define SERC4_SO3F_SPDIF 0x00000002
554
555/*
556 * The following defines are for the flags in the serial port 5 configuration
557 * register.
558 */
559#define SERC5_SI2EN 0x00000001
560#define SERC5_SI2F_MASK 0x00000006
561#define SERC5_SI2F_ADC 0x00000000
562#define SERC5_SI2F_SPDIF 0x00000002
563
564/*
565 * The following defines are for the flags in the serial port backdoor sample
566 * pointer register.
567 */
568#define SERBSP_FSP_MASK 0x0000000F
569#define SERBSP_FSP_SHIFT 0
570
571/*
572 * The following defines are for the flags in the serial port backdoor status
573 * register.
574 */
575#define SERBST_RRDY 0x00000001
576#define SERBST_WBSY 0x00000002
577
578/*
579 * The following defines are for the flags in the serial port backdoor command
580 * register.
581 */
582#define SERBCM_RDC 0x00000001
583#define SERBCM_WRC 0x00000002
584
585/*
586 * The following defines are for the flags in the serial port backdoor address
587 * register.
588 */
589#ifdef NO_CS4612
590#define SERBAD_FAD_MASK 0x000000FF
591#else
592#define SERBAD_FAD_MASK 0x000001FF
593#endif
594#define SERBAD_FAD_SHIFT 0
595
596/*
597 * The following defines are for the flags in the serial port backdoor
598 * configuration register.
599 */
600#define SERBCF_HBP 0x00000001
601
602/*
603 * The following defines are for the flags in the serial port backdoor write
604 * port register.
605 */
606#define SERBWP_FWD_MASK 0x000FFFFF
607#define SERBWP_FWD_SHIFT 0
608
609/*
610 * The following defines are for the flags in the serial port backdoor read
611 * port register.
612 */
613#define SERBRP_FRD_MASK 0x000FFFFF
614#define SERBRP_FRD_SHIFT 0
615
616/*
617 * The following defines are for the flags in the async FIFO address register.
618 */
619#ifndef NO_CS4612
620#define ASER_FADDR_A1_MASK 0x000001FF
621#define ASER_FADDR_EN1 0x00008000
622#define ASER_FADDR_A2_MASK 0x01FF0000
623#define ASER_FADDR_EN2 0x80000000
624#define ASER_FADDR_A1_SHIFT 0
625#define ASER_FADDR_A2_SHIFT 16
626#endif
627
628/*
629 * The following defines are for the flags in the AC97 control register.
630 */
631#define ACCTL_RSTN 0x00000001
632#define ACCTL_ESYN 0x00000002
633#define ACCTL_VFRM 0x00000004
634#define ACCTL_DCV 0x00000008
635#define ACCTL_CRW 0x00000010
636#define ACCTL_ASYN 0x00000020
637#ifndef NO_CS4612
638#define ACCTL_TC 0x00000040
639#endif
640
641/*
642 * The following defines are for the flags in the AC97 status register.
643 */
644#define ACSTS_CRDY 0x00000001
645#define ACSTS_VSTS 0x00000002
646#ifndef NO_CS4612
647#define ACSTS_WKUP 0x00000004
648#endif
649
650/*
651 * The following defines are for the flags in the AC97 output slot valid
652 * register.
653 */
654#define ACOSV_SLV3 0x00000001
655#define ACOSV_SLV4 0x00000002
656#define ACOSV_SLV5 0x00000004
657#define ACOSV_SLV6 0x00000008
658#define ACOSV_SLV7 0x00000010
659#define ACOSV_SLV8 0x00000020
660#define ACOSV_SLV9 0x00000040
661#define ACOSV_SLV10 0x00000080
662#define ACOSV_SLV11 0x00000100
663#define ACOSV_SLV12 0x00000200
664
665/*
666 * The following defines are for the flags in the AC97 command address
667 * register.
668 */
669#define ACCAD_CI_MASK 0x0000007F
670#define ACCAD_CI_SHIFT 0
671
672/*
673 * The following defines are for the flags in the AC97 command data register.
674 */
675#define ACCDA_CD_MASK 0x0000FFFF
676#define ACCDA_CD_SHIFT 0
677
678/*
679 * The following defines are for the flags in the AC97 input slot valid
680 * register.
681 */
682#define ACISV_ISV3 0x00000001
683#define ACISV_ISV4 0x00000002
684#define ACISV_ISV5 0x00000004
685#define ACISV_ISV6 0x00000008
686#define ACISV_ISV7 0x00000010
687#define ACISV_ISV8 0x00000020
688#define ACISV_ISV9 0x00000040
689#define ACISV_ISV10 0x00000080
690#define ACISV_ISV11 0x00000100
691#define ACISV_ISV12 0x00000200
692
693/*
694 * The following defines are for the flags in the AC97 status address
695 * register.
696 */
697#define ACSAD_SI_MASK 0x0000007F
698#define ACSAD_SI_SHIFT 0
699
700/*
701 * The following defines are for the flags in the AC97 status data register.
702 */
703#define ACSDA_SD_MASK 0x0000FFFF
704#define ACSDA_SD_SHIFT 0
705
706/*
707 * The following defines are for the flags in the joystick poll/trigger
708 * register.
709 */
710#define JSPT_CAX 0x00000001
711#define JSPT_CAY 0x00000002
712#define JSPT_CBX 0x00000004
713#define JSPT_CBY 0x00000008
714#define JSPT_BA1 0x00000010
715#define JSPT_BA2 0x00000020
716#define JSPT_BB1 0x00000040
717#define JSPT_BB2 0x00000080
718
719/*
720 * The following defines are for the flags in the joystick control register.
721 */
722#define JSCTL_SP_MASK 0x00000003
723#define JSCTL_SP_SLOW 0x00000000
724#define JSCTL_SP_MEDIUM_SLOW 0x00000001
725#define JSCTL_SP_MEDIUM_FAST 0x00000002
726#define JSCTL_SP_FAST 0x00000003
727#define JSCTL_ARE 0x00000004
728
729/*
730 * The following defines are for the flags in the joystick coordinate pair 1
731 * readback register.
732 */
733#define JSC1_Y1V_MASK 0x0000FFFF
734#define JSC1_X1V_MASK 0xFFFF0000
735#define JSC1_Y1V_SHIFT 0
736#define JSC1_X1V_SHIFT 16
737
738/*
739 * The following defines are for the flags in the joystick coordinate pair 2
740 * readback register.
741 */
742#define JSC2_Y2V_MASK 0x0000FFFF
743#define JSC2_X2V_MASK 0xFFFF0000
744#define JSC2_Y2V_SHIFT 0
745#define JSC2_X2V_SHIFT 16
746
747/*
748 * The following defines are for the flags in the MIDI control register.
749 */
750#define MIDCR_TXE 0x00000001 /* Enable transmitting. */
751#define MIDCR_RXE 0x00000002 /* Enable receiving. */
752#define MIDCR_RIE 0x00000004 /* Interrupt upon tx ready. */
753#define MIDCR_TIE 0x00000008 /* Interrupt upon rx ready. */
754#define MIDCR_MLB 0x00000010 /* Enable midi loopback. */
755#define MIDCR_MRST 0x00000020 /* Reset interface. */
756
757/*
758 * The following defines are for the flags in the MIDI status register.
759 */
760#define MIDSR_TBF 0x00000001 /* Tx FIFO is full. */
761#define MIDSR_RBE 0x00000002 /* Rx FIFO is empty. */
762
763/*
764 * The following defines are for the flags in the MIDI write port register.
765 */
766#define MIDWP_MWD_MASK 0x000000FF
767#define MIDWP_MWD_SHIFT 0
768
769/*
770 * The following defines are for the flags in the MIDI read port register.
771 */
772#define MIDRP_MRD_MASK 0x000000FF
773#define MIDRP_MRD_SHIFT 0
774
775/*
776 * The following defines are for the flags in the joystick GPIO register.
777 */
778#define JSIO_DAX 0x00000001
779#define JSIO_DAY 0x00000002
780#define JSIO_DBX 0x00000004
781#define JSIO_DBY 0x00000008
782#define JSIO_AXOE 0x00000010
783#define JSIO_AYOE 0x00000020
784#define JSIO_BXOE 0x00000040
785#define JSIO_BYOE 0x00000080
786
787/*
788 * The following defines are for the flags in the master async/sync serial
789 * port enable register.
790 */
791#ifndef NO_CS4612
792#define ASER_MASTER_ME 0x00000001
793#endif
794
795/*
796 * The following defines are for the flags in the configuration interface
797 * register.
798 */
799#define CFGI_CLK 0x00000001
800#define CFGI_DOUT 0x00000002
801#define CFGI_DIN_EEN 0x00000004
802#define CFGI_EELD 0x00000008
803
804/*
805 * The following defines are for the flags in the subsystem ID and vendor ID
806 * register.
807 */
808#define SSVID_VID_MASK 0x0000FFFF
809#define SSVID_SID_MASK 0xFFFF0000
810#define SSVID_VID_SHIFT 0
811#define SSVID_SID_SHIFT 16
812
813/*
814 * The following defines are for the flags in the GPIO pin interface register.
815 */
816#define GPIOR_VOLDN 0x00000001
817#define GPIOR_VOLUP 0x00000002
818#define GPIOR_SI2D 0x00000004
819#define GPIOR_SI2OE 0x00000008
820
821/*
822 * The following defines are for the flags in the extended GPIO pin direction
823 * register.
824 */
825#ifndef NO_CS4612
826#define EGPIODR_GPOE0 0x00000001
827#define EGPIODR_GPOE1 0x00000002
828#define EGPIODR_GPOE2 0x00000004
829#define EGPIODR_GPOE3 0x00000008
830#define EGPIODR_GPOE4 0x00000010
831#define EGPIODR_GPOE5 0x00000020
832#define EGPIODR_GPOE6 0x00000040
833#define EGPIODR_GPOE7 0x00000080
834#define EGPIODR_GPOE8 0x00000100
835#endif
836
837/*
838 * The following defines are for the flags in the extended GPIO pin polarity/
839 * type register.
840 */
841#ifndef NO_CS4612
842#define EGPIOPTR_GPPT0 0x00000001
843#define EGPIOPTR_GPPT1 0x00000002
844#define EGPIOPTR_GPPT2 0x00000004
845#define EGPIOPTR_GPPT3 0x00000008
846#define EGPIOPTR_GPPT4 0x00000010
847#define EGPIOPTR_GPPT5 0x00000020
848#define EGPIOPTR_GPPT6 0x00000040
849#define EGPIOPTR_GPPT7 0x00000080
850#define EGPIOPTR_GPPT8 0x00000100
851#endif
852
853/*
854 * The following defines are for the flags in the extended GPIO pin sticky
855 * register.
856 */
857#ifndef NO_CS4612
858#define EGPIOTR_GPS0 0x00000001
859#define EGPIOTR_GPS1 0x00000002
860#define EGPIOTR_GPS2 0x00000004
861#define EGPIOTR_GPS3 0x00000008
862#define EGPIOTR_GPS4 0x00000010
863#define EGPIOTR_GPS5 0x00000020
864#define EGPIOTR_GPS6 0x00000040
865#define EGPIOTR_GPS7 0x00000080
866#define EGPIOTR_GPS8 0x00000100
867#endif
868
869/*
870 * The following defines are for the flags in the extended GPIO ping wakeup
871 * register.
872 */
873#ifndef NO_CS4612
874#define EGPIOWR_GPW0 0x00000001
875#define EGPIOWR_GPW1 0x00000002
876#define EGPIOWR_GPW2 0x00000004
877#define EGPIOWR_GPW3 0x00000008
878#define EGPIOWR_GPW4 0x00000010
879#define EGPIOWR_GPW5 0x00000020
880#define EGPIOWR_GPW6 0x00000040
881#define EGPIOWR_GPW7 0x00000080
882#define EGPIOWR_GPW8 0x00000100
883#endif
884
885/*
886 * The following defines are for the flags in the extended GPIO pin status
887 * register.
888 */
889#ifndef NO_CS4612
890#define EGPIOSR_GPS0 0x00000001
891#define EGPIOSR_GPS1 0x00000002
892#define EGPIOSR_GPS2 0x00000004
893#define EGPIOSR_GPS3 0x00000008
894#define EGPIOSR_GPS4 0x00000010
895#define EGPIOSR_GPS5 0x00000020
896#define EGPIOSR_GPS6 0x00000040
897#define EGPIOSR_GPS7 0x00000080
898#define EGPIOSR_GPS8 0x00000100
899#endif
900
901/*
902 * The following defines are for the flags in the serial port 6 configuration
903 * register.
904 */
905#ifndef NO_CS4612
906#define SERC6_ASDO2EN 0x00000001
907#endif
908
909/*
910 * The following defines are for the flags in the serial port 7 configuration
911 * register.
912 */
913#ifndef NO_CS4612
914#define SERC7_ASDI2EN 0x00000001
915#define SERC7_POSILB 0x00000002
916#define SERC7_SIPOLB 0x00000004
917#define SERC7_SOSILB 0x00000008
918#define SERC7_SISOLB 0x00000010
919#endif
920
921/*
922 * The following defines are for the flags in the serial port AC link
923 * configuration register.
924 */
925#ifndef NO_CS4612
926#define SERACC_CHIP_TYPE_MASK 0x00000001
927#define SERACC_CHIP_TYPE_1_03 0x00000000
928#define SERACC_CHIP_TYPE_2_0 0x00000001
929#define SERACC_TWO_CODECS 0x00000002
930#define SERACC_MDM 0x00000004
931#define SERACC_HSP 0x00000008
932#define SERACC_ODT 0x00000010 /* only CS4630 */
933#endif
934
935/*
936 * The following defines are for the flags in the AC97 control register 2.
937 */
938#ifndef NO_CS4612
939#define ACCTL2_RSTN 0x00000001
940#define ACCTL2_ESYN 0x00000002
941#define ACCTL2_VFRM 0x00000004
942#define ACCTL2_DCV 0x00000008
943#define ACCTL2_CRW 0x00000010
944#define ACCTL2_ASYN 0x00000020
945#endif
946
947/*
948 * The following defines are for the flags in the AC97 status register 2.
949 */
950#ifndef NO_CS4612
951#define ACSTS2_CRDY 0x00000001
952#define ACSTS2_VSTS 0x00000002
953#endif
954
955/*
956 * The following defines are for the flags in the AC97 output slot valid
957 * register 2.
958 */
959#ifndef NO_CS4612
960#define ACOSV2_SLV3 0x00000001
961#define ACOSV2_SLV4 0x00000002
962#define ACOSV2_SLV5 0x00000004
963#define ACOSV2_SLV6 0x00000008
964#define ACOSV2_SLV7 0x00000010
965#define ACOSV2_SLV8 0x00000020
966#define ACOSV2_SLV9 0x00000040
967#define ACOSV2_SLV10 0x00000080
968#define ACOSV2_SLV11 0x00000100
969#define ACOSV2_SLV12 0x00000200
970#endif
971
972/*
973 * The following defines are for the flags in the AC97 command address
974 * register 2.
975 */
976#ifndef NO_CS4612
977#define ACCAD2_CI_MASK 0x0000007F
978#define ACCAD2_CI_SHIFT 0
979#endif
980
981/*
982 * The following defines are for the flags in the AC97 command data register
983 * 2.
984 */
985#ifndef NO_CS4612
986#define ACCDA2_CD_MASK 0x0000FFFF
987#define ACCDA2_CD_SHIFT 0
988#endif
989
990/*
991 * The following defines are for the flags in the AC97 input slot valid
992 * register 2.
993 */
994#ifndef NO_CS4612
995#define ACISV2_ISV3 0x00000001
996#define ACISV2_ISV4 0x00000002
997#define ACISV2_ISV5 0x00000004
998#define ACISV2_ISV6 0x00000008
999#define ACISV2_ISV7 0x00000010
1000#define ACISV2_ISV8 0x00000020
1001#define ACISV2_ISV9 0x00000040
1002#define ACISV2_ISV10 0x00000080
1003#define ACISV2_ISV11 0x00000100
1004#define ACISV2_ISV12 0x00000200
1005#endif
1006
1007/*
1008 * The following defines are for the flags in the AC97 status address
1009 * register 2.
1010 */
1011#ifndef NO_CS4612
1012#define ACSAD2_SI_MASK 0x0000007F
1013#define ACSAD2_SI_SHIFT 0
1014#endif
1015
1016/*
1017 * The following defines are for the flags in the AC97 status data register 2.
1018 */
1019#ifndef NO_CS4612
1020#define ACSDA2_SD_MASK 0x0000FFFF
1021#define ACSDA2_SD_SHIFT 0
1022#endif
1023
1024/*
1025 * The following defines are for the flags in the I/O trap address and control
1026 * registers (all 12).
1027 */
1028#ifndef NO_CS4612
1029#define IOTAC_SA_MASK 0x0000FFFF
1030#define IOTAC_MSK_MASK 0x000F0000
1031#define IOTAC_IODC_MASK 0x06000000
1032#define IOTAC_IODC_16_BIT 0x00000000
1033#define IOTAC_IODC_10_BIT 0x02000000
1034#define IOTAC_IODC_12_BIT 0x04000000
1035#define IOTAC_WSPI 0x08000000
1036#define IOTAC_RSPI 0x10000000
1037#define IOTAC_WSE 0x20000000
1038#define IOTAC_WE 0x40000000
1039#define IOTAC_RE 0x80000000
1040#define IOTAC_SA_SHIFT 0
1041#define IOTAC_MSK_SHIFT 16
1042#endif
1043
1044/*
1045 * The following defines are for the flags in the I/O trap fast read registers
1046 * (all 8).
1047 */
1048#ifndef NO_CS4612
1049#define IOTFR_D_MASK 0x0000FFFF
1050#define IOTFR_A_MASK 0x000F0000
1051#define IOTFR_R_MASK 0x0F000000
1052#define IOTFR_ALL 0x40000000
1053#define IOTFR_VL 0x80000000
1054#define IOTFR_D_SHIFT 0
1055#define IOTFR_A_SHIFT 16
1056#define IOTFR_R_SHIFT 24
1057#endif
1058
1059/*
1060 * The following defines are for the flags in the I/O trap FIFO register.
1061 */
1062#ifndef NO_CS4612
1063#define IOTFIFO_BA_MASK 0x00003FFF
1064#define IOTFIFO_S_MASK 0x00FF0000
1065#define IOTFIFO_OF 0x40000000
1066#define IOTFIFO_SPIOF 0x80000000
1067#define IOTFIFO_BA_SHIFT 0
1068#define IOTFIFO_S_SHIFT 16
1069#endif
1070
1071/*
1072 * The following defines are for the flags in the I/O trap retry read data
1073 * register.
1074 */
1075#ifndef NO_CS4612
1076#define IOTRRD_D_MASK 0x0000FFFF
1077#define IOTRRD_RDV 0x80000000
1078#define IOTRRD_D_SHIFT 0
1079#endif
1080
1081/*
1082 * The following defines are for the flags in the I/O trap FIFO pointer
1083 * register.
1084 */
1085#ifndef NO_CS4612
1086#define IOTFP_CA_MASK 0x00003FFF
1087#define IOTFP_PA_MASK 0x3FFF0000
1088#define IOTFP_CA_SHIFT 0
1089#define IOTFP_PA_SHIFT 16
1090#endif
1091
1092/*
1093 * The following defines are for the flags in the I/O trap control register.
1094 */
1095#ifndef NO_CS4612
1096#define IOTCR_ITD 0x00000001
1097#define IOTCR_HRV 0x00000002
1098#define IOTCR_SRV 0x00000004
1099#define IOTCR_DTI 0x00000008
1100#define IOTCR_DFI 0x00000010
1101#define IOTCR_DDP 0x00000020
1102#define IOTCR_JTE 0x00000040
1103#define IOTCR_PPE 0x00000080
1104#endif
1105
1106/*
1107 * The following defines are for the flags in the direct PCI data register.
1108 */
1109#ifndef NO_CS4612
1110#define DPCID_D_MASK 0xFFFFFFFF
1111#define DPCID_D_SHIFT 0
1112#endif
1113
1114/*
1115 * The following defines are for the flags in the direct PCI address register.
1116 */
1117#ifndef NO_CS4612
1118#define DPCIA_A_MASK 0xFFFFFFFF
1119#define DPCIA_A_SHIFT 0
1120#endif
1121
1122/*
1123 * The following defines are for the flags in the direct PCI command register.
1124 */
1125#ifndef NO_CS4612
1126#define DPCIC_C_MASK 0x0000000F
1127#define DPCIC_C_IOREAD 0x00000002
1128#define DPCIC_C_IOWRITE 0x00000003
1129#define DPCIC_BE_MASK 0x000000F0
1130#endif
1131
1132/*
1133 * The following defines are for the flags in the PC/PCI request register.
1134 */
1135#ifndef NO_CS4612
1136#define PCPCIR_RDC_MASK 0x00000007
1137#define PCPCIR_C_MASK 0x00007000
1138#define PCPCIR_REQ 0x00008000
1139#define PCPCIR_RDC_SHIFT 0
1140#define PCPCIR_C_SHIFT 12
1141#endif
1142
1143/*
1144 * The following defines are for the flags in the PC/PCI grant register.
1145 */
1146#ifndef NO_CS4612
1147#define PCPCIG_GDC_MASK 0x00000007
1148#define PCPCIG_VL 0x00008000
1149#define PCPCIG_GDC_SHIFT 0
1150#endif
1151
1152/*
1153 * The following defines are for the flags in the PC/PCI master enable
1154 * register.
1155 */
1156#ifndef NO_CS4612
1157#define PCPCIEN_EN 0x00000001
1158#endif
1159
1160/*
1161 * The following defines are for the flags in the extended PCI power
1162 * management control register.
1163 */
1164#ifndef NO_CS4612
1165#define EPCIPMC_GWU 0x00000001
1166#define EPCIPMC_FSPC 0x00000002
1167#endif
1168
1169/*
1170 * The following defines are for the flags in the SP control register.
1171 */
1172#define SPCR_RUN 0x00000001
1173#define SPCR_STPFR 0x00000002
1174#define SPCR_RUNFR 0x00000004
1175#define SPCR_TICK 0x00000008
1176#define SPCR_DRQEN 0x00000020
1177#define SPCR_RSTSP 0x00000040
1178#define SPCR_OREN 0x00000080
1179#ifndef NO_CS4612
1180#define SPCR_PCIINT 0x00000100
1181#define SPCR_OINTD 0x00000200
1182#define SPCR_CRE 0x00008000
1183#endif
1184
1185/*
1186 * The following defines are for the flags in the debug index register.
1187 */
1188#define DREG_REGID_MASK 0x0000007F
1189#define DREG_DEBUG 0x00000080
1190#define DREG_RGBK_MASK 0x00000700
1191#define DREG_TRAP 0x00000800
1192#if !defined(NO_CS4612)
1193#if !defined(NO_CS4615)
1194#define DREG_TRAPX 0x00001000
1195#endif
1196#endif
1197#define DREG_REGID_SHIFT 0
1198#define DREG_RGBK_SHIFT 8
1199#define DREG_RGBK_REGID_MASK 0x0000077F
1200#define DREG_REGID_R0 0x00000010
1201#define DREG_REGID_R1 0x00000011
1202#define DREG_REGID_R2 0x00000012
1203#define DREG_REGID_R3 0x00000013
1204#define DREG_REGID_R4 0x00000014
1205#define DREG_REGID_R5 0x00000015
1206#define DREG_REGID_R6 0x00000016
1207#define DREG_REGID_R7 0x00000017
1208#define DREG_REGID_R8 0x00000018
1209#define DREG_REGID_R9 0x00000019
1210#define DREG_REGID_RA 0x0000001A
1211#define DREG_REGID_RB 0x0000001B
1212#define DREG_REGID_RC 0x0000001C
1213#define DREG_REGID_RD 0x0000001D
1214#define DREG_REGID_RE 0x0000001E
1215#define DREG_REGID_RF 0x0000001F
1216#define DREG_REGID_RA_BUS_LOW 0x00000020
1217#define DREG_REGID_RA_BUS_HIGH 0x00000038
1218#define DREG_REGID_YBUS_LOW 0x00000050
1219#define DREG_REGID_YBUS_HIGH 0x00000058
1220#define DREG_REGID_TRAP_0 0x00000100
1221#define DREG_REGID_TRAP_1 0x00000101
1222#define DREG_REGID_TRAP_2 0x00000102
1223#define DREG_REGID_TRAP_3 0x00000103
1224#define DREG_REGID_TRAP_4 0x00000104
1225#define DREG_REGID_TRAP_5 0x00000105
1226#define DREG_REGID_TRAP_6 0x00000106
1227#define DREG_REGID_TRAP_7 0x00000107
1228#define DREG_REGID_INDIRECT_ADDRESS 0x0000010E
1229#define DREG_REGID_TOP_OF_STACK 0x0000010F
1230#if !defined(NO_CS4612)
1231#if !defined(NO_CS4615)
1232#define DREG_REGID_TRAP_8 0x00000110
1233#define DREG_REGID_TRAP_9 0x00000111
1234#define DREG_REGID_TRAP_10 0x00000112
1235#define DREG_REGID_TRAP_11 0x00000113
1236#define DREG_REGID_TRAP_12 0x00000114
1237#define DREG_REGID_TRAP_13 0x00000115
1238#define DREG_REGID_TRAP_14 0x00000116
1239#define DREG_REGID_TRAP_15 0x00000117
1240#define DREG_REGID_TRAP_16 0x00000118
1241#define DREG_REGID_TRAP_17 0x00000119
1242#define DREG_REGID_TRAP_18 0x0000011A
1243#define DREG_REGID_TRAP_19 0x0000011B
1244#define DREG_REGID_TRAP_20 0x0000011C
1245#define DREG_REGID_TRAP_21 0x0000011D
1246#define DREG_REGID_TRAP_22 0x0000011E
1247#define DREG_REGID_TRAP_23 0x0000011F
1248#endif
1249#endif
1250#define DREG_REGID_RSA0_LOW 0x00000200
1251#define DREG_REGID_RSA0_HIGH 0x00000201
1252#define DREG_REGID_RSA1_LOW 0x00000202
1253#define DREG_REGID_RSA1_HIGH 0x00000203
1254#define DREG_REGID_RSA2 0x00000204
1255#define DREG_REGID_RSA3 0x00000205
1256#define DREG_REGID_RSI0_LOW 0x00000206
1257#define DREG_REGID_RSI0_HIGH 0x00000207
1258#define DREG_REGID_RSI1 0x00000208
1259#define DREG_REGID_RSI2 0x00000209
1260#define DREG_REGID_SAGUSTATUS 0x0000020A
1261#define DREG_REGID_RSCONFIG01_LOW 0x0000020B
1262#define DREG_REGID_RSCONFIG01_HIGH 0x0000020C
1263#define DREG_REGID_RSCONFIG23_LOW 0x0000020D
1264#define DREG_REGID_RSCONFIG23_HIGH 0x0000020E
1265#define DREG_REGID_RSDMA01E 0x0000020F
1266#define DREG_REGID_RSDMA23E 0x00000210
1267#define DREG_REGID_RSD0_LOW 0x00000211
1268#define DREG_REGID_RSD0_HIGH 0x00000212
1269#define DREG_REGID_RSD1_LOW 0x00000213
1270#define DREG_REGID_RSD1_HIGH 0x00000214
1271#define DREG_REGID_RSD2_LOW 0x00000215
1272#define DREG_REGID_RSD2_HIGH 0x00000216
1273#define DREG_REGID_RSD3_LOW 0x00000217
1274#define DREG_REGID_RSD3_HIGH 0x00000218
1275#define DREG_REGID_SRAR_HIGH 0x0000021A
1276#define DREG_REGID_SRAR_LOW 0x0000021B
1277#define DREG_REGID_DMA_STATE 0x0000021C
1278#define DREG_REGID_CURRENT_DMA_STREAM 0x0000021D
1279#define DREG_REGID_NEXT_DMA_STREAM 0x0000021E
1280#define DREG_REGID_CPU_STATUS 0x00000300
1281#define DREG_REGID_MAC_MODE 0x00000301
1282#define DREG_REGID_STACK_AND_REPEAT 0x00000302
1283#define DREG_REGID_INDEX0 0x00000304
1284#define DREG_REGID_INDEX1 0x00000305
1285#define DREG_REGID_DMA_STATE_0_3 0x00000400
1286#define DREG_REGID_DMA_STATE_4_7 0x00000404
1287#define DREG_REGID_DMA_STATE_8_11 0x00000408
1288#define DREG_REGID_DMA_STATE_12_15 0x0000040C
1289#define DREG_REGID_DMA_STATE_16_19 0x00000410
1290#define DREG_REGID_DMA_STATE_20_23 0x00000414
1291#define DREG_REGID_DMA_STATE_24_27 0x00000418
1292#define DREG_REGID_DMA_STATE_28_31 0x0000041C
1293#define DREG_REGID_DMA_STATE_32_35 0x00000420
1294#define DREG_REGID_DMA_STATE_36_39 0x00000424
1295#define DREG_REGID_DMA_STATE_40_43 0x00000428
1296#define DREG_REGID_DMA_STATE_44_47 0x0000042C
1297#define DREG_REGID_DMA_STATE_48_51 0x00000430
1298#define DREG_REGID_DMA_STATE_52_55 0x00000434
1299#define DREG_REGID_DMA_STATE_56_59 0x00000438
1300#define DREG_REGID_DMA_STATE_60_63 0x0000043C
1301#define DREG_REGID_DMA_STATE_64_67 0x00000440
1302#define DREG_REGID_DMA_STATE_68_71 0x00000444
1303#define DREG_REGID_DMA_STATE_72_75 0x00000448
1304#define DREG_REGID_DMA_STATE_76_79 0x0000044C
1305#define DREG_REGID_DMA_STATE_80_83 0x00000450
1306#define DREG_REGID_DMA_STATE_84_87 0x00000454
1307#define DREG_REGID_DMA_STATE_88_91 0x00000458
1308#define DREG_REGID_DMA_STATE_92_95 0x0000045C
1309#define DREG_REGID_TRAP_SELECT 0x00000500
1310#define DREG_REGID_TRAP_WRITE_0 0x00000500
1311#define DREG_REGID_TRAP_WRITE_1 0x00000501
1312#define DREG_REGID_TRAP_WRITE_2 0x00000502
1313#define DREG_REGID_TRAP_WRITE_3 0x00000503
1314#define DREG_REGID_TRAP_WRITE_4 0x00000504
1315#define DREG_REGID_TRAP_WRITE_5 0x00000505
1316#define DREG_REGID_TRAP_WRITE_6 0x00000506
1317#define DREG_REGID_TRAP_WRITE_7 0x00000507
1318#if !defined(NO_CS4612)
1319#if !defined(NO_CS4615)
1320#define DREG_REGID_TRAP_WRITE_8 0x00000510
1321#define DREG_REGID_TRAP_WRITE_9 0x00000511
1322#define DREG_REGID_TRAP_WRITE_10 0x00000512
1323#define DREG_REGID_TRAP_WRITE_11 0x00000513
1324#define DREG_REGID_TRAP_WRITE_12 0x00000514
1325#define DREG_REGID_TRAP_WRITE_13 0x00000515
1326#define DREG_REGID_TRAP_WRITE_14 0x00000516
1327#define DREG_REGID_TRAP_WRITE_15 0x00000517
1328#define DREG_REGID_TRAP_WRITE_16 0x00000518
1329#define DREG_REGID_TRAP_WRITE_17 0x00000519
1330#define DREG_REGID_TRAP_WRITE_18 0x0000051A
1331#define DREG_REGID_TRAP_WRITE_19 0x0000051B
1332#define DREG_REGID_TRAP_WRITE_20 0x0000051C
1333#define DREG_REGID_TRAP_WRITE_21 0x0000051D
1334#define DREG_REGID_TRAP_WRITE_22 0x0000051E
1335#define DREG_REGID_TRAP_WRITE_23 0x0000051F
1336#endif
1337#endif
1338#define DREG_REGID_MAC0_ACC0_LOW 0x00000600
1339#define DREG_REGID_MAC0_ACC1_LOW 0x00000601
1340#define DREG_REGID_MAC0_ACC2_LOW 0x00000602
1341#define DREG_REGID_MAC0_ACC3_LOW 0x00000603
1342#define DREG_REGID_MAC1_ACC0_LOW 0x00000604
1343#define DREG_REGID_MAC1_ACC1_LOW 0x00000605
1344#define DREG_REGID_MAC1_ACC2_LOW 0x00000606
1345#define DREG_REGID_MAC1_ACC3_LOW 0x00000607
1346#define DREG_REGID_MAC0_ACC0_MID 0x00000608
1347#define DREG_REGID_MAC0_ACC1_MID 0x00000609
1348#define DREG_REGID_MAC0_ACC2_MID 0x0000060A
1349#define DREG_REGID_MAC0_ACC3_MID 0x0000060B
1350#define DREG_REGID_MAC1_ACC0_MID 0x0000060C
1351#define DREG_REGID_MAC1_ACC1_MID 0x0000060D
1352#define DREG_REGID_MAC1_ACC2_MID 0x0000060E
1353#define DREG_REGID_MAC1_ACC3_MID 0x0000060F
1354#define DREG_REGID_MAC0_ACC0_HIGH 0x00000610
1355#define DREG_REGID_MAC0_ACC1_HIGH 0x00000611
1356#define DREG_REGID_MAC0_ACC2_HIGH 0x00000612
1357#define DREG_REGID_MAC0_ACC3_HIGH 0x00000613
1358#define DREG_REGID_MAC1_ACC0_HIGH 0x00000614
1359#define DREG_REGID_MAC1_ACC1_HIGH 0x00000615
1360#define DREG_REGID_MAC1_ACC2_HIGH 0x00000616
1361#define DREG_REGID_MAC1_ACC3_HIGH 0x00000617
1362#define DREG_REGID_RSHOUT_LOW 0x00000620
1363#define DREG_REGID_RSHOUT_MID 0x00000628
1364#define DREG_REGID_RSHOUT_HIGH 0x00000630
1365
1366/*
1367 * The following defines are for the flags in the DMA stream requestor write
1368 */
1369#define DSRWP_DSR_MASK 0x0000000F
1370#define DSRWP_DSR_BG_RQ 0x00000001
1371#define DSRWP_DSR_PRIORITY_MASK 0x00000006
1372#define DSRWP_DSR_PRIORITY_0 0x00000000
1373#define DSRWP_DSR_PRIORITY_1 0x00000002
1374#define DSRWP_DSR_PRIORITY_2 0x00000004
1375#define DSRWP_DSR_PRIORITY_3 0x00000006
1376#define DSRWP_DSR_RQ_PENDING 0x00000008
1377
1378/*
1379 * The following defines are for the flags in the trap write port register.
1380 */
1381#define TWPR_TW_MASK 0x0000FFFF
1382#define TWPR_TW_SHIFT 0
1383
1384/*
1385 * The following defines are for the flags in the stack pointer write
1386 * register.
1387 */
1388#define SPWR_STKP_MASK 0x0000000F
1389#define SPWR_STKP_SHIFT 0
1390
1391/*
1392 * The following defines are for the flags in the SP interrupt register.
1393 */
1394#define SPIR_FRI 0x00000001
1395#define SPIR_DOI 0x00000002
1396#define SPIR_GPI2 0x00000004
1397#define SPIR_GPI3 0x00000008
1398#define SPIR_IP0 0x00000010
1399#define SPIR_IP1 0x00000020
1400#define SPIR_IP2 0x00000040
1401#define SPIR_IP3 0x00000080
1402
1403/*
1404 * The following defines are for the flags in the functional group 1 register.
1405 */
1406#define FGR1_F1S_MASK 0x0000FFFF
1407#define FGR1_F1S_SHIFT 0
1408
1409/*
1410 * The following defines are for the flags in the SP clock status register.
1411 */
1412#define SPCS_FRI 0x00000001
1413#define SPCS_DOI 0x00000002
1414#define SPCS_GPI2 0x00000004
1415#define SPCS_GPI3 0x00000008
1416#define SPCS_IP0 0x00000010
1417#define SPCS_IP1 0x00000020
1418#define SPCS_IP2 0x00000040
1419#define SPCS_IP3 0x00000080
1420#define SPCS_SPRUN 0x00000100
1421#define SPCS_SLEEP 0x00000200
1422#define SPCS_FG 0x00000400
1423#define SPCS_ORUN 0x00000800
1424#define SPCS_IRQ 0x00001000
1425#define SPCS_FGN_MASK 0x0000E000
1426#define SPCS_FGN_SHIFT 13
1427
1428/*
1429 * The following defines are for the flags in the SP DMA requestor status
1430 * register.
1431 */
1432#define SDSR_DCS_MASK 0x000000FF
1433#define SDSR_DCS_SHIFT 0
1434#define SDSR_DCS_NONE 0x00000007
1435
1436/*
1437 * The following defines are for the flags in the frame timer register.
1438 */
1439#define FRMT_FTV_MASK 0x0000FFFF
1440#define FRMT_FTV_SHIFT 0
1441
1442/*
1443 * The following defines are for the flags in the frame timer current count
1444 * register.
1445 */
1446#define FRCC_FCC_MASK 0x0000FFFF
1447#define FRCC_FCC_SHIFT 0
1448
1449/*
1450 * The following defines are for the flags in the frame timer save count
1451 * register.
1452 */
1453#define FRSC_FCS_MASK 0x0000FFFF
1454#define FRSC_FCS_SHIFT 0
1455
1456/*
1457 * The following define the various flags stored in the scatter/gather
1458 * descriptors.
1459 */
1460#define DMA_SG_NEXT_ENTRY_MASK 0x00000FF8
1461#define DMA_SG_SAMPLE_END_MASK 0x0FFF0000
1462#define DMA_SG_SAMPLE_END_FLAG 0x10000000
1463#define DMA_SG_LOOP_END_FLAG 0x20000000
1464#define DMA_SG_SIGNAL_END_FLAG 0x40000000
1465#define DMA_SG_SIGNAL_PAGE_FLAG 0x80000000
1466#define DMA_SG_NEXT_ENTRY_SHIFT 3
1467#define DMA_SG_SAMPLE_END_SHIFT 16
1468
1469/*
1470 * The following define the offsets of the fields within the on-chip generic
1471 * DMA requestor.
1472 */
1473#define DMA_RQ_CONTROL1 0x00000000
1474#define DMA_RQ_CONTROL2 0x00000004
1475#define DMA_RQ_SOURCE_ADDR 0x00000008
1476#define DMA_RQ_DESTINATION_ADDR 0x0000000C
1477#define DMA_RQ_NEXT_PAGE_ADDR 0x00000010
1478#define DMA_RQ_NEXT_PAGE_SGDESC 0x00000014
1479#define DMA_RQ_LOOP_START_ADDR 0x00000018
1480#define DMA_RQ_POST_LOOP_ADDR 0x0000001C
1481#define DMA_RQ_PAGE_MAP_ADDR 0x00000020
1482
1483/*
1484 * The following defines are for the flags in the first control word of the
1485 * on-chip generic DMA requestor.
1486 */
1487#define DMA_RQ_C1_COUNT_MASK 0x000003FF
1488#define DMA_RQ_C1_DESTINATION_SCATTER 0x00001000
1489#define DMA_RQ_C1_SOURCE_GATHER 0x00002000
1490#define DMA_RQ_C1_DONE_FLAG 0x00004000
1491#define DMA_RQ_C1_OPTIMIZE_STATE 0x00008000
1492#define DMA_RQ_C1_SAMPLE_END_STATE_MASK 0x00030000
1493#define DMA_RQ_C1_FULL_PAGE 0x00000000
1494#define DMA_RQ_C1_BEFORE_SAMPLE_END 0x00010000
1495#define DMA_RQ_C1_PAGE_MAP_ERROR 0x00020000
1496#define DMA_RQ_C1_AT_SAMPLE_END 0x00030000
1497#define DMA_RQ_C1_LOOP_END_STATE_MASK 0x000C0000
1498#define DMA_RQ_C1_NOT_LOOP_END 0x00000000
1499#define DMA_RQ_C1_BEFORE_LOOP_END 0x00040000
1500#define DMA_RQ_C1_2PAGE_LOOP_BEGIN 0x00080000
1501#define DMA_RQ_C1_LOOP_BEGIN 0x000C0000
1502#define DMA_RQ_C1_PAGE_MAP_MASK 0x00300000
1503#define DMA_RQ_C1_PM_NONE_PENDING 0x00000000
1504#define DMA_RQ_C1_PM_NEXT_PENDING 0x00100000
1505#define DMA_RQ_C1_PM_RESERVED 0x00200000
1506#define DMA_RQ_C1_PM_LOOP_NEXT_PENDING 0x00300000
1507#define DMA_RQ_C1_WRITEBACK_DEST_FLAG 0x00400000
1508#define DMA_RQ_C1_WRITEBACK_SRC_FLAG 0x00800000
1509#define DMA_RQ_C1_DEST_SIZE_MASK 0x07000000
1510#define DMA_RQ_C1_DEST_LINEAR 0x00000000
1511#define DMA_RQ_C1_DEST_MOD16 0x01000000
1512#define DMA_RQ_C1_DEST_MOD32 0x02000000
1513#define DMA_RQ_C1_DEST_MOD64 0x03000000
1514#define DMA_RQ_C1_DEST_MOD128 0x04000000
1515#define DMA_RQ_C1_DEST_MOD256 0x05000000
1516#define DMA_RQ_C1_DEST_MOD512 0x06000000
1517#define DMA_RQ_C1_DEST_MOD1024 0x07000000
1518#define DMA_RQ_C1_DEST_ON_HOST 0x08000000
1519#define DMA_RQ_C1_SOURCE_SIZE_MASK 0x70000000
1520#define DMA_RQ_C1_SOURCE_LINEAR 0x00000000
1521#define DMA_RQ_C1_SOURCE_MOD16 0x10000000
1522#define DMA_RQ_C1_SOURCE_MOD32 0x20000000
1523#define DMA_RQ_C1_SOURCE_MOD64 0x30000000
1524#define DMA_RQ_C1_SOURCE_MOD128 0x40000000
1525#define DMA_RQ_C1_SOURCE_MOD256 0x50000000
1526#define DMA_RQ_C1_SOURCE_MOD512 0x60000000
1527#define DMA_RQ_C1_SOURCE_MOD1024 0x70000000
1528#define DMA_RQ_C1_SOURCE_ON_HOST 0x80000000
1529#define DMA_RQ_C1_COUNT_SHIFT 0
1530
1531/*
1532 * The following defines are for the flags in the second control word of the
1533 * on-chip generic DMA requestor.
1534 */
1535#define DMA_RQ_C2_VIRTUAL_CHANNEL_MASK 0x0000003F
1536#define DMA_RQ_C2_VIRTUAL_SIGNAL_MASK 0x00000300
1537#define DMA_RQ_C2_NO_VIRTUAL_SIGNAL 0x00000000
1538#define DMA_RQ_C2_SIGNAL_EVERY_DMA 0x00000100
1539#define DMA_RQ_C2_SIGNAL_SOURCE_PINGPONG 0x00000200
1540#define DMA_RQ_C2_SIGNAL_DEST_PINGPONG 0x00000300
1541#define DMA_RQ_C2_AUDIO_CONVERT_MASK 0x0000F000
1542#define DMA_RQ_C2_AC_NONE 0x00000000
1543#define DMA_RQ_C2_AC_8_TO_16_BIT 0x00001000
1544#define DMA_RQ_C2_AC_MONO_TO_STEREO 0x00002000
1545#define DMA_RQ_C2_AC_ENDIAN_CONVERT 0x00004000
1546#define DMA_RQ_C2_AC_SIGNED_CONVERT 0x00008000
1547#define DMA_RQ_C2_LOOP_END_MASK 0x0FFF0000
1548#define DMA_RQ_C2_LOOP_MASK 0x30000000
1549#define DMA_RQ_C2_NO_LOOP 0x00000000
1550#define DMA_RQ_C2_ONE_PAGE_LOOP 0x10000000
1551#define DMA_RQ_C2_TWO_PAGE_LOOP 0x20000000
1552#define DMA_RQ_C2_MULTI_PAGE_LOOP 0x30000000
1553#define DMA_RQ_C2_SIGNAL_LOOP_BACK 0x40000000
1554#define DMA_RQ_C2_SIGNAL_POST_BEGIN_PAGE 0x80000000
1555#define DMA_RQ_C2_VIRTUAL_CHANNEL_SHIFT 0
1556#define DMA_RQ_C2_LOOP_END_SHIFT 16
1557
1558/*
1559 * The following defines are for the flags in the source and destination words
1560 * of the on-chip generic DMA requestor.
1561 */
1562#define DMA_RQ_SD_ADDRESS_MASK 0x0000FFFF
1563#define DMA_RQ_SD_MEMORY_ID_MASK 0x000F0000
1564#define DMA_RQ_SD_SP_PARAM_ADDR 0x00000000
1565#define DMA_RQ_SD_SP_SAMPLE_ADDR 0x00010000
1566#define DMA_RQ_SD_SP_PROGRAM_ADDR 0x00020000
1567#define DMA_RQ_SD_SP_DEBUG_ADDR 0x00030000
1568#define DMA_RQ_SD_OMNIMEM_ADDR 0x000E0000
1569#define DMA_RQ_SD_END_FLAG 0x40000000
1570#define DMA_RQ_SD_ERROR_FLAG 0x80000000
1571#define DMA_RQ_SD_ADDRESS_SHIFT 0
1572
1573/*
1574 * The following defines are for the flags in the page map address word of the
1575 * on-chip generic DMA requestor.
1576 */
1577#define DMA_RQ_PMA_LOOP_THIRD_PAGE_ENTRY_MASK 0x00000FF8
1578#define DMA_RQ_PMA_PAGE_TABLE_MASK 0xFFFFF000
1579#define DMA_RQ_PMA_LOOP_THIRD_PAGE_ENTRY_SHIFT 3
1580#define DMA_RQ_PMA_PAGE_TABLE_SHIFT 12
1581
1582#define BA1_VARIDEC_BUF_1 0x000
1583
1584#define BA1_PDTC 0x0c0 /* BA1_PLAY_DMA_TRANSACTION_COUNT_REG */
1585#define BA1_PFIE 0x0c4 /* BA1_PLAY_FORMAT_&_INTERRUPT_ENABLE_REG */
1586#define BA1_PBA 0x0c8 /* BA1_PLAY_BUFFER_ADDRESS */
1587#define BA1_PVOL 0x0f8 /* BA1_PLAY_VOLUME_REG */
1588#define BA1_PSRC 0x288 /* BA1_PLAY_SAMPLE_RATE_CORRECTION_REG */
1589#define BA1_PCTL 0x2a4 /* BA1_PLAY_CONTROL_REG */
1590#define BA1_PPI 0x2b4 /* BA1_PLAY_PHASE_INCREMENT_REG */
1591
1592#define BA1_CCTL 0x064 /* BA1_CAPTURE_CONTROL_REG */
1593#define BA1_CIE 0x104 /* BA1_CAPTURE_INTERRUPT_ENABLE_REG */
1594#define BA1_CBA 0x10c /* BA1_CAPTURE_BUFFER_ADDRESS */
1595#define BA1_CSRC 0x2c8 /* BA1_CAPTURE_SAMPLE_RATE_CORRECTION_REG */
1596#define BA1_CCI 0x2d8 /* BA1_CAPTURE_COEFFICIENT_INCREMENT_REG */
1597#define BA1_CD 0x2e0 /* BA1_CAPTURE_DELAY_REG */
1598#define BA1_CPI 0x2f4 /* BA1_CAPTURE_PHASE_INCREMENT_REG */
1599#define BA1_CVOL 0x2f8 /* BA1_CAPTURE_VOLUME_REG */
1600
1601#define BA1_CFG1 0x134 /* BA1_CAPTURE_FRAME_GROUP_1_REG */
1602#define BA1_CFG2 0x138 /* BA1_CAPTURE_FRAME_GROUP_2_REG */
1603#define BA1_CCST 0x13c /* BA1_CAPTURE_CONSTANT_REG */
1604#define BA1_CSPB 0x340 /* BA1_CAPTURE_SPB_ADDRESS */
1605
1606/*
1607 *
1608 */
1609
1610#define CS46XX_MODE_OUTPUT (1<<0) /* MIDI UART - output */
1611#define CS46XX_MODE_INPUT (1<<1) /* MIDI UART - input */
1612
1613/*
1614 *
1615 */
1616
1617#define SAVE_REG_MAX 0x10
1618#define POWER_DOWN_ALL 0x7f0f
1619
1620/* maxinum number of AC97 codecs connected, AC97 2.0 defined 4 */
1621#define MAX_NR_AC97 4
1622#define CS46XX_PRIMARY_CODEC_INDEX 0
1623#define CS46XX_SECONDARY_CODEC_INDEX 1
1624#define CS46XX_SECONDARY_CODEC_OFFSET 0x80
1625#define CS46XX_DSP_CAPTURE_CHANNEL 1
1626
1627/* capture */
1628#define CS46XX_DSP_CAPTURE_CHANNEL 1
1629
1630/* mixer */
1631#define CS46XX_MIXER_SPDIF_INPUT_ELEMENT 1
1632#define CS46XX_MIXER_SPDIF_OUTPUT_ELEMENT 2
1633
1634
1635struct snd_cs46xx_pcm {
1636 struct snd_dma_buffer hw_buf;
1637
1638 unsigned int ctl;
1639 unsigned int shift; /* Shift count to trasform frames in bytes */
1640 struct snd_pcm_indirect pcm_rec;
1641 struct snd_pcm_substream *substream;
1642
1643 struct dsp_pcm_channel_descriptor * pcm_channel;
1644
1645 int pcm_channel_id; /* Fron Rear, Center Lfe ... */
1646};
1647
1648struct snd_cs46xx_region {
1649 char name[24];
1650 unsigned long base;
1651 void __iomem *remap_addr;
1652 unsigned long size;
1653 struct resource *resource;
1654};
1655
1656struct snd_cs46xx {
1657 int irq;
1658 unsigned long ba0_addr;
1659 unsigned long ba1_addr;
1660 union {
1661 struct {
1662 struct snd_cs46xx_region ba0;
1663 struct snd_cs46xx_region data0;
1664 struct snd_cs46xx_region data1;
1665 struct snd_cs46xx_region pmem;
1666 struct snd_cs46xx_region reg;
1667 } name;
1668 struct snd_cs46xx_region idx[5];
1669 } region;
1670
1671 unsigned int mode;
1672
1673 struct {
1674 struct snd_dma_buffer hw_buf;
1675
1676 unsigned int ctl;
1677 unsigned int shift; /* Shift count to trasform frames in bytes */
1678 struct snd_pcm_indirect pcm_rec;
1679 struct snd_pcm_substream *substream;
1680 } capt;
1681
1682
1683 int nr_ac97_codecs;
1684 struct snd_ac97_bus *ac97_bus;
1685 struct snd_ac97 *ac97[MAX_NR_AC97];
1686
1687 struct pci_dev *pci;
1688 struct snd_card *card;
1689 struct snd_pcm *pcm;
1690
1691 struct snd_rawmidi *rmidi;
1692 struct snd_rawmidi_substream *midi_input;
1693 struct snd_rawmidi_substream *midi_output;
1694
1695 spinlock_t reg_lock;
1696 unsigned int midcr;
1697 unsigned int uartm;
1698
1699 int amplifier;
1700 void (*amplifier_ctrl)(struct snd_cs46xx *, int);
1701 void (*active_ctrl)(struct snd_cs46xx *, int);
1702 void (*mixer_init)(struct snd_cs46xx *);
1703
1704 int acpi_port;
1705 struct snd_kcontrol *eapd_switch; /* for amplifier hack */
1706 int accept_valid; /* accept mmap valid (for OSS) */
1707 int in_suspend;
1708
1709 struct gameport *gameport;
1710
1711#ifdef CONFIG_SND_CS46XX_NEW_DSP
1712 struct mutex spos_mutex;
1713
1714 struct dsp_spos_instance * dsp_spos_instance;
1715
1716 struct snd_pcm *pcm_rear;
1717 struct snd_pcm *pcm_center_lfe;
1718 struct snd_pcm *pcm_iec958;
1719#else /* for compatibility */
1720 struct snd_cs46xx_pcm *playback_pcm;
1721 unsigned int play_ctl;
1722#endif
1723
1724#ifdef CONFIG_PM
1725 u32 *saved_regs;
1726#endif
1727};
1728
1729int snd_cs46xx_create(struct snd_card *card,
1730 struct pci_dev *pci,
1731 int external_amp, int thinkpad,
1732 struct snd_cs46xx **rcodec);
1733int snd_cs46xx_suspend(struct pci_dev *pci, pm_message_t state);
1734int snd_cs46xx_resume(struct pci_dev *pci);
1735
1736int snd_cs46xx_pcm(struct snd_cs46xx *chip, int device, struct snd_pcm **rpcm);
1737int snd_cs46xx_pcm_rear(struct snd_cs46xx *chip, int device, struct snd_pcm **rpcm);
1738int snd_cs46xx_pcm_iec958(struct snd_cs46xx *chip, int device, struct snd_pcm **rpcm);
1739int snd_cs46xx_pcm_center_lfe(struct snd_cs46xx *chip, int device, struct snd_pcm **rpcm);
1740int snd_cs46xx_mixer(struct snd_cs46xx *chip, int spdif_device);
1741int snd_cs46xx_midi(struct snd_cs46xx *chip, int device, struct snd_rawmidi **rmidi);
1742int snd_cs46xx_start_dsp(struct snd_cs46xx *chip);
1743int snd_cs46xx_gameport(struct snd_cs46xx *chip);
1744
1745#endif /* __SOUND_CS46XX_H */
diff --git a/include/sound/cs46xx_dsp_scb_types.h b/include/sound/cs46xx_dsp_scb_types.h
deleted file mode 100644
index 080857ad0ca2..000000000000
--- a/include/sound/cs46xx_dsp_scb_types.h
+++ /dev/null
@@ -1,1213 +0,0 @@
1/*
2 * The driver for the Cirrus Logic's Sound Fusion CS46XX based soundcards
3 * Copyright (c) by Jaroslav Kysela <perex@perex.cz>
4 *
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 *
20 *
21 * NOTE: comments are copy/paste from cwcemb80.lst
22 * provided by Tom Woller at Cirrus (my only
23 * documentation about the SP OS running inside
24 * the DSP)
25 */
26
27#ifndef __CS46XX_DSP_SCB_TYPES_H__
28#define __CS46XX_DSP_SCB_TYPES_H__
29
30#include <asm/byteorder.h>
31
32#ifndef ___DSP_DUAL_16BIT_ALLOC
33#if defined(__LITTLE_ENDIAN)
34#define ___DSP_DUAL_16BIT_ALLOC(a,b) u16 a; u16 b;
35#elif defined(__BIG_ENDIAN)
36#define ___DSP_DUAL_16BIT_ALLOC(a,b) u16 b; u16 a;
37#else
38#error Not __LITTLE_ENDIAN and not __BIG_ENDIAN, then what ???
39#endif
40#endif
41
42/* This structs are used internally by the SP */
43
44struct dsp_basic_dma_req {
45 /* DMA Requestor Word 0 (DCW) fields:
46
47 31 [30-28]27 [26:24] 23 22 21 20 [19:18] [17:16] 15 14 13 12 11 10 9 8 7 6 [5:0]
48 _______________________________________________________________________________________
49 |S| SBT |D| DBT |wb|wb| | | LS | SS |Opt|Do|SSG|DSG| | | | | | | Dword |
50 |H|_____ |H|_________|S_|D |__|__|______|_______|___|ne|__ |__ |__|__|_|_|_|_|_Count -1|
51 */
52 u32 dcw; /* DMA Control Word */
53 u32 dmw; /* DMA Mode Word */
54 u32 saw; /* Source Address Word */
55 u32 daw; /* Destination Address Word */
56};
57
58struct dsp_scatter_gather_ext {
59 u32 npaw; /* Next-Page Address Word */
60
61 /* DMA Requestor Word 5 (NPCW) fields:
62
63 31-30 29 28 [27:16] [15:12] [11:3] [2:0]
64 _________________________________________________________________________________________
65 |SV |LE|SE| Sample-end byte offset | | Page-map entry offset for next | |
66 |page|__|__| ___________________________|_________|__page, if !sample-end___________|____|
67 */
68 u32 npcw; /* Next-Page Control Word */
69 u32 lbaw; /* Loop-Begin Address Word */
70 u32 nplbaw; /* Next-Page after Loop-Begin Address Word */
71 u32 sgaw; /* Scatter/Gather Address Word */
72};
73
74struct dsp_volume_control {
75 ___DSP_DUAL_16BIT_ALLOC(
76 rightTarg, /* Target volume for left & right channels */
77 leftTarg
78 )
79 ___DSP_DUAL_16BIT_ALLOC(
80 rightVol, /* Current left & right channel volumes */
81 leftVol
82 )
83};
84
85/* Generic stream control block (SCB) structure definition */
86struct dsp_generic_scb {
87 /* For streaming I/O, the DSP should never alter any words in the DMA
88 requestor or the scatter/gather extension. Only ad hoc DMA request
89 streams are free to alter the requestor (currently only occur in the
90 DOS-based MIDI controller and in debugger-inserted code).
91
92 If an SCB does not have any associated DMA requestor, these 9 ints
93 may be freed for use by other tasks, but the pointer to the SCB must
94 still be such that the insOrd:nextSCB appear at offset 9 from the
95 SCB pointer.
96
97 Basic (non scatter/gather) DMA requestor (4 ints)
98 */
99
100 /* Initialized by the host, only modified by DMA
101 R/O for the DSP task */
102 struct dsp_basic_dma_req basic_req; /* Optional */
103
104 /* Scatter/gather DMA requestor extension (5 ints)
105 Initialized by the host, only modified by DMA
106 DSP task never needs to even read these.
107 */
108 struct dsp_scatter_gather_ext sg_ext; /* Optional */
109
110 /* Sublist pointer & next stream control block (SCB) link.
111 Initialized & modified by the host R/O for the DSP task
112 */
113 ___DSP_DUAL_16BIT_ALLOC(
114 next_scb, /* REQUIRED */
115 sub_list_ptr /* REQUIRED */
116 )
117
118 /* Pointer to this tasks parameter block & stream function pointer
119 Initialized by the host R/O for the DSP task */
120 ___DSP_DUAL_16BIT_ALLOC(
121 entry_point, /* REQUIRED */
122 this_spb /* REQUIRED */
123 )
124
125 /* rsConfig register for stream buffer (rsDMA reg.
126 is loaded from basicReq.daw for incoming streams, or
127 basicReq.saw, for outgoing streams)
128
129 31 30 29 [28:24] [23:16] 15 14 13 12 11 10 9 8 7 6 5 4 [3:0]
130 ______________________________________________________________________________
131 |DMA |D|maxDMAsize| streamNum|dir|p| | | | | | |ds |shr 1|rev Cy | mod |
132 |prio |_|__________|__________|___|_|__|__|__|__|_|_|___|_____|_______|_______|
133 31 30 29 [28:24] [23:16] 15 14 13 12 11 10 9 8 7 6 5 4 [3:0]
134
135
136 Initialized by the host R/O for the DSP task
137 */
138 u32 strm_rs_config; /* REQUIRED */
139 //
140 /* On mixer input streams: indicates mixer input stream configuration
141 On Tees, this is copied from the stream being snooped
142
143 Stream sample pointer & MAC-unit mode for this stream
144
145 Initialized by the host Updated by the DSP task
146 */
147 u32 strm_buf_ptr; /* REQUIRED */
148
149 /* On mixer input streams: points to next mixer input and is updated by the
150 mixer subroutine in the "parent" DSP task
151 (least-significant 16 bits are preserved, unused)
152
153 On Tees, the pointer is copied from the stream being snooped on
154 initialization, and, subsequently, it is copied into the
155 stream being snooped.
156
157 On wavetable/3D voices: the strmBufPtr will use all 32 bits to allow for
158 fractional phase accumulation
159
160 Fractional increment per output sample in the input sample buffer
161
162 (Not used on mixer input streams & redefined on Tees)
163 On wavetable/3D voices: this 32-bit word specifies the integer.fractional
164 increment per output sample.
165 */
166 u32 strmPhiIncr;
167
168
169 /* Standard stereo volume control
170 Initialized by the host (host updates target volumes)
171
172 Current volumes update by the DSP task
173 On mixer input streams: required & updated by the mixer subroutine in the
174 "parent" DSP task
175
176 On Tees, both current & target volumes are copied up on initialization,
177 and, subsequently, the target volume is copied up while the current
178 volume is copied down.
179
180 These two 32-bit words are redefined for wavetable & 3-D voices.
181 */
182 struct dsp_volume_control vol_ctrl_t; /* Optional */
183};
184
185
186struct dsp_spos_control_block {
187 /* WARNING: Certain items in this structure are modified by the host
188 Any dword that can be modified by the host, must not be
189 modified by the SP as the host can only do atomic dword
190 writes, and to do otherwise, even a read modify write,
191 may lead to corrupted data on the SP.
192
193 This rule does not apply to one off boot time initialisation prior to starting the SP
194 */
195
196
197 ___DSP_DUAL_16BIT_ALLOC(
198 /* First element on the Hyper forground task tree */
199 hfg_tree_root_ptr, /* HOST */
200 /* First 3 dwords are written by the host and read-only on the DSP */
201 hfg_stack_base /* HOST */
202 )
203
204 ___DSP_DUAL_16BIT_ALLOC(
205 /* Point to this data structure to enable easy access */
206 spos_cb_ptr, /* SP */
207 prev_task_tree_ptr /* SP && HOST */
208 )
209
210 ___DSP_DUAL_16BIT_ALLOC(
211 /* Currently Unused */
212 xxinterval_timer_period,
213 /* Enable extension of SPOS data structure */
214 HFGSPB_ptr
215 )
216
217
218 ___DSP_DUAL_16BIT_ALLOC(
219 xxnum_HFG_ticks_thisInterval,
220 /* Modified by the DSP */
221 xxnum_tntervals
222 )
223
224
225 /* Set by DSP upon encountering a trap (breakpoint) or a spurious
226 interrupt. The host must clear this dword after reading it
227 upon receiving spInt1. */
228 ___DSP_DUAL_16BIT_ALLOC(
229 spurious_int_flag, /* (Host & SP) Nature of the spurious interrupt */
230 trap_flag /* (Host & SP) Nature of detected Trap */
231 )
232
233 ___DSP_DUAL_16BIT_ALLOC(
234 unused2,
235 invalid_IP_flag /* (Host & SP ) Indicate detection of invalid instruction pointer */
236 )
237
238 ___DSP_DUAL_16BIT_ALLOC(
239 /* pointer to forground task tree header for use in next task search */
240 fg_task_tree_hdr_ptr, /* HOST */
241 /* Data structure for controlling synchronous link update */
242 hfg_sync_update_ptr /* HOST */
243 )
244
245 ___DSP_DUAL_16BIT_ALLOC(
246 begin_foreground_FCNT, /* SP */
247 /* Place holder for holding sleep timing */
248 last_FCNT_before_sleep /* SP */
249 )
250
251 ___DSP_DUAL_16BIT_ALLOC(
252 unused7, /* SP */
253 next_task_treePtr /* SP */
254 )
255
256 u32 unused5;
257
258 ___DSP_DUAL_16BIT_ALLOC(
259 active_flags, /* SP */
260 /* State flags, used to assist control of execution of Hyper Forground */
261 HFG_flags /* SP */
262 )
263
264 ___DSP_DUAL_16BIT_ALLOC(
265 unused9,
266 unused8
267 )
268
269 /* Space for saving enough context so that we can set up enough
270 to save some more context.
271 */
272 u32 rFE_save_for_invalid_IP;
273 u32 r32_save_for_spurious_int;
274 u32 r32_save_for_trap;
275 u32 r32_save_for_HFG;
276};
277
278/* SPB for MIX_TO_OSTREAM algorithm family */
279struct dsp_mix2_ostream_spb
280{
281 /* 16b.16b integer.frac approximation to the
282 number of 3 sample triplets to output each
283 frame. (approximation must be floor, to
284 insure that the fractional error is always
285 positive)
286 */
287 u32 outTripletsPerFrame;
288
289 /* 16b.16b integer.frac accumulated number of
290 output triplets since the start of group
291 */
292 u32 accumOutTriplets;
293};
294
295/* SCB for Timing master algorithm */
296struct dsp_timing_master_scb {
297 /* First 12 dwords from generic_scb_t */
298 struct dsp_basic_dma_req basic_req; /* Optional */
299 struct dsp_scatter_gather_ext sg_ext; /* Optional */
300 ___DSP_DUAL_16BIT_ALLOC(
301 next_scb, /* REQUIRED */
302 sub_list_ptr /* REQUIRED */
303 )
304
305 ___DSP_DUAL_16BIT_ALLOC(
306 entry_point, /* REQUIRED */
307 this_spb /* REQUIRED */
308 )
309
310 ___DSP_DUAL_16BIT_ALLOC(
311 /* Initial values are 0000:xxxx */
312 reserved,
313 extra_sample_accum
314 )
315
316
317 /* Initial values are xxxx:0000
318 hi: Current CODEC output FIFO pointer
319 (0 to 0x0f)
320 lo: Flag indicating that the CODEC
321 FIFO is sync'd (host clears to
322 resynchronize the FIFO pointer
323 upon start/restart)
324 */
325 ___DSP_DUAL_16BIT_ALLOC(
326 codec_FIFO_syncd,
327 codec_FIFO_ptr
328 )
329
330 /* Init. 8000:0005 for 44.1k
331 8000:0001 for 48k
332 hi: Fractional sample accumulator 0.16b
333 lo: Number of frames remaining to be
334 processed in the current group of
335 frames
336 */
337 ___DSP_DUAL_16BIT_ALLOC(
338 frac_samp_accum_qm1,
339 TM_frms_left_in_group
340 )
341
342 /* Init. 0001:0005 for 44.1k
343 0000:0001 for 48k
344 hi: Fractional sample correction factor 0.16b
345 to be added every frameGroupLength frames
346 to correct for truncation error in
347 nsamp_per_frm_q15
348 lo: Number of frames in the group
349 */
350 ___DSP_DUAL_16BIT_ALLOC(
351 frac_samp_correction_qm1,
352 TM_frm_group_length
353 )
354
355 /* Init. 44.1k*65536/8k = 0x00058333 for 44.1k
356 48k*65536/8k = 0x00060000 for 48k
357 16b.16b integer.frac approximation to the
358 number of samples to output each frame.
359 (approximation must be floor, to insure */
360 u32 nsamp_per_frm_q15;
361};
362
363/* SCB for CODEC output algorithm */
364struct dsp_codec_output_scb {
365 /* First 13 dwords from generic_scb_t */
366 struct dsp_basic_dma_req basic_req; /* Optional */
367 struct dsp_scatter_gather_ext sg_ext; /* Optional */
368 ___DSP_DUAL_16BIT_ALLOC(
369 next_scb, /* REQUIRED */
370 sub_list_ptr /* REQUIRED */
371 )
372
373 ___DSP_DUAL_16BIT_ALLOC(
374 entry_point, /* REQUIRED */
375 this_spb /* REQUIRED */
376 )
377
378 u32 strm_rs_config; /* REQUIRED */
379
380 u32 strm_buf_ptr; /* REQUIRED */
381
382 /* NOTE: The CODEC output task reads samples from the first task on its
383 sublist at the stream buffer pointer (init. to lag DMA destination
384 address word). After the required number of samples is transferred,
385 the CODEC output task advances sub_list_ptr->strm_buf_ptr past the samples
386 consumed.
387 */
388
389 /* Init. 0000:0010 for SDout
390 0060:0010 for SDout2
391 0080:0010 for SDout3
392 hi: Base IO address of FIFO to which
393 the left-channel samples are to
394 be written.
395 lo: Displacement for the base IO
396 address for left-channel to obtain
397 the base IO address for the FIFO
398 to which the right-channel samples
399 are to be written.
400 */
401 ___DSP_DUAL_16BIT_ALLOC(
402 left_chan_base_IO_addr,
403 right_chan_IO_disp
404 )
405
406
407 /* Init: 0x0080:0004 for non-AC-97
408 Init: 0x0080:0000 for AC-97
409 hi: Exponential volume change rate
410 for input stream
411 lo: Positive shift count to shift the
412 16-bit input sample to obtain the
413 32-bit output word
414 */
415 ___DSP_DUAL_16BIT_ALLOC(
416 CO_scale_shift_count,
417 CO_exp_vol_change_rate
418 )
419
420 /* Pointer to SCB at end of input chain */
421 ___DSP_DUAL_16BIT_ALLOC(
422 reserved,
423 last_sub_ptr
424 )
425};
426
427/* SCB for CODEC input algorithm */
428struct dsp_codec_input_scb {
429 /* First 13 dwords from generic_scb_t */
430 struct dsp_basic_dma_req basic_req; /* Optional */
431 struct dsp_scatter_gather_ext sg_ext; /* Optional */
432 ___DSP_DUAL_16BIT_ALLOC(
433 next_scb, /* REQUIRED */
434 sub_list_ptr /* REQUIRED */
435 )
436
437 ___DSP_DUAL_16BIT_ALLOC(
438 entry_point, /* REQUIRED */
439 this_spb /* REQUIRED */
440 )
441
442 u32 strm_rs_config; /* REQUIRED */
443 u32 strm_buf_ptr; /* REQUIRED */
444
445 /* NOTE: The CODEC input task reads samples from the hardware FIFO
446 sublist at the DMA source address word (sub_list_ptr->basic_req.saw).
447 After the required number of samples is transferred, the CODEC
448 output task advances sub_list_ptr->basic_req.saw past the samples
449 consumed. SPuD must initialize the sub_list_ptr->basic_req.saw
450 to point half-way around from the initial sub_list_ptr->strm_nuf_ptr
451 to allow for lag/lead.
452 */
453
454 /* Init. 0000:0010 for SDout
455 0060:0010 for SDout2
456 0080:0010 for SDout3
457 hi: Base IO address of FIFO to which
458 the left-channel samples are to
459 be written.
460 lo: Displacement for the base IO
461 address for left-channel to obtain
462 the base IO address for the FIFO
463 to which the right-channel samples
464 are to be written.
465 */
466 ___DSP_DUAL_16BIT_ALLOC(
467 rightChanINdisp,
468 left_chan_base_IN_addr
469 )
470 /* Init. ?:fffc
471 lo: Negative shift count to shift the
472 32-bit input dword to obtain the
473 16-bit sample msb-aligned (count
474 is negative to shift left)
475 */
476 ___DSP_DUAL_16BIT_ALLOC(
477 scaleShiftCount,
478 reserver1
479 )
480
481 u32 reserved2;
482};
483
484
485struct dsp_pcm_serial_input_scb {
486 /* First 13 dwords from generic_scb_t */
487 struct dsp_basic_dma_req basic_req; /* Optional */
488 struct dsp_scatter_gather_ext sg_ext; /* Optional */
489 ___DSP_DUAL_16BIT_ALLOC(
490 next_scb, /* REQUIRED */
491 sub_list_ptr /* REQUIRED */
492 )
493
494 ___DSP_DUAL_16BIT_ALLOC(
495 entry_point, /* REQUIRED */
496 this_spb /* REQUIRED */
497 )
498
499 u32 strm_buf_ptr; /* REQUIRED */
500 u32 strm_rs_config; /* REQUIRED */
501
502 /* Init. Ptr to CODEC input SCB
503 hi: Pointer to the SCB containing the
504 input buffer to which CODEC input
505 samples are written
506 lo: Flag indicating the link to the CODEC
507 input task is to be initialized
508 */
509 ___DSP_DUAL_16BIT_ALLOC(
510 init_codec_input_link,
511 codec_input_buf_scb
512 )
513
514 /* Initialized by the host (host updates target volumes) */
515 struct dsp_volume_control psi_vol_ctrl;
516
517};
518
519struct dsp_src_task_scb {
520 ___DSP_DUAL_16BIT_ALLOC(
521 frames_left_in_gof,
522 gofs_left_in_sec
523 )
524
525 ___DSP_DUAL_16BIT_ALLOC(
526 const2_thirds,
527 num_extra_tnput_samples
528 )
529
530 ___DSP_DUAL_16BIT_ALLOC(
531 cor_per_gof,
532 correction_per_sec
533 )
534
535 ___DSP_DUAL_16BIT_ALLOC(
536 output_buf_producer_ptr,
537 junk_DMA_MID
538 )
539
540 ___DSP_DUAL_16BIT_ALLOC(
541 gof_length,
542 gofs_per_sec
543 )
544
545 u32 input_buf_strm_config;
546
547 ___DSP_DUAL_16BIT_ALLOC(
548 reserved_for_SRC_use,
549 input_buf_consumer_ptr
550 )
551
552 u32 accum_phi;
553
554 ___DSP_DUAL_16BIT_ALLOC(
555 exp_src_vol_change_rate,
556 input_buf_producer_ptr
557 )
558
559 ___DSP_DUAL_16BIT_ALLOC(
560 src_next_scb,
561 src_sub_list_ptr
562 )
563
564 ___DSP_DUAL_16BIT_ALLOC(
565 src_entry_point,
566 src_this_sbp
567 )
568
569 u32 src_strm_rs_config;
570 u32 src_strm_buf_ptr;
571
572 u32 phiIncr6int_26frac;
573
574 struct dsp_volume_control src_vol_ctrl;
575};
576
577struct dsp_decimate_by_pow2_scb {
578 /* decimationFactor = 2, 4, or 8 (larger factors waste too much memory
579 when compared to cascading decimators)
580 */
581 ___DSP_DUAL_16BIT_ALLOC(
582 dec2_coef_base_ptr,
583 dec2_coef_increment
584 )
585
586 /* coefIncrement = 128 / decimationFactor (for our ROM filter)
587 coefBasePtr = 0x8000 (for our ROM filter)
588 */
589 ___DSP_DUAL_16BIT_ALLOC(
590 dec2_in_samples_per_out_triplet,
591 dec2_extra_in_samples
592 )
593 /* extraInSamples: # of accumulated, unused input samples (init. to 0)
594 inSamplesPerOutTriplet = 3 * decimationFactor
595 */
596
597 ___DSP_DUAL_16BIT_ALLOC(
598 dec2_const2_thirds,
599 dec2_half_num_taps_mp5
600 )
601 /* halfNumTapsM5: (1/2 number of taps in decimation filter) minus 5
602 const2thirds: constant 2/3 in 16Q0 format (sign.15)
603 */
604
605 ___DSP_DUAL_16BIT_ALLOC(
606 dec2_output_buf_producer_ptr,
607 dec2_junkdma_mid
608 )
609
610 u32 dec2_reserved2;
611
612 u32 dec2_input_nuf_strm_config;
613 /* inputBufStrmConfig: rsConfig for the input buffer to the decimator
614 (buffer size = decimationFactor * 32 dwords)
615 */
616
617 ___DSP_DUAL_16BIT_ALLOC(
618 dec2_phi_incr,
619 dec2_input_buf_consumer_ptr
620 )
621 /* inputBufConsumerPtr: Input buffer read pointer (into SRC filter)
622 phiIncr = decimationFactor * 4
623 */
624
625 u32 dec2_reserved3;
626
627 ___DSP_DUAL_16BIT_ALLOC(
628 dec2_exp_vol_change_rate,
629 dec2_input_buf_producer_ptr
630 )
631 /* inputBufProducerPtr: Input buffer write pointer
632 expVolChangeRate: Exponential volume change rate for possible
633 future mixer on input streams
634 */
635
636 ___DSP_DUAL_16BIT_ALLOC(
637 dec2_next_scb,
638 dec2_sub_list_ptr
639 )
640
641 ___DSP_DUAL_16BIT_ALLOC(
642 dec2_entry_point,
643 dec2_this_spb
644 )
645
646 u32 dec2_strm_rs_config;
647 u32 dec2_strm_buf_ptr;
648
649 u32 dec2_reserved4;
650
651 struct dsp_volume_control dec2_vol_ctrl; /* Not used! */
652};
653
654struct dsp_vari_decimate_scb {
655 ___DSP_DUAL_16BIT_ALLOC(
656 vdec_frames_left_in_gof,
657 vdec_gofs_left_in_sec
658 )
659
660 ___DSP_DUAL_16BIT_ALLOC(
661 vdec_const2_thirds,
662 vdec_extra_in_samples
663 )
664 /* extraInSamples: # of accumulated, unused input samples (init. to 0)
665 const2thirds: constant 2/3 in 16Q0 format (sign.15) */
666
667 ___DSP_DUAL_16BIT_ALLOC(
668 vdec_cor_per_gof,
669 vdec_correction_per_sec
670 )
671
672 ___DSP_DUAL_16BIT_ALLOC(
673 vdec_output_buf_producer_ptr,
674 vdec_input_buf_consumer_ptr
675 )
676 /* inputBufConsumerPtr: Input buffer read pointer (into SRC filter) */
677 ___DSP_DUAL_16BIT_ALLOC(
678 vdec_gof_length,
679 vdec_gofs_per_sec
680 )
681
682 u32 vdec_input_buf_strm_config;
683 /* inputBufStrmConfig: rsConfig for the input buffer to the decimator
684 (buffer size = 64 dwords) */
685 u32 vdec_coef_increment;
686 /* coefIncrement = - 128.0 / decimationFactor (as a 32Q15 number) */
687
688 u32 vdec_accumphi;
689 /* accumPhi: accumulated fractional phase increment (6.26) */
690
691 ___DSP_DUAL_16BIT_ALLOC(
692 vdec_exp_vol_change_rate,
693 vdec_input_buf_producer_ptr
694 )
695 /* inputBufProducerPtr: Input buffer write pointer
696 expVolChangeRate: Exponential volume change rate for possible
697 future mixer on input streams */
698
699 ___DSP_DUAL_16BIT_ALLOC(
700 vdec_next_scb,
701 vdec_sub_list_ptr
702 )
703
704 ___DSP_DUAL_16BIT_ALLOC(
705 vdec_entry_point,
706 vdec_this_spb
707 )
708
709 u32 vdec_strm_rs_config;
710 u32 vdec_strm_buf_ptr;
711
712 u32 vdec_phi_incr_6int_26frac;
713
714 struct dsp_volume_control vdec_vol_ctrl;
715};
716
717
718/* SCB for MIX_TO_OSTREAM algorithm family */
719struct dsp_mix2_ostream_scb {
720 /* First 13 dwords from generic_scb_t */
721 struct dsp_basic_dma_req basic_req; /* Optional */
722 struct dsp_scatter_gather_ext sg_ext; /* Optional */
723 ___DSP_DUAL_16BIT_ALLOC(
724 next_scb, /* REQUIRED */
725 sub_list_ptr /* REQUIRED */
726 )
727
728 ___DSP_DUAL_16BIT_ALLOC(
729 entry_point, /* REQUIRED */
730 this_spb /* REQUIRED */
731 )
732
733 u32 strm_rs_config; /* REQUIRED */
734 u32 strm_buf_ptr; /* REQUIRED */
735
736
737 /* hi: Number of mixed-down input triplets
738 computed since start of group
739 lo: Number of frames remaining to be
740 processed in the current group of
741 frames
742 */
743 ___DSP_DUAL_16BIT_ALLOC(
744 frames_left_in_group,
745 accum_input_triplets
746 )
747
748 /* hi: Exponential volume change rate
749 for mixer on input streams
750 lo: Number of frames in the group
751 */
752 ___DSP_DUAL_16BIT_ALLOC(
753 frame_group_length,
754 exp_vol_change_rate
755 )
756
757 ___DSP_DUAL_16BIT_ALLOC(
758 const_FFFF,
759 const_zero
760 )
761};
762
763
764/* SCB for S16_MIX algorithm */
765struct dsp_mix_only_scb {
766 /* First 13 dwords from generic_scb_t */
767 struct dsp_basic_dma_req basic_req; /* Optional */
768 struct dsp_scatter_gather_ext sg_ext; /* Optional */
769 ___DSP_DUAL_16BIT_ALLOC(
770 next_scb, /* REQUIRED */
771 sub_list_ptr /* REQUIRED */
772 )
773
774 ___DSP_DUAL_16BIT_ALLOC(
775 entry_point, /* REQUIRED */
776 this_spb /* REQUIRED */
777 )
778
779 u32 strm_rs_config; /* REQUIRED */
780 u32 strm_buf_ptr; /* REQUIRED */
781
782 u32 reserved;
783 struct dsp_volume_control vol_ctrl;
784};
785
786/* SCB for the async. CODEC input algorithm */
787struct dsp_async_codec_input_scb {
788 u32 io_free2;
789
790 u32 io_current_total;
791 u32 io_previous_total;
792
793 u16 io_count;
794 u16 io_count_limit;
795
796 u16 o_fifo_base_addr;
797 u16 ost_mo_format;
798 /* 1 = stereo; 0 = mono
799 xxx for ASER 1 (not allowed); 118 for ASER2 */
800
801 u32 ostrm_rs_config;
802 u32 ostrm_buf_ptr;
803
804 ___DSP_DUAL_16BIT_ALLOC(
805 io_sclks_per_lr_clk,
806 io_io_enable
807 )
808
809 u32 io_free4;
810
811 ___DSP_DUAL_16BIT_ALLOC(
812 io_next_scb,
813 io_sub_list_ptr
814 )
815
816 ___DSP_DUAL_16BIT_ALLOC(
817 io_entry_point,
818 io_this_spb
819 )
820
821 u32 istrm_rs_config;
822 u32 istrm_buf_ptr;
823
824 /* Init. 0000:8042: for ASER1
825 0000:8044: for ASER2 */
826 ___DSP_DUAL_16BIT_ALLOC(
827 io_stat_reg_addr,
828 iofifo_pointer
829 )
830
831 /* Init 1 stero:100 ASER1
832 Init 0 mono:110 ASER2
833 */
834 ___DSP_DUAL_16BIT_ALLOC(
835 ififo_base_addr,
836 ist_mo_format
837 )
838
839 u32 i_free;
840};
841
842
843/* SCB for the SP/DIF CODEC input and output */
844struct dsp_spdifiscb {
845 ___DSP_DUAL_16BIT_ALLOC(
846 status_ptr,
847 status_start_ptr
848 )
849
850 u32 current_total;
851 u32 previous_total;
852
853 ___DSP_DUAL_16BIT_ALLOC(
854 count,
855 count_limit
856 )
857
858 u32 status_data;
859
860 ___DSP_DUAL_16BIT_ALLOC(
861 status,
862 free4
863 )
864
865 u32 free3;
866
867 ___DSP_DUAL_16BIT_ALLOC(
868 free2,
869 bit_count
870 )
871
872 u32 temp_status;
873
874 ___DSP_DUAL_16BIT_ALLOC(
875 next_SCB,
876 sub_list_ptr
877 )
878
879 ___DSP_DUAL_16BIT_ALLOC(
880 entry_point,
881 this_spb
882 )
883
884 u32 strm_rs_config;
885 u32 strm_buf_ptr;
886
887 ___DSP_DUAL_16BIT_ALLOC(
888 stat_reg_addr,
889 fifo_pointer
890 )
891
892 ___DSP_DUAL_16BIT_ALLOC(
893 fifo_base_addr,
894 st_mo_format
895 )
896
897 u32 free1;
898};
899
900
901/* SCB for the SP/DIF CODEC input and output */
902struct dsp_spdifoscb {
903
904 u32 free2;
905
906 u32 free3[4];
907
908 /* Need to be here for compatibility with AsynchFGTxCode */
909 u32 strm_rs_config;
910
911 u32 strm_buf_ptr;
912
913 ___DSP_DUAL_16BIT_ALLOC(
914 status,
915 free5
916 )
917
918 u32 free4;
919
920 ___DSP_DUAL_16BIT_ALLOC(
921 next_scb,
922 sub_list_ptr
923 )
924
925 ___DSP_DUAL_16BIT_ALLOC(
926 entry_point,
927 this_spb
928 )
929
930 u32 free6[2];
931
932 ___DSP_DUAL_16BIT_ALLOC(
933 stat_reg_addr,
934 fifo_pointer
935 )
936
937 ___DSP_DUAL_16BIT_ALLOC(
938 fifo_base_addr,
939 st_mo_format
940 )
941
942 u32 free1;
943};
944
945
946struct dsp_asynch_fg_rx_scb {
947 ___DSP_DUAL_16BIT_ALLOC(
948 bot_buf_mask,
949 buf_Mask
950 )
951
952 ___DSP_DUAL_16BIT_ALLOC(
953 max,
954 min
955 )
956
957 ___DSP_DUAL_16BIT_ALLOC(
958 old_producer_pointer,
959 hfg_scb_ptr
960 )
961
962 ___DSP_DUAL_16BIT_ALLOC(
963 delta,
964 adjust_count
965 )
966
967 u32 unused2[5];
968
969 ___DSP_DUAL_16BIT_ALLOC(
970 sibling_ptr,
971 child_ptr
972 )
973
974 ___DSP_DUAL_16BIT_ALLOC(
975 code_ptr,
976 this_ptr
977 )
978
979 u32 strm_rs_config;
980
981 u32 strm_buf_ptr;
982
983 u32 unused_phi_incr;
984
985 ___DSP_DUAL_16BIT_ALLOC(
986 right_targ,
987 left_targ
988 )
989
990 ___DSP_DUAL_16BIT_ALLOC(
991 right_vol,
992 left_vol
993 )
994};
995
996
997struct dsp_asynch_fg_tx_scb {
998 ___DSP_DUAL_16BIT_ALLOC(
999 not_buf_mask,
1000 buf_mask
1001 )
1002
1003 ___DSP_DUAL_16BIT_ALLOC(
1004 max,
1005 min
1006 )
1007
1008 ___DSP_DUAL_16BIT_ALLOC(
1009 unused1,
1010 hfg_scb_ptr
1011 )
1012
1013 ___DSP_DUAL_16BIT_ALLOC(
1014 delta,
1015 adjust_count
1016 )
1017
1018 u32 accum_phi;
1019
1020 ___DSP_DUAL_16BIT_ALLOC(
1021 unused2,
1022 const_one_third
1023 )
1024
1025 u32 unused3[3];
1026
1027 ___DSP_DUAL_16BIT_ALLOC(
1028 sibling_ptr,
1029 child_ptr
1030 )
1031
1032 ___DSP_DUAL_16BIT_ALLOC(
1033 codePtr,
1034 this_ptr
1035 )
1036
1037 u32 strm_rs_config;
1038
1039 u32 strm_buf_ptr;
1040
1041 u32 phi_incr;
1042
1043 ___DSP_DUAL_16BIT_ALLOC(
1044 unused_right_targ,
1045 unused_left_targ
1046 )
1047
1048 ___DSP_DUAL_16BIT_ALLOC(
1049 unused_right_vol,
1050 unused_left_vol
1051 )
1052};
1053
1054
1055struct dsp_output_snoop_scb {
1056 /* First 13 dwords from generic_scb_t */
1057 struct dsp_basic_dma_req basic_req; /* Optional */
1058 struct dsp_scatter_gather_ext sg_ext; /* Optional */
1059 ___DSP_DUAL_16BIT_ALLOC(
1060 next_scb, /* REQUIRED */
1061 sub_list_ptr /* REQUIRED */
1062 )
1063
1064 ___DSP_DUAL_16BIT_ALLOC(
1065 entry_point, /* REQUIRED */
1066 this_spb /* REQUIRED */
1067 )
1068
1069 u32 strm_rs_config; /* REQUIRED */
1070 u32 strm_buf_ptr; /* REQUIRED */
1071
1072 ___DSP_DUAL_16BIT_ALLOC(
1073 init_snoop_input_link,
1074 snoop_child_input_scb
1075 )
1076
1077 u32 snoop_input_buf_ptr;
1078
1079 ___DSP_DUAL_16BIT_ALLOC(
1080 reserved,
1081 input_scb
1082 )
1083};
1084
1085struct dsp_spio_write_scb {
1086 ___DSP_DUAL_16BIT_ALLOC(
1087 address1,
1088 address2
1089 )
1090
1091 u32 data1;
1092
1093 u32 data2;
1094
1095 ___DSP_DUAL_16BIT_ALLOC(
1096 address3,
1097 address4
1098 )
1099
1100 u32 data3;
1101
1102 u32 data4;
1103
1104 ___DSP_DUAL_16BIT_ALLOC(
1105 unused1,
1106 data_ptr
1107 )
1108
1109 u32 unused2[2];
1110
1111 ___DSP_DUAL_16BIT_ALLOC(
1112 sibling_ptr,
1113 child_ptr
1114 )
1115
1116 ___DSP_DUAL_16BIT_ALLOC(
1117 entry_point,
1118 this_ptr
1119 )
1120
1121 u32 unused3[5];
1122};
1123
1124struct dsp_magic_snoop_task {
1125 u32 i0;
1126 u32 i1;
1127
1128 u32 strm_buf_ptr1;
1129
1130 u16 i2;
1131 u16 snoop_scb;
1132
1133 u32 i3;
1134 u32 i4;
1135 u32 i5;
1136 u32 i6;
1137
1138 u32 i7;
1139
1140 ___DSP_DUAL_16BIT_ALLOC(
1141 next_scb,
1142 sub_list_ptr
1143 )
1144
1145 ___DSP_DUAL_16BIT_ALLOC(
1146 entry_point,
1147 this_ptr
1148 )
1149
1150 u32 strm_buf_config;
1151 u32 strm_buf_ptr2;
1152
1153 u32 i8;
1154
1155 struct dsp_volume_control vdec_vol_ctrl;
1156};
1157
1158
1159struct dsp_filter_scb {
1160 ___DSP_DUAL_16BIT_ALLOC(
1161 a0_right, /* 0x00 */
1162 a0_left
1163 )
1164 ___DSP_DUAL_16BIT_ALLOC(
1165 a1_right, /* 0x01 */
1166 a1_left
1167 )
1168 ___DSP_DUAL_16BIT_ALLOC(
1169 a2_right, /* 0x02 */
1170 a2_left
1171 )
1172 ___DSP_DUAL_16BIT_ALLOC(
1173 output_buf_ptr, /* 0x03 */
1174 init
1175 )
1176
1177 ___DSP_DUAL_16BIT_ALLOC(
1178 filter_unused3, /* 0x04 */
1179 filter_unused2
1180 )
1181
1182 u32 prev_sample_output1; /* 0x05 */
1183 u32 prev_sample_output2; /* 0x06 */
1184 u32 prev_sample_input1; /* 0x07 */
1185 u32 prev_sample_input2; /* 0x08 */
1186
1187 ___DSP_DUAL_16BIT_ALLOC(
1188 next_scb_ptr, /* 0x09 */
1189 sub_list_ptr
1190 )
1191
1192 ___DSP_DUAL_16BIT_ALLOC(
1193 entry_point, /* 0x0A */
1194 spb_ptr
1195 )
1196
1197 u32 strm_rs_config; /* 0x0B */
1198 u32 strm_buf_ptr; /* 0x0C */
1199
1200 ___DSP_DUAL_16BIT_ALLOC(
1201 b0_right, /* 0x0D */
1202 b0_left
1203 )
1204 ___DSP_DUAL_16BIT_ALLOC(
1205 b1_right, /* 0x0E */
1206 b1_left
1207 )
1208 ___DSP_DUAL_16BIT_ALLOC(
1209 b2_right, /* 0x0F */
1210 b2_left
1211 )
1212};
1213#endif /* __DSP_SCB_TYPES_H__ */
diff --git a/include/sound/cs46xx_dsp_spos.h b/include/sound/cs46xx_dsp_spos.h
deleted file mode 100644
index 8008c59288a6..000000000000
--- a/include/sound/cs46xx_dsp_spos.h
+++ /dev/null
@@ -1,234 +0,0 @@
1/*
2 * The driver for the Cirrus Logic's Sound Fusion CS46XX based soundcards
3 * Copyright (c) by Jaroslav Kysela <perex@perex.cz>
4 *
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 *
20 */
21
22#ifndef __CS46XX_DSP_SPOS_H__
23#define __CS46XX_DSP_SPOS_H__
24
25#include "cs46xx_dsp_scb_types.h"
26#include "cs46xx_dsp_task_types.h"
27
28#define SYMBOL_CONSTANT 0x0
29#define SYMBOL_SAMPLE 0x1
30#define SYMBOL_PARAMETER 0x2
31#define SYMBOL_CODE 0x3
32
33#define SEGTYPE_SP_PROGRAM 0x00000001
34#define SEGTYPE_SP_PARAMETER 0x00000002
35#define SEGTYPE_SP_SAMPLE 0x00000003
36#define SEGTYPE_SP_COEFFICIENT 0x00000004
37
38#define DSP_SPOS_UU 0x0deadul /* unused */
39#define DSP_SPOS_DC 0x0badul /* don't care */
40#define DSP_SPOS_DC_DC 0x0bad0badul /* don't care */
41#define DSP_SPOS_UUUU 0xdeadc0edul /* unused */
42#define DSP_SPOS_UUHI 0xdeadul
43#define DSP_SPOS_UULO 0xc0edul
44#define DSP_SPOS_DCDC 0x0badf1d0ul /* don't care */
45#define DSP_SPOS_DCDCHI 0x0badul
46#define DSP_SPOS_DCDCLO 0xf1d0ul
47
48#define DSP_MAX_TASK_NAME 60
49#define DSP_MAX_SYMBOL_NAME 100
50#define DSP_MAX_SCB_NAME 60
51#define DSP_MAX_SCB_DESC 200
52#define DSP_MAX_TASK_DESC 50
53
54#define DSP_MAX_PCM_CHANNELS 32
55#define DSP_MAX_SRC_NR 14
56
57#define DSP_PCM_MAIN_CHANNEL 1
58#define DSP_PCM_REAR_CHANNEL 2
59#define DSP_PCM_CENTER_LFE_CHANNEL 3
60#define DSP_PCM_S71_CHANNEL 4 /* surround 7.1 */
61#define DSP_IEC958_CHANNEL 5
62
63#define DSP_SPDIF_STATUS_OUTPUT_ENABLED 1
64#define DSP_SPDIF_STATUS_PLAYBACK_OPEN 2
65#define DSP_SPDIF_STATUS_HW_ENABLED 4
66#define DSP_SPDIF_STATUS_INPUT_CTRL_ENABLED 8
67
68struct dsp_symbol_entry {
69 u32 address;
70 char symbol_name[DSP_MAX_SYMBOL_NAME];
71 int symbol_type;
72
73 /* initialized by driver */
74 struct dsp_module_desc * module;
75 int deleted;
76};
77
78struct dsp_symbol_desc {
79 int nsymbols;
80
81 struct dsp_symbol_entry *symbols;
82
83 /* initialized by driver */
84 int highest_frag_index;
85};
86
87struct dsp_segment_desc {
88 int segment_type;
89 u32 offset;
90 u32 size;
91 u32 * data;
92};
93
94struct dsp_module_desc {
95 char * module_name;
96 struct dsp_symbol_desc symbol_table;
97 int nsegments;
98 struct dsp_segment_desc * segments;
99
100 /* initialized by driver */
101 u32 overlay_begin_address;
102 u32 load_address;
103 int nfixups;
104};
105
106struct dsp_scb_descriptor {
107 char scb_name[DSP_MAX_SCB_NAME];
108 u32 address;
109 int index;
110 u32 *data;
111
112 struct dsp_scb_descriptor * sub_list_ptr;
113 struct dsp_scb_descriptor * next_scb_ptr;
114 struct dsp_scb_descriptor * parent_scb_ptr;
115
116 struct dsp_symbol_entry * task_entry;
117 struct dsp_symbol_entry * scb_symbol;
118
119 struct snd_info_entry *proc_info;
120 int ref_count;
121
122 u16 volume[2];
123 unsigned int deleted :1;
124 unsigned int updated :1;
125 unsigned int volume_set :1;
126};
127
128struct dsp_task_descriptor {
129 char task_name[DSP_MAX_TASK_NAME];
130 int size;
131 u32 address;
132 int index;
133 u32 *data;
134};
135
136struct dsp_pcm_channel_descriptor {
137 int active;
138 int src_slot;
139 int pcm_slot;
140 u32 sample_rate;
141 u32 unlinked;
142 struct dsp_scb_descriptor * pcm_reader_scb;
143 struct dsp_scb_descriptor * src_scb;
144 struct dsp_scb_descriptor * mixer_scb;
145
146 void * private_data;
147};
148
149struct dsp_spos_instance {
150 struct dsp_symbol_desc symbol_table; /* currently available loaded symbols in SP */
151
152 int nmodules;
153 struct dsp_module_desc * modules; /* modules loaded into SP */
154
155 struct dsp_segment_desc code;
156
157 /* Main PCM playback mixer */
158 struct dsp_scb_descriptor * master_mix_scb;
159 u16 dac_volume_right;
160 u16 dac_volume_left;
161
162 /* Rear/surround PCM playback mixer */
163 struct dsp_scb_descriptor * rear_mix_scb;
164
165 /* Center/LFE mixer */
166 struct dsp_scb_descriptor * center_lfe_mix_scb;
167
168 int npcm_channels;
169 int nsrc_scb;
170 struct dsp_pcm_channel_descriptor pcm_channels[DSP_MAX_PCM_CHANNELS];
171 int src_scb_slots[DSP_MAX_SRC_NR];
172
173 /* cache this symbols */
174 struct dsp_symbol_entry * null_algorithm; /* used by PCMreaderSCB's */
175 struct dsp_symbol_entry * s16_up; /* used by SRCtaskSCB's */
176
177 /* proc fs */
178 struct snd_card *snd_card;
179 struct snd_info_entry * proc_dsp_dir;
180 struct snd_info_entry * proc_sym_info_entry;
181 struct snd_info_entry * proc_modules_info_entry;
182 struct snd_info_entry * proc_parameter_dump_info_entry;
183 struct snd_info_entry * proc_sample_dump_info_entry;
184
185 /* SCB's descriptors */
186 int nscb;
187 int scb_highest_frag_index;
188 struct dsp_scb_descriptor scbs[DSP_MAX_SCB_DESC];
189 struct snd_info_entry * proc_scb_info_entry;
190 struct dsp_scb_descriptor * the_null_scb;
191
192 /* Task's descriptors */
193 int ntask;
194 struct dsp_task_descriptor tasks[DSP_MAX_TASK_DESC];
195 struct snd_info_entry * proc_task_info_entry;
196
197 /* SPDIF status */
198 int spdif_status_out;
199 int spdif_status_in;
200 u16 spdif_input_volume_right;
201 u16 spdif_input_volume_left;
202 /* spdif channel status,
203 left right and user validity bits */
204 unsigned int spdif_csuv_default;
205 unsigned int spdif_csuv_stream;
206
207 /* SPDIF input sample rate converter */
208 struct dsp_scb_descriptor * spdif_in_src;
209 /* SPDIF input asynch. receiver */
210 struct dsp_scb_descriptor * asynch_rx_scb;
211
212 /* Capture record mixer SCB */
213 struct dsp_scb_descriptor * record_mixer_scb;
214
215 /* CODEC input SCB */
216 struct dsp_scb_descriptor * codec_in_scb;
217
218 /* reference snooper */
219 struct dsp_scb_descriptor * ref_snoop_scb;
220
221 /* SPDIF output PCM reference */
222 struct dsp_scb_descriptor * spdif_pcm_input_scb;
223
224 /* asynch TX task */
225 struct dsp_scb_descriptor * asynch_tx_scb;
226
227 /* record sources */
228 struct dsp_scb_descriptor * pcm_input;
229 struct dsp_scb_descriptor * adc_input;
230
231 int spdif_in_sample_rate;
232};
233
234#endif /* __DSP_SPOS_H__ */
diff --git a/include/sound/cs46xx_dsp_task_types.h b/include/sound/cs46xx_dsp_task_types.h
deleted file mode 100644
index 5cf920bfda27..000000000000
--- a/include/sound/cs46xx_dsp_task_types.h
+++ /dev/null
@@ -1,252 +0,0 @@
1/*
2 * The driver for the Cirrus Logic's Sound Fusion CS46XX based soundcards
3 * Copyright (c) by Jaroslav Kysela <perex@perex.cz>
4 *
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 *
20 *
21 * NOTE: comments are copy/paste from cwcemb80.lst
22 * provided by Tom Woller at Cirrus (my only
23 * documentation about the SP OS running inside
24 * the DSP)
25 */
26
27#ifndef __CS46XX_DSP_TASK_TYPES_H__
28#define __CS46XX_DSP_TASK_TYPES_H__
29
30#include "cs46xx_dsp_scb_types.h"
31
32/*********************************************************************************************
33Example hierarchy of stream control blocks in the SP
34
35hfgTree
36Ptr____Call (c)
37 \
38 -------+------ ------------- ------------- ------------- -----
39| SBlaster IF |______\| Foreground |___\| Middlegr'nd |___\| Background |___\| Nul |
40| |Goto /| tree header |g /| tree header |g /| tree header |g /| SCB |r
41 -------------- (g) ------------- ------------- ------------- -----
42 |c |c |c |c
43 | | | |
44 \/ ------------- ------------- -------------
45 | Foreground |_\ | Middlegr'nd |_\ | Background |_\
46 | tree |g/ | tree |g/ | tree |g/
47 ------------- ------------- -------------
48 |c |c |c
49 | | |
50 \/ \/ \/
51
52*********************************************************************************************/
53
54#define HFG_FIRST_EXECUTE_MODE 0x0001
55#define HFG_FIRST_EXECUTE_MODE_BIT 0
56#define HFG_CONTEXT_SWITCH_MODE 0x0002
57#define HFG_CONTEXT_SWITCH_MODE_BIT 1
58
59#define MAX_FG_STACK_SIZE 32 /* THESE NEED TO BE COMPUTED PROPERLY */
60#define MAX_MG_STACK_SIZE 16
61#define MAX_BG_STACK_SIZE 9
62#define MAX_HFG_STACK_SIZE 4
63
64#define SLEEP_ACTIVE_INCREMENT 0 /* Enable task tree thread to go to sleep
65 This should only ever be used on the Background thread */
66#define STANDARD_ACTIVE_INCREMENT 1 /* Task tree thread normal operation */
67#define SUSPEND_ACTIVE_INCREMENT 2 /* Cause execution to suspend in the task tree thread
68 This should only ever be used on the Background thread */
69
70#define HOSTFLAGS_DISABLE_BG_SLEEP 0 /* Host-controlled flag that determines whether we go to sleep
71 at the end of BG */
72
73/* Minimal context save area for Hyper Forground */
74struct dsp_hf_save_area {
75 u32 r10_save;
76 u32 r54_save;
77 u32 r98_save;
78
79 ___DSP_DUAL_16BIT_ALLOC(
80 status_save,
81 ind_save
82 )
83
84 ___DSP_DUAL_16BIT_ALLOC(
85 rci1_save,
86 rci0_save
87 )
88
89 u32 r32_save;
90 u32 r76_save;
91 u32 rsd2_save;
92
93 ___DSP_DUAL_16BIT_ALLOC(
94 rsi2_save, /* See TaskTreeParameterBlock for
95 remainder of registers */
96 rsa2Save
97 )
98 /* saved as part of HFG context */
99};
100
101
102/* Task link data structure */
103struct dsp_tree_link {
104 ___DSP_DUAL_16BIT_ALLOC(
105 /* Pointer to sibling task control block */
106 next_scb,
107 /* Pointer to child task control block */
108 sub_ptr
109 )
110
111 ___DSP_DUAL_16BIT_ALLOC(
112 /* Pointer to code entry point */
113 entry_point,
114 /* Pointer to local data */
115 this_spb
116 )
117};
118
119
120struct dsp_task_tree_data {
121 ___DSP_DUAL_16BIT_ALLOC(
122 /* Initial tock count; controls task tree execution rate */
123 tock_count_limit,
124 /* Tock down counter */
125 tock_count
126 )
127
128 /* Add to ActiveCount when TockCountLimit reached:
129 Subtract on task tree termination */
130 ___DSP_DUAL_16BIT_ALLOC(
131 active_tncrement,
132 /* Number of pending activations for task tree */
133 active_count
134 )
135
136 ___DSP_DUAL_16BIT_ALLOC(
137 /* BitNumber to enable modification of correct bit in ActiveTaskFlags */
138 active_bit,
139 /* Pointer to OS location for indicating current activity on task level */
140 active_task_flags_ptr
141 )
142
143 /* Data structure for controlling movement of memory blocks:-
144 currently unused */
145 ___DSP_DUAL_16BIT_ALLOC(
146 mem_upd_ptr,
147 /* Data structure for controlling synchronous link update */
148 link_upd_ptr
149 )
150
151 ___DSP_DUAL_16BIT_ALLOC(
152 /* Save area for remainder of full context. */
153 save_area,
154 /* Address of start of local stack for data storage */
155 data_stack_base_ptr
156 )
157
158};
159
160
161struct dsp_interval_timer_data
162{
163 /* These data items have the same relative locations to those */
164 ___DSP_DUAL_16BIT_ALLOC(
165 interval_timer_period,
166 itd_unused
167 )
168
169 /* used for this data in the SPOS control block for SPOS 1.0 */
170 ___DSP_DUAL_16BIT_ALLOC(
171 num_FG_ticks_this_interval,
172 num_intervals
173 )
174};
175
176
177/* This structure contains extra storage for the task tree
178 Currently, this additional data is related only to a full context save */
179struct dsp_task_tree_context_block {
180 /* Up to 10 values are saved onto the stack. 8 for the task tree, 1 for
181 The access to the context switch (call or interrupt), and 1 spare that
182 users should never use. This last may be required by the system */
183 ___DSP_DUAL_16BIT_ALLOC(
184 stack1,
185 stack0
186 )
187 ___DSP_DUAL_16BIT_ALLOC(
188 stack3,
189 stack2
190 )
191 ___DSP_DUAL_16BIT_ALLOC(
192 stack5,
193 stack4
194 )
195 ___DSP_DUAL_16BIT_ALLOC(
196 stack7,
197 stack6
198 )
199 ___DSP_DUAL_16BIT_ALLOC(
200 stack9,
201 stack8
202 )
203
204 u32 saverfe;
205
206 /* Value may be overwriten by stack save algorithm.
207 Retain the size of the stack data saved here if used */
208 ___DSP_DUAL_16BIT_ALLOC(
209 reserved1,
210 stack_size
211 )
212 u32 saverba; /* (HFG) */
213 u32 saverdc;
214 u32 savers_config_23; /* (HFG) */
215 u32 savers_DMA23; /* (HFG) */
216 u32 saversa0;
217 u32 saversi0;
218 u32 saversa1;
219 u32 saversi1;
220 u32 saversa3;
221 u32 saversd0;
222 u32 saversd1;
223 u32 saversd3;
224 u32 savers_config01;
225 u32 savers_DMA01;
226 u32 saveacc0hl;
227 u32 saveacc1hl;
228 u32 saveacc0xacc1x;
229 u32 saveacc2hl;
230 u32 saveacc3hl;
231 u32 saveacc2xacc3x;
232 u32 saveaux0hl;
233 u32 saveaux1hl;
234 u32 saveaux0xaux1x;
235 u32 saveaux2hl;
236 u32 saveaux3hl;
237 u32 saveaux2xaux3x;
238 u32 savershouthl;
239 u32 savershoutxmacmode;
240};
241
242
243struct dsp_task_tree_control_block {
244 struct dsp_hf_save_area context;
245 struct dsp_tree_link links;
246 struct dsp_task_tree_data data;
247 struct dsp_task_tree_context_block context_blk;
248 struct dsp_interval_timer_data int_timer;
249};
250
251
252#endif /* __DSP_TASK_TYPES_H__ */
diff --git a/include/sound/designware_i2s.h b/include/sound/designware_i2s.h
new file mode 100644
index 000000000000..26f406e0f673
--- /dev/null
+++ b/include/sound/designware_i2s.h
@@ -0,0 +1,69 @@
1/*
2 * Copyright (ST) 2012 Rajeev Kumar (rajeev-dlh.kumar@st.com)
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 *
18 */
19
20#ifndef __SOUND_DESIGNWARE_I2S_H
21#define __SOUND_DESIGNWARE_I2S_H
22
23#include <linux/dmaengine.h>
24#include <linux/types.h>
25
26/*
27 * struct i2s_clk_config_data - represent i2s clk configuration data
28 * @chan_nr: number of channel
29 * @data_width: number of bits per sample (8/16/24/32 bit)
30 * @sample_rate: sampling frequency (8Khz, 16Khz, 32Khz, 44Khz, 48Khz)
31 */
32struct i2s_clk_config_data {
33 int chan_nr;
34 u32 data_width;
35 u32 sample_rate;
36};
37
38struct i2s_platform_data {
39 #define DWC_I2S_PLAY (1 << 0)
40 #define DWC_I2S_RECORD (1 << 1)
41 unsigned int cap;
42 int channel;
43 u32 snd_fmts;
44 u32 snd_rates;
45
46 void *play_dma_data;
47 void *capture_dma_data;
48 bool (*filter)(struct dma_chan *chan, void *slave);
49 int (*i2s_clk_cfg)(struct i2s_clk_config_data *config);
50};
51
52struct i2s_dma_data {
53 void *data;
54 dma_addr_t addr;
55 u32 max_burst;
56 enum dma_slave_buswidth addr_width;
57 bool (*filter)(struct dma_chan *chan, void *slave);
58};
59
60/* I2S DMA registers */
61#define I2S_RXDMA 0x01C0
62#define I2S_TXDMA 0x01C8
63
64#define TWO_CHANNEL_SUPPORT 2 /* up to 2.0 */
65#define FOUR_CHANNEL_SUPPORT 4 /* up to 3.1 */
66#define SIX_CHANNEL_SUPPORT 6 /* up to 5.1 */
67#define EIGHT_CHANNEL_SUPPORT 8 /* up to 7.1 */
68
69#endif /* __SOUND_DESIGNWARE_I2S_H */
diff --git a/include/sound/dmaengine_pcm.h b/include/sound/dmaengine_pcm.h
index a8fcaa6d531f..b877334bbb0f 100644
--- a/include/sound/dmaengine_pcm.h
+++ b/include/sound/dmaengine_pcm.h
@@ -39,6 +39,7 @@ int snd_hwparams_to_dma_slave_config(const struct snd_pcm_substream *substream,
39 const struct snd_pcm_hw_params *params, struct dma_slave_config *slave_config); 39 const struct snd_pcm_hw_params *params, struct dma_slave_config *slave_config);
40int snd_dmaengine_pcm_trigger(struct snd_pcm_substream *substream, int cmd); 40int snd_dmaengine_pcm_trigger(struct snd_pcm_substream *substream, int cmd);
41snd_pcm_uframes_t snd_dmaengine_pcm_pointer(struct snd_pcm_substream *substream); 41snd_pcm_uframes_t snd_dmaengine_pcm_pointer(struct snd_pcm_substream *substream);
42snd_pcm_uframes_t snd_dmaengine_pcm_pointer_no_residue(struct snd_pcm_substream *substream);
42 43
43int snd_dmaengine_pcm_open(struct snd_pcm_substream *substream, 44int snd_dmaengine_pcm_open(struct snd_pcm_substream *substream,
44 dma_filter_fn filter_fn, void *filter_data); 45 dma_filter_fn filter_fn, void *filter_data);
diff --git a/include/sound/pcm.h b/include/sound/pcm.h
index 0d1112815be3..c75c0d1a85e2 100644
--- a/include/sound/pcm.h
+++ b/include/sound/pcm.h
@@ -810,7 +810,7 @@ int snd_pcm_hw_constraint_integer(struct snd_pcm_runtime *runtime, snd_pcm_hw_pa
810int snd_pcm_hw_constraint_list(struct snd_pcm_runtime *runtime, 810int snd_pcm_hw_constraint_list(struct snd_pcm_runtime *runtime,
811 unsigned int cond, 811 unsigned int cond,
812 snd_pcm_hw_param_t var, 812 snd_pcm_hw_param_t var,
813 struct snd_pcm_hw_constraint_list *l); 813 const struct snd_pcm_hw_constraint_list *l);
814int snd_pcm_hw_constraint_ratnums(struct snd_pcm_runtime *runtime, 814int snd_pcm_hw_constraint_ratnums(struct snd_pcm_runtime *runtime,
815 unsigned int cond, 815 unsigned int cond,
816 snd_pcm_hw_param_t var, 816 snd_pcm_hw_param_t var,
@@ -893,6 +893,7 @@ extern const struct snd_pcm_hw_constraint_list snd_pcm_known_rates;
893 893
894int snd_pcm_limit_hw_rates(struct snd_pcm_runtime *runtime); 894int snd_pcm_limit_hw_rates(struct snd_pcm_runtime *runtime);
895unsigned int snd_pcm_rate_to_rate_bit(unsigned int rate); 895unsigned int snd_pcm_rate_to_rate_bit(unsigned int rate);
896unsigned int snd_pcm_rate_bit_to_rate(unsigned int rate_bit);
896 897
897static inline void snd_pcm_set_runtime_buffer(struct snd_pcm_substream *substream, 898static inline void snd_pcm_set_runtime_buffer(struct snd_pcm_substream *substream,
898 struct snd_dma_buffer *bufp) 899 struct snd_dma_buffer *bufp)
@@ -1073,4 +1074,15 @@ static inline void snd_pcm_limit_isa_dma_size(int dma, size_t *max)
1073 1074
1074const char *snd_pcm_format_name(snd_pcm_format_t format); 1075const char *snd_pcm_format_name(snd_pcm_format_t format);
1075 1076
1077/**
1078 * Get a string naming the direction of a stream
1079 */
1080static inline const char *snd_pcm_stream_str(struct snd_pcm_substream *substream)
1081{
1082 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
1083 return "Playback";
1084 else
1085 return "Capture";
1086}
1087
1076#endif /* __SOUND_PCM_H */ 1088#endif /* __SOUND_PCM_H */
diff --git a/include/sound/pcm_params.h b/include/sound/pcm_params.h
index f494f1e3c900..37ae12e0ab06 100644
--- a/include/sound/pcm_params.h
+++ b/include/sound/pcm_params.h
@@ -22,6 +22,8 @@
22 * 22 *
23 */ 23 */
24 24
25#include <sound/pcm.h>
26
25int snd_pcm_hw_param_first(struct snd_pcm_substream *pcm, 27int snd_pcm_hw_param_first(struct snd_pcm_substream *pcm,
26 struct snd_pcm_hw_params *params, 28 struct snd_pcm_hw_params *params,
27 snd_pcm_hw_param_t var, int *dir); 29 snd_pcm_hw_param_t var, int *dir);
diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h
index e3833d9f1914..abe373d57adc 100644
--- a/include/sound/soc-dapm.h
+++ b/include/sound/soc-dapm.h
@@ -229,6 +229,10 @@ struct device;
229{ .id = snd_soc_dapm_adc, .name = wname, .sname = stname, .reg = wreg, \ 229{ .id = snd_soc_dapm_adc, .name = wname, .sname = stname, .reg = wreg, \
230 .shift = wshift, .invert = winvert, \ 230 .shift = wshift, .invert = winvert, \
231 .event = wevent, .event_flags = wflags} 231 .event = wevent, .event_flags = wflags}
232#define SND_SOC_DAPM_CLOCK_SUPPLY(wname) \
233{ .id = snd_soc_dapm_clock_supply, .name = wname, \
234 .reg = SND_SOC_NOPM, .event = dapm_clock_event, \
235 .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD }
232 236
233/* generic widgets */ 237/* generic widgets */
234#define SND_SOC_DAPM_REG(wid, wname, wreg, wshift, wmask, won_val, woff_val) \ 238#define SND_SOC_DAPM_REG(wid, wname, wreg, wshift, wmask, won_val, woff_val) \
@@ -245,6 +249,7 @@ struct device;
245 .reg = SND_SOC_NOPM, .shift = wdelay, .event = dapm_regulator_event, \ 249 .reg = SND_SOC_NOPM, .shift = wdelay, .event = dapm_regulator_event, \
246 .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD } 250 .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD }
247 251
252
248/* dapm kcontrol types */ 253/* dapm kcontrol types */
249#define SOC_DAPM_SINGLE(xname, reg, shift, max, invert) \ 254#define SOC_DAPM_SINGLE(xname, reg, shift, max, invert) \
250{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ 255{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
@@ -327,6 +332,8 @@ int dapm_reg_event(struct snd_soc_dapm_widget *w,
327 struct snd_kcontrol *kcontrol, int event); 332 struct snd_kcontrol *kcontrol, int event);
328int dapm_regulator_event(struct snd_soc_dapm_widget *w, 333int dapm_regulator_event(struct snd_soc_dapm_widget *w,
329 struct snd_kcontrol *kcontrol, int event); 334 struct snd_kcontrol *kcontrol, int event);
335int dapm_clock_event(struct snd_soc_dapm_widget *w,
336 struct snd_kcontrol *kcontrol, int event);
330 337
331/* dapm controls */ 338/* dapm controls */
332int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol, 339int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol,
@@ -367,6 +374,8 @@ int snd_soc_dapm_new_widgets(struct snd_soc_dapm_context *dapm);
367void snd_soc_dapm_free(struct snd_soc_dapm_context *dapm); 374void snd_soc_dapm_free(struct snd_soc_dapm_context *dapm);
368int snd_soc_dapm_add_routes(struct snd_soc_dapm_context *dapm, 375int snd_soc_dapm_add_routes(struct snd_soc_dapm_context *dapm,
369 const struct snd_soc_dapm_route *route, int num); 376 const struct snd_soc_dapm_route *route, int num);
377int snd_soc_dapm_del_routes(struct snd_soc_dapm_context *dapm,
378 const struct snd_soc_dapm_route *route, int num);
370int snd_soc_dapm_weak_routes(struct snd_soc_dapm_context *dapm, 379int snd_soc_dapm_weak_routes(struct snd_soc_dapm_context *dapm,
371 const struct snd_soc_dapm_route *route, int num); 380 const struct snd_soc_dapm_route *route, int num);
372 381
@@ -432,6 +441,7 @@ enum snd_soc_dapm_type {
432 snd_soc_dapm_post, /* machine specific post widget - exec last */ 441 snd_soc_dapm_post, /* machine specific post widget - exec last */
433 snd_soc_dapm_supply, /* power/clock supply */ 442 snd_soc_dapm_supply, /* power/clock supply */
434 snd_soc_dapm_regulator_supply, /* external regulator */ 443 snd_soc_dapm_regulator_supply, /* external regulator */
444 snd_soc_dapm_clock_supply, /* external clock */
435 snd_soc_dapm_aif_in, /* audio interface input */ 445 snd_soc_dapm_aif_in, /* audio interface input */
436 snd_soc_dapm_aif_out, /* audio interface output */ 446 snd_soc_dapm_aif_out, /* audio interface output */
437 snd_soc_dapm_siggen, /* signal generator */ 447 snd_soc_dapm_siggen, /* signal generator */
@@ -537,6 +547,8 @@ struct snd_soc_dapm_widget {
537 struct list_head dirty; 547 struct list_head dirty;
538 int inputs; 548 int inputs;
539 int outputs; 549 int outputs;
550
551 struct clk *clk;
540}; 552};
541 553
542struct snd_soc_dapm_update { 554struct snd_soc_dapm_update {
diff --git a/include/sound/soc.h b/include/sound/soc.h
index c703871f5f65..e063380f63a2 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -42,11 +42,22 @@
42 ((unsigned long)&(struct soc_mixer_control) \ 42 ((unsigned long)&(struct soc_mixer_control) \
43 {.reg = xlreg, .rreg = xrreg, .shift = xshift, .rshift = xshift, \ 43 {.reg = xlreg, .rreg = xrreg, .shift = xshift, .rshift = xshift, \
44 .max = xmax, .platform_max = xmax, .invert = xinvert}) 44 .max = xmax, .platform_max = xmax, .invert = xinvert})
45#define SOC_DOUBLE_R_RANGE_VALUE(xlreg, xrreg, xshift, xmin, xmax, xinvert) \
46 ((unsigned long)&(struct soc_mixer_control) \
47 {.reg = xlreg, .rreg = xrreg, .shift = xshift, .rshift = xshift, \
48 .min = xmin, .max = xmax, .platform_max = xmax, .invert = xinvert})
45#define SOC_SINGLE(xname, reg, shift, max, invert) \ 49#define SOC_SINGLE(xname, reg, shift, max, invert) \
46{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ 50{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
47 .info = snd_soc_info_volsw, .get = snd_soc_get_volsw,\ 51 .info = snd_soc_info_volsw, .get = snd_soc_get_volsw,\
48 .put = snd_soc_put_volsw, \ 52 .put = snd_soc_put_volsw, \
49 .private_value = SOC_SINGLE_VALUE(reg, shift, max, invert) } 53 .private_value = SOC_SINGLE_VALUE(reg, shift, max, invert) }
54#define SOC_SINGLE_RANGE(xname, xreg, xshift, xmin, xmax, xinvert) \
55{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
56 .info = snd_soc_info_volsw_range, .get = snd_soc_get_volsw_range, \
57 .put = snd_soc_put_volsw_range, \
58 .private_value = (unsigned long)&(struct soc_mixer_control) \
59 {.reg = xreg, .shift = xshift, .min = xmin,\
60 .max = xmax, .platform_max = xmax, .invert = xinvert} }
50#define SOC_SINGLE_TLV(xname, reg, shift, max, invert, tlv_array) \ 61#define SOC_SINGLE_TLV(xname, reg, shift, max, invert, tlv_array) \
51{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ 62{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
52 .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\ 63 .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\
@@ -67,6 +78,16 @@
67 {.reg = xreg, .rreg = xreg, \ 78 {.reg = xreg, .rreg = xreg, \
68 .shift = xshift, .rshift = xshift, \ 79 .shift = xshift, .rshift = xshift, \
69 .max = xmax, .min = xmin} } 80 .max = xmax, .min = xmin} }
81#define SOC_SINGLE_RANGE_TLV(xname, xreg, xshift, xmin, xmax, xinvert, tlv_array) \
82{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
83 .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\
84 SNDRV_CTL_ELEM_ACCESS_READWRITE,\
85 .tlv.p = (tlv_array), \
86 .info = snd_soc_info_volsw_range, \
87 .get = snd_soc_get_volsw_range, .put = snd_soc_put_volsw_range, \
88 .private_value = (unsigned long)&(struct soc_mixer_control) \
89 {.reg = xreg, .shift = xshift, .min = xmin,\
90 .max = xmax, .platform_max = xmax, .invert = xinvert} }
70#define SOC_DOUBLE(xname, reg, shift_left, shift_right, max, invert) \ 91#define SOC_DOUBLE(xname, reg, shift_left, shift_right, max, invert) \
71{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\ 92{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
72 .info = snd_soc_info_volsw, .get = snd_soc_get_volsw, \ 93 .info = snd_soc_info_volsw, .get = snd_soc_get_volsw, \
@@ -79,6 +100,13 @@
79 .get = snd_soc_get_volsw, .put = snd_soc_put_volsw, \ 100 .get = snd_soc_get_volsw, .put = snd_soc_put_volsw, \
80 .private_value = SOC_DOUBLE_R_VALUE(reg_left, reg_right, xshift, \ 101 .private_value = SOC_DOUBLE_R_VALUE(reg_left, reg_right, xshift, \
81 xmax, xinvert) } 102 xmax, xinvert) }
103#define SOC_DOUBLE_R_RANGE(xname, reg_left, reg_right, xshift, xmin, \
104 xmax, xinvert) \
105{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
106 .info = snd_soc_info_volsw_range, \
107 .get = snd_soc_get_volsw_range, .put = snd_soc_put_volsw_range, \
108 .private_value = SOC_DOUBLE_R_RANGE_VALUE(reg_left, reg_right, \
109 xshift, xmin, xmax, xinvert) }
82#define SOC_DOUBLE_TLV(xname, reg, shift_left, shift_right, max, invert, tlv_array) \ 110#define SOC_DOUBLE_TLV(xname, reg, shift_left, shift_right, max, invert, tlv_array) \
83{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\ 111{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
84 .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\ 112 .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\
@@ -97,6 +125,16 @@
97 .get = snd_soc_get_volsw, .put = snd_soc_put_volsw, \ 125 .get = snd_soc_get_volsw, .put = snd_soc_put_volsw, \
98 .private_value = SOC_DOUBLE_R_VALUE(reg_left, reg_right, xshift, \ 126 .private_value = SOC_DOUBLE_R_VALUE(reg_left, reg_right, xshift, \
99 xmax, xinvert) } 127 xmax, xinvert) }
128#define SOC_DOUBLE_R_RANGE_TLV(xname, reg_left, reg_right, xshift, xmin, \
129 xmax, xinvert, tlv_array) \
130{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
131 .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\
132 SNDRV_CTL_ELEM_ACCESS_READWRITE,\
133 .tlv.p = (tlv_array), \
134 .info = snd_soc_info_volsw_range, \
135 .get = snd_soc_get_volsw_range, .put = snd_soc_put_volsw_range, \
136 .private_value = SOC_DOUBLE_R_RANGE_VALUE(reg_left, reg_right, \
137 xshift, xmin, xmax, xinvert) }
100#define SOC_DOUBLE_R_SX_TLV(xname, xreg, xrreg, xshift, xmin, xmax, tlv_array) \ 138#define SOC_DOUBLE_R_SX_TLV(xname, xreg, xrreg, xshift, xmin, xmax, tlv_array) \
101{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \ 139{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \
102 .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \ 140 .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \
@@ -460,6 +498,12 @@ int snd_soc_get_volsw_s8(struct snd_kcontrol *kcontrol,
460 struct snd_ctl_elem_value *ucontrol); 498 struct snd_ctl_elem_value *ucontrol);
461int snd_soc_put_volsw_s8(struct snd_kcontrol *kcontrol, 499int snd_soc_put_volsw_s8(struct snd_kcontrol *kcontrol,
462 struct snd_ctl_elem_value *ucontrol); 500 struct snd_ctl_elem_value *ucontrol);
501int snd_soc_info_volsw_range(struct snd_kcontrol *kcontrol,
502 struct snd_ctl_elem_info *uinfo);
503int snd_soc_put_volsw_range(struct snd_kcontrol *kcontrol,
504 struct snd_ctl_elem_value *ucontrol);
505int snd_soc_get_volsw_range(struct snd_kcontrol *kcontrol,
506 struct snd_ctl_elem_value *ucontrol);
463int snd_soc_limit_volume(struct snd_soc_codec *codec, 507int snd_soc_limit_volume(struct snd_soc_codec *codec,
464 const char *name, int max); 508 const char *name, int max);
465int snd_soc_bytes_info(struct snd_kcontrol *kcontrol, 509int snd_soc_bytes_info(struct snd_kcontrol *kcontrol,
@@ -785,13 +829,36 @@ struct snd_soc_dai_link {
785 /* config - must be set by machine driver */ 829 /* config - must be set by machine driver */
786 const char *name; /* Codec name */ 830 const char *name; /* Codec name */
787 const char *stream_name; /* Stream name */ 831 const char *stream_name; /* Stream name */
788 const char *codec_name; /* for multi-codec */ 832 /*
789 const struct device_node *codec_of_node; 833 * You MAY specify the link's CPU-side device, either by device name,
790 const char *platform_name; /* for multi-platform */ 834 * or by DT/OF node, but not both. If this information is omitted,
791 const struct device_node *platform_of_node; 835 * the CPU-side DAI is matched using .cpu_dai_name only, which hence
836 * must be globally unique. These fields are currently typically used
837 * only for codec to codec links, or systems using device tree.
838 */
839 const char *cpu_name;
840 const struct device_node *cpu_of_node;
841 /*
842 * You MAY specify the DAI name of the CPU DAI. If this information is
843 * omitted, the CPU-side DAI is matched using .cpu_name/.cpu_of_node
844 * only, which only works well when that device exposes a single DAI.
845 */
792 const char *cpu_dai_name; 846 const char *cpu_dai_name;
793 const struct device_node *cpu_dai_of_node; 847 /*
848 * You MUST specify the link's codec, either by device name, or by
849 * DT/OF node, but not both.
850 */
851 const char *codec_name;
852 const struct device_node *codec_of_node;
853 /* You MUST specify the DAI name within the codec */
794 const char *codec_dai_name; 854 const char *codec_dai_name;
855 /*
856 * You MAY specify the link's platform/PCM/DMA driver, either by
857 * device name, or by DT/OF node, but not both. Some forms of link
858 * do not need a platform.
859 */
860 const char *platform_name;
861 const struct device_node *platform_of_node;
795 int be_id; /* optional ID for machine driver BE identification */ 862 int be_id; /* optional ID for machine driver BE identification */
796 863
797 const struct snd_soc_pcm_stream *params; 864 const struct snd_soc_pcm_stream *params;
diff --git a/include/sound/spear_dma.h b/include/sound/spear_dma.h
new file mode 100644
index 000000000000..1b365bfdfb37
--- /dev/null
+++ b/include/sound/spear_dma.h
@@ -0,0 +1,35 @@
1/*
2* linux/spear_dma.h
3*
4* Copyright (ST) 2012 Rajeev Kumar (rajeev-dlh.kumar@st.com)
5*
6* This program is free software; you can redistribute it and/or modify
7* it under the terms of the GNU General Public License as published by
8* the Free Software Foundation; either version 2 of the License, or
9* (at your option) any later version.
10*
11* This program is distributed in the hope that it will be useful,
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14* GNU General Public License for more details.
15*
16* You should have received a copy of the GNU General Public License
17* along with this program; if not, write to the Free Software
18* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19*
20*/
21
22#ifndef SPEAR_DMA_H
23#define SPEAR_DMA_H
24
25#include <linux/dmaengine.h>
26
27struct spear_dma_data {
28 void *data;
29 dma_addr_t addr;
30 u32 max_burst;
31 enum dma_slave_buswidth addr_width;
32 bool (*filter)(struct dma_chan *chan, void *slave);
33};
34
35#endif /* SPEAR_DMA_H */
diff --git a/include/sound/spear_spdif.h b/include/sound/spear_spdif.h
new file mode 100644
index 000000000000..a12f39695610
--- /dev/null
+++ b/include/sound/spear_spdif.h
@@ -0,0 +1,29 @@
1/*
2 * Copyright (ST) 2012 Vipin Kumar (vipin.kumar@st.com)
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 */
18
19#ifndef __SOUND_SPDIF_H
20#define __SOUND_SPDIF_H
21
22struct spear_spdif_platform_data {
23 /* DMA params */
24 void *dma_params;
25 bool (*filter)(struct dma_chan *chan, void *slave);
26 void (*reset_perip)(void);
27};
28
29#endif /* SOUND_SPDIF_H */
diff --git a/include/sound/tea575x-tuner.h b/include/sound/tea575x-tuner.h
index ec3f910aa40b..0c3c2fb0f939 100644
--- a/include/sound/tea575x-tuner.h
+++ b/include/sound/tea575x-tuner.h
@@ -44,6 +44,7 @@ struct snd_tea575x_ops {
44 44
45struct snd_tea575x { 45struct snd_tea575x {
46 struct v4l2_device *v4l2_dev; 46 struct v4l2_device *v4l2_dev;
47 struct v4l2_file_operations fops;
47 struct video_device vd; /* video device */ 48 struct video_device vd; /* video device */
48 int radio_nr; /* radio_nr */ 49 int radio_nr; /* radio_nr */
49 bool tea5759; /* 5759 chip is present */ 50 bool tea5759; /* 5759 chip is present */
@@ -62,7 +63,7 @@ struct snd_tea575x {
62 int (*ext_init)(struct snd_tea575x *tea); 63 int (*ext_init)(struct snd_tea575x *tea);
63}; 64};
64 65
65int snd_tea575x_init(struct snd_tea575x *tea); 66int snd_tea575x_init(struct snd_tea575x *tea, struct module *owner);
66void snd_tea575x_exit(struct snd_tea575x *tea); 67void snd_tea575x_exit(struct snd_tea575x *tea);
67 68
68#endif /* __SOUND_TEA575X_TUNER_H */ 69#endif /* __SOUND_TEA575X_TUNER_H */
diff --git a/include/sound/tlv.h b/include/sound/tlv.h
index 7067e2dfb0b9..a64d8fe3f855 100644
--- a/include/sound/tlv.h
+++ b/include/sound/tlv.h
@@ -38,21 +38,31 @@
38#define SNDRV_CTL_TLVT_DB_MINMAX 4 /* dB scale with min/max */ 38#define SNDRV_CTL_TLVT_DB_MINMAX 4 /* dB scale with min/max */
39#define SNDRV_CTL_TLVT_DB_MINMAX_MUTE 5 /* dB scale with min/max with mute */ 39#define SNDRV_CTL_TLVT_DB_MINMAX_MUTE 5 /* dB scale with min/max with mute */
40 40
41#define TLV_ITEM(type, ...) \
42 (type), TLV_LENGTH(__VA_ARGS__), __VA_ARGS__
43#define TLV_LENGTH(...) \
44 ((unsigned int)sizeof((const unsigned int[]) { __VA_ARGS__ }))
45
46#define TLV_CONTAINER_ITEM(...) \
47 TLV_ITEM(SNDRV_CTL_TLVT_CONTAINER, __VA_ARGS__)
48#define DECLARE_TLV_CONTAINER(name, ...) \
49 unsigned int name[] = { TLV_CONTAINER_ITEM(__VA_ARGS__) }
50
41#define TLV_DB_SCALE_MASK 0xffff 51#define TLV_DB_SCALE_MASK 0xffff
42#define TLV_DB_SCALE_MUTE 0x10000 52#define TLV_DB_SCALE_MUTE 0x10000
43#define TLV_DB_SCALE_ITEM(min, step, mute) \ 53#define TLV_DB_SCALE_ITEM(min, step, mute) \
44 SNDRV_CTL_TLVT_DB_SCALE, 2 * sizeof(unsigned int), \ 54 TLV_ITEM(SNDRV_CTL_TLVT_DB_SCALE, \
45 (min), ((step) & TLV_DB_SCALE_MASK) | ((mute) ? TLV_DB_SCALE_MUTE : 0) 55 (min), \
56 ((step) & TLV_DB_SCALE_MASK) | \
57 ((mute) ? TLV_DB_SCALE_MUTE : 0))
46#define DECLARE_TLV_DB_SCALE(name, min, step, mute) \ 58#define DECLARE_TLV_DB_SCALE(name, min, step, mute) \
47 unsigned int name[] = { TLV_DB_SCALE_ITEM(min, step, mute) } 59 unsigned int name[] = { TLV_DB_SCALE_ITEM(min, step, mute) }
48 60
49/* dB scale specified with min/max values instead of step */ 61/* dB scale specified with min/max values instead of step */
50#define TLV_DB_MINMAX_ITEM(min_dB, max_dB) \ 62#define TLV_DB_MINMAX_ITEM(min_dB, max_dB) \
51 SNDRV_CTL_TLVT_DB_MINMAX, 2 * sizeof(unsigned int), \ 63 TLV_ITEM(SNDRV_CTL_TLVT_DB_MINMAX, (min_dB), (max_dB))
52 (min_dB), (max_dB)
53#define TLV_DB_MINMAX_MUTE_ITEM(min_dB, max_dB) \ 64#define TLV_DB_MINMAX_MUTE_ITEM(min_dB, max_dB) \
54 SNDRV_CTL_TLVT_DB_MINMAX_MUTE, 2 * sizeof(unsigned int), \ 65 TLV_ITEM(SNDRV_CTL_TLVT_DB_MINMAX_MUTE, (min_dB), (max_dB))
55 (min_dB), (max_dB)
56#define DECLARE_TLV_DB_MINMAX(name, min_dB, max_dB) \ 66#define DECLARE_TLV_DB_MINMAX(name, min_dB, max_dB) \
57 unsigned int name[] = { TLV_DB_MINMAX_ITEM(min_dB, max_dB) } 67 unsigned int name[] = { TLV_DB_MINMAX_ITEM(min_dB, max_dB) }
58#define DECLARE_TLV_DB_MINMAX_MUTE(name, min_dB, max_dB) \ 68#define DECLARE_TLV_DB_MINMAX_MUTE(name, min_dB, max_dB) \
@@ -60,13 +70,16 @@
60 70
61/* linear volume between min_dB and max_dB (.01dB unit) */ 71/* linear volume between min_dB and max_dB (.01dB unit) */
62#define TLV_DB_LINEAR_ITEM(min_dB, max_dB) \ 72#define TLV_DB_LINEAR_ITEM(min_dB, max_dB) \
63 SNDRV_CTL_TLVT_DB_LINEAR, 2 * sizeof(unsigned int), \ 73 TLV_ITEM(SNDRV_CTL_TLVT_DB_LINEAR, (min_dB), (max_dB))
64 (min_dB), (max_dB)
65#define DECLARE_TLV_DB_LINEAR(name, min_dB, max_dB) \ 74#define DECLARE_TLV_DB_LINEAR(name, min_dB, max_dB) \
66 unsigned int name[] = { TLV_DB_LINEAR_ITEM(min_dB, max_dB) } 75 unsigned int name[] = { TLV_DB_LINEAR_ITEM(min_dB, max_dB) }
67 76
68/* dB range container */ 77/* dB range container */
69/* Each item is: <min> <max> <TLV> */ 78/* Each item is: <min> <max> <TLV> */
79#define TLV_DB_RANGE_ITEM(...) \
80 TLV_ITEM(SNDRV_CTL_TLVT_DB_RANGE, __VA_ARGS__)
81#define DECLARE_TLV_DB_RANGE(name, ...) \
82 unsigned int name[] = { TLV_DB_RANGE_ITEM(__VA_ARGS__) }
70/* The below assumes that each item TLV is 4 words like DB_SCALE or LINEAR */ 83/* The below assumes that each item TLV is 4 words like DB_SCALE or LINEAR */
71#define TLV_DB_RANGE_HEAD(num) \ 84#define TLV_DB_RANGE_HEAD(num) \
72 SNDRV_CTL_TLVT_DB_RANGE, 6 * (num) * sizeof(unsigned int) 85 SNDRV_CTL_TLVT_DB_RANGE, 6 * (num) * sizeof(unsigned int)
diff --git a/include/sound/trident.h b/include/sound/trident.h
deleted file mode 100644
index 9f191a0a1e19..000000000000
--- a/include/sound/trident.h
+++ /dev/null
@@ -1,445 +0,0 @@
1#ifndef __SOUND_TRIDENT_H
2#define __SOUND_TRIDENT_H
3
4/*
5 * audio@tridentmicro.com
6 * Fri Feb 19 15:55:28 MST 1999
7 * Definitions for Trident 4DWave DX/NX chips
8 *
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 *
24 */
25
26#include "pcm.h"
27#include "mpu401.h"
28#include "ac97_codec.h"
29#include "util_mem.h"
30
31#define TRIDENT_DEVICE_ID_DX ((PCI_VENDOR_ID_TRIDENT<<16)|PCI_DEVICE_ID_TRIDENT_4DWAVE_DX)
32#define TRIDENT_DEVICE_ID_NX ((PCI_VENDOR_ID_TRIDENT<<16)|PCI_DEVICE_ID_TRIDENT_4DWAVE_NX)
33#define TRIDENT_DEVICE_ID_SI7018 ((PCI_VENDOR_ID_SI<<16)|PCI_DEVICE_ID_SI_7018)
34
35#define SNDRV_TRIDENT_VOICE_TYPE_PCM 0
36#define SNDRV_TRIDENT_VOICE_TYPE_SYNTH 1
37#define SNDRV_TRIDENT_VOICE_TYPE_MIDI 2
38
39#define SNDRV_TRIDENT_VFLG_RUNNING (1<<0)
40
41/* TLB code constants */
42#define SNDRV_TRIDENT_PAGE_SIZE 4096
43#define SNDRV_TRIDENT_PAGE_SHIFT 12
44#define SNDRV_TRIDENT_PAGE_MASK ((1<<SNDRV_TRIDENT_PAGE_SHIFT)-1)
45#define SNDRV_TRIDENT_MAX_PAGES 4096
46
47/*
48 * Direct registers
49 */
50
51#define TRID_REG(trident, x) ((trident)->port + (x))
52
53#define ID_4DWAVE_DX 0x2000
54#define ID_4DWAVE_NX 0x2001
55
56/* Bank definitions */
57
58#define T4D_BANK_A 0
59#define T4D_BANK_B 1
60#define T4D_NUM_BANKS 2
61
62/* Register definitions */
63
64/* Global registers */
65
66enum global_control_bits {
67 CHANNEL_IDX = 0x0000003f,
68 OVERRUN_IE = 0x00000400, /* interrupt enable: capture overrun */
69 UNDERRUN_IE = 0x00000800, /* interrupt enable: playback underrun */
70 ENDLP_IE = 0x00001000, /* interrupt enable: end of buffer */
71 MIDLP_IE = 0x00002000, /* interrupt enable: middle buffer */
72 ETOG_IE = 0x00004000, /* interrupt enable: envelope toggling */
73 EDROP_IE = 0x00008000, /* interrupt enable: envelope drop */
74 BANK_B_EN = 0x00010000, /* SiS: enable bank B (64 channels) */
75 PCMIN_B_MIX = 0x00020000, /* SiS: PCM IN B mixing enable */
76 I2S_OUT_ASSIGN = 0x00040000, /* SiS: I2S Out contains surround PCM */
77 SPDIF_OUT_ASSIGN= 0x00080000, /* SiS: 0=S/PDIF L/R | 1=PCM Out FIFO */
78 MAIN_OUT_ASSIGN = 0x00100000, /* SiS: 0=PCM Out FIFO | 1=MMC Out buffer */
79};
80
81enum miscint_bits {
82 PB_UNDERRUN_IRQ = 0x00000001, REC_OVERRUN_IRQ = 0x00000002,
83 SB_IRQ = 0x00000004, MPU401_IRQ = 0x00000008,
84 OPL3_IRQ = 0x00000010, ADDRESS_IRQ = 0x00000020,
85 ENVELOPE_IRQ = 0x00000040, PB_UNDERRUN = 0x00000100,
86 REC_OVERRUN = 0x00000200, MIXER_UNDERFLOW = 0x00000400,
87 MIXER_OVERFLOW = 0x00000800, NX_SB_IRQ_DISABLE = 0x00001000,
88 ST_TARGET_REACHED = 0x00008000,
89 PB_24K_MODE = 0x00010000, ST_IRQ_EN = 0x00800000,
90 ACGPIO_IRQ = 0x01000000
91};
92
93/* T2 legacy dma control registers. */
94#define LEGACY_DMAR0 0x00 // ADR0
95#define LEGACY_DMAR4 0x04 // CNT0
96#define LEGACY_DMAR6 0x06 // CNT0 - High bits
97#define LEGACY_DMAR11 0x0b // MOD
98#define LEGACY_DMAR15 0x0f // MMR
99
100#define T4D_START_A 0x80
101#define T4D_STOP_A 0x84
102#define T4D_DLY_A 0x88
103#define T4D_SIGN_CSO_A 0x8c
104#define T4D_CSPF_A 0x90
105#define T4D_CSPF_B 0xbc
106#define T4D_CEBC_A 0x94
107#define T4D_AINT_A 0x98
108#define T4D_AINTEN_A 0x9c
109#define T4D_LFO_GC_CIR 0xa0
110#define T4D_MUSICVOL_WAVEVOL 0xa8
111#define T4D_SBDELTA_DELTA_R 0xac
112#define T4D_MISCINT 0xb0
113#define T4D_START_B 0xb4
114#define T4D_STOP_B 0xb8
115#define T4D_SBBL_SBCL 0xc0
116#define T4D_SBCTRL_SBE2R_SBDD 0xc4
117#define T4D_STIMER 0xc8
118#define T4D_AINT_B 0xd8
119#define T4D_AINTEN_B 0xdc
120#define T4D_RCI 0x70
121
122/* MPU-401 UART */
123#define T4D_MPU401_BASE 0x20
124#define T4D_MPUR0 0x20
125#define T4D_MPUR1 0x21
126#define T4D_MPUR2 0x22
127#define T4D_MPUR3 0x23
128
129/* S/PDIF Registers */
130#define NX_SPCTRL_SPCSO 0x24
131#define NX_SPLBA 0x28
132#define NX_SPESO 0x2c
133#define NX_SPCSTATUS 0x64
134
135/* Joystick */
136#define GAMEPORT_GCR 0x30
137#define GAMEPORT_MODE_ADC 0x80
138#define GAMEPORT_LEGACY 0x31
139#define GAMEPORT_AXES 0x34
140
141/* NX Specific Registers */
142#define NX_TLBC 0x6c
143
144/* Channel Registers */
145
146#define CH_START 0xe0
147
148#define CH_DX_CSO_ALPHA_FMS 0xe0
149#define CH_DX_ESO_DELTA 0xe8
150#define CH_DX_FMC_RVOL_CVOL 0xec
151
152#define CH_NX_DELTA_CSO 0xe0
153#define CH_NX_DELTA_ESO 0xe8
154#define CH_NX_ALPHA_FMS_FMC_RVOL_CVOL 0xec
155
156#define CH_LBA 0xe4
157#define CH_GVSEL_PAN_VOL_CTRL_EC 0xf0
158#define CH_EBUF1 0xf4
159#define CH_EBUF2 0xf8
160
161/* AC-97 Registers */
162
163#define DX_ACR0_AC97_W 0x40
164#define DX_ACR1_AC97_R 0x44
165#define DX_ACR2_AC97_COM_STAT 0x48
166
167#define NX_ACR0_AC97_COM_STAT 0x40
168#define NX_ACR1_AC97_W 0x44
169#define NX_ACR2_AC97_R_PRIMARY 0x48
170#define NX_ACR3_AC97_R_SECONDARY 0x4c
171
172#define SI_AC97_WRITE 0x40
173#define SI_AC97_READ 0x44
174#define SI_SERIAL_INTF_CTRL 0x48
175#define SI_AC97_GPIO 0x4c
176#define SI_ASR0 0x50
177#define SI_SPDIF_CS 0x70
178#define SI_GPIO 0x7c
179
180enum trident_nx_ac97_bits {
181 /* ACR1-3 */
182 NX_AC97_BUSY_WRITE = 0x0800,
183 NX_AC97_BUSY_READ = 0x0800,
184 NX_AC97_BUSY_DATA = 0x0400,
185 NX_AC97_WRITE_SECONDARY = 0x0100,
186 /* ACR0 */
187 NX_AC97_SECONDARY_READY = 0x0040,
188 NX_AC97_SECONDARY_RECORD = 0x0020,
189 NX_AC97_SURROUND_OUTPUT = 0x0010,
190 NX_AC97_PRIMARY_READY = 0x0008,
191 NX_AC97_PRIMARY_RECORD = 0x0004,
192 NX_AC97_PCM_OUTPUT = 0x0002,
193 NX_AC97_WARM_RESET = 0x0001
194};
195
196enum trident_dx_ac97_bits {
197 DX_AC97_BUSY_WRITE = 0x8000,
198 DX_AC97_BUSY_READ = 0x8000,
199 DX_AC97_READY = 0x0010,
200 DX_AC97_RECORD = 0x0008,
201 DX_AC97_PLAYBACK = 0x0002
202};
203
204enum sis7018_ac97_bits {
205 SI_AC97_BUSY_WRITE = 0x00008000,
206 SI_AC97_AUDIO_BUSY = 0x00004000,
207 SI_AC97_MODEM_BUSY = 0x00002000,
208 SI_AC97_BUSY_READ = 0x00008000,
209 SI_AC97_SECONDARY = 0x00000080,
210};
211
212enum serial_intf_ctrl_bits {
213 WARM_RESET = 0x00000001,
214 COLD_RESET = 0x00000002,
215 I2S_CLOCK = 0x00000004,
216 PCM_SEC_AC97 = 0x00000008,
217 AC97_DBL_RATE = 0x00000010,
218 SPDIF_EN = 0x00000020,
219 I2S_OUTPUT_EN = 0x00000040,
220 I2S_INPUT_EN = 0x00000080,
221 PCMIN = 0x00000100,
222 LINE1IN = 0x00000200,
223 MICIN = 0x00000400,
224 LINE2IN = 0x00000800,
225 HEAD_SET_IN = 0x00001000,
226 GPIOIN = 0x00002000,
227 /* 7018 spec says id = 01 but the demo board routed to 10
228 SECONDARY_ID= 0x00004000, */
229 SECONDARY_ID = 0x00004000,
230 PCMOUT = 0x00010000,
231 SURROUT = 0x00020000,
232 CENTEROUT = 0x00040000,
233 LFEOUT = 0x00080000,
234 LINE1OUT = 0x00100000,
235 LINE2OUT = 0x00200000,
236 GPIOOUT = 0x00400000,
237 SI_AC97_PRIMARY_READY = 0x01000000,
238 SI_AC97_SECONDARY_READY = 0x02000000,
239 SI_AC97_POWERDOWN = 0x04000000,
240};
241
242/* PCM defaults */
243
244#define T4D_DEFAULT_PCM_VOL 10 /* 0 - 255 */
245#define T4D_DEFAULT_PCM_PAN 0 /* 0 - 127 */
246#define T4D_DEFAULT_PCM_RVOL 127 /* 0 - 127 */
247#define T4D_DEFAULT_PCM_CVOL 127 /* 0 - 127 */
248
249struct snd_trident;
250struct snd_trident_voice;
251struct snd_trident_pcm_mixer;
252
253struct snd_trident_port {
254 struct snd_midi_channel_set * chset;
255 struct snd_trident * trident;
256 int mode; /* operation mode */
257 int client; /* sequencer client number */
258 int port; /* sequencer port number */
259 unsigned int midi_has_voices: 1;
260};
261
262struct snd_trident_memblk_arg {
263 short first_page, last_page;
264};
265
266struct snd_trident_tlb {
267 unsigned int * entries; /* 16k-aligned TLB table */
268 dma_addr_t entries_dmaaddr; /* 16k-aligned PCI address to TLB table */
269 unsigned long * shadow_entries; /* shadow entries with virtual addresses */
270 struct snd_dma_buffer buffer;
271 struct snd_util_memhdr * memhdr; /* page allocation list */
272 struct snd_dma_buffer silent_page;
273};
274
275struct snd_trident_voice {
276 unsigned int number;
277 unsigned int use: 1,
278 pcm: 1,
279 synth:1,
280 midi: 1;
281 unsigned int flags;
282 unsigned char client;
283 unsigned char port;
284 unsigned char index;
285
286 struct snd_trident_sample_ops *sample_ops;
287
288 /* channel parameters */
289 unsigned int CSO; /* 24 bits (16 on DX) */
290 unsigned int ESO; /* 24 bits (16 on DX) */
291 unsigned int LBA; /* 30 bits */
292 unsigned short EC; /* 12 bits */
293 unsigned short Alpha; /* 12 bits */
294 unsigned short Delta; /* 16 bits */
295 unsigned short Attribute; /* 16 bits - SiS 7018 */
296 unsigned short Vol; /* 12 bits (6.6) */
297 unsigned char Pan; /* 7 bits (1.4.2) */
298 unsigned char GVSel; /* 1 bit */
299 unsigned char RVol; /* 7 bits (5.2) */
300 unsigned char CVol; /* 7 bits (5.2) */
301 unsigned char FMC; /* 2 bits */
302 unsigned char CTRL; /* 4 bits */
303 unsigned char FMS; /* 4 bits */
304 unsigned char LFO; /* 8 bits */
305
306 unsigned int negCSO; /* nonzero - use negative CSO */
307
308 struct snd_util_memblk *memblk; /* memory block if TLB enabled */
309
310 /* PCM data */
311
312 struct snd_trident *trident;
313 struct snd_pcm_substream *substream;
314 struct snd_trident_voice *extra; /* extra PCM voice (acts as interrupt generator) */
315 unsigned int running: 1,
316 capture: 1,
317 spdif: 1,
318 foldback: 1,
319 isync: 1,
320 isync2: 1,
321 isync3: 1;
322 int foldback_chan; /* foldback subdevice number */
323 unsigned int stimer; /* global sample timer (to detect spurious interrupts) */
324 unsigned int spurious_threshold; /* spurious threshold */
325 unsigned int isync_mark;
326 unsigned int isync_max;
327 unsigned int isync_ESO;
328
329 /* --- */
330
331 void *private_data;
332 void (*private_free)(struct snd_trident_voice *voice);
333};
334
335struct snd_4dwave {
336 int seq_client;
337
338 struct snd_trident_port seq_ports[4];
339 struct snd_trident_voice voices[64];
340
341 int ChanSynthCount; /* number of allocated synth channels */
342 int max_size; /* maximum synth memory size in bytes */
343 int current_size; /* current allocated synth mem in bytes */
344};
345
346struct snd_trident_pcm_mixer {
347 struct snd_trident_voice *voice; /* active voice */
348 unsigned short vol; /* front volume */
349 unsigned char pan; /* pan control */
350 unsigned char rvol; /* rear volume */
351 unsigned char cvol; /* center volume */
352 unsigned char pad;
353};
354
355struct snd_trident {
356 int irq;
357
358 unsigned int device; /* device ID */
359
360 unsigned char bDMAStart;
361
362 unsigned long port;
363 unsigned long midi_port;
364
365 unsigned int spurious_irq_count;
366 unsigned int spurious_irq_max_delta;
367
368 struct snd_trident_tlb tlb; /* TLB entries for NX cards */
369
370 unsigned char spdif_ctrl;
371 unsigned char spdif_pcm_ctrl;
372 unsigned int spdif_bits;
373 unsigned int spdif_pcm_bits;
374 struct snd_kcontrol *spdif_pcm_ctl; /* S/PDIF settings */
375 unsigned int ac97_ctrl;
376
377 unsigned int ChanMap[2]; /* allocation map for hardware channels */
378
379 int ChanPCM; /* max number of PCM channels */
380 int ChanPCMcnt; /* actual number of PCM channels */
381
382 unsigned int ac97_detect: 1; /* 1 = AC97 in detection phase */
383 unsigned int in_suspend: 1; /* 1 during suspend/resume */
384
385 struct snd_4dwave synth; /* synth specific variables */
386
387 spinlock_t event_lock;
388 spinlock_t voice_alloc;
389
390 struct snd_dma_device dma_dev;
391
392 struct pci_dev *pci;
393 struct snd_card *card;
394 struct snd_pcm *pcm; /* ADC/DAC PCM */
395 struct snd_pcm *foldback; /* Foldback PCM */
396 struct snd_pcm *spdif; /* SPDIF PCM */
397 struct snd_rawmidi *rmidi;
398
399 struct snd_ac97_bus *ac97_bus;
400 struct snd_ac97 *ac97;
401 struct snd_ac97 *ac97_sec;
402
403 unsigned int musicvol_wavevol;
404 struct snd_trident_pcm_mixer pcm_mixer[32];
405 struct snd_kcontrol *ctl_vol; /* front volume */
406 struct snd_kcontrol *ctl_pan; /* pan */
407 struct snd_kcontrol *ctl_rvol; /* rear volume */
408 struct snd_kcontrol *ctl_cvol; /* center volume */
409
410 spinlock_t reg_lock;
411
412 struct gameport *gameport;
413};
414
415int snd_trident_create(struct snd_card *card,
416 struct pci_dev *pci,
417 int pcm_streams,
418 int pcm_spdif_device,
419 int max_wavetable_size,
420 struct snd_trident ** rtrident);
421int snd_trident_create_gameport(struct snd_trident *trident);
422
423int snd_trident_pcm(struct snd_trident * trident, int device, struct snd_pcm **rpcm);
424int snd_trident_foldback_pcm(struct snd_trident * trident, int device, struct snd_pcm **rpcm);
425int snd_trident_spdif_pcm(struct snd_trident * trident, int device, struct snd_pcm **rpcm);
426int snd_trident_attach_synthesizer(struct snd_trident * trident);
427struct snd_trident_voice *snd_trident_alloc_voice(struct snd_trident * trident, int type,
428 int client, int port);
429void snd_trident_free_voice(struct snd_trident * trident, struct snd_trident_voice *voice);
430void snd_trident_start_voice(struct snd_trident * trident, unsigned int voice);
431void snd_trident_stop_voice(struct snd_trident * trident, unsigned int voice);
432void snd_trident_write_voice_regs(struct snd_trident * trident, struct snd_trident_voice *voice);
433int snd_trident_suspend(struct pci_dev *pci, pm_message_t state);
434int snd_trident_resume(struct pci_dev *pci);
435
436/* TLB memory allocation */
437struct snd_util_memblk *snd_trident_alloc_pages(struct snd_trident *trident,
438 struct snd_pcm_substream *substream);
439int snd_trident_free_pages(struct snd_trident *trident, struct snd_util_memblk *blk);
440struct snd_util_memblk *snd_trident_synth_alloc(struct snd_trident *trident, unsigned int size);
441int snd_trident_synth_free(struct snd_trident *trident, struct snd_util_memblk *blk);
442int snd_trident_synth_copy_from_user(struct snd_trident *trident, struct snd_util_memblk *blk,
443 int offset, const char __user *data, int size);
444
445#endif /* __SOUND_TRIDENT_H */
diff --git a/include/sound/vx_core.h b/include/sound/vx_core.h
index 5456343ebe4c..4f67c762cd74 100644
--- a/include/sound/vx_core.h
+++ b/include/sound/vx_core.h
@@ -341,7 +341,7 @@ int vx_change_frequency(struct vx_core *chip);
341/* 341/*
342 * PM 342 * PM
343 */ 343 */
344int snd_vx_suspend(struct vx_core *card, pm_message_t state); 344int snd_vx_suspend(struct vx_core *card);
345int snd_vx_resume(struct vx_core *card); 345int snd_vx_resume(struct vx_core *card);
346 346
347/* 347/*
diff --git a/include/sound/ymfpci.h b/include/sound/ymfpci.h
deleted file mode 100644
index 41199664666b..000000000000
--- a/include/sound/ymfpci.h
+++ /dev/null
@@ -1,390 +0,0 @@
1#ifndef __SOUND_YMFPCI_H
2#define __SOUND_YMFPCI_H
3
4/*
5 * Copyright (c) by Jaroslav Kysela <perex@perex.cz>
6 * Definitions for Yahama YMF724/740/744/754 chips
7 *
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 *
23 */
24
25#include "pcm.h"
26#include "rawmidi.h"
27#include "ac97_codec.h"
28#include "timer.h"
29#include <linux/gameport.h>
30
31/*
32 * Direct registers
33 */
34
35#define YMFREG(chip, reg) (chip->port + YDSXGR_##reg)
36
37#define YDSXGR_INTFLAG 0x0004
38#define YDSXGR_ACTIVITY 0x0006
39#define YDSXGR_GLOBALCTRL 0x0008
40#define YDSXGR_ZVCTRL 0x000A
41#define YDSXGR_TIMERCTRL 0x0010
42#define YDSXGR_TIMERCOUNT 0x0012
43#define YDSXGR_SPDIFOUTCTRL 0x0018
44#define YDSXGR_SPDIFOUTSTATUS 0x001C
45#define YDSXGR_EEPROMCTRL 0x0020
46#define YDSXGR_SPDIFINCTRL 0x0034
47#define YDSXGR_SPDIFINSTATUS 0x0038
48#define YDSXGR_DSPPROGRAMDL 0x0048
49#define YDSXGR_DLCNTRL 0x004C
50#define YDSXGR_GPIOININTFLAG 0x0050
51#define YDSXGR_GPIOININTENABLE 0x0052
52#define YDSXGR_GPIOINSTATUS 0x0054
53#define YDSXGR_GPIOOUTCTRL 0x0056
54#define YDSXGR_GPIOFUNCENABLE 0x0058
55#define YDSXGR_GPIOTYPECONFIG 0x005A
56#define YDSXGR_AC97CMDDATA 0x0060
57#define YDSXGR_AC97CMDADR 0x0062
58#define YDSXGR_PRISTATUSDATA 0x0064
59#define YDSXGR_PRISTATUSADR 0x0066
60#define YDSXGR_SECSTATUSDATA 0x0068
61#define YDSXGR_SECSTATUSADR 0x006A
62#define YDSXGR_SECCONFIG 0x0070
63#define YDSXGR_LEGACYOUTVOL 0x0080
64#define YDSXGR_LEGACYOUTVOLL 0x0080
65#define YDSXGR_LEGACYOUTVOLR 0x0082
66#define YDSXGR_NATIVEDACOUTVOL 0x0084
67#define YDSXGR_NATIVEDACOUTVOLL 0x0084
68#define YDSXGR_NATIVEDACOUTVOLR 0x0086
69#define YDSXGR_ZVOUTVOL 0x0088
70#define YDSXGR_ZVOUTVOLL 0x0088
71#define YDSXGR_ZVOUTVOLR 0x008A
72#define YDSXGR_SECADCOUTVOL 0x008C
73#define YDSXGR_SECADCOUTVOLL 0x008C
74#define YDSXGR_SECADCOUTVOLR 0x008E
75#define YDSXGR_PRIADCOUTVOL 0x0090
76#define YDSXGR_PRIADCOUTVOLL 0x0090
77#define YDSXGR_PRIADCOUTVOLR 0x0092
78#define YDSXGR_LEGACYLOOPVOL 0x0094
79#define YDSXGR_LEGACYLOOPVOLL 0x0094
80#define YDSXGR_LEGACYLOOPVOLR 0x0096
81#define YDSXGR_NATIVEDACLOOPVOL 0x0098
82#define YDSXGR_NATIVEDACLOOPVOLL 0x0098
83#define YDSXGR_NATIVEDACLOOPVOLR 0x009A
84#define YDSXGR_ZVLOOPVOL 0x009C
85#define YDSXGR_ZVLOOPVOLL 0x009E
86#define YDSXGR_ZVLOOPVOLR 0x009E
87#define YDSXGR_SECADCLOOPVOL 0x00A0
88#define YDSXGR_SECADCLOOPVOLL 0x00A0
89#define YDSXGR_SECADCLOOPVOLR 0x00A2
90#define YDSXGR_PRIADCLOOPVOL 0x00A4
91#define YDSXGR_PRIADCLOOPVOLL 0x00A4
92#define YDSXGR_PRIADCLOOPVOLR 0x00A6
93#define YDSXGR_NATIVEADCINVOL 0x00A8
94#define YDSXGR_NATIVEADCINVOLL 0x00A8
95#define YDSXGR_NATIVEADCINVOLR 0x00AA
96#define YDSXGR_NATIVEDACINVOL 0x00AC
97#define YDSXGR_NATIVEDACINVOLL 0x00AC
98#define YDSXGR_NATIVEDACINVOLR 0x00AE
99#define YDSXGR_BUF441OUTVOL 0x00B0
100#define YDSXGR_BUF441OUTVOLL 0x00B0
101#define YDSXGR_BUF441OUTVOLR 0x00B2
102#define YDSXGR_BUF441LOOPVOL 0x00B4
103#define YDSXGR_BUF441LOOPVOLL 0x00B4
104#define YDSXGR_BUF441LOOPVOLR 0x00B6
105#define YDSXGR_SPDIFOUTVOL 0x00B8
106#define YDSXGR_SPDIFOUTVOLL 0x00B8
107#define YDSXGR_SPDIFOUTVOLR 0x00BA
108#define YDSXGR_SPDIFLOOPVOL 0x00BC
109#define YDSXGR_SPDIFLOOPVOLL 0x00BC
110#define YDSXGR_SPDIFLOOPVOLR 0x00BE
111#define YDSXGR_ADCSLOTSR 0x00C0
112#define YDSXGR_RECSLOTSR 0x00C4
113#define YDSXGR_ADCFORMAT 0x00C8
114#define YDSXGR_RECFORMAT 0x00CC
115#define YDSXGR_P44SLOTSR 0x00D0
116#define YDSXGR_STATUS 0x0100
117#define YDSXGR_CTRLSELECT 0x0104
118#define YDSXGR_MODE 0x0108
119#define YDSXGR_SAMPLECOUNT 0x010C
120#define YDSXGR_NUMOFSAMPLES 0x0110
121#define YDSXGR_CONFIG 0x0114
122#define YDSXGR_PLAYCTRLSIZE 0x0140
123#define YDSXGR_RECCTRLSIZE 0x0144
124#define YDSXGR_EFFCTRLSIZE 0x0148
125#define YDSXGR_WORKSIZE 0x014C
126#define YDSXGR_MAPOFREC 0x0150
127#define YDSXGR_MAPOFEFFECT 0x0154
128#define YDSXGR_PLAYCTRLBASE 0x0158
129#define YDSXGR_RECCTRLBASE 0x015C
130#define YDSXGR_EFFCTRLBASE 0x0160
131#define YDSXGR_WORKBASE 0x0164
132#define YDSXGR_DSPINSTRAM 0x1000
133#define YDSXGR_CTRLINSTRAM 0x4000
134
135#define YDSXG_AC97READCMD 0x8000
136#define YDSXG_AC97WRITECMD 0x0000
137
138#define PCIR_DSXG_LEGACY 0x40
139#define PCIR_DSXG_ELEGACY 0x42
140#define PCIR_DSXG_CTRL 0x48
141#define PCIR_DSXG_PWRCTRL1 0x4a
142#define PCIR_DSXG_PWRCTRL2 0x4e
143#define PCIR_DSXG_FMBASE 0x60
144#define PCIR_DSXG_SBBASE 0x62
145#define PCIR_DSXG_MPU401BASE 0x64
146#define PCIR_DSXG_JOYBASE 0x66
147
148#define YDSXG_DSPLENGTH 0x0080
149#define YDSXG_CTRLLENGTH 0x3000
150
151#define YDSXG_DEFAULT_WORK_SIZE 0x0400
152
153#define YDSXG_PLAYBACK_VOICES 64
154#define YDSXG_CAPTURE_VOICES 2
155#define YDSXG_EFFECT_VOICES 5
156
157#define YMFPCI_LEGACY_SBEN (1 << 0) /* soundblaster enable */
158#define YMFPCI_LEGACY_FMEN (1 << 1) /* OPL3 enable */
159#define YMFPCI_LEGACY_JPEN (1 << 2) /* joystick enable */
160#define YMFPCI_LEGACY_MEN (1 << 3) /* MPU401 enable */
161#define YMFPCI_LEGACY_MIEN (1 << 4) /* MPU RX irq enable */
162#define YMFPCI_LEGACY_IOBITS (1 << 5) /* i/o bits range, 0 = 16bit, 1 =10bit */
163#define YMFPCI_LEGACY_SDMA (3 << 6) /* SB DMA select */
164#define YMFPCI_LEGACY_SBIRQ (7 << 8) /* SB IRQ select */
165#define YMFPCI_LEGACY_MPUIRQ (7 << 11) /* MPU IRQ select */
166#define YMFPCI_LEGACY_SIEN (1 << 14) /* serialized IRQ */
167#define YMFPCI_LEGACY_LAD (1 << 15) /* legacy audio disable */
168
169#define YMFPCI_LEGACY2_FMIO (3 << 0) /* OPL3 i/o address (724/740) */
170#define YMFPCI_LEGACY2_SBIO (3 << 2) /* SB i/o address (724/740) */
171#define YMFPCI_LEGACY2_MPUIO (3 << 4) /* MPU401 i/o address (724/740) */
172#define YMFPCI_LEGACY2_JSIO (3 << 6) /* joystick i/o address (724/740) */
173#define YMFPCI_LEGACY2_MAIM (1 << 8) /* MPU401 ack intr mask */
174#define YMFPCI_LEGACY2_SMOD (3 << 11) /* SB DMA mode */
175#define YMFPCI_LEGACY2_SBVER (3 << 13) /* SB version select */
176#define YMFPCI_LEGACY2_IMOD (1 << 15) /* legacy IRQ mode */
177/* SIEN:IMOD 0:0 = legacy irq, 0:1 = INTA, 1:0 = serialized IRQ */
178
179#if defined(CONFIG_GAMEPORT) || (defined(MODULE) && defined(CONFIG_GAMEPORT_MODULE))
180#define SUPPORT_JOYSTICK
181#endif
182
183/*
184 *
185 */
186
187struct snd_ymfpci_playback_bank {
188 u32 format;
189 u32 loop_default;
190 u32 base; /* 32-bit address */
191 u32 loop_start; /* 32-bit offset */
192 u32 loop_end; /* 32-bit offset */
193 u32 loop_frac; /* 8-bit fraction - loop_start */
194 u32 delta_end; /* pitch delta end */
195 u32 lpfK_end;
196 u32 eg_gain_end;
197 u32 left_gain_end;
198 u32 right_gain_end;
199 u32 eff1_gain_end;
200 u32 eff2_gain_end;
201 u32 eff3_gain_end;
202 u32 lpfQ;
203 u32 status;
204 u32 num_of_frames;
205 u32 loop_count;
206 u32 start;
207 u32 start_frac;
208 u32 delta;
209 u32 lpfK;
210 u32 eg_gain;
211 u32 left_gain;
212 u32 right_gain;
213 u32 eff1_gain;
214 u32 eff2_gain;
215 u32 eff3_gain;
216 u32 lpfD1;
217 u32 lpfD2;
218 };
219
220struct snd_ymfpci_capture_bank {
221 u32 base; /* 32-bit address */
222 u32 loop_end; /* 32-bit offset */
223 u32 start; /* 32-bit offset */
224 u32 num_of_loops; /* counter */
225};
226
227struct snd_ymfpci_effect_bank {
228 u32 base; /* 32-bit address */
229 u32 loop_end; /* 32-bit offset */
230 u32 start; /* 32-bit offset */
231 u32 temp;
232};
233
234struct snd_ymfpci_pcm;
235struct snd_ymfpci;
236
237enum snd_ymfpci_voice_type {
238 YMFPCI_PCM,
239 YMFPCI_SYNTH,
240 YMFPCI_MIDI
241};
242
243struct snd_ymfpci_voice {
244 struct snd_ymfpci *chip;
245 int number;
246 unsigned int use: 1,
247 pcm: 1,
248 synth: 1,
249 midi: 1;
250 struct snd_ymfpci_playback_bank *bank;
251 dma_addr_t bank_addr;
252 void (*interrupt)(struct snd_ymfpci *chip, struct snd_ymfpci_voice *voice);
253 struct snd_ymfpci_pcm *ypcm;
254};
255
256enum snd_ymfpci_pcm_type {
257 PLAYBACK_VOICE,
258 CAPTURE_REC,
259 CAPTURE_AC97,
260 EFFECT_DRY_LEFT,
261 EFFECT_DRY_RIGHT,
262 EFFECT_EFF1,
263 EFFECT_EFF2,
264 EFFECT_EFF3
265};
266
267struct snd_ymfpci_pcm {
268 struct snd_ymfpci *chip;
269 enum snd_ymfpci_pcm_type type;
270 struct snd_pcm_substream *substream;
271 struct snd_ymfpci_voice *voices[2]; /* playback only */
272 unsigned int running: 1,
273 use_441_slot: 1,
274 output_front: 1,
275 output_rear: 1,
276 swap_rear: 1;
277 unsigned int update_pcm_vol;
278 u32 period_size; /* cached from runtime->period_size */
279 u32 buffer_size; /* cached from runtime->buffer_size */
280 u32 period_pos;
281 u32 last_pos;
282 u32 capture_bank_number;
283 u32 shift;
284};
285
286struct snd_ymfpci {
287 int irq;
288
289 unsigned int device_id; /* PCI device ID */
290 unsigned char rev; /* PCI revision */
291 unsigned long reg_area_phys;
292 void __iomem *reg_area_virt;
293 struct resource *res_reg_area;
294 struct resource *fm_res;
295 struct resource *mpu_res;
296
297 unsigned short old_legacy_ctrl;
298#ifdef SUPPORT_JOYSTICK
299 struct gameport *gameport;
300#endif
301
302 struct snd_dma_buffer work_ptr;
303
304 unsigned int bank_size_playback;
305 unsigned int bank_size_capture;
306 unsigned int bank_size_effect;
307 unsigned int work_size;
308
309 void *bank_base_playback;
310 void *bank_base_capture;
311 void *bank_base_effect;
312 void *work_base;
313 dma_addr_t bank_base_playback_addr;
314 dma_addr_t bank_base_capture_addr;
315 dma_addr_t bank_base_effect_addr;
316 dma_addr_t work_base_addr;
317 struct snd_dma_buffer ac3_tmp_base;
318
319 u32 *ctrl_playback;
320 struct snd_ymfpci_playback_bank *bank_playback[YDSXG_PLAYBACK_VOICES][2];
321 struct snd_ymfpci_capture_bank *bank_capture[YDSXG_CAPTURE_VOICES][2];
322 struct snd_ymfpci_effect_bank *bank_effect[YDSXG_EFFECT_VOICES][2];
323
324 int start_count;
325
326 u32 active_bank;
327 struct snd_ymfpci_voice voices[64];
328 int src441_used;
329
330 struct snd_ac97_bus *ac97_bus;
331 struct snd_ac97 *ac97;
332 struct snd_rawmidi *rawmidi;
333 struct snd_timer *timer;
334 unsigned int timer_ticks;
335
336 struct pci_dev *pci;
337 struct snd_card *card;
338 struct snd_pcm *pcm;
339 struct snd_pcm *pcm2;
340 struct snd_pcm *pcm_spdif;
341 struct snd_pcm *pcm_4ch;
342 struct snd_pcm_substream *capture_substream[YDSXG_CAPTURE_VOICES];
343 struct snd_pcm_substream *effect_substream[YDSXG_EFFECT_VOICES];
344 struct snd_kcontrol *ctl_vol_recsrc;
345 struct snd_kcontrol *ctl_vol_adcrec;
346 struct snd_kcontrol *ctl_vol_spdifrec;
347 unsigned short spdif_bits, spdif_pcm_bits;
348 struct snd_kcontrol *spdif_pcm_ctl;
349 int mode_dup4ch;
350 int rear_opened;
351 int spdif_opened;
352 struct snd_ymfpci_pcm_mixer {
353 u16 left;
354 u16 right;
355 struct snd_kcontrol *ctl;
356 } pcm_mixer[32];
357
358 spinlock_t reg_lock;
359 spinlock_t voice_lock;
360 wait_queue_head_t interrupt_sleep;
361 atomic_t interrupt_sleep_count;
362 struct snd_info_entry *proc_entry;
363 const struct firmware *dsp_microcode;
364 const struct firmware *controller_microcode;
365
366#ifdef CONFIG_PM
367 u32 *saved_regs;
368 u32 saved_ydsxgr_mode;
369 u16 saved_dsxg_legacy;
370 u16 saved_dsxg_elegacy;
371#endif
372};
373
374int snd_ymfpci_create(struct snd_card *card,
375 struct pci_dev *pci,
376 unsigned short old_legacy_ctrl,
377 struct snd_ymfpci ** rcodec);
378void snd_ymfpci_free_gameport(struct snd_ymfpci *chip);
379
380int snd_ymfpci_suspend(struct pci_dev *pci, pm_message_t state);
381int snd_ymfpci_resume(struct pci_dev *pci);
382
383int snd_ymfpci_pcm(struct snd_ymfpci *chip, int device, struct snd_pcm **rpcm);
384int snd_ymfpci_pcm2(struct snd_ymfpci *chip, int device, struct snd_pcm **rpcm);
385int snd_ymfpci_pcm_spdif(struct snd_ymfpci *chip, int device, struct snd_pcm **rpcm);
386int snd_ymfpci_pcm_4ch(struct snd_ymfpci *chip, int device, struct snd_pcm **rpcm);
387int snd_ymfpci_mixer(struct snd_ymfpci *chip, int rear_switch);
388int snd_ymfpci_timer(struct snd_ymfpci *chip, int device);
389
390#endif /* __SOUND_YMFPCI_H */
diff --git a/include/target/target_core_backend.h b/include/target/target_core_backend.h
index 2d7db85e93ae..f1405d335a96 100644
--- a/include/target/target_core_backend.h
+++ b/include/target/target_core_backend.h
@@ -24,10 +24,8 @@ struct se_subsystem_api {
24 struct se_subsystem_dev *, void *); 24 struct se_subsystem_dev *, void *);
25 void (*free_device)(void *); 25 void (*free_device)(void *);
26 int (*transport_complete)(struct se_cmd *cmd, struct scatterlist *); 26 int (*transport_complete)(struct se_cmd *cmd, struct scatterlist *);
27 int (*execute_cmd)(struct se_cmd *, struct scatterlist *, u32, 27
28 enum dma_data_direction); 28 int (*parse_cdb)(struct se_cmd *cmd);
29 int (*do_discard)(struct se_device *, sector_t, u32);
30 void (*do_sync_cache)(struct se_cmd *);
31 ssize_t (*check_configfs_dev_params)(struct se_hba *, 29 ssize_t (*check_configfs_dev_params)(struct se_hba *,
32 struct se_subsystem_dev *); 30 struct se_subsystem_dev *);
33 ssize_t (*set_configfs_dev_params)(struct se_hba *, 31 ssize_t (*set_configfs_dev_params)(struct se_hba *,
@@ -40,6 +38,13 @@ struct se_subsystem_api {
40 unsigned char *(*get_sense_buffer)(struct se_cmd *); 38 unsigned char *(*get_sense_buffer)(struct se_cmd *);
41}; 39};
42 40
41struct spc_ops {
42 int (*execute_rw)(struct se_cmd *cmd);
43 int (*execute_sync_cache)(struct se_cmd *cmd);
44 int (*execute_write_same)(struct se_cmd *cmd);
45 int (*execute_unmap)(struct se_cmd *cmd);
46};
47
43int transport_subsystem_register(struct se_subsystem_api *); 48int transport_subsystem_register(struct se_subsystem_api *);
44void transport_subsystem_release(struct se_subsystem_api *); 49void transport_subsystem_release(struct se_subsystem_api *);
45 50
@@ -49,6 +54,10 @@ struct se_device *transport_add_device_to_core_hba(struct se_hba *,
49 54
50void target_complete_cmd(struct se_cmd *, u8); 55void target_complete_cmd(struct se_cmd *, u8);
51 56
57int sbc_parse_cdb(struct se_cmd *cmd, struct spc_ops *ops);
58int spc_parse_cdb(struct se_cmd *cmd, unsigned int *size);
59int spc_get_write_same_sectors(struct se_cmd *cmd);
60
52void transport_set_vpd_proto_id(struct t10_vpd *, unsigned char *); 61void transport_set_vpd_proto_id(struct t10_vpd *, unsigned char *);
53int transport_set_vpd_assoc(struct t10_vpd *, unsigned char *); 62int transport_set_vpd_assoc(struct t10_vpd *, unsigned char *);
54int transport_set_vpd_ident_type(struct t10_vpd *, unsigned char *); 63int transport_set_vpd_ident_type(struct t10_vpd *, unsigned char *);
diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h
index dc35d8660aa6..128ce46fa48a 100644
--- a/include/target/target_core_base.h
+++ b/include/target/target_core_base.h
@@ -145,12 +145,9 @@ enum transport_state_table {
145 TRANSPORT_NO_STATE = 0, 145 TRANSPORT_NO_STATE = 0,
146 TRANSPORT_NEW_CMD = 1, 146 TRANSPORT_NEW_CMD = 1,
147 TRANSPORT_WRITE_PENDING = 3, 147 TRANSPORT_WRITE_PENDING = 3,
148 TRANSPORT_PROCESS_WRITE = 4,
149 TRANSPORT_PROCESSING = 5, 148 TRANSPORT_PROCESSING = 5,
150 TRANSPORT_COMPLETE = 6, 149 TRANSPORT_COMPLETE = 6,
151 TRANSPORT_PROCESS_TMR = 9,
152 TRANSPORT_ISTATE_PROCESSING = 11, 150 TRANSPORT_ISTATE_PROCESSING = 11,
153 TRANSPORT_NEW_CMD_MAP = 16,
154 TRANSPORT_COMPLETE_QF_WP = 18, 151 TRANSPORT_COMPLETE_QF_WP = 18,
155 TRANSPORT_COMPLETE_QF_OK = 19, 152 TRANSPORT_COMPLETE_QF_OK = 19,
156}; 153};
@@ -160,25 +157,20 @@ enum se_cmd_flags_table {
160 SCF_SUPPORTED_SAM_OPCODE = 0x00000001, 157 SCF_SUPPORTED_SAM_OPCODE = 0x00000001,
161 SCF_TRANSPORT_TASK_SENSE = 0x00000002, 158 SCF_TRANSPORT_TASK_SENSE = 0x00000002,
162 SCF_EMULATED_TASK_SENSE = 0x00000004, 159 SCF_EMULATED_TASK_SENSE = 0x00000004,
163 SCF_SCSI_DATA_SG_IO_CDB = 0x00000008, 160 SCF_SCSI_DATA_CDB = 0x00000008,
164 SCF_SCSI_CONTROL_SG_IO_CDB = 0x00000010, 161 SCF_SCSI_TMR_CDB = 0x00000010,
165 SCF_SCSI_NON_DATA_CDB = 0x00000020, 162 SCF_SCSI_CDB_EXCEPTION = 0x00000020,
166 SCF_SCSI_TMR_CDB = 0x00000040, 163 SCF_SCSI_RESERVATION_CONFLICT = 0x00000040,
167 SCF_SCSI_CDB_EXCEPTION = 0x00000080, 164 SCF_FUA = 0x00000080,
168 SCF_SCSI_RESERVATION_CONFLICT = 0x00000100, 165 SCF_SE_LUN_CMD = 0x00000100,
169 SCF_FUA = 0x00000200, 166 SCF_BIDI = 0x00000400,
170 SCF_SE_LUN_CMD = 0x00000800, 167 SCF_SENT_CHECK_CONDITION = 0x00000800,
171 SCF_SE_ALLOW_EOO = 0x00001000, 168 SCF_OVERFLOW_BIT = 0x00001000,
172 SCF_BIDI = 0x00002000, 169 SCF_UNDERFLOW_BIT = 0x00002000,
173 SCF_SENT_CHECK_CONDITION = 0x00004000, 170 SCF_SENT_DELAYED_TAS = 0x00004000,
174 SCF_OVERFLOW_BIT = 0x00008000, 171 SCF_ALUA_NON_OPTIMIZED = 0x00008000,
175 SCF_UNDERFLOW_BIT = 0x00010000, 172 SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC = 0x00020000,
176 SCF_SENT_DELAYED_TAS = 0x00020000, 173 SCF_ACK_KREF = 0x00040000,
177 SCF_ALUA_NON_OPTIMIZED = 0x00040000,
178 SCF_DELAYED_CMD_FROM_SAM_ATTR = 0x00080000,
179 SCF_UNUSED = 0x00100000,
180 SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC = 0x00200000,
181 SCF_ACK_KREF = 0x00400000,
182}; 174};
183 175
184/* struct se_dev_entry->lun_flags and struct se_lun->lun_access */ 176/* struct se_dev_entry->lun_flags and struct se_lun->lun_access */
@@ -220,6 +212,7 @@ enum tcm_sense_reason_table {
220 TCM_CHECK_CONDITION_UNIT_ATTENTION = 0x0e, 212 TCM_CHECK_CONDITION_UNIT_ATTENTION = 0x0e,
221 TCM_CHECK_CONDITION_NOT_READY = 0x0f, 213 TCM_CHECK_CONDITION_NOT_READY = 0x0f,
222 TCM_RESERVATION_CONFLICT = 0x10, 214 TCM_RESERVATION_CONFLICT = 0x10,
215 TCM_ADDRESS_OUT_OF_RANGE = 0x11,
223}; 216};
224 217
225enum target_sc_flags_table { 218enum target_sc_flags_table {
@@ -471,13 +464,6 @@ struct t10_reservation {
471 struct t10_reservation_ops pr_ops; 464 struct t10_reservation_ops pr_ops;
472}; 465};
473 466
474struct se_queue_obj {
475 atomic_t queue_cnt;
476 spinlock_t cmd_queue_lock;
477 struct list_head qobj_list;
478 wait_queue_head_t thread_wq;
479};
480
481struct se_tmr_req { 467struct se_tmr_req {
482 /* Task Management function to be performed */ 468 /* Task Management function to be performed */
483 u8 function; 469 u8 function;
@@ -486,11 +472,8 @@ struct se_tmr_req {
486 int call_transport; 472 int call_transport;
487 /* Reference to ITT that Task Mgmt should be performed */ 473 /* Reference to ITT that Task Mgmt should be performed */
488 u32 ref_task_tag; 474 u32 ref_task_tag;
489 /* 64-bit encoded SAM LUN from $FABRIC_MOD TMR header */
490 u64 ref_task_lun;
491 void *fabric_tmr_ptr; 475 void *fabric_tmr_ptr;
492 struct se_cmd *task_cmd; 476 struct se_cmd *task_cmd;
493 struct se_cmd *ref_cmd;
494 struct se_device *tmr_dev; 477 struct se_device *tmr_dev;
495 struct se_lun *tmr_lun; 478 struct se_lun *tmr_lun;
496 struct list_head tmr_list; 479 struct list_head tmr_list;
@@ -537,7 +520,6 @@ struct se_cmd {
537 /* Only used for internal passthrough and legacy TCM fabric modules */ 520 /* Only used for internal passthrough and legacy TCM fabric modules */
538 struct se_session *se_sess; 521 struct se_session *se_sess;
539 struct se_tmr_req *se_tmr_req; 522 struct se_tmr_req *se_tmr_req;
540 struct list_head se_queue_node;
541 struct list_head se_cmd_list; 523 struct list_head se_cmd_list;
542 struct completion cmd_wait_comp; 524 struct completion cmd_wait_comp;
543 struct kref cmd_kref; 525 struct kref cmd_kref;
@@ -575,7 +557,6 @@ struct se_cmd {
575 struct scatterlist *t_bidi_data_sg; 557 struct scatterlist *t_bidi_data_sg;
576 unsigned int t_bidi_data_nents; 558 unsigned int t_bidi_data_nents;
577 559
578 struct list_head execute_list;
579 struct list_head state_list; 560 struct list_head state_list;
580 bool state_active; 561 bool state_active;
581 562
@@ -633,7 +614,6 @@ struct se_session {
633 struct list_head sess_list; 614 struct list_head sess_list;
634 struct list_head sess_acl_list; 615 struct list_head sess_acl_list;
635 struct list_head sess_cmd_list; 616 struct list_head sess_cmd_list;
636 struct list_head sess_wait_list;
637 spinlock_t sess_cmd_lock; 617 spinlock_t sess_cmd_lock;
638 struct kref sess_kref; 618 struct kref sess_kref;
639}; 619};
@@ -780,13 +760,11 @@ struct se_device {
780 /* Active commands on this virtual SE device */ 760 /* Active commands on this virtual SE device */
781 atomic_t simple_cmds; 761 atomic_t simple_cmds;
782 atomic_t dev_ordered_id; 762 atomic_t dev_ordered_id;
783 atomic_t execute_tasks;
784 atomic_t dev_ordered_sync; 763 atomic_t dev_ordered_sync;
785 atomic_t dev_qf_count; 764 atomic_t dev_qf_count;
786 struct se_obj dev_obj; 765 struct se_obj dev_obj;
787 struct se_obj dev_access_obj; 766 struct se_obj dev_access_obj;
788 struct se_obj dev_export_obj; 767 struct se_obj dev_export_obj;
789 struct se_queue_obj dev_queue_obj;
790 spinlock_t delayed_cmd_lock; 768 spinlock_t delayed_cmd_lock;
791 spinlock_t execute_task_lock; 769 spinlock_t execute_task_lock;
792 spinlock_t dev_reservation_lock; 770 spinlock_t dev_reservation_lock;
@@ -802,11 +780,9 @@ struct se_device {
802 struct t10_pr_registration *dev_pr_res_holder; 780 struct t10_pr_registration *dev_pr_res_holder;
803 struct list_head dev_sep_list; 781 struct list_head dev_sep_list;
804 struct list_head dev_tmr_list; 782 struct list_head dev_tmr_list;
805 /* Pointer to descriptor for processing thread */ 783 struct workqueue_struct *tmr_wq;
806 struct task_struct *process_thread;
807 struct work_struct qf_work_queue; 784 struct work_struct qf_work_queue;
808 struct list_head delayed_cmd_list; 785 struct list_head delayed_cmd_list;
809 struct list_head execute_list;
810 struct list_head state_list; 786 struct list_head state_list;
811 struct list_head qf_cmd_list; 787 struct list_head qf_cmd_list;
812 /* Pointer to associated SE HBA */ 788 /* Pointer to associated SE HBA */
diff --git a/include/target/target_core_fabric.h b/include/target/target_core_fabric.h
index c78a23333c4f..69fb3cfd02d7 100644
--- a/include/target/target_core_fabric.h
+++ b/include/target/target_core_fabric.h
@@ -33,12 +33,6 @@ struct target_core_fabric_ops {
33 struct se_node_acl *); 33 struct se_node_acl *);
34 u32 (*tpg_get_inst_index)(struct se_portal_group *); 34 u32 (*tpg_get_inst_index)(struct se_portal_group *);
35 /* 35 /*
36 * Optional function pointer for TCM to perform command map
37 * from TCM processing thread context, for those struct se_cmd
38 * initially allocated in interrupt context.
39 */
40 int (*new_cmd_map)(struct se_cmd *);
41 /*
42 * Optional to release struct se_cmd and fabric dependent allocated 36 * Optional to release struct se_cmd and fabric dependent allocated
43 * I/O descriptor in transport_cmd_check_stop(). 37 * I/O descriptor in transport_cmd_check_stop().
44 * 38 *
@@ -108,20 +102,18 @@ void transport_init_se_cmd(struct se_cmd *, struct target_core_fabric_ops *,
108 struct se_session *, u32, int, int, unsigned char *); 102 struct se_session *, u32, int, int, unsigned char *);
109int transport_lookup_cmd_lun(struct se_cmd *, u32); 103int transport_lookup_cmd_lun(struct se_cmd *, u32);
110int target_setup_cmd_from_cdb(struct se_cmd *, unsigned char *); 104int target_setup_cmd_from_cdb(struct se_cmd *, unsigned char *);
111void target_submit_cmd(struct se_cmd *, struct se_session *, unsigned char *, 105int target_submit_cmd(struct se_cmd *, struct se_session *, unsigned char *,
112 unsigned char *, u32, u32, int, int, int); 106 unsigned char *, u32, u32, int, int, int);
113int target_submit_tmr(struct se_cmd *se_cmd, struct se_session *se_sess, 107int target_submit_tmr(struct se_cmd *se_cmd, struct se_session *se_sess,
114 unsigned char *sense, u32 unpacked_lun, 108 unsigned char *sense, u32 unpacked_lun,
115 void *fabric_tmr_ptr, unsigned char tm_type, 109 void *fabric_tmr_ptr, unsigned char tm_type,
116 gfp_t, unsigned int, int); 110 gfp_t, unsigned int, int);
117int transport_handle_cdb_direct(struct se_cmd *); 111int transport_handle_cdb_direct(struct se_cmd *);
118int transport_generic_handle_cdb_map(struct se_cmd *);
119int transport_generic_handle_data(struct se_cmd *);
120int transport_generic_map_mem_to_cmd(struct se_cmd *cmd, 112int transport_generic_map_mem_to_cmd(struct se_cmd *cmd,
121 struct scatterlist *, u32, struct scatterlist *, u32); 113 struct scatterlist *, u32, struct scatterlist *, u32);
122int transport_generic_new_cmd(struct se_cmd *); 114int transport_generic_new_cmd(struct se_cmd *);
123 115
124void transport_generic_process_write(struct se_cmd *); 116void target_execute_cmd(struct se_cmd *cmd);
125 117
126void transport_generic_free_cmd(struct se_cmd *, int); 118void transport_generic_free_cmd(struct se_cmd *, int);
127 119
@@ -129,9 +121,8 @@ bool transport_wait_for_tasks(struct se_cmd *);
129int transport_check_aborted_status(struct se_cmd *, int); 121int transport_check_aborted_status(struct se_cmd *, int);
130int transport_send_check_condition_and_sense(struct se_cmd *, u8, int); 122int transport_send_check_condition_and_sense(struct se_cmd *, u8, int);
131 123
132void target_get_sess_cmd(struct se_session *, struct se_cmd *, bool);
133int target_put_sess_cmd(struct se_session *, struct se_cmd *); 124int target_put_sess_cmd(struct se_session *, struct se_cmd *);
134void target_splice_sess_cmd_list(struct se_session *); 125void target_sess_cmd_list_set_waiting(struct se_session *);
135void target_wait_for_sess_cmds(struct se_session *, int); 126void target_wait_for_sess_cmds(struct se_session *, int);
136 127
137int core_alua_check_nonop_delay(struct se_cmd *); 128int core_alua_check_nonop_delay(struct se_cmd *);
diff --git a/include/trace/events/kvm.h b/include/trace/events/kvm.h
index 46e3cd8e197a..7ef9e759f499 100644
--- a/include/trace/events/kvm.h
+++ b/include/trace/events/kvm.h
@@ -13,7 +13,8 @@
13 ERSN(DEBUG), ERSN(HLT), ERSN(MMIO), ERSN(IRQ_WINDOW_OPEN), \ 13 ERSN(DEBUG), ERSN(HLT), ERSN(MMIO), ERSN(IRQ_WINDOW_OPEN), \
14 ERSN(SHUTDOWN), ERSN(FAIL_ENTRY), ERSN(INTR), ERSN(SET_TPR), \ 14 ERSN(SHUTDOWN), ERSN(FAIL_ENTRY), ERSN(INTR), ERSN(SET_TPR), \
15 ERSN(TPR_ACCESS), ERSN(S390_SIEIC), ERSN(S390_RESET), ERSN(DCR),\ 15 ERSN(TPR_ACCESS), ERSN(S390_SIEIC), ERSN(S390_RESET), ERSN(DCR),\
16 ERSN(NMI), ERSN(INTERNAL_ERROR), ERSN(OSI) 16 ERSN(NMI), ERSN(INTERNAL_ERROR), ERSN(OSI), ERSN(PAPR_HCALL), \
17 ERSN(S390_UCONTROL)
17 18
18TRACE_EVENT(kvm_userspace_exit, 19TRACE_EVENT(kvm_userspace_exit,
19 TP_PROTO(__u32 reason, int errno), 20 TP_PROTO(__u32 reason, int errno),
@@ -36,7 +37,7 @@ TRACE_EVENT(kvm_userspace_exit,
36 __entry->errno < 0 ? -__entry->errno : __entry->reason) 37 __entry->errno < 0 ? -__entry->errno : __entry->reason)
37); 38);
38 39
39#if defined(__KVM_HAVE_IOAPIC) 40#if defined(__KVM_HAVE_IRQ_LINE)
40TRACE_EVENT(kvm_set_irq, 41TRACE_EVENT(kvm_set_irq,
41 TP_PROTO(unsigned int gsi, int level, int irq_source_id), 42 TP_PROTO(unsigned int gsi, int level, int irq_source_id),
42 TP_ARGS(gsi, level, irq_source_id), 43 TP_ARGS(gsi, level, irq_source_id),
@@ -56,7 +57,9 @@ TRACE_EVENT(kvm_set_irq,
56 TP_printk("gsi %u level %d source %d", 57 TP_printk("gsi %u level %d source %d",
57 __entry->gsi, __entry->level, __entry->irq_source_id) 58 __entry->gsi, __entry->level, __entry->irq_source_id)
58); 59);
60#endif
59 61
62#if defined(__KVM_HAVE_IOAPIC)
60#define kvm_deliver_mode \ 63#define kvm_deliver_mode \
61 {0x0, "Fixed"}, \ 64 {0x0, "Fixed"}, \
62 {0x1, "LowPrio"}, \ 65 {0x1, "LowPrio"}, \
diff --git a/include/trace/events/rcu.h b/include/trace/events/rcu.h
index d274734b2aa4..5bde94d8585b 100644
--- a/include/trace/events/rcu.h
+++ b/include/trace/events/rcu.h
@@ -541,6 +541,50 @@ TRACE_EVENT(rcu_torture_read,
541 __entry->rcutorturename, __entry->rhp) 541 __entry->rcutorturename, __entry->rhp)
542); 542);
543 543
544/*
545 * Tracepoint for _rcu_barrier() execution. The string "s" describes
546 * the _rcu_barrier phase:
547 * "Begin": rcu_barrier_callback() started.
548 * "Check": rcu_barrier_callback() checking for piggybacking.
549 * "EarlyExit": rcu_barrier_callback() piggybacked, thus early exit.
550 * "Inc1": rcu_barrier_callback() piggyback check counter incremented.
551 * "Offline": rcu_barrier_callback() found offline CPU
552 * "OnlineQ": rcu_barrier_callback() found online CPU with callbacks.
553 * "OnlineNQ": rcu_barrier_callback() found online CPU, no callbacks.
554 * "IRQ": An rcu_barrier_callback() callback posted on remote CPU.
555 * "CB": An rcu_barrier_callback() invoked a callback, not the last.
556 * "LastCB": An rcu_barrier_callback() invoked the last callback.
557 * "Inc2": rcu_barrier_callback() piggyback check counter incremented.
558 * The "cpu" argument is the CPU or -1 if meaningless, the "cnt" argument
559 * is the count of remaining callbacks, and "done" is the piggybacking count.
560 */
561TRACE_EVENT(rcu_barrier,
562
563 TP_PROTO(char *rcuname, char *s, int cpu, int cnt, unsigned long done),
564
565 TP_ARGS(rcuname, s, cpu, cnt, done),
566
567 TP_STRUCT__entry(
568 __field(char *, rcuname)
569 __field(char *, s)
570 __field(int, cpu)
571 __field(int, cnt)
572 __field(unsigned long, done)
573 ),
574
575 TP_fast_assign(
576 __entry->rcuname = rcuname;
577 __entry->s = s;
578 __entry->cpu = cpu;
579 __entry->cnt = cnt;
580 __entry->done = done;
581 ),
582
583 TP_printk("%s %s cpu %d remaining %d # %lu",
584 __entry->rcuname, __entry->s, __entry->cpu, __entry->cnt,
585 __entry->done)
586);
587
544#else /* #ifdef CONFIG_RCU_TRACE */ 588#else /* #ifdef CONFIG_RCU_TRACE */
545 589
546#define trace_rcu_grace_period(rcuname, gpnum, gpevent) do { } while (0) 590#define trace_rcu_grace_period(rcuname, gpnum, gpevent) do { } while (0)
@@ -564,6 +608,7 @@ TRACE_EVENT(rcu_torture_read,
564#define trace_rcu_batch_end(rcuname, callbacks_invoked, cb, nr, iit, risk) \ 608#define trace_rcu_batch_end(rcuname, callbacks_invoked, cb, nr, iit, risk) \
565 do { } while (0) 609 do { } while (0)
566#define trace_rcu_torture_read(rcutorturename, rhp) do { } while (0) 610#define trace_rcu_torture_read(rcutorturename, rhp) do { } while (0)
611#define trace_rcu_barrier(name, s, cpu, cnt, done) do { } while (0)
567 612
568#endif /* #else #ifdef CONFIG_RCU_TRACE */ 613#endif /* #else #ifdef CONFIG_RCU_TRACE */
569 614
diff --git a/include/trace/events/workqueue.h b/include/trace/events/workqueue.h
index 4018f5058f27..f28d1b65f178 100644
--- a/include/trace/events/workqueue.h
+++ b/include/trace/events/workqueue.h
@@ -54,7 +54,7 @@ TRACE_EVENT(workqueue_queue_work,
54 __entry->function = work->func; 54 __entry->function = work->func;
55 __entry->workqueue = cwq->wq; 55 __entry->workqueue = cwq->wq;
56 __entry->req_cpu = req_cpu; 56 __entry->req_cpu = req_cpu;
57 __entry->cpu = cwq->gcwq->cpu; 57 __entry->cpu = cwq->pool->gcwq->cpu;
58 ), 58 ),
59 59
60 TP_printk("work struct=%p function=%pf workqueue=%p req_cpu=%u cpu=%u", 60 TP_printk("work struct=%p function=%pf workqueue=%p req_cpu=%u cpu=%u",
diff --git a/include/trace/events/xen.h b/include/trace/events/xen.h
index 92f1a796829e..15ba03bdd7c6 100644
--- a/include/trace/events/xen.h
+++ b/include/trace/events/xen.h
@@ -397,18 +397,20 @@ TRACE_EVENT(xen_mmu_flush_tlb_single,
397 397
398TRACE_EVENT(xen_mmu_flush_tlb_others, 398TRACE_EVENT(xen_mmu_flush_tlb_others,
399 TP_PROTO(const struct cpumask *cpus, struct mm_struct *mm, 399 TP_PROTO(const struct cpumask *cpus, struct mm_struct *mm,
400 unsigned long addr), 400 unsigned long addr, unsigned long end),
401 TP_ARGS(cpus, mm, addr), 401 TP_ARGS(cpus, mm, addr, end),
402 TP_STRUCT__entry( 402 TP_STRUCT__entry(
403 __field(unsigned, ncpus) 403 __field(unsigned, ncpus)
404 __field(struct mm_struct *, mm) 404 __field(struct mm_struct *, mm)
405 __field(unsigned long, addr) 405 __field(unsigned long, addr)
406 __field(unsigned long, end)
406 ), 407 ),
407 TP_fast_assign(__entry->ncpus = cpumask_weight(cpus); 408 TP_fast_assign(__entry->ncpus = cpumask_weight(cpus);
408 __entry->mm = mm; 409 __entry->mm = mm;
409 __entry->addr = addr), 410 __entry->addr = addr,
410 TP_printk("ncpus %d mm %p addr %lx", 411 __entry->end = end),
411 __entry->ncpus, __entry->mm, __entry->addr) 412 TP_printk("ncpus %d mm %p addr %lx, end %lx",
413 __entry->ncpus, __entry->mm, __entry->addr, __entry->end)
412 ); 414 );
413 415
414TRACE_EVENT(xen_mmu_write_cr3, 416TRACE_EVENT(xen_mmu_write_cr3,
diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h
index 769724944fc6..c6bc2faaf261 100644
--- a/include/trace/ftrace.h
+++ b/include/trace/ftrace.h
@@ -571,6 +571,7 @@ static inline void ftrace_test_probe_##call(void) \
571 571
572#undef __print_flags 572#undef __print_flags
573#undef __print_symbolic 573#undef __print_symbolic
574#undef __print_hex
574#undef __get_dynamic_array 575#undef __get_dynamic_array
575#undef __get_str 576#undef __get_str
576 577